tmf: Bug 496504: Fix duplicate child entries in Control Flow view
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui.tests / src / org / eclipse / tracecompass / tmf / ui / tests / widgets / timegraph / model / TimeGraphEntryTest.java
CommitLineData
9597a3b5
PT
1/*******************************************************************************
2 * Copyright (c) 2016 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
12
13package org.eclipse.tracecompass.tmf.ui.tests.widgets.timegraph.model;
14
15import static org.junit.Assert.assertEquals;
16import static org.junit.Assert.assertFalse;
17import static org.junit.Assert.assertTrue;
18
7c094b3e
PT
19import java.util.Arrays;
20import java.util.Comparator;
9597a3b5
PT
21import java.util.Iterator;
22
23import org.eclipse.swt.SWT;
24import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeEvent;
25import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.NullTimeEvent;
26import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.TimeEvent;
27import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.TimeGraphEntry;
28import org.junit.Test;
29
30import com.google.common.collect.Iterators;
31
32/**
33 * Test the {@link TimeGraphEntry} class
34 */
35public class TimeGraphEntryTest {
36
37 private final static String NAME = "name";
38
39 /**
40 * Test method addEvent.
41 */
42 @Test
43 public void testAddEvent() {
44 TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
45 ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
46 ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
47 entry.addEvent(event1);
48 entry.addEvent(event2);
49 assertEquals(0, entry.getStartTime());
50 assertEquals(20, entry.getEndTime());
51 assertIteratorsEqual(Iterators.forArray(event1, event2), entry.getTimeEventsIterator());
52 }
53
54 /**
55 * Test method addEvent with replaced last event.
56 */
57 @Test
58 public void testAddEventReplaceLast() {
59 TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
60 ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
61 ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
62 ITimeEvent event3a = new TimeEvent(entry, 20, 5, 3);
63 ITimeEvent event3 = new TimeEvent(entry, 20, 10, 3);
64 entry.addEvent(event1);
65 entry.addEvent(event2);
66 entry.addEvent(event3a);
67 // last event is replaced
68 entry.addEvent(event3);
69 assertEquals(0, entry.getStartTime());
70 assertEquals(30, entry.getEndTime());
71 assertIteratorsEqual(Iterators.forArray(event1, event2, event3), entry.getTimeEventsIterator());
72 }
73
74 /**
75 * Test method addEvent with null events.
76 */
77 @Test
78 public void testAddEventNulls() {
79 TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
80 ITimeEvent event1 = new NullTimeEvent(entry, 0, 10);
81 ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
82 ITimeEvent event3 = new NullTimeEvent(entry, 20, 10);
83 // null events do not affect start and end time
84 entry.addEvent(event1);
85 entry.addEvent(event2);
86 entry.addEvent(event3);
87 assertEquals(10, entry.getStartTime());
88 assertEquals(20, entry.getEndTime());
89 assertIteratorsEqual(Iterators.forArray(event1, event2, event3), entry.getTimeEventsIterator());
90 }
91 /**
92 * Test method addZoomedEvent.
93 */
94 @Test
95 public void testaddZoomedEvent() {
96 TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
97 ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
98 ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
99 entry.addZoomedEvent(event1);
100 entry.addZoomedEvent(event2);
101 assertEquals(0, entry.getStartTime());
102 assertEquals(20, entry.getEndTime());
103 assertIteratorsEqual(Iterators.forArray(event1, event2), entry.getTimeEventsIterator());
104 }
105
106 /**
107 * Test method addZoomedEvent with duplicates.
108 */
109 @Test
110 public void testaddZoomedEventDuplicate() {
111 TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
112 ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
113 ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
114 ITimeEvent event3 = new TimeEvent(entry, 20, 10, 3);
115 entry.addZoomedEvent(event1);
116 entry.addZoomedEvent(event2);
117 // duplicate events are not added twice
118 entry.addZoomedEvent(event1);
119 entry.addZoomedEvent(event2);
120 entry.addZoomedEvent(event3);
121 assertEquals(0, entry.getStartTime());
122 assertEquals(30, entry.getEndTime());
123 assertIteratorsEqual(Iterators.forArray(event1, event2, event3), entry.getTimeEventsIterator());
124 }
125
126 /**
127 * Test method addZoomedEvent with replaced last event.
128 */
129 @Test
130 public void testaddZoomedEventReplaceLast() {
131 TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
132 ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
133 ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
134 ITimeEvent event3a = new TimeEvent(entry, 20, 5, 3);
135 ITimeEvent event3 = new TimeEvent(entry, 20, 10, 3);
136 entry.addZoomedEvent(event1);
137 entry.addZoomedEvent(event2);
138 entry.addZoomedEvent(event3a);
139 entry.addZoomedEvent(event1);
140 entry.addZoomedEvent(event2);
141 // last event is replaced
142 entry.addZoomedEvent(event3);
143 assertEquals(0, entry.getStartTime());
144 assertEquals(30, entry.getEndTime());
145 assertIteratorsEqual(Iterators.forArray(event1, event2, event3), entry.getTimeEventsIterator());
146 }
147
148 /**
149 * Test method addZoomedEvent with null events.
150 */
151 @Test
152 public void testAddZoomedEventNulls() {
153 TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
154 ITimeEvent event1 = new NullTimeEvent(entry, 0, 10);
155 ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
156 ITimeEvent event3 = new NullTimeEvent(entry, 20, 10);
157 // null events do not affect start and end time
158 entry.addZoomedEvent(event1);
159 entry.addZoomedEvent(event2);
160 entry.addZoomedEvent(event3);
161 assertEquals(10, entry.getStartTime());
162 assertEquals(20, entry.getEndTime());
163 assertIteratorsEqual(Iterators.forArray(event1, event2, event3), entry.getTimeEventsIterator());
164 }
165
166 /**
167 * Test method addZoomedEvent with partial list restarted.
168 */
169 @Test
170 public void testaddZoomedEventPartialRestart() {
171 TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
172 ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
173 ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
174 ITimeEvent event3 = new TimeEvent(entry, 20, 10, 3);
175 entry.addZoomedEvent(event2);
176 entry.addZoomedEvent(event3);
177 // zoomed list is cleared and restarted
178 entry.addZoomedEvent(event1);
179 entry.addZoomedEvent(event2);
180 entry.addZoomedEvent(event3);
181 assertEquals(0, entry.getStartTime());
182 assertEquals(30, entry.getEndTime());
183 assertIteratorsEqual(Iterators.forArray(event1, event2, event3), entry.getTimeEventsIterator());
184 }
185
186 /**
187 * Test method getTimeEventsIterator with event list and zoomed list.
188 */
189 @Test
190 public void testGetTimeEventsIteratorMixed() {
191 TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
192 ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
193 ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
194 ITimeEvent event3 = new TimeEvent(entry, 20, 10, 3);
195 ITimeEvent event2a = new TimeEvent(entry, 10, 5, 4);
196 ITimeEvent event2b = new TimeEvent(entry, 15, 5, 5);
197 entry.addEvent(event1);
198 entry.addEvent(event2);
199 entry.addEvent(event3);
200 // zoomed events override normal events they overlap completely
201 entry.addZoomedEvent(event2a);
202 entry.addZoomedEvent(event2b);
203 assertEquals(0, entry.getStartTime());
204 assertEquals(30, entry.getEndTime());
205 assertIteratorsEqual(Iterators.forArray(event1, event2a, event2b, event3), entry.getTimeEventsIterator());
206 }
207
208 /**
209 * Test method getTimeEventsIterator with event list and zoomed list partially overlapping.
210 */
211 @Test
212 public void testGetTimeEventsIteratorMixedSplit() {
213 TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
214 ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
215 ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
216 ITimeEvent event3 = new TimeEvent(entry, 20, 10, 3);
217 ITimeEvent event2a = new TimeEvent(entry, 5, 10, 4);
218 ITimeEvent event2b = new TimeEvent(entry, 15, 10, 5);
219 ITimeEvent event1s = new TimeEvent(entry, 0, 5, 1);
220 ITimeEvent event3s = new TimeEvent(entry, 25, 5, 3);
221 entry.addEvent(event1);
222 entry.addEvent(event2);
223 entry.addEvent(event3);
224 // zoomed events split and override normal events they overlap partially
225 entry.addZoomedEvent(event2a);
226 entry.addZoomedEvent(event2b);
227 assertEquals(0, entry.getStartTime());
228 assertEquals(30, entry.getEndTime());
229 assertIteratorsEqual(Iterators.forArray(event1s, event2a, event2b, event3s), entry.getTimeEventsIterator());
230 }
231
7c094b3e
PT
232 /**
233 * Test method addChild.
234 */
235 @Test
236 public void testAddChild() {
237 TimeGraphEntry parent = new TimeGraphEntry("parent", SWT.DEFAULT, SWT.DEFAULT);
238 TimeGraphEntry child = new TimeGraphEntry("child", SWT.DEFAULT, SWT.DEFAULT);
239 parent.addChild(child);
240 assertEquals(null, parent.getParent());
241 assertEquals(Arrays.asList(child), parent.getChildren());
242 assertEquals(parent, child.getParent());
243 assertEquals(Arrays.asList(), child.getChildren());
244 }
245
246 /**
247 * Test method addChild at specific position.
248 */
249 @Test
250 public void testAddChildAtPosition() {
251 TimeGraphEntry parent = new TimeGraphEntry("parent", SWT.DEFAULT, SWT.DEFAULT);
252 TimeGraphEntry child1 = new TimeGraphEntry("child1", SWT.DEFAULT, SWT.DEFAULT);
253 TimeGraphEntry child2 = new TimeGraphEntry("child2", SWT.DEFAULT, SWT.DEFAULT);
254 parent.addChild(0, child1);
255 parent.addChild(0, child2);
256 assertEquals(null, parent.getParent());
257 assertEquals(Arrays.asList(child2, child1), parent.getChildren());
258 assertEquals(parent, child1.getParent());
259 assertEquals(Arrays.asList(), child1.getChildren());
260 assertEquals(parent, child2.getParent());
261 assertEquals(Arrays.asList(), child2.getChildren());
262 }
263
264 /**
265 * Test method addChild to same parent.
266 */
267 @Test
268 public void testAddChildSameParent() {
269 TimeGraphEntry parent = new TimeGraphEntry("parent", SWT.DEFAULT, SWT.DEFAULT);
270 TimeGraphEntry child = new TimeGraphEntry("child", SWT.DEFAULT, SWT.DEFAULT);
271 parent.addChild(child);
272 parent.addChild(child);
273 assertEquals(null, parent.getParent());
274 assertEquals(Arrays.asList(child), parent.getChildren());
275 assertEquals(parent, child.getParent());
276 assertEquals(Arrays.asList(), child.getChildren());
277 }
278
279 /**
280 * Test method addChild to an other parent.
281 */
282 @Test
283 public void testAddChildOtherParent() {
284 TimeGraphEntry parent1 = new TimeGraphEntry("parent1", SWT.DEFAULT, SWT.DEFAULT);
285 TimeGraphEntry parent2 = new TimeGraphEntry("parent2", SWT.DEFAULT, SWT.DEFAULT);
286 TimeGraphEntry child = new TimeGraphEntry("child", SWT.DEFAULT, SWT.DEFAULT);
287 parent1.addChild(child);
288 parent2.addChild(child);
289 assertEquals(null, parent1.getParent());
290 assertEquals(Arrays.asList(), parent1.getChildren());
291 assertEquals(null, parent2.getParent());
292 assertEquals(Arrays.asList(child), parent2.getChildren());
293 assertEquals(parent2, child.getParent());
294 assertEquals(Arrays.asList(), child.getChildren());
295 }
296
297 /**
298 * Test method removeChild.
299 */
300 @Test
301 public void testRemoveChild() {
302 TimeGraphEntry parent = new TimeGraphEntry("parent", SWT.DEFAULT, SWT.DEFAULT);
303 TimeGraphEntry child = new TimeGraphEntry("child", SWT.DEFAULT, SWT.DEFAULT);
304 parent.addChild(child);
305 parent.removeChild(child);
306 assertEquals(null, parent.getParent());
307 assertEquals(Arrays.asList(), parent.getChildren());
308 assertEquals(null, child.getParent());
309 assertEquals(Arrays.asList(), child.getChildren());
310 }
311
312 /**
313 * Test method removeChild with child that has no parent.
314 */
315 @Test
316 public void testRemoveChildNoParent() {
317 TimeGraphEntry parent = new TimeGraphEntry("parent", SWT.DEFAULT, SWT.DEFAULT);
318 TimeGraphEntry child = new TimeGraphEntry("child", SWT.DEFAULT, SWT.DEFAULT);
319 parent.removeChild(child);
320 assertEquals(null, parent.getParent());
321 assertEquals(Arrays.asList(), parent.getChildren());
322 assertEquals(null, child.getParent());
323 assertEquals(Arrays.asList(), child.getChildren());
324 }
325
326 /**
327 * Test method removeChild with child that has an other parent.
328 */
329 @Test
330 public void testRemoveChildOtherParent() {
331 TimeGraphEntry parent1 = new TimeGraphEntry("parent1", SWT.DEFAULT, SWT.DEFAULT);
332 TimeGraphEntry parent2 = new TimeGraphEntry("parent2", SWT.DEFAULT, SWT.DEFAULT);
333 TimeGraphEntry child = new TimeGraphEntry("child", SWT.DEFAULT, SWT.DEFAULT);
334 parent1.addChild(child);
335 parent2.removeChild(child);
336 assertEquals(null, parent1.getParent());
337 assertEquals(Arrays.asList(child), parent1.getChildren());
338 assertEquals(null, parent2.getParent());
339 assertEquals(Arrays.asList(), parent2.getChildren());
340 assertEquals(parent1, child.getParent());
341 assertEquals(Arrays.asList(), child.getChildren());
342 }
343
344 /**
345 * Test method sortChildren.
346 */
347 @Test
348 public void testSortChildren() {
349 TimeGraphEntry parent = new TimeGraphEntry("parent", SWT.DEFAULT, SWT.DEFAULT);
350 TimeGraphEntry child1 = new TimeGraphEntry("child1", 2, 2);
351 TimeGraphEntry child2 = new TimeGraphEntry("child2", 1, 1);
352 parent.addChild(child1);
353 parent.addChild(child2);
354 parent.sortChildren(Comparator.comparingLong(entry -> entry.getStartTime()));
355 assertEquals(null, parent.getParent());
356 assertEquals(Arrays.asList(child2, child1), parent.getChildren());
357 assertEquals(parent, child1.getParent());
358 assertEquals(Arrays.asList(), child1.getChildren());
359 assertEquals(parent, child2.getParent());
360 assertEquals(Arrays.asList(), child2.getChildren());
361 }
362
363 /**
364 * Test method sortChildren followed by addChild.
365 */
366 @Test
367 public void testSortChildrenThenAdd() {
368 TimeGraphEntry parent = new TimeGraphEntry("parent", SWT.DEFAULT, SWT.DEFAULT);
369 TimeGraphEntry child1 = new TimeGraphEntry("child1", 2, 2);
370 TimeGraphEntry child2 = new TimeGraphEntry("child2", 1, 1);
371 parent.sortChildren(Comparator.comparingLong(entry -> entry.getStartTime()));
372 parent.addChild(child1);
373 parent.addChild(child2);
374 assertEquals(null, parent.getParent());
375 assertEquals(Arrays.asList(child2, child1), parent.getChildren());
376 assertEquals(parent, child1.getParent());
377 assertEquals(Arrays.asList(), child1.getChildren());
378 assertEquals(parent, child2.getParent());
379 assertEquals(Arrays.asList(), child2.getChildren());
380 }
381
9597a3b5
PT
382 private static void assertIteratorsEqual(Iterator<ITimeEvent> expected, Iterator<ITimeEvent> actual) {
383 int i = 0;
384 while (expected.hasNext()) {
385 assertTrue("missing event at position " + i, actual.hasNext());
386 ITimeEvent e1 = expected.next();
387 ITimeEvent e2 = actual.next();
388 assertEquals("not equal events at position " + i, e1, e2);
389 i++;
390 }
391 assertFalse("extra event at position " + i, actual.hasNext());
392 }
393}
This page took 0.045082 seconds and 5 git commands to generate.