package junit.swingui; import javax.swing.* ; import javax.swing.event.* ; import javax.swing.tree.TreePath; import java.util.Vector; import junit.framework.* ; /** * A hierarchical view of a test run. * The contents of a test suite is shown * as a tree. */ 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()); } }