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