1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package net.grinder.console.swingui;
23
24 import junit.framework.TestCase;
25
26 import javax.swing.event.TreeModelEvent;
27 import javax.swing.event.TreeModelListener;
28 import javax.swing.tree.DefaultMutableTreeNode;
29 import javax.swing.tree.DefaultTreeModel;
30 import javax.swing.tree.TreeModel;
31
32 import net.grinder.testutility.AssertUtilities;
33 import net.grinder.testutility.CallData;
34 import net.grinder.testutility.DelegatingStubFactory;
35 import net.grinder.testutility.RandomStubFactory;
36
37
38
39
40
41
42
43 public class TestCompositeTreeModel extends TestCase {
44
45 public void testConstruction() throws Exception {
46 final CompositeTreeModel compositeTreeModel = new CompositeTreeModel();
47 assertNotNull(compositeTreeModel.getRoot());
48 assertEquals(compositeTreeModel.getRoot(), compositeTreeModel.getRoot());
49
50 final CompositeTreeModel compositeTreeModel2 = new CompositeTreeModel();
51 AssertUtilities.assertNotEquals(compositeTreeModel.getRoot(),
52 compositeTreeModel2.getRoot());
53 }
54
55 public void testGetChildMethods() throws Exception {
56 final CompositeTreeModel compositeTreeModel = new CompositeTreeModel();
57
58 final Object root = compositeTreeModel.getRoot();
59
60 assertNull(compositeTreeModel.getChild(root, -10));
61 assertNull(compositeTreeModel.getChild(root, 0));
62 assertNull(compositeTreeModel.getChild(new Object(), 0));
63 assertEquals(0, compositeTreeModel.getChildCount(root));
64 assertEquals(0, compositeTreeModel.getChildCount(new Object()));
65 assertEquals(-1, compositeTreeModel.getIndexOfChild(root, null));
66 assertEquals(-1, compositeTreeModel.getIndexOfChild(null, root));
67 assertEquals(-1, compositeTreeModel.getIndexOfChild(root, new Object()));
68 assertEquals(-1, compositeTreeModel.getIndexOfChild(new Object(), root));
69 assertFalse(compositeTreeModel.isLeaf(root));
70 assertFalse(compositeTreeModel.isLeaf(new Object()));
71
72 final TreeModel delegateModel1 = createTreeModel();
73 final DelegatingStubFactory<DefaultTreeModel> delegateModelStubFactory1 =
74 DelegatingStubFactory.create(createTreeModel());
75 final TreeModel instrumentedDelegateModel1 =
76 delegateModelStubFactory1.getStub();
77
78 compositeTreeModel.addTreeModel(instrumentedDelegateModel1, true);
79
80 assertSame(root, compositeTreeModel.getRoot());
81 assertNull(compositeTreeModel.getChild(root, -10));
82
83 final Object rootOfFirstTree = compositeTreeModel.getChild(root, 0);
84 assertFalse(compositeTreeModel.isLeaf(rootOfFirstTree));
85
86
87 assertEquals("Root", rootOfFirstTree.toString());
88 assertNull(compositeTreeModel.getChild(root, 1));
89 delegateModelStubFactory1.assertSuccess("getRoot");
90 delegateModelStubFactory1.assertSuccess("isLeaf", rootOfFirstTree);
91
92 final Object delegateRoot1 = delegateModel1.getRoot();
93
94 assertNull(compositeTreeModel.getChild(root, 1));
95 assertEquals("Child2",
96 compositeTreeModel.getChild(delegateRoot1, 1).toString());
97 delegateModelStubFactory1.assertSuccess("getChild", delegateRoot1,
98 new Integer(1));
99
100 assertEquals(1, compositeTreeModel.getChildCount(root));
101 assertEquals(2, compositeTreeModel.getChildCount(delegateRoot1));
102 delegateModelStubFactory1.assertSuccess("getChildCount", delegateRoot1);
103 delegateModelStubFactory1.assertNoMoreCalls();
104
105 assertEquals(-1, compositeTreeModel.getIndexOfChild(root, delegateRoot1));
106
107 final Object child1 = delegateModel1.getChild(delegateRoot1, 0);
108 assertEquals(0, compositeTreeModel.getIndexOfChild(delegateRoot1, child1));
109
110 final Object grandChild = delegateModel1.getChild(child1, 0);
111 assertEquals(0, compositeTreeModel.getIndexOfChild(child1, grandChild));
112 assertTrue(compositeTreeModel.isLeaf(grandChild));
113
114 delegateModelStubFactory1.resetCallHistory();
115
116 final TreeModel delegateModel2 = createTreeModel();
117 final Object delegateRoot2 = delegateModel2.getRoot();
118
119 compositeTreeModel.addTreeModel(delegateModel2, false);
120 assertEquals(3, compositeTreeModel.getChildCount(root));
121
122 assertEquals("Child1",
123 compositeTreeModel.getChild(delegateRoot1, 0).toString());
124 delegateModelStubFactory1.assertSuccess("getChild", delegateRoot1,
125 new Integer(0));
126 assertEquals("Child1", compositeTreeModel.getChild(root, 1).toString());
127 assertEquals("Child2", compositeTreeModel.getChild(root, 2).toString());
128
129 final Object otherChild2 = delegateModel2.getChild(delegateRoot2, 1);
130
131 assertEquals(1, delegateModel2.getIndexOfChild(delegateRoot2,
132 otherChild2));
133 assertEquals(2, compositeTreeModel.getIndexOfChild(root, otherChild2));
134 }
135
136 public void testListeners() throws Exception {
137 final CompositeTreeModel compositeTreeModel = new CompositeTreeModel();
138 final Object root = compositeTreeModel.getRoot();
139
140 final RandomStubFactory<TreeModelListener> listener1StubFactory =
141 RandomStubFactory.create(TreeModelListener.class);
142 listener1StubFactory.setIgnoreObjectMethods();
143
144 compositeTreeModel.addTreeModelListener(listener1StubFactory.getStub());
145
146 compositeTreeModel.valueForPathChanged(null, null);
147 listener1StubFactory.assertNoMoreCalls();
148
149 final DefaultTreeModel delegateModel = createTreeModel();
150 final DefaultMutableTreeNode delegateRoot =
151 (DefaultMutableTreeNode)delegateModel.getRoot();
152
153 compositeTreeModel.addTreeModel(delegateModel, false);
154
155 final RandomStubFactory<TreeModelListener> listener2StubFactory =
156 RandomStubFactory.create(TreeModelListener.class);
157 listener2StubFactory.setIgnoreObjectMethods();
158
159 compositeTreeModel.addTreeModelListener(listener2StubFactory.getStub());
160
161 final DefaultMutableTreeNode child3 = new DefaultMutableTreeNode("Child3");
162 delegateModel.insertNodeInto(child3, delegateRoot, 2);
163
164 final CallData insertCallData =
165 listener1StubFactory.assertSuccess("treeNodesInserted",
166 TreeModelEvent.class);
167
168 final TreeModelEvent insertEvent =
169 (TreeModelEvent)insertCallData.getParameters()[0];
170
171 AssertUtilities.assertArraysEqual(
172 new Object[] { root, }, insertEvent.getPath());
173
174 listener1StubFactory.assertNoMoreCalls();
175 listener2StubFactory.assertSuccess("treeNodesInserted",
176 TreeModelEvent.class);
177 listener2StubFactory.assertNoMoreCalls();
178
179 compositeTreeModel.removeTreeModelListener(listener1StubFactory.getStub());
180
181 final DefaultMutableTreeNode grandChild2 =
182 new DefaultMutableTreeNode("Grandchild2");
183 delegateModel.insertNodeInto(grandChild2, child3, 0);
184
185 listener1StubFactory.assertNoMoreCalls();
186
187 final CallData insertCallData2 =
188 listener2StubFactory.assertSuccess("treeNodesInserted",
189 TreeModelEvent.class);
190
191 final TreeModelEvent insertEvent2 =
192 (TreeModelEvent)insertCallData2.getParameters()[0];
193
194 AssertUtilities.assertArraysEqual(
195 new Object[] { root, child3 }, insertEvent2.getPath());
196
197
198 compositeTreeModel.removeTreeModelListener(listener1StubFactory.getStub());
199 }
200
201 private DefaultTreeModel createTreeModel() {
202 final DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
203 final DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("Child1");
204 final DefaultMutableTreeNode child2 = new DefaultMutableTreeNode("Child2");
205 final DefaultMutableTreeNode grandChild =
206 new DefaultMutableTreeNode("Grandchild");
207 child1.add(grandChild);
208 root.add(child1);
209 root.add(child2);
210 return new DefaultTreeModel(root);
211 }
212 }