package nbtool.gui.utilitypanes;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import nbtool.data.log.Log;
import nbtool.data.log.LogReference;
public abstract class AutomaticTestUtility <K, R> extends UtilityParent {
private Display display = null;
@Override
public JFrame supplyDisplay() {
if (display != null) {
return display;
} else {
return (display = new Display());
}
}
@Override
public abstract String purpose();
@Override
public abstract char preferredMemnonic();
public abstract AutomaticCrossTester.TestInterface<K, R> getInterface();
private class Display extends JFrame {
final JFrame outerThis = this;
Display() {
super("testing: " + purpose());
this.setMinimumSize(new Dimension(300,300));
outerThis.setBackground(Color.BLACK);
final AutomaticCrossTester.TestInterface<K, R> wrapped =
getInterface();
final AutomaticCrossTester.TestInterface<K, R> wrapper =
new AutomaticCrossTester.TestInterface<K, R>(){
@Override
public void notifyTestStart() {
wrapped.notifyTestStart();
outerThis.setBackground(Color.YELLOW);
}
@Override
public String testName() {
return wrapped.testName();
}
@Override
public K qualifiesForTesting(LogReference logr) {
return wrapped.qualifiesForTesting(logr);
}
@Override
public String crossFunctionName() {
return wrapped.crossFunctionName();
}
@Override
public boolean finishAnnotations(K key, Log log) {
return wrapped.finishAnnotations(key, log);
}
@Override
public R getResult(LogReference from, K key, Log... out) {
return wrapped.getResult(from, key, out);
}
@Override
public boolean createGroupForResult(R resultType) {
return wrapped.createGroupForResult(resultType);
}
@Override
public String groupNameFor(R resultType) {
return wrapped.groupNameFor(resultType);
}
@Override
public void notifyTestFinished() {
wrapped.notifyTestFinished();
outerThis.setBackground(Color.GREEN);
}
};
AutomaticCrossTester<K,R> tester = new AutomaticCrossTester<>(wrapper);
tester.runTests();
}
}
}