1 package junit.swingui; 2 3 import java.util.Vector; 4 5 import javax.swing.*; 6 import javax.swing.event.*; 7 import javax.swing.tree.TreePath; 8 import junit.framework.*; 9 10 /*** 11 * A hierarchical view of a test run. 12 * The contents of a test suite is shown 13 * as a tree. 14 */ 15 public class TestHierarchyRunView implements TestRunView { 16 TestSuitePanel fTreeBrowser; 17 TestRunContext fTestContext; 18 19 public TestHierarchyRunView(TestRunContext context) { 20 fTestContext= context; 21 fTreeBrowser= new TestSuitePanel(); 22 fTreeBrowser.getTree().addTreeSelectionListener( 23 new TreeSelectionListener() { 24 public void valueChanged(TreeSelectionEvent e) { 25 testSelected(); 26 } 27 } 28 ); 29 } 30 31 public void addTab(JTabbedPane pane) { 32 Icon treeIcon= TestRunner.getIconResource(getClass(), "icons/hierarchy.gif"); 33 pane.addTab("Test Hierarchy", treeIcon, fTreeBrowser, "The test hierarchy"); 34 } 35 36 public Test getSelectedTest() { 37 return fTreeBrowser.getSelectedTest(); 38 } 39 40 public void activate() { 41 testSelected(); 42 } 43 44 public void revealFailure(Test failure) { 45 JTree tree= fTreeBrowser.getTree(); 46 TestTreeModel model= (TestTreeModel)tree.getModel(); 47 Vector vpath= new Vector(); 48 int index= model.findTest(failure, (Test)model.getRoot(), vpath); 49 if (index >= 0) { 50 Object[] path= new Object[vpath.size()+1]; 51 vpath.copyInto(path); 52 Object last= path[vpath.size()-1]; 53 path[vpath.size()]= model.getChild(last, index); 54 TreePath selectionPath= new TreePath(path); 55 tree.setSelectionPath(selectionPath); 56 tree.makeVisible(selectionPath); 57 } 58 } 59 60 public void aboutToStart(Test suite, TestResult result) { 61 fTreeBrowser.showTestTree(suite); 62 result.addListener(fTreeBrowser); 63 } 64 65 public void runFinished(Test suite, TestResult result) { 66 result.removeListener(fTreeBrowser); 67 } 68 69 protected void testSelected() { 70 fTestContext.handleTestSelected(getSelectedTest()); 71 } 72 }