aboutsummaryrefslogtreecommitdiff
path: root/src/junit/swingui/TestHierarchyRunView.java
blob: 89bd29784e36dab6f05d4770c8899e363c4509e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package junit.swingui;

import java.util.Vector;

import javax.swing.Icon;
import javax.swing.JTabbedPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreePath;

import junit.framework.Test;
import junit.framework.TestResult;

/**
 * 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());
	}
}