lttng.swtbot: Add resources view swtbot tests
[deliverable/tracecompass.git] / lttng / org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests / src / org / eclipse / tracecompass / lttng2 / kernel / ui / swtbot / tests / ResourcesViewTest.java
index c233c7293fb7c1152fe8db42af303fec091352ba..fdfb05c7ff03dd87952edb90c452b495bf833b48 100644 (file)
 
 package org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import java.util.Arrays;
+import java.util.List;
+
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jface.bindings.keys.KeyStroke;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
 import org.eclipse.swtbot.swt.finder.SWTBot;
+import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
 import org.eclipse.swtbot.swt.finder.keyboard.Keyboard;
 import org.eclipse.swtbot.swt.finder.keyboard.KeyboardFactory;
 import org.eclipse.swtbot.swt.finder.keyboard.Keystrokes;
+import org.eclipse.swtbot.swt.finder.matchers.WidgetOfType;
+import org.eclipse.swtbot.swt.finder.results.Result;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotCanvas;
 import org.eclipse.tracecompass.tmf.core.signal.TmfSelectionRangeUpdatedSignal;
 import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
 import org.eclipse.tracecompass.tmf.core.signal.TmfWindowRangeUpdatedSignal;
 import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
-import org.eclipse.tracecompass.tmf.core.timestamp.TmfNanoTimestamp;
 import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
+import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
 import org.eclipse.tracecompass.tmf.ui.views.timegraph.AbstractTimeGraphView;
+import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.widgets.TimeGraphControl;
+import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.widgets.TimeGraphMarkerAxis;
 import org.eclipse.ui.IWorkbenchPart;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -41,33 +53,54 @@ import org.junit.Test;
  *
  * @author Patrick Tasse
  */
-public class ResourcesViewTest extends KernelTestBase {
+public class ResourcesViewTest extends KernelTimeGraphViewTestBase {
 
     private static final String NEXT_MARKER = "Next Marker";
     private static final String PREVIOUS_MARKER = "Previous Marker";
-    private static final String SELECT_NEXT_EVENT = "Select Next Event";
-    private static final String SELECT_PREVIOUS_EVENT = "Select Previous Event";
+    private static final String SELECT_NEXT_STATE_CHANGE = "Select Next State Change";
+    private static final String SELECT_PREVIOUS_STATE_CHANGE = "Select Previous State Change";
     private static final String ADD_BOOKMARK = "Add Bookmark...";
     private static final String REMOVE_BOOKMARK = "Remove Bookmark";
     private static final String ADD_BOOKMARK_DIALOG = "Add Bookmark";
     private static final String LOST_EVENTS = "Lost Events";
     private static final String OK = "OK";
     private static final Keyboard KEYBOARD = KeyboardFactory.getSWTKeyboard();
-    private static final @NonNull ITmfTimestamp START_TIME = new TmfNanoTimestamp(1368000272650993664L);
-    private static final @NonNull ITmfTimestamp LOST_EVENT_TIME1 = new TmfNanoTimestamp(1368000272681793477L);
-    private static final @NonNull ITmfTimestamp LOST_EVENT_END1 = new TmfNanoTimestamp(1368000272681793477L + 7425331L);
-    private static final @NonNull ITmfTimestamp LOST_EVENT_TIME2 = new TmfNanoTimestamp(1368000272820875850L);
-    private static final @NonNull ITmfTimestamp LOST_EVENT_END2 = new TmfNanoTimestamp(1368000272820875850L + 6640670L);
-    private static final @NonNull ITmfTimestamp LOST_EVENT_TIME3 = new TmfNanoTimestamp(1368000272882715015L);
-    private static final @NonNull ITmfTimestamp LOST_EVENT_END3 = new TmfNanoTimestamp(1368000272882715015L + 11373385L);
-    private static final @NonNull ITmfTimestamp CPU0_TIME1 = new TmfNanoTimestamp(1368000272651208412L);
-    private static final @NonNull ITmfTimestamp CPU0_TIME2 = new TmfNanoTimestamp(1368000272651852656L);
-    private static final @NonNull ITmfTimestamp CPU0_TIME3 = new TmfNanoTimestamp(1368000272652067404L);
-    private static final @NonNull ITmfTimestamp CPU0_TIME4 = new TmfNanoTimestamp(1368000272652282152L);
-    private static final @NonNull ITmfTimestamp CPU0_TIME5 = new TmfNanoTimestamp(1368000272653141144L);
+    private static final @NonNull ITmfTimestamp START_TIME = TmfTimestamp.fromNanos(1368000272650993664L);
+    private static final @NonNull ITmfTimestamp LOST_EVENT_TIME1 = TmfTimestamp.fromNanos(1368000272681793477L);
+    private static final @NonNull ITmfTimestamp LOST_EVENT_END1 = TmfTimestamp.fromNanos(1368000272681793477L + 7425331L);
+    private static final @NonNull ITmfTimestamp LOST_EVENT_TIME2 = TmfTimestamp.fromNanos(1368000272820875850L);
+    private static final @NonNull ITmfTimestamp LOST_EVENT_END2 = TmfTimestamp.fromNanos(1368000272820875850L + 6640670L);
+    private static final @NonNull ITmfTimestamp LOST_EVENT_TIME3 = TmfTimestamp.fromNanos(1368000272882715015L);
+    private static final @NonNull ITmfTimestamp LOST_EVENT_END3 = TmfTimestamp.fromNanos(1368000272882715015L + 11373385L);
+    private static final @NonNull ITmfTimestamp CPU0_TIME1 = TmfTimestamp.fromNanos(1368000272651208412L);
+    private static final @NonNull ITmfTimestamp CPU0_TIME2 = TmfTimestamp.fromNanos(1368000272651852656L);
+    private static final @NonNull ITmfTimestamp CPU0_TIME3 = TmfTimestamp.fromNanos(1368000272652067404L);
+    private static final @NonNull ITmfTimestamp CPU0_TIME4 = TmfTimestamp.fromNanos(1368000272652282152L);
+    private static final @NonNull ITmfTimestamp CPU0_TIME5 = TmfTimestamp.fromNanos(1368000272653141144L);
+    private static final int TOP_MARGIN = 1;
+    private static final Point TOGGLE_SIZE = new Point(7, 8);
+    private static final Point HIDE_SIZE = new Point(16, 16);
 
     private SWTBotView fViewBot;
 
+    @Override
+    protected SWTBotView getViewBot() {
+        return fViewBot;
+    }
+
+    @Override
+    protected List<String> getLegendValues() {
+        return Arrays.asList("IDLE", "USERMODE", "SYSCALL", "IRQ", "SOFT_IRQ", "IRQ_ACTIVE", "SOFT_IRQ_RAISED", "SOFT_IRQ_ACTIVE");
+    }
+
+    @Override
+    protected List<String> getToolbarTooltips() {
+        return Arrays.asList("Align Views", "Show View Filters", "Show Legend", SEPARATOR,
+                "Reset the Time Scale to Default", "Select Previous State Change", "Select Next State Change", SEPARATOR,
+                "Add Bookmark...", "Previous Marker", "Next Marker", SEPARATOR,
+                "Select Previous Resource", "Select Next Resource", "Zoom In", "Zoom Out" );
+    }
+
     /**
      * Before Test
      */
@@ -148,8 +181,6 @@ public class ResourcesViewTest extends KernelTestBase {
     /**
      * Test "Show Markers" view menu
      */
-    /* SWTBot doesn't support dynamic view menus yet */
-    @Ignore
     @Test
     public void testShowMarkers() {
         /* set selection to trace start time */
@@ -225,10 +256,10 @@ public class ResourcesViewTest extends KernelTestBase {
         KEYBOARD.pressShortcut(Keystrokes.HOME);
         KEYBOARD.pressShortcut(Keystrokes.DOWN);
 
-        /* click "Select Next Event" 2 times */
-        fViewBot.toolbarButton(SELECT_NEXT_EVENT).click();
+        /* click "Select Next State Change" 2 times */
+        fViewBot.toolbarButton(SELECT_NEXT_STATE_CHANGE).click();
         timeGraphIsReadyCondition(new TmfTimeRange(CPU0_TIME1, CPU0_TIME1), CPU0_TIME1);
-        fViewBot.toolbarButton(SELECT_NEXT_EVENT).click();
+        fViewBot.toolbarButton(SELECT_NEXT_STATE_CHANGE).click();
         timeGraphIsReadyCondition(new TmfTimeRange(CPU0_TIME2, CPU0_TIME2), CPU0_TIME2);
 
         /* click "Add Bookmark..." and fill Add Bookmark dialog */
@@ -237,12 +268,15 @@ public class ResourcesViewTest extends KernelTestBase {
         dialogBot.text().setText("B1");
         dialogBot.button(OK).click();
 
-        /* click "Select Next Event" 2 times and shift-click "Select Next Event*/
-        fViewBot.toolbarButton(SELECT_NEXT_EVENT).click();
+        /*
+         * click "Select Next State Change" 2 times and shift-click "Select Next
+         * State Change
+         */
+        fViewBot.toolbarButton(SELECT_NEXT_STATE_CHANGE).click();
         timeGraphIsReadyCondition(new TmfTimeRange(CPU0_TIME3, CPU0_TIME3), CPU0_TIME3);
-        fViewBot.toolbarButton(SELECT_NEXT_EVENT).click();
+        fViewBot.toolbarButton(SELECT_NEXT_STATE_CHANGE).click();
         timeGraphIsReadyCondition(new TmfTimeRange(CPU0_TIME4, CPU0_TIME4), CPU0_TIME4);
-        fViewBot.toolbarButton(SELECT_NEXT_EVENT).click(SWT.SHIFT);
+        fViewBot.toolbarButton(SELECT_NEXT_STATE_CHANGE).click(SWT.SHIFT);
         timeGraphIsReadyCondition(new TmfTimeRange(CPU0_TIME4, CPU0_TIME5), CPU0_TIME5);
 
         /* click "Add Bookmark..." and fill Add Bookmark dialog */
@@ -269,13 +303,104 @@ public class ResourcesViewTest extends KernelTestBase {
         fViewBot.toolbarButton(PREVIOUS_MARKER).click();
         timeGraphIsReadyCondition(new TmfTimeRange(CPU0_TIME4, CPU0_TIME5), CPU0_TIME5);
 
-        /* click "Select Previous Event" */
-        fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click();
+        /* click "Select Previous State Change" */
+        fViewBot.toolbarButton(SELECT_PREVIOUS_STATE_CHANGE).click();
         timeGraphIsReadyCondition(new TmfTimeRange(CPU0_TIME4, CPU0_TIME4), CPU0_TIME4);
     }
 
+    /**
+     * Test the marker axis
+     */
+    @Test
+    public void testMarkerAxis() {
+        /* center window range of first lost event range */
+        ITmfTimestamp startTime = LOST_EVENT_TIME1.normalize(-10000000L, ITmfTimestamp.NANOSECOND_SCALE);
+        ITmfTimestamp endTime = LOST_EVENT_END1.normalize(10000000L, ITmfTimestamp.NANOSECOND_SCALE);
+        TmfTimeRange range = new TmfTimeRange(startTime, endTime);
+        TmfSignalManager.dispatchSignal(new TmfWindowRangeUpdatedSignal(this, range));
+        fBot.waitUntil(ConditionHelpers.windowRange(range));
+
+        /* set selection to window start time */
+        TmfSignalManager.dispatchSignal(new TmfSelectionRangeUpdatedSignal(this, startTime));
+        timeGraphIsReadyCondition(new TmfTimeRange(startTime, startTime), startTime);
+
+        /* get marker axis size with one category */
+        final TimeGraphMarkerAxis markerAxis = fViewBot.bot().widget(WidgetOfType.widgetOfType(TimeGraphMarkerAxis.class));
+        final Point size1 = getSize(markerAxis);
+
+        /* add bookmark at window start time */
+        fViewBot.toolbarButton(ADD_BOOKMARK).click();
+        SWTBot dialogBot = fBot.shell(ADD_BOOKMARK_DIALOG).bot();
+        dialogBot.text().setText("B");
+        dialogBot.button(OK).click();
+
+        /* get marker axis size with two categories */
+        final Point size2 = getSize(markerAxis);
+        final int rowHeight = size2.y - size1.y;
+
+        /*
+         * get the state area bounds, since we don't know the name space width
+         */
+        final TimeGraphControl timeGraph = fViewBot.bot().widget(WidgetOfType.widgetOfType(TimeGraphControl.class));
+        int x0 = getXForTime(timeGraph, startTime.toNanos());
+        int x1 = getXForTime(timeGraph, endTime.toNanos());
+
+        /*
+         * click at the center of the marker axis width and first row height, it
+         * should be within the lost event range
+         */
+        final SWTBotCanvas markerAxisCanvas = new SWTBotCanvas(markerAxis);
+        markerAxisCanvas.click((x0 + x1) / 2, TOP_MARGIN + rowHeight / 2);
+        fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(LOST_EVENT_TIME1, LOST_EVENT_END1)));
+
+        /*
+         * click near the left of the marker axis width and center of second row
+         * height, it should be on the bookmark label
+         */
+        markerAxisCanvas.click(x0 + 2, TOP_MARGIN + rowHeight + rowHeight / 2);
+        fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(startTime, startTime)));
+
+        /* click "Remove Bookmark" */
+        fViewBot.toolbarButton(REMOVE_BOOKMARK).click();
+        assertEquals(size1, getSize(markerAxis));
+
+        /* click the 'expanded' icon to collapse */
+        markerAxisCanvas.click(TOGGLE_SIZE.x / 2, TOGGLE_SIZE.y / 2);
+        assertEquals(TOGGLE_SIZE.y, getSize(markerAxis).y);
+
+        /* click the 'collapsed' icon to expand */
+        markerAxisCanvas.click(TOGGLE_SIZE.x / 2, TOGGLE_SIZE.y / 2);
+        assertEquals(size1, getSize(markerAxis));
+
+        /* click on the 'X' icon to hide the 'Lost Events' marker category */
+        markerAxisCanvas.click(TOGGLE_SIZE.x + HIDE_SIZE.x / 2, TOP_MARGIN + HIDE_SIZE.y / 2);
+        assertEquals(0, getSize(markerAxis).y);
+
+        /* show Lost Events markers */
+        fViewBot.viewMenu(LOST_EVENTS).click();
+        assertEquals(size1, getSize(markerAxis));
+    }
+
     private void timeGraphIsReadyCondition(@NonNull TmfTimeRange selectionRange, @NonNull ITmfTimestamp visibleTime) {
         IWorkbenchPart part = fViewBot.getViewReference().getPart(false);
         fBot.waitUntil(ConditionHelpers.timeGraphIsReadyCondition((AbstractTimeGraphView) part, selectionRange, visibleTime));
     }
+
+    private static int getXForTime(TimeGraphControl timeGraph, long time) {
+        return UIThreadRunnable.syncExec(new Result<Integer>() {
+            @Override
+            public Integer run() {
+                return timeGraph.getXForTime(time);
+            }
+        });
+    }
+
+    private static Point getSize(Control control) {
+        return UIThreadRunnable.syncExec(new Result<Point>() {
+            @Override
+            public Point run() {
+                return control.getSize();
+            }
+        });
+    }
 }
This page took 0.027672 seconds and 5 git commands to generate.