📄 testrunner.java
字号:
fStatusLine= createStatusLine();
fQuitButton= createQuitButton();
fLogo= createLogo();
JPanel panel= new JPanel(new GridBagLayout());
addGrid(panel, suiteLabel, 0, 0, 2, GridBagConstraints.HORIZONTAL, 1.0, GridBagConstraints.WEST);
addGrid(panel, fSuiteCombo, 0, 1, 1, GridBagConstraints.HORIZONTAL, 1.0, GridBagConstraints.WEST);
addGrid(panel, browseButton, 1, 1, 1, GridBagConstraints.NONE, 0.0, GridBagConstraints.WEST);
addGrid(panel, fRun, 2, 1, 1, GridBagConstraints.HORIZONTAL, 0.0, GridBagConstraints.CENTER);
addGrid(panel, fUseLoadingRunner, 0, 2, 3, GridBagConstraints.HORIZONTAL, 1.0, GridBagConstraints.WEST);
addGrid(panel, new JSeparator(), 0, 3, 3, GridBagConstraints.HORIZONTAL, 1.0, GridBagConstraints.WEST);
addGrid(panel, fProgressIndicator, 0, 4, 2, GridBagConstraints.HORIZONTAL, 1.0, GridBagConstraints.WEST);
addGrid(panel, fLogo, 2, 4, 1, GridBagConstraints.NONE, 0.0, GridBagConstraints.NORTH);
addGrid(panel, fCounterPanel, 0, 5, 2, GridBagConstraints.NONE, 0.0, GridBagConstraints.CENTER);
JSplitPane splitter= new JSplitPane(JSplitPane.VERTICAL_SPLIT, fTestViewTab, tracePane);
addGrid(panel, splitter, 0, 6, 2, GridBagConstraints.BOTH, 1.0, GridBagConstraints.WEST);
addGrid(panel, failedPanel, 2, 6, 1, GridBagConstraints.HORIZONTAL, 0.0, GridBagConstraints.NORTH/*CENTER*/);
addGrid(panel, fStatusLine, 0, 8, 2, GridBagConstraints.HORIZONTAL, 1.0, GridBagConstraints.CENTER);
addGrid(panel, fQuitButton, 2, 8, 1, GridBagConstraints.HORIZONTAL, 0.0, GridBagConstraints.CENTER);
frame.setContentPane(panel);
frame.pack();
frame.setLocation(200, 200);
return frame;
}
private void addGrid(JPanel p, Component co, int x, int y, int w, int fill, double wx, int anchor) {
GridBagConstraints c= new GridBagConstraints();
c.gridx= x; c.gridy= y;
c.gridwidth= w;
c.anchor= anchor;
c.weightx= wx;
c.fill= fill;
if (fill == GridBagConstraints.BOTH || fill == GridBagConstraints.VERTICAL)
c.weighty= 1.0;
c.insets= new Insets(y == 0 ? GAP : 0, x == 0 ? GAP : 0, GAP, GAP);
p.add(co, c);
}
protected String getSuiteText() {
if (fSuiteCombo == null)
return "";
return (String)fSuiteCombo.getEditor().getItem();
}
public ListModel getFailures() {
return fFailures;
}
public void insertUpdate(DocumentEvent event) {
textChanged();
}
public void browseTestClasses() {
TestCollector collector= createTestCollector();
TestSelector selector= new TestSelector(fFrame, collector);
if (selector.isEmpty()) {
JOptionPane.showMessageDialog(fFrame, "No Test Cases found.\nCheck that the configured \'TestCollector\' is supported on this platform.");
return;
}
selector.show();
String className= selector.getSelectedItem();
if (className != null)
setSuite(className);
}
TestCollector createTestCollector() {
String className= BaseTestRunner.getPreference(TESTCOLLECTOR_KEY);
if (className != null) {
Class collectorClass= null;
try {
collectorClass= Class.forName(className);
return (TestCollector)collectorClass.newInstance();
} catch(Exception e) {
JOptionPane.showMessageDialog(fFrame, "Could not create TestCollector - using default collector");
}
}
return new SimpleTestCollector();
}
private Image loadFrameIcon() {
ImageIcon icon= (ImageIcon)getIconResource(BaseTestRunner.class, "smalllogo.gif");
if (icon != null)
return icon.getImage();
return null;
}
private void loadHistory(JComboBox combo) throws IOException {
BufferedReader br= new BufferedReader(new FileReader(getSettingsFile()));
int itemCount= 0;
try {
String line;
while ((line= br.readLine()) != null) {
combo.addItem(line);
itemCount++;
}
if (itemCount > 0)
combo.setSelectedIndex(0);
} finally {
br.close();
}
}
private File getSettingsFile() {
String home= System.getProperty("user.home");
return new File(home,".junitsession");
}
private void postInfo(final String message) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
showInfo(message);
}
}
);
}
private void postStatus(final String status) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
showStatus(status);
}
}
);
}
public void removeUpdate(DocumentEvent event) {
textChanged();
}
private void rerun() {
TestRunView view= (TestRunView)fTestRunViews.elementAt(fTestViewTab.getSelectedIndex());
Test rerunTest= view.getSelectedTest();
if (rerunTest != null)
rerunTest(rerunTest);
}
private void rerunTest(Test test) {
if (!(test instanceof TestCase)) {
showInfo("Could not reload "+ test.toString());
return;
}
Test reloadedTest= null;
try {
Class reloadedTestClass= getLoader().reload(test.getClass());
Class[] classArgs= { String.class };
Object[] args= new Object[]{((TestCase)test).getName()};
Constructor constructor= reloadedTestClass.getConstructor(classArgs);
reloadedTest=(Test)constructor.newInstance(args);
} catch(Exception e) {
showInfo("Could not reload "+ test.toString());
return;
}
TestResult result= new TestResult();
reloadedTest.run(result);
String message= reloadedTest.toString();
if(result.wasSuccessful())
showInfo(message+" was successful");
else if (result.errorCount() == 1)
showStatus(message+" had an error");
else
showStatus(message+" had a failure");
}
protected void reset() {
fCounterPanel.reset();
fProgressIndicator.reset();
fRerunButton.setEnabled(false);
fFailureView.clear();
fFailures.clear();
}
/**
* runs a suite.
* @deprecated use runSuite() instead
*/
public void run() {
runSuite();
}
protected void runFailed(String message) {
showStatus(message);
fRun.setText("Run");
fRunner= null;
}
synchronized public void runSuite() {
if (fRunner != null) {
fTestResult.stop();
} else {
setLoading(shouldReload());
reset();
showInfo("Load Test Case...");
final String suiteName= getSuiteText();
final Test testSuite= getTest(suiteName);
if (testSuite != null) {
addToHistory(suiteName);
doRunTest(testSuite);
}
}
}
private boolean shouldReload() {
return !inVAJava() && fUseLoadingRunner.isSelected();
}
synchronized protected void runTest(final Test testSuite) {
if (fRunner != null) {
fTestResult.stop();
} else {
reset();
if (testSuite != null) {
doRunTest(testSuite);
}
}
}
private void doRunTest(final Test testSuite) {
setButtonLabel(fRun, "Stop");
fRunner= new Thread("TestRunner-Thread") {
public void run() {
TestRunner.this.start(testSuite);
postInfo("Running...");
long startTime= System.currentTimeMillis();
testSuite.run(fTestResult);
if (fTestResult.shouldStop()) {
postStatus("Stopped");
} else {
long endTime= System.currentTimeMillis();
long runTime= endTime-startTime;
postInfo("Finished: " + elapsedTimeAsString(runTime) + " seconds");
}
runFinished(testSuite);
setButtonLabel(fRun, "Run");
fRunner= null;
System.gc();
}
};
// make sure that the test result is created before we start the
// test runner thread so that listeners can register for it.
fTestResult= createTestResult();
fTestResult.addListener(TestRunner.this);
aboutToStart(testSuite);
fRunner.start();
}
private void saveHistory() throws IOException {
BufferedWriter bw= new BufferedWriter(new FileWriter(getSettingsFile()));
try {
for (int i= 0; i < fSuiteCombo.getItemCount(); i++) {
String testsuite= fSuiteCombo.getItemAt(i).toString();
bw.write(testsuite, 0, testsuite.length());
bw.newLine();
}
} finally {
bw.close();
}
}
private void setButtonLabel(final JButton button, final String label) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
button.setText(label);
}
}
);
}
private void setLabelValue(final JTextField label, final int value) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
label.setText(Integer.toString(value));
}
}
);
}
public void handleTestSelected(Test test) {
fRerunButton.setEnabled(test != null && (test instanceof TestCase));
showFailureDetail(test);
}
private void showFailureDetail(Test test) {
if (test != null) {
ListModel failures= getFailures();
for (int i= 0; i < failures.getSize(); i++) {
TestFailure failure= (TestFailure)failures.getElementAt(i);
if (failure.failedTest() == test) {
fFailureView.showFailure(failure);
return;
}
}
}
fFailureView.clear();
}
private void showInfo(String message) {
fStatusLine.showInfo(message);
}
private void showStatus(String status) {
fStatusLine.showError(status);
}
/**
* Starts the TestRunner
*/
public void start(String[] args) {
String suiteName= processArguments(args);
fFrame= createUI(suiteName);
fFrame.pack();
fFrame.setVisible(true);
if (suiteName != null) {
setSuite(suiteName);
runSuite();
}
}
private void start(final Test test) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
int total= test.countTestCases();
fProgressIndicator.start(total);
fCounterPanel.setTotal(total);
}
}
);
}
/**
* Wait until all the events are processed in the event thread
*/
private void synchUI() {
try {
SwingUtilities.invokeAndWait(
new Runnable() {
public void run() {}
}
);
}
catch (Exception e) {
}
}
/**
* Terminates the TestRunner
*/
public void terminate() {
fFrame.dispose();
try {
saveHistory();
} catch (IOException e) {
System.out.println("Couldn't save test run history");
}
System.exit(0);
}
public void textChanged() {
fRun.setEnabled(getSuiteText().length() > 0);
clearStatus();
}
protected void clearStatus() {
fStatusLine.clear();
}
public static Icon getIconResource(Class clazz, String name) {
URL url= clazz.getResource(name);
if (url == null) {
System.err.println("Warning: could not load \""+name+"\" icon");
return null;
}
return new ImageIcon(url);
}
private void about() {
AboutDialog about= new AboutDialog(fFrame);
about.show();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -