--- /dev/null
+/*******************************************************************************
+ * 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());
+ }
+ }
+}