X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;ds=inline;f=lttng%2Forg.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests%2Fsrc%2Forg%2Feclipse%2Ftracecompass%2Flttng2%2Fkernel%2Fui%2Fswtbot%2Ftests%2FControlFlowViewTest.java;h=f17395aba0932ab92f1b343a9abfece7590f6f6c;hb=976af99f412987fd0bf96dc36644ed2dadef9bdf;hp=76ec140cd7451629a4ecbb6d35a817133728b17c;hpb=b0d2c5580f617109889340f6a1e83d64d9488900;p=deliverable%2Ftracecompass.git diff --git a/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ControlFlowViewTest.java b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ControlFlowViewTest.java index 76ec140cd7..f17395aba0 100644 --- a/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ControlFlowViewTest.java +++ b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ControlFlowViewTest.java @@ -12,11 +12,16 @@ package org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import java.util.Arrays; +import java.util.List; + import org.eclipse.jdt.annotation.NonNull; import org.eclipse.swt.SWT; 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.junit.SWTBotJunit4ClassRunner; import org.eclipse.swtbot.swt.finder.keyboard.Keyboard; @@ -24,15 +29,19 @@ 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.VoidResult; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotToolbarButton; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem; +import org.eclipse.tracecompass.ctf.core.tests.shared.LttngTraceGenerator; 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.core.trace.TmfTraceManager; import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers; +import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils; import org.eclipse.tracecompass.tmf.ui.views.timegraph.AbstractTimeGraphView; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.widgets.TimeGraphControl; import org.eclipse.ui.IWorkbenchPart; @@ -46,28 +55,59 @@ import org.junit.runner.RunWith; * @author Patrick Tasse */ @RunWith(SWTBotJunit4ClassRunner.class) -public class ControlFlowViewTest extends KernelTestBase { +public class ControlFlowViewTest extends KernelTimeGraphViewTestBase { + + private static final String CHECK_SELECTED = "Check selected"; + private static final String CHECK_ALL = "Check all"; + private static final String CHECK_SUBTREE = "Check subtree"; + private static final String CHECK_ACTIVE = "Check Active"; + private static final String UNCHECK_SELECTED = "Uncheck selected"; + private static final String UNCHECK_ALL = "Uncheck all"; + private static final String UNCHECK_SUBTREE = "Uncheck subtree"; + private static final String UNCHECK_INACTIVE = "Uncheck Inactive"; private static final String FOLLOW_CPU_BACKWARD = "Follow CPU Backward"; private static final String FOLLOW_CPU_FORWARD = "Follow CPU Forward"; - private static final String SELECT_PREVIOUS_EVENT = "Select Previous Event"; - private static final String SELECT_NEXT_EVENT = "Select Next Event"; + private static final String SELECT_PREVIOUS_STATE_CHANGE = "Select Previous State Change"; + private static final String SELECT_NEXT_STATE_CHANGE = "Select Next State Change"; + private static final String SELECT_NEXT_PROCESS = "Select Next Process"; private static final Keyboard KEYBOARD = KeyboardFactory.getSWTKeyboard(); - private static final @NonNull ITmfTimestamp START_TIME = new TmfNanoTimestamp(1368000272650993664L); - private static final @NonNull ITmfTimestamp TID1_TIME1 = new TmfNanoTimestamp(1368000272651208412L); - private static final @NonNull ITmfTimestamp TID1_TIME2 = new TmfNanoTimestamp(1368000272656147616L); - private static final @NonNull ITmfTimestamp TID1_TIME3 = new TmfNanoTimestamp(1368000272656362364L); - private static final @NonNull ITmfTimestamp TID1_TIME4 = new TmfNanoTimestamp(1368000272663234300L); - private static final @NonNull ITmfTimestamp TID1_TIME5 = new TmfNanoTimestamp(1368000272663449048L); - private static final @NonNull ITmfTimestamp TID1_TIME6 = new TmfNanoTimestamp(1368000272665596528L); - private static final @NonNull ITmfTimestamp TID2_TIME1 = new TmfNanoTimestamp(1368000272651852656L); - private static final @NonNull ITmfTimestamp TID2_TIME2 = new TmfNanoTimestamp(1368000272652067404L); - private static final @NonNull ITmfTimestamp TID2_TIME3 = new TmfNanoTimestamp(1368000272652282152L); - private static final @NonNull ITmfTimestamp TID2_TIME4 = new TmfNanoTimestamp(1368000272652496900L); - private static final @NonNull ITmfTimestamp TID5_TIME1 = new TmfNanoTimestamp(1368000272652496900L); + private static final @NonNull ITmfTimestamp START_TIME = TmfTimestamp.fromNanos(1368000272650993664L); + private static final @NonNull ITmfTimestamp TID1_TIME1 = TmfTimestamp.fromNanos(1368000272651208412L); + private static final @NonNull ITmfTimestamp TID1_TIME2 = TmfTimestamp.fromNanos(1368000272656147616L); + private static final @NonNull ITmfTimestamp TID1_TIME3 = TmfTimestamp.fromNanos(1368000272656362364L); + private static final @NonNull ITmfTimestamp TID1_TIME4 = TmfTimestamp.fromNanos(1368000272663234300L); + private static final @NonNull ITmfTimestamp TID1_TIME5 = TmfTimestamp.fromNanos(1368000272663449048L); + private static final @NonNull ITmfTimestamp TID1_TIME6 = TmfTimestamp.fromNanos(1368000272665596528L); + private static final @NonNull ITmfTimestamp TID2_TIME1 = TmfTimestamp.fromNanos(1368000272651852656L); + private static final @NonNull ITmfTimestamp TID2_TIME2 = TmfTimestamp.fromNanos(1368000272652067404L); + private static final @NonNull ITmfTimestamp TID2_TIME3 = TmfTimestamp.fromNanos(1368000272652282152L); + private static final @NonNull ITmfTimestamp TID2_TIME4 = TmfTimestamp.fromNanos(1368000272652496900L); + private static final @NonNull ITmfTimestamp TID5_TIME1 = TmfTimestamp.fromNanos(1368000272652496900L); private SWTBotView fViewBot; + @Override + protected SWTBotView getViewBot() { + return fViewBot; + } + + @Override + protected List getLegendValues() { + return Arrays.asList("UNKNOWN", "WAIT_UNKNOWN", "WAIT_BLOCKED", "WAIT_FOR_CPU", "USERMODE", "SYSCALL", "INTERRUPTED"); + } + + @Override + protected List getToolbarTooltips() { + return Arrays.asList("Align Views", "Optimize", SEPARATOR, + "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 Process", "Select Next Process", "Zoom In", "Zoom Out", SEPARATOR, + "Hide Arrows", "Follow CPU Backward", "Follow CPU Forward", + "Go to previous event of the selected thread", "Go to next event of the selected thread" ); + } + /** * Before Test */ @@ -92,14 +132,15 @@ public class ControlFlowViewTest extends KernelTestBase { } /** - * Test tool bar buttons "Select Next Event" and "Select Previous Event" + * Test tool bar buttons "Select Next State Change" and "Select Previous + * State Change" */ @Test - public void testToolBarSelectNextPreviousEvent() { - testNextPreviousEvent(() -> fViewBot.toolbarButton(SELECT_NEXT_EVENT).click(), - () -> fViewBot.toolbarButton(SELECT_NEXT_EVENT).click(SWT.SHIFT), - () -> fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click(), - () -> fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click(SWT.SHIFT)); + public void testToolBarSelectNextPreviousStateChange() { + testNextPreviousEvent(() -> fViewBot.toolbarButton(SELECT_NEXT_STATE_CHANGE).click(), + () -> fViewBot.toolbarButton(SELECT_NEXT_STATE_CHANGE).click(SWT.SHIFT), + () -> fViewBot.toolbarButton(SELECT_PREVIOUS_STATE_CHANGE).click(), + () -> fViewBot.toolbarButton(SELECT_PREVIOUS_STATE_CHANGE).click(SWT.SHIFT)); } private void testNextPreviousEvent(Runnable selectNext, Runnable shiftSelectNext, Runnable selectPrevious, Runnable shiftSelectPrevious) { @@ -113,8 +154,8 @@ public class ControlFlowViewTest extends KernelTestBase { timeGraphIsReadyCondition(new TmfTimeRange(START_TIME, START_TIME)); /* select first item */ - final SWTBotTree tree = fViewBot.bot().tree(); - tree.pressShortcut(Keystrokes.HOME); + SWTBotUtils.pressShortcutGoToTreeTop(KEYBOARD); + fViewBot.toolbarButton(SELECT_NEXT_PROCESS).click(); /* set focus on time graph */ final TimeGraphControl timegraph = fViewBot.bot().widget(WidgetOfType.widgetOfType(TimeGraphControl.class)); @@ -125,7 +166,7 @@ public class ControlFlowViewTest extends KernelTestBase { } }); - /* click "Select Next Event" 3 times */ + /* click "Select Next State Change" 3 times */ selectNext.run(); timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME1, TID1_TIME1)); selectNext.run(); @@ -135,7 +176,7 @@ public class ControlFlowViewTest extends KernelTestBase { fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME3))); assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME3)); - /* shift-click "Select Next Event" 3 times */ + /* shift-click "Select Next State Change" 3 times */ shiftSelectNext.run(); timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME4)); shiftSelectNext.run(); @@ -145,7 +186,7 @@ public class ControlFlowViewTest extends KernelTestBase { fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME6))); assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME6)); - /* shift-click "Select Previous Event" 4 times */ + /* shift-click "Select Previous State Change" 4 times */ shiftSelectPrevious.run(); timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME5)); shiftSelectPrevious.run(); @@ -157,7 +198,7 @@ public class ControlFlowViewTest extends KernelTestBase { fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME2))); assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME2)); - /* click "Select Next Event" 2 times */ + /* click "Select Next State Change" 2 times */ selectNext.run(); timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME3)); selectNext.run(); @@ -165,7 +206,7 @@ public class ControlFlowViewTest extends KernelTestBase { fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME4))); assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME4)); - /* shift-click "Select Previous Event" 3 times */ + /* shift-click "Select Previous State Change" 3 times */ shiftSelectPrevious.run(); timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME3)); shiftSelectPrevious.run(); @@ -175,7 +216,7 @@ public class ControlFlowViewTest extends KernelTestBase { fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME1))); assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME1)); - /* shift-click "Select Next Event" 4 times */ + /* shift-click "Select Next State Change" 4 times */ shiftSelectNext.run(); timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME2)); shiftSelectNext.run(); @@ -187,7 +228,7 @@ public class ControlFlowViewTest extends KernelTestBase { fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME5))); assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME5)); - /* click "Select Previous Event" 5 times */ + /* click "Select Previous State Change" 5 times */ selectPrevious.run(); timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME4)); selectPrevious.run(); @@ -202,6 +243,81 @@ public class ControlFlowViewTest extends KernelTestBase { assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(START_TIME)); } + /** + * Test the filter + */ + @Test + public void testFilter() { + /* change window range to 1 ms */ + TmfTimeRange range = new TmfTimeRange(START_TIME, START_TIME.normalize(1000000L, ITmfTimestamp.NANOSECOND_SCALE)); + TmfSignalManager.dispatchSignal(new TmfWindowRangeUpdatedSignal(this, range)); + timeGraphIsReadyCondition(new TmfTimeRange(START_TIME, START_TIME)); + + SWTBotToolbarButton filterButton = fViewBot.toolbarButton("Show View Filters"); + filterButton.click(); + fBot.waitUntil(org.eclipse.swtbot.swt.finder.waits.Conditions.shellIsActive("Filter")); + SWTBot bot = fBot.activeShell().bot(); + SWTBotTree treeBot = bot.tree(); + TreeCheckedCounter treeCheckCounter = new TreeCheckedCounter(treeBot); + // get how many items there are + Integer checked = UIThreadRunnable.syncExec(treeCheckCounter); + assertEquals("default", 226, checked.intValue()); + // test "uncheck all button" + bot.button(UNCHECK_ALL).click(); + checked = UIThreadRunnable.syncExec(treeCheckCounter); + assertEquals(0, checked.intValue()); + // test check active + bot.button(CHECK_ACTIVE).click(); + checked = UIThreadRunnable.syncExec(treeCheckCounter); + assertEquals(CHECK_ACTIVE, 69, checked.intValue()); + // test check all + bot.button(CHECK_ALL).click(); + checked = UIThreadRunnable.syncExec(treeCheckCounter); + assertEquals(CHECK_ALL, 226, checked.intValue()); + // test uncheck inactive + bot.button(UNCHECK_INACTIVE).click(); + checked = UIThreadRunnable.syncExec(treeCheckCounter); + assertEquals(UNCHECK_INACTIVE, 69, checked.intValue()); + // test check selected + treeBot.getTreeItem(LttngTraceGenerator.getName()).select("gnuplot"); + bot.button(UNCHECK_ALL).click(); + bot.button(CHECK_SELECTED).click(); + checked = UIThreadRunnable.syncExec(treeCheckCounter); + assertEquals(CHECK_SELECTED, 2, checked.intValue()); + // test check subtree + bot.button(UNCHECK_ALL).click(); + bot.button(CHECK_SUBTREE).click(); + checked = UIThreadRunnable.syncExec(treeCheckCounter); + assertEquals(CHECK_SUBTREE, 2, checked.intValue()); + // test uncheck selected + bot.button(CHECK_ALL).click(); + bot.button(UNCHECK_SELECTED).click(); + checked = UIThreadRunnable.syncExec(treeCheckCounter); + assertEquals(UNCHECK_SELECTED, 225, checked.intValue()); + // test uncheck subtree + bot.button(CHECK_ALL).click(); + bot.button(UNCHECK_SUBTREE).click(); + checked = UIThreadRunnable.syncExec(treeCheckCounter); + assertEquals(UNCHECK_SELECTED, 225, checked.intValue()); + // test filter + bot.button(UNCHECK_ALL).click(); + checked = UIThreadRunnable.syncExec(treeCheckCounter); + assertEquals(0, checked.intValue()); + bot.text().setText("half-life 3"); + SWTBotTreeItem treeItem = treeBot.getTreeItem(LttngTraceGenerator.getName()); + treeItem.rowCount(); + fBot.waitUntil(ConditionHelpers.treeItemCount(treeItem, 25)); + bot.button(CHECK_ALL).click(); + checked = UIThreadRunnable.syncExec(treeCheckCounter); + assertEquals("Filtered", 26, checked.intValue()); + bot.button("OK").click(); + treeBot = fViewBot.bot().tree(); + treeItem = treeBot.getTreeItem(LttngTraceGenerator.getName()); + for (int i = 0; i < 25; i++) { + assertEquals("Filtered Control flow view", "Half-life 3", treeItem.cell(i, 0)); + } + } + /** * Test tool bar buttons "Follow CPU Forward" and "Follow CPU Backward" */ @@ -218,7 +334,8 @@ public class ControlFlowViewTest extends KernelTestBase { /* select first item */ final SWTBotTree tree = fViewBot.bot().tree(); - tree.pressShortcut(Keystrokes.HOME); + SWTBotUtils.pressShortcutGoToTreeTop(KEYBOARD); + fViewBot.toolbarButton(SELECT_NEXT_PROCESS).click(); /* set focus on time graph */ final TimeGraphControl timegraph = fViewBot.bot().widget(WidgetOfType.widgetOfType(TimeGraphControl.class));