tmf: Add unit tests for PeriodicMarkerEventSource
authorPatrick Tasse <patrick.tasse@gmail.com>
Fri, 11 Mar 2016 22:13:06 +0000 (17:13 -0500)
committerPatrick Tasse <patrick.tasse@gmail.com>
Mon, 14 Mar 2016 18:09:43 +0000 (14:09 -0400)
Change-Id: I38e8fb35f6a9f27c75a69e641819feb8c097a176
Signed-off-by: Patrick Tasse <patrick.tasse@gmail.com>
Reviewed-on: https://git.eclipse.org/r/68254
Reviewed-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
tmf/org.eclipse.tracecompass.tmf.ui.tests/src/org/eclipse/tracecompass/tmf/ui/tests/markers/PeriodicMarkerEventSourceTest.java [new file with mode: 0644]
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/markers/PeriodicMarkerEventSource.java

diff --git a/tmf/org.eclipse.tracecompass.tmf.ui.tests/src/org/eclipse/tracecompass/tmf/ui/tests/markers/PeriodicMarkerEventSourceTest.java b/tmf/org.eclipse.tracecompass.tmf.ui.tests/src/org/eclipse/tracecompass/tmf/ui/tests/markers/PeriodicMarkerEventSourceTest.java
new file mode 100644 (file)
index 0000000..ba70a6a
--- /dev/null
@@ -0,0 +1,195 @@
+/*******************************************************************************
+ * 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.markers;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.swt.graphics.RGBA;
+import org.eclipse.tracecompass.tmf.ui.markers.PeriodicMarkerEventSource;
+import org.eclipse.tracecompass.tmf.ui.markers.PeriodicMarkerEventSource.Reference;
+import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.IMarkerEvent;
+import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.IMarkerEventSource;
+import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.MarkerEvent;
+import org.junit.Test;
+
+/**
+ * Test the {@link PeriodicMarkerEventSource} class
+ */
+public class PeriodicMarkerEventSourceTest {
+
+    private static final @NonNull String CATEGORY = "Category";
+    private static final @NonNull RGBA COLOR = new RGBA(255, 0, 0, 64);
+    private static final @NonNull RGBA ODD_COLOR = new RGBA(0, 255, 0, 64);
+    private static final @NonNull RGBA EVEN_COLOR = new RGBA(0, 0, 255, 64);
+
+    /**
+     * Test constructor with invalid period.
+     */
+    @Test(expected = IllegalArgumentException.class)
+    public void testInvalidPeriod() {
+        new PeriodicMarkerEventSource(CATEGORY, Reference.ZERO, 0L, 0, COLOR, false);
+    }
+
+    /**
+     * Test constructor with invalid roll-over.
+     */
+    @Test(expected = IllegalArgumentException.class)
+    public void testInvalidRollover() {
+        new PeriodicMarkerEventSource(CATEGORY, Reference.ZERO, 100L, -1, COLOR, false);
+    }
+
+    /**
+     * Test a marker event source with lines at every period.
+     */
+    @Test
+    public void testLineMarkerEventSource() {
+        IMarkerEventSource source = new PeriodicMarkerEventSource(CATEGORY, Reference.ZERO, 100L, 0, COLOR, false);
+        assertEquals(Arrays.asList(CATEGORY), source.getMarkerCategories());
+        List<IMarkerEvent> expected = Arrays.asList(
+                new MarkerEvent(null, 0L, 0L, CATEGORY, COLOR, "0", false),
+                new MarkerEvent(null, 100L, 0L, CATEGORY, COLOR, "1", false),
+                new MarkerEvent(null, 200L, 0L, CATEGORY, COLOR, "2", false),
+                new MarkerEvent(null, 300L, 0L, CATEGORY, COLOR, "3", false));
+        assertMarkerListEquals(expected, source.getMarkerList(CATEGORY, 50L, 250L, 1, new NullProgressMonitor()));
+    }
+
+    /**
+     * Test a marker event source with alternate shading at every period.
+     */
+    @Test
+    public void testAlternateShadingMarkerEventSource() {
+        IMarkerEventSource source = new PeriodicMarkerEventSource(CATEGORY, Reference.ZERO, 100L, 0, EVEN_COLOR, ODD_COLOR, false);
+        assertEquals(Arrays.asList(CATEGORY), source.getMarkerCategories());
+        List<IMarkerEvent> expected = Arrays.asList(
+                new MarkerEvent(null, 0L, 100L, CATEGORY, EVEN_COLOR, "0", false),
+                new MarkerEvent(null, 100L, 100L, CATEGORY, ODD_COLOR, "1", false),
+                new MarkerEvent(null, 200L, 100L, CATEGORY, EVEN_COLOR, "2", false),
+                new MarkerEvent(null, 300L, 100L, CATEGORY, ODD_COLOR, "3", false));
+        assertMarkerListEquals(expected, source.getMarkerList(CATEGORY, 50L, 250L, 1, new NullProgressMonitor()));
+    }
+
+    /**
+     * Test that previous and next markers are always included.
+     */
+    @Test
+    public void testNextPreviousIncluded() {
+        IMarkerEventSource source = new PeriodicMarkerEventSource(CATEGORY, Reference.ZERO, 100L, 0, COLOR, false);
+        List<IMarkerEvent> expected = Arrays.asList(
+                new MarkerEvent(null, -100L, 0L, CATEGORY, COLOR, "-1", false),
+                new MarkerEvent(null, 0L, 0L, CATEGORY, COLOR, "0", false),
+                new MarkerEvent(null, 100L, 0L, CATEGORY, COLOR, "1", false),
+                new MarkerEvent(null, 200L, 0L, CATEGORY, COLOR, "2", false),
+                new MarkerEvent(null, 300L, 0L, CATEGORY, COLOR, "3", false),
+                new MarkerEvent(null, 400L, 0L, CATEGORY, COLOR, "4", false));
+        assertMarkerListEquals(expected, source.getMarkerList(CATEGORY, 0L, 300L, 1, new NullProgressMonitor()));
+    }
+
+    /**
+     * Test a marker event source with roll-over.
+     */
+    @Test
+    public void testRollover() {
+        IMarkerEventSource source = new PeriodicMarkerEventSource(CATEGORY, Reference.ZERO, 100L, 4, COLOR, false);
+        List<IMarkerEvent> expected = Arrays.asList(
+                new MarkerEvent(null, -100L, 0L, CATEGORY, COLOR, "3", false),
+                new MarkerEvent(null, 0L, 0L, CATEGORY, COLOR, "0", false),
+                new MarkerEvent(null, 100L, 0L, CATEGORY, COLOR, "1", false),
+                new MarkerEvent(null, 200L, 0L, CATEGORY, COLOR, "2", false),
+                new MarkerEvent(null, 300L, 0L, CATEGORY, COLOR, "3", false),
+                new MarkerEvent(null, 400L, 0L, CATEGORY, COLOR, "0", false));
+        assertMarkerListEquals(expected, source.getMarkerList(CATEGORY, 0L, 300L, 1, new NullProgressMonitor()));
+    }
+
+    /**
+     * Test a marker event source with a fractional period.
+     */
+    @Test
+    public void testFractionalPeriod() {
+        IMarkerEventSource source = new PeriodicMarkerEventSource(CATEGORY, Reference.ZERO, (100.0 / 3), 0, EVEN_COLOR, ODD_COLOR, false);
+        List<IMarkerEvent> expected = Arrays.asList(
+                new MarkerEvent(null, -33L, 33L, CATEGORY, ODD_COLOR, "-1", false),
+                new MarkerEvent(null, 0L, 33L, CATEGORY, EVEN_COLOR, "0", false),
+                new MarkerEvent(null, 33L, 34L, CATEGORY, ODD_COLOR, "1", false),
+                new MarkerEvent(null, 67L, 33L, CATEGORY, EVEN_COLOR, "2", false),
+                new MarkerEvent(null, 100L, 33L, CATEGORY, ODD_COLOR, "3", false),
+                new MarkerEvent(null, 133L, 34L, CATEGORY, EVEN_COLOR, "4", false));
+        assertMarkerListEquals(expected, source.getMarkerList(CATEGORY, 0L, 100L, 1, new NullProgressMonitor()));
+    }
+
+    /**
+     * Test a marker event source with period smaller than one time unit.
+     */
+    @Test
+    public void testSmallPeriod() {
+        IMarkerEventSource source = new PeriodicMarkerEventSource(CATEGORY, Reference.ZERO, (1.0 / 3), 0, EVEN_COLOR, ODD_COLOR, false);
+        List<IMarkerEvent> expected = Arrays.asList(
+                new MarkerEvent(null, -1L, 0L, CATEGORY, ODD_COLOR, "-3", false),
+                new MarkerEvent(null, 0L, 0L, CATEGORY, EVEN_COLOR, "0", false),
+                new MarkerEvent(null, 1L, 0L, CATEGORY, ODD_COLOR, "3", false),
+                new MarkerEvent(null, 2L, 0L, CATEGORY, EVEN_COLOR, "6", false),
+                new MarkerEvent(null, 3L, 0L, CATEGORY, ODD_COLOR, "9", false));
+        assertMarkerListEquals(expected, source.getMarkerList(CATEGORY, 0L, 2L, 1, new NullProgressMonitor()));
+    }
+
+    /**
+     * Test a marker event source with non-zero reference.
+     */
+    @Test
+    public void testReference() {
+        Reference reference = new Reference(250L, 10);
+        IMarkerEventSource source = new PeriodicMarkerEventSource(CATEGORY, reference, 100L, 0, COLOR, false);
+        List<IMarkerEvent> expected = Arrays.asList(
+                new MarkerEvent(null, -50L, 0L, CATEGORY, COLOR, "7", false),
+                new MarkerEvent(null, 50L, 0L, CATEGORY, COLOR, "8", false),
+                new MarkerEvent(null, 150L, 0L, CATEGORY, COLOR, "9", false),
+                new MarkerEvent(null, 250L, 0L, CATEGORY, COLOR, "10", false),
+                new MarkerEvent(null, 350L, 0L, CATEGORY, COLOR, "11", false));
+        assertMarkerListEquals(expected, source.getMarkerList(CATEGORY, 0L, 300L, 1, new NullProgressMonitor()));
+    }
+
+    /**
+     * Test a query with a resolution.
+     */
+    @Test
+    public void testResolution() {
+        IMarkerEventSource source = new PeriodicMarkerEventSource(CATEGORY, Reference.ZERO, 10L, 0, EVEN_COLOR, ODD_COLOR, false);
+        assertEquals(Arrays.asList(CATEGORY), source.getMarkerCategories());
+        List<IMarkerEvent> expected = Arrays.asList(
+                new MarkerEvent(null, -20L, 10L, CATEGORY, EVEN_COLOR, "-2", false),
+                new MarkerEvent(null, 10L, 10L, CATEGORY, ODD_COLOR, "1", false),
+                new MarkerEvent(null, 40L, 10L, CATEGORY, EVEN_COLOR, "4", false),
+                new MarkerEvent(null, 70L, 10L, CATEGORY, ODD_COLOR, "7", false),
+                new MarkerEvent(null, 100L, 10L, CATEGORY, EVEN_COLOR, "10", false),
+                new MarkerEvent(null, 130L, 10L, CATEGORY, ODD_COLOR, "13", false));
+        assertMarkerListEquals(expected, source.getMarkerList(CATEGORY, 0L, 100L, 25, new NullProgressMonitor()));
+    }
+
+    private static void assertMarkerListEquals(@NonNull List<IMarkerEvent> expectedList, @NonNull List<@NonNull IMarkerEvent> markerList) {
+        assertEquals(expectedList.size(), markerList.size());
+        for (int i = 0; i < expectedList.size(); i++) {
+            IMarkerEvent expected = expectedList.get(i);
+            IMarkerEvent marker = markerList.get(i);
+            assertEquals(marker.toString(), expected.getEntry(), marker.getEntry());
+            assertEquals(marker.toString(), expected.getTime(), marker.getTime());
+            assertEquals(marker.toString(), expected.getDuration(), marker.getDuration());
+            assertEquals(marker.toString(), expected.getCategory(), marker.getCategory());
+            assertEquals(marker.toString(), expected.getLabel(), marker.getLabel());
+            assertEquals(marker.toString(), expected.getColor(), marker.getColor());
+        }
+    }
+}
index 79dfa3ab5558d28a5cd2241c120914682ff2c2c3..17909af8df6bb19bf69634ea677b520c90f41abe 100644 (file)
@@ -153,7 +153,7 @@ public class PeriodicMarkerEventSource implements IMarkerEventSource {
         long time = startTime;
         if (Math.round((Math.round((time - fReference.time) / fPeriod)) * fPeriod + fReference.time) >= time) {
             /* Subtract one period to ensure previous marker is included */
-            time -= fPeriod;
+            time -= Math.max(fPeriod, resolution);
         }
         while (true) {
             long index = Math.round((time - fReference.time) / fPeriod) + fReference.index;
This page took 0.027519 seconds and 5 git commands to generate.