package junit.swingui; | |
import java.util.Vector; | |
import javax.swing.*; | |
import javax.swing.event.*; | |
import javax.swing.tree.TreePath; | |
import junit.framework.*; | |
/** | |
* A hierarchical view of a test run. | |
* The contents of a test suite is shown | |
* as a tree. | |
*/ | |
public class TestHierarchyRunView implements TestRunView { | |
TestSuitePanel fTreeBrowser; | |
TestRunContext fTestContext; | |
public TestHierarchyRunView(TestRunContext context) { | |
fTestContext= context; | |
fTreeBrowser= new TestSuitePanel(); | |
fTreeBrowser.getTree().addTreeSelectionListener( | |
new TreeSelectionListener() { | |
public void valueChanged(TreeSelectionEvent e) { | |
testSelected(); | |
} | |
} | |
); | |
} | |
public void addTab(JTabbedPane pane) { | |
Icon treeIcon= TestRunner.getIconResource(getClass(), "icons/hierarchy.gif"); | |
pane.addTab("Test Hierarchy", treeIcon, fTreeBrowser, "The test hierarchy"); | |
} | |
public Test getSelectedTest() { | |
return fTreeBrowser.getSelectedTest(); | |
} | |
public void activate() { | |
testSelected(); | |
} | |
public void revealFailure(Test failure) { | |
JTree tree= fTreeBrowser.getTree(); | |
TestTreeModel model= (TestTreeModel)tree.getModel(); | |
Vector vpath= new Vector(); | |
int index= model.findTest(failure, (Test)model.getRoot(), vpath); | |
if (index >= 0) { | |
Object[] path= new Object[vpath.size()+1]; | |
vpath.copyInto(path); | |
Object last= path[vpath.size()-1]; | |
path[vpath.size()]= model.getChild(last, index); | |
TreePath selectionPath= new TreePath(path); | |
tree.setSelectionPath(selectionPath); | |
tree.makeVisible(selectionPath); | |
} | |
} | |
public void aboutToStart(Test suite, TestResult result) { | |
fTreeBrowser.showTestTree(suite); | |
result.addListener(fTreeBrowser); | |
} | |
public void runFinished(Test suite, TestResult result) { | |
result.removeListener(fTreeBrowser); | |
} | |
protected void testSelected() { | |
fTestContext.handleTestSelected(getSelectedTest()); | |
} | |
} |