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.TreePath;
29
30 import net.grinder.console.common.Resources;
31 import net.grinder.console.common.ResourcesImplementation;
32 import net.grinder.console.distribution.AgentCacheState;
33 import net.grinder.console.distribution.FileChangeWatcher;
34 import net.grinder.console.editor.Buffer;
35 import net.grinder.console.editor.EditorModel;
36
37 import net.grinder.console.editor.StringTextSource;
38 import net.grinder.testutility.CallData;
39 import net.grinder.testutility.RandomStubFactory;
40
41
42
43
44
45
46
47 public class TestBufferTreeModel extends TestCase {
48
49 private static final Resources s_resources =
50 new ResourcesImplementation(
51 "net.grinder.console.common.resources.Console");
52
53 private final RandomStubFactory<AgentCacheState>
54 m_agentCacheStateStubFactory =
55 RandomStubFactory.create(AgentCacheState.class);
56 private final AgentCacheState m_agentCacheState =
57 m_agentCacheStateStubFactory.getStub();
58
59 private final RandomStubFactory<FileChangeWatcher>
60 m_fileChangeWatcherStubFactory =
61 RandomStubFactory.create(FileChangeWatcher.class);
62 private final FileChangeWatcher m_fileChangeWatcher =
63 m_fileChangeWatcherStubFactory.getStub();
64
65 public void testConstructionAndGetChildMethods() throws Exception {
66 final StringTextSource.Factory stringTextSourceFactory =
67 new StringTextSource.Factory();
68
69 final EditorModel editorModel = new EditorModel(s_resources,
70 stringTextSourceFactory,
71 m_agentCacheState,
72 m_fileChangeWatcher);
73
74 editorModel.selectNewBuffer();
75
76 final BufferTreeModel bufferTreeModel = new BufferTreeModel(editorModel);
77
78 final Object rootNode = bufferTreeModel.getRoot();
79 assertNotNull(rootNode);
80 assertEquals(1, bufferTreeModel.getChildCount(rootNode));
81 assertNull(bufferTreeModel.getChild(rootNode, 1));
82
83 final BufferTreeModel.BufferNode bufferNode =
84 (BufferTreeModel.BufferNode)bufferTreeModel.getChild(rootNode, 0);
85 assertSame(bufferNode.getBuffer(), editorModel.getSelectedBuffer());
86 assertTrue(bufferNode.belongsToModel(bufferTreeModel));
87 assertEquals(bufferNode.getBuffer().getDisplayName(),
88 bufferNode.toString());
89 final Object[] path = bufferNode.getPath().getPath();
90 assertEquals(2, path.length);
91 assertSame(rootNode, path[0]);
92 assertSame(bufferNode, path[1]);
93 assertTrue(bufferNode.canOpen());
94
95 final BufferTreeModel.BufferNode anotherBufferNode =
96 new BufferTreeModel(editorModel).new BufferNode(null);
97 assertFalse(anotherBufferNode.belongsToModel(bufferTreeModel));
98
99 assertEquals(0, bufferTreeModel.getChildCount(bufferNode));
100 assertNull(bufferTreeModel.getChild(bufferNode, 0));
101
102 assertEquals(-1, bufferTreeModel.getIndexOfChild(null, bufferNode));
103 assertEquals(-1, bufferTreeModel.getIndexOfChild(rootNode, null));
104 assertEquals(-1, bufferTreeModel.getIndexOfChild(bufferNode, rootNode));
105 assertEquals(-1,
106 bufferTreeModel.getIndexOfChild(rootNode, anotherBufferNode));
107
108 assertEquals(0, bufferTreeModel.getIndexOfChild(rootNode, bufferNode));
109
110 assertTrue(bufferTreeModel.isLeaf(bufferNode));
111 assertFalse(bufferTreeModel.isLeaf(rootNode));
112 assertFalse(bufferTreeModel.isLeaf(anotherBufferNode));
113 }
114
115 public void testSettersAndListeners() throws Exception {
116 final StringTextSource.Factory stringTextSourceFactory =
117 new StringTextSource.Factory();
118
119 final EditorModel editorModel = new EditorModel(s_resources,
120 stringTextSourceFactory,
121 m_agentCacheState,
122 m_fileChangeWatcher);
123 editorModel.selectNewBuffer();
124 final Buffer buffer2 = editorModel.getSelectedBuffer();
125
126 final BufferTreeModel bufferTreeModel = new BufferTreeModel(editorModel);
127
128 final RandomStubFactory<TreeModelListener> listener1StubFactory =
129 RandomStubFactory.create(TreeModelListener.class);
130 final RandomStubFactory<TreeModelListener> listener2StubFactory =
131 RandomStubFactory.create(TreeModelListener.class);
132
133 bufferTreeModel.addTreeModelListener(listener1StubFactory.getStub());
134 bufferTreeModel.addTreeModelListener(listener2StubFactory.getStub());
135
136 final TreePath treePath = new TreePath(new Object());
137 bufferTreeModel.valueForPathChanged(treePath, null);
138
139 final CallData treeNodesChangedCallData =
140 listener1StubFactory.assertSuccess("treeNodesChanged",
141 TreeModelEvent.class);
142 final TreeModelEvent event =
143 (TreeModelEvent)treeNodesChangedCallData.getParameters()[0];
144 assertSame(treePath, event.getTreePath());
145 assertSame(bufferTreeModel, event.getSource());
146 listener1StubFactory.assertNoMoreCalls();
147
148 listener2StubFactory.assertSuccess("treeNodesChanged",
149 TreeModelEvent.class);
150 listener2StubFactory.assertNoMoreCalls();
151
152 bufferTreeModel.removeTreeModelListener(listener1StubFactory.getStub());
153
154
155 listener1StubFactory.resetCallHistory();
156 listener2StubFactory.resetCallHistory();
157
158 editorModel.selectBuffer(buffer2);
159
160 listener1StubFactory.assertNoMoreCalls();
161 listener2StubFactory.assertNoMoreCalls();
162
163 final EditorModel editorModel2 = new EditorModel(s_resources,
164 stringTextSourceFactory,
165 m_agentCacheState,
166 m_fileChangeWatcher);
167
168 editorModel2.selectNewBuffer();
169 final Buffer anotherBuffer = editorModel2.getSelectedBuffer();
170 bufferTreeModel.bufferChanged(anotherBuffer);
171
172 listener1StubFactory.assertNoMoreCalls();
173 listener2StubFactory.assertNoMoreCalls();
174
175 final Buffer buffer = editorModel.getSelectedBuffer();
176 bufferTreeModel.bufferChanged(buffer);
177
178 listener1StubFactory.assertNoMoreCalls();
179 listener2StubFactory.assertSuccess("treeNodesChanged",
180 TreeModelEvent.class);
181
182 editorModel.selectNewBuffer();
183
184 final CallData treeStructureChangedCallData =
185 listener2StubFactory.assertSuccess("treeStructureChanged",
186 TreeModelEvent.class);
187 final TreeModelEvent treeStructureChangedEvent =
188 (TreeModelEvent)treeStructureChangedCallData.getParameters()[0];
189 assertSame(bufferTreeModel, treeStructureChangedEvent.getSource());
190 assertEquals(1, treeStructureChangedEvent.getPath().length);
191 assertSame(bufferTreeModel.getRoot(),
192 treeStructureChangedEvent.getPath()[0]);
193
194 listener1StubFactory.assertNoMoreCalls();
195 listener2StubFactory.assertNoMoreCalls();
196
197 editorModel.closeBuffer(buffer);
198
199 final CallData treeStructureChangedCallData2 =
200 listener2StubFactory.assertSuccess("treeStructureChanged",
201 TreeModelEvent.class);
202 final TreeModelEvent treeStructureChangedEvent2 =
203 (TreeModelEvent)treeStructureChangedCallData2.getParameters()[0];
204 assertSame(bufferTreeModel, treeStructureChangedEvent2.getSource());
205 assertEquals(1, treeStructureChangedEvent2.getPath().length);
206 assertSame(bufferTreeModel.getRoot(),
207 treeStructureChangedEvent2.getPath()[0]);
208
209 listener1StubFactory.assertNoMoreCalls();
210 listener2StubFactory.assertNoMoreCalls();
211 }
212 }