tmf: Bug 500542: Missing zoomed events in time graph entry
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui.tests / src / org / eclipse / tracecompass / tmf / ui / tests / widgets / timegraph / model / TimeGraphEntryTest.java
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui.tests/src/org/eclipse/tracecompass/tmf/ui/tests/widgets/timegraph/model/TimeGraphEntryTest.java b/tmf/org.eclipse.tracecompass.tmf.ui.tests/src/org/eclipse/tracecompass/tmf/ui/tests/widgets/timegraph/model/TimeGraphEntryTest.java
new file mode 100644 (file)
index 0000000..d8d056d
--- /dev/null
@@ -0,0 +1,241 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Patrick Tasse - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.tmf.ui.tests.widgets.timegraph.model;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Iterator;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeEvent;
+import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.NullTimeEvent;
+import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.TimeEvent;
+import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.TimeGraphEntry;
+import org.junit.Test;
+
+import com.google.common.collect.Iterators;
+
+/**
+ * Test the {@link TimeGraphEntry} class
+ */
+public class TimeGraphEntryTest {
+
+    private final static String NAME = "name";
+
+    /**
+     * Test method addEvent.
+     */
+    @Test
+    public void testAddEvent() {
+        TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
+        ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
+        ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
+        entry.addEvent(event1);
+        entry.addEvent(event2);
+        assertEquals(0, entry.getStartTime());
+        assertEquals(20, entry.getEndTime());
+        assertIteratorsEqual(Iterators.forArray(event1, event2), entry.getTimeEventsIterator());
+    }
+
+    /**
+     * Test method addEvent with replaced last event.
+     */
+    @Test
+    public void testAddEventReplaceLast() {
+        TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
+        ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
+        ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
+        ITimeEvent event3a = new TimeEvent(entry, 20, 5, 3);
+        ITimeEvent event3 = new TimeEvent(entry, 20, 10, 3);
+        entry.addEvent(event1);
+        entry.addEvent(event2);
+        entry.addEvent(event3a);
+        // last event is replaced
+        entry.addEvent(event3);
+        assertEquals(0, entry.getStartTime());
+        assertEquals(30, entry.getEndTime());
+        assertIteratorsEqual(Iterators.forArray(event1, event2, event3), entry.getTimeEventsIterator());
+    }
+
+    /**
+     * Test method addEvent with null events.
+     */
+    @Test
+    public void testAddEventNulls() {
+        TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
+        ITimeEvent event1 = new NullTimeEvent(entry, 0, 10);
+        ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
+        ITimeEvent event3 = new NullTimeEvent(entry, 20, 10);
+        // null events do not affect start and end time
+        entry.addEvent(event1);
+        entry.addEvent(event2);
+        entry.addEvent(event3);
+        assertEquals(10, entry.getStartTime());
+        assertEquals(20, entry.getEndTime());
+        assertIteratorsEqual(Iterators.forArray(event1, event2, event3), entry.getTimeEventsIterator());
+    }
+    /**
+     * Test method addZoomedEvent.
+     */
+    @Test
+    public void testaddZoomedEvent() {
+        TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
+        ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
+        ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
+        entry.addZoomedEvent(event1);
+        entry.addZoomedEvent(event2);
+        assertEquals(0, entry.getStartTime());
+        assertEquals(20, entry.getEndTime());
+        assertIteratorsEqual(Iterators.forArray(event1, event2), entry.getTimeEventsIterator());
+    }
+
+    /**
+     * Test method addZoomedEvent with duplicates.
+     */
+    @Test
+    public void testaddZoomedEventDuplicate() {
+        TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
+        ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
+        ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
+        ITimeEvent event3 = new TimeEvent(entry, 20, 10, 3);
+        entry.addZoomedEvent(event1);
+        entry.addZoomedEvent(event2);
+        // duplicate events are not added twice
+        entry.addZoomedEvent(event1);
+        entry.addZoomedEvent(event2);
+        entry.addZoomedEvent(event3);
+        assertEquals(0, entry.getStartTime());
+        assertEquals(30, entry.getEndTime());
+        assertIteratorsEqual(Iterators.forArray(event1, event2, event3), entry.getTimeEventsIterator());
+    }
+
+    /**
+     * Test method addZoomedEvent with replaced last event.
+     */
+    @Test
+    public void testaddZoomedEventReplaceLast() {
+        TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
+        ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
+        ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
+        ITimeEvent event3a = new TimeEvent(entry, 20, 5, 3);
+        ITimeEvent event3 = new TimeEvent(entry, 20, 10, 3);
+        entry.addZoomedEvent(event1);
+        entry.addZoomedEvent(event2);
+        entry.addZoomedEvent(event3a);
+        entry.addZoomedEvent(event1);
+        entry.addZoomedEvent(event2);
+        // last event is replaced
+        entry.addZoomedEvent(event3);
+        assertEquals(0, entry.getStartTime());
+        assertEquals(30, entry.getEndTime());
+        assertIteratorsEqual(Iterators.forArray(event1, event2, event3), entry.getTimeEventsIterator());
+    }
+
+    /**
+     * Test method addZoomedEvent with null events.
+     */
+    @Test
+    public void testAddZoomedEventNulls() {
+        TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
+        ITimeEvent event1 = new NullTimeEvent(entry, 0, 10);
+        ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
+        ITimeEvent event3 = new NullTimeEvent(entry, 20, 10);
+        // null events do not affect start and end time
+        entry.addZoomedEvent(event1);
+        entry.addZoomedEvent(event2);
+        entry.addZoomedEvent(event3);
+        assertEquals(10, entry.getStartTime());
+        assertEquals(20, entry.getEndTime());
+        assertIteratorsEqual(Iterators.forArray(event1, event2, event3), entry.getTimeEventsIterator());
+    }
+
+    /**
+     * Test method addZoomedEvent with partial list restarted.
+     */
+    @Test
+    public void testaddZoomedEventPartialRestart() {
+        TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
+        ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
+        ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
+        ITimeEvent event3 = new TimeEvent(entry, 20, 10, 3);
+        entry.addZoomedEvent(event2);
+        entry.addZoomedEvent(event3);
+        // zoomed list is cleared and restarted
+        entry.addZoomedEvent(event1);
+        entry.addZoomedEvent(event2);
+        entry.addZoomedEvent(event3);
+        assertEquals(0, entry.getStartTime());
+        assertEquals(30, entry.getEndTime());
+        assertIteratorsEqual(Iterators.forArray(event1, event2, event3), entry.getTimeEventsIterator());
+    }
+
+    /**
+     * Test method getTimeEventsIterator with event list and zoomed list.
+     */
+    @Test
+    public void testGetTimeEventsIteratorMixed() {
+        TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
+        ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
+        ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
+        ITimeEvent event3 = new TimeEvent(entry, 20, 10, 3);
+        ITimeEvent event2a = new TimeEvent(entry, 10, 5, 4);
+        ITimeEvent event2b = new TimeEvent(entry, 15, 5, 5);
+        entry.addEvent(event1);
+        entry.addEvent(event2);
+        entry.addEvent(event3);
+        // zoomed events override normal events they overlap completely
+        entry.addZoomedEvent(event2a);
+        entry.addZoomedEvent(event2b);
+        assertEquals(0, entry.getStartTime());
+        assertEquals(30, entry.getEndTime());
+        assertIteratorsEqual(Iterators.forArray(event1, event2a, event2b, event3), entry.getTimeEventsIterator());
+    }
+
+    /**
+     * Test method getTimeEventsIterator with event list and zoomed list partially overlapping.
+     */
+    @Test
+    public void testGetTimeEventsIteratorMixedSplit() {
+        TimeGraphEntry entry = new TimeGraphEntry(NAME, SWT.DEFAULT, SWT.DEFAULT);
+        ITimeEvent event1 = new TimeEvent(entry, 0, 10, 1);
+        ITimeEvent event2 = new TimeEvent(entry, 10, 10, 2);
+        ITimeEvent event3 = new TimeEvent(entry, 20, 10, 3);
+        ITimeEvent event2a = new TimeEvent(entry, 5, 10, 4);
+        ITimeEvent event2b = new TimeEvent(entry, 15, 10, 5);
+        ITimeEvent event1s = new TimeEvent(entry, 0, 5, 1);
+        ITimeEvent event3s = new TimeEvent(entry, 25, 5, 3);
+        entry.addEvent(event1);
+        entry.addEvent(event2);
+        entry.addEvent(event3);
+        // zoomed events split and override normal events they overlap partially
+        entry.addZoomedEvent(event2a);
+        entry.addZoomedEvent(event2b);
+        assertEquals(0, entry.getStartTime());
+        assertEquals(30, entry.getEndTime());
+        assertIteratorsEqual(Iterators.forArray(event1s, event2a, event2b, event3s), entry.getTimeEventsIterator());
+    }
+
+    private static void assertIteratorsEqual(Iterator<ITimeEvent> expected, Iterator<ITimeEvent> actual) {
+        int i = 0;
+        while (expected.hasNext()) {
+            assertTrue("missing event at position " + i, actual.hasNext());
+            ITimeEvent e1 = expected.next();
+            ITimeEvent e2 = actual.next();
+            assertEquals("not equal events at position " + i, e1, e2);
+            i++;
+        }
+        assertFalse("extra event at position " + i, actual.hasNext());
+    }
+}
This page took 0.027264 seconds and 5 git commands to generate.