Test toolbar when pinned for cfv and resource view
[deliverable/tracecompass.git] / lttng / org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests / src / org / eclipse / tracecompass / lttng2 / kernel / ui / swtbot / tests / ControlFlowViewTest.java
1 /*******************************************************************************
2 * Copyright (c) 2015 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests;
14
15 import static org.junit.Assert.assertEquals;
16 import static org.junit.Assert.assertTrue;
17
18 import java.util.Arrays;
19 import java.util.List;
20
21 import org.eclipse.jdt.annotation.NonNull;
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
24 import org.eclipse.swtbot.swt.finder.SWTBot;
25 import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
26 import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
27 import org.eclipse.swtbot.swt.finder.keyboard.Keyboard;
28 import org.eclipse.swtbot.swt.finder.keyboard.KeyboardFactory;
29 import org.eclipse.swtbot.swt.finder.keyboard.Keystrokes;
30 import org.eclipse.swtbot.swt.finder.matchers.WidgetOfType;
31 import org.eclipse.swtbot.swt.finder.results.VoidResult;
32 import org.eclipse.swtbot.swt.finder.widgets.SWTBotToolbarButton;
33 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
34 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
35 import org.eclipse.tracecompass.ctf.core.tests.shared.LttngTraceGenerator;
36 import org.eclipse.tracecompass.tmf.core.signal.TmfSelectionRangeUpdatedSignal;
37 import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
38 import org.eclipse.tracecompass.tmf.core.signal.TmfWindowRangeUpdatedSignal;
39 import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
40 import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
41 import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
42 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
43 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
44 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
45 import org.eclipse.tracecompass.tmf.ui.views.timegraph.AbstractTimeGraphView;
46 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.widgets.TimeGraphControl;
47 import org.eclipse.ui.IWorkbenchPart;
48 import org.junit.Before;
49 import org.junit.Test;
50 import org.junit.runner.RunWith;
51
52 /**
53 * SWTBot tests for Control Flow view
54 *
55 * @author Patrick Tasse
56 */
57 @RunWith(SWTBotJunit4ClassRunner.class)
58 public class ControlFlowViewTest extends KernelTimeGraphViewTestBase {
59
60 private static final String CHECK_SELECTED = "Check selected";
61 private static final String CHECK_ALL = "Check all";
62 private static final String CHECK_SUBTREE = "Check subtree";
63 private static final String CHECK_ACTIVE = "Check Active";
64 private static final String UNCHECK_SELECTED = "Uncheck selected";
65 private static final String UNCHECK_ALL = "Uncheck all";
66 private static final String UNCHECK_SUBTREE = "Uncheck subtree";
67 private static final String UNCHECK_INACTIVE = "Uncheck Inactive";
68
69 private static final String FOLLOW_CPU_BACKWARD = "Follow CPU Backward";
70 private static final String FOLLOW_CPU_FORWARD = "Follow CPU Forward";
71 private static final String SELECT_PREVIOUS_STATE_CHANGE = "Select Previous State Change";
72 private static final String SELECT_NEXT_STATE_CHANGE = "Select Next State Change";
73 private static final String SELECT_NEXT_PROCESS = "Select Next Process";
74 private static final Keyboard KEYBOARD = KeyboardFactory.getSWTKeyboard();
75 private static final @NonNull ITmfTimestamp START_TIME = TmfTimestamp.fromNanos(1368000272650993664L);
76 private static final @NonNull ITmfTimestamp TID1_TIME1 = TmfTimestamp.fromNanos(1368000272651208412L);
77 private static final @NonNull ITmfTimestamp TID1_TIME2 = TmfTimestamp.fromNanos(1368000272656147616L);
78 private static final @NonNull ITmfTimestamp TID1_TIME3 = TmfTimestamp.fromNanos(1368000272656362364L);
79 private static final @NonNull ITmfTimestamp TID1_TIME4 = TmfTimestamp.fromNanos(1368000272663234300L);
80 private static final @NonNull ITmfTimestamp TID1_TIME5 = TmfTimestamp.fromNanos(1368000272663449048L);
81 private static final @NonNull ITmfTimestamp TID1_TIME6 = TmfTimestamp.fromNanos(1368000272665596528L);
82 private static final @NonNull ITmfTimestamp TID2_TIME1 = TmfTimestamp.fromNanos(1368000272651852656L);
83 private static final @NonNull ITmfTimestamp TID2_TIME2 = TmfTimestamp.fromNanos(1368000272652067404L);
84 private static final @NonNull ITmfTimestamp TID2_TIME3 = TmfTimestamp.fromNanos(1368000272652282152L);
85 private static final @NonNull ITmfTimestamp TID2_TIME4 = TmfTimestamp.fromNanos(1368000272652496900L);
86 private static final @NonNull ITmfTimestamp TID5_TIME1 = TmfTimestamp.fromNanos(1368000272652496900L);
87
88 private SWTBotView fViewBot;
89
90 @Override
91 protected SWTBotView getViewBot() {
92 return fViewBot;
93 }
94
95 @Override
96 protected List<String> getLegendValues() {
97 return Arrays.asList("UNKNOWN", "WAIT_UNKNOWN", "WAIT_BLOCKED", "WAIT_FOR_CPU", "USERMODE", "SYSCALL", "INTERRUPTED");
98 }
99
100 @Override
101 protected List<String> getToolbarTooltips() {
102 return Arrays.asList(PIN_VIEW_TOOLTIP, SEPARATOR,
103 ALIGN_VIEW_TOOLTIP, "Optimize", SEPARATOR,
104 "Show View Filters", "Show Legend", SEPARATOR,
105 "Reset the Time Scale to Default", "Select Previous State Change", "Select Next State Change", SEPARATOR,
106 "Add Bookmark...", "Previous Marker", "Next Marker", SEPARATOR,
107 "Select Previous Process", "Select Next Process", "Zoom In", "Zoom Out", SEPARATOR,
108 "Hide Arrows", "Follow CPU Backward", "Follow CPU Forward",
109 "Go to previous event of the selected thread", "Go to next event of the selected thread" );
110 }
111
112 /**
113 * Before Test
114 */
115 @Override
116 @Before
117 public void before() {
118 super.before();
119 fViewBot = fBot.viewByTitle("Control Flow");
120 fViewBot.show();
121 fViewBot.setFocus();
122 }
123
124 /**
125 * Test keyboard navigation using ARROW_RIGHT and ARROW_LEFT
126 */
127 @Test
128 public void testKeyboardLeftRight() {
129 testNextPreviousEvent(() -> KEYBOARD.pressShortcut(Keystrokes.RIGHT),
130 () -> KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.RIGHT),
131 () -> KEYBOARD.pressShortcut(Keystrokes.LEFT),
132 () -> KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.LEFT));
133 }
134
135 /**
136 * Test tool bar buttons "Select Next State Change" and "Select Previous
137 * State Change"
138 */
139 @Test
140 public void testToolBarSelectNextPreviousStateChange() {
141 testNextPreviousEvent(() -> fViewBot.toolbarButton(SELECT_NEXT_STATE_CHANGE).click(),
142 () -> fViewBot.toolbarButton(SELECT_NEXT_STATE_CHANGE).click(SWT.SHIFT),
143 () -> fViewBot.toolbarButton(SELECT_PREVIOUS_STATE_CHANGE).click(),
144 () -> fViewBot.toolbarButton(SELECT_PREVIOUS_STATE_CHANGE).click(SWT.SHIFT));
145 }
146
147 private void testNextPreviousEvent(Runnable selectNext, Runnable shiftSelectNext, Runnable selectPrevious, Runnable shiftSelectPrevious) {
148 /* change window range to 10 ms */
149 TmfTimeRange range = new TmfTimeRange(START_TIME, START_TIME.normalize(10000000L, ITmfTimestamp.NANOSECOND_SCALE));
150 TmfSignalManager.dispatchSignal(new TmfWindowRangeUpdatedSignal(this, range));
151 fBot.waitUntil(ConditionHelpers.windowRange(range));
152
153 /* set selection to trace start time */
154 TmfSignalManager.dispatchSignal(new TmfSelectionRangeUpdatedSignal(this, START_TIME));
155 timeGraphIsReadyCondition(new TmfTimeRange(START_TIME, START_TIME));
156
157 /* select first item */
158 SWTBotUtils.pressShortcutGoToTreeTop(KEYBOARD);
159 fViewBot.toolbarButton(SELECT_NEXT_PROCESS).click();
160
161 /* set focus on time graph */
162 final TimeGraphControl timegraph = fViewBot.bot().widget(WidgetOfType.widgetOfType(TimeGraphControl.class));
163 UIThreadRunnable.syncExec(new VoidResult() {
164 @Override
165 public void run() {
166 timegraph.setFocus();
167 }
168 });
169
170 /* click "Select Next State Change" 3 times */
171 selectNext.run();
172 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME1, TID1_TIME1));
173 selectNext.run();
174 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME2, TID1_TIME2));
175 selectNext.run();
176 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME3));
177 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME3)));
178 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME3));
179
180 /* shift-click "Select Next State Change" 3 times */
181 shiftSelectNext.run();
182 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME4));
183 shiftSelectNext.run();
184 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME5));
185 shiftSelectNext.run();
186 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME6));
187 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME6)));
188 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME6));
189
190 /* shift-click "Select Previous State Change" 4 times */
191 shiftSelectPrevious.run();
192 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME5));
193 shiftSelectPrevious.run();
194 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME4));
195 shiftSelectPrevious.run();
196 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME3));
197 shiftSelectPrevious.run();
198 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME2));
199 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME2)));
200 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME2));
201
202 /* click "Select Next State Change" 2 times */
203 selectNext.run();
204 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME3));
205 selectNext.run();
206 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME4));
207 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME4)));
208 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME4));
209
210 /* shift-click "Select Previous State Change" 3 times */
211 shiftSelectPrevious.run();
212 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME3));
213 shiftSelectPrevious.run();
214 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME2));
215 shiftSelectPrevious.run();
216 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME1));
217 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME1)));
218 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME1));
219
220 /* shift-click "Select Next State Change" 4 times */
221 shiftSelectNext.run();
222 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME2));
223 shiftSelectNext.run();
224 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME3));
225 shiftSelectNext.run();
226 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME4));
227 shiftSelectNext.run();
228 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME5));
229 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME5)));
230 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME5));
231
232 /* click "Select Previous State Change" 5 times */
233 selectPrevious.run();
234 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME4));
235 selectPrevious.run();
236 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME3));
237 selectPrevious.run();
238 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME2, TID1_TIME2));
239 selectPrevious.run();
240 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME1, TID1_TIME1));
241 selectPrevious.run();
242 timeGraphIsReadyCondition(new TmfTimeRange(START_TIME, START_TIME));
243 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(START_TIME, START_TIME)));
244 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(START_TIME));
245 }
246
247 /**
248 * Test the filter
249 */
250 @Test
251 public void testFilter() {
252 /* change window range to 1 ms */
253 TmfTimeRange range = new TmfTimeRange(START_TIME, START_TIME.normalize(1000000L, ITmfTimestamp.NANOSECOND_SCALE));
254 TmfSignalManager.dispatchSignal(new TmfWindowRangeUpdatedSignal(this, range));
255 timeGraphIsReadyCondition(new TmfTimeRange(START_TIME, START_TIME));
256
257 SWTBotToolbarButton filterButton = fViewBot.toolbarButton("Show View Filters");
258 filterButton.click();
259 fBot.waitUntil(org.eclipse.swtbot.swt.finder.waits.Conditions.shellIsActive("Filter"));
260 SWTBot bot = fBot.activeShell().bot();
261 SWTBotTree treeBot = bot.tree();
262 TreeCheckedCounter treeCheckCounter = new TreeCheckedCounter(treeBot);
263 // get how many items there are
264 Integer checked = UIThreadRunnable.syncExec(treeCheckCounter);
265 assertEquals("default", 226, checked.intValue());
266 // test "uncheck all button"
267 bot.button(UNCHECK_ALL).click();
268 checked = UIThreadRunnable.syncExec(treeCheckCounter);
269 assertEquals(0, checked.intValue());
270 // test check active
271 bot.button(CHECK_ACTIVE).click();
272 checked = UIThreadRunnable.syncExec(treeCheckCounter);
273 assertEquals(CHECK_ACTIVE, 69, checked.intValue());
274 // test check all
275 bot.button(CHECK_ALL).click();
276 checked = UIThreadRunnable.syncExec(treeCheckCounter);
277 assertEquals(CHECK_ALL, 226, checked.intValue());
278 // test uncheck inactive
279 bot.button(UNCHECK_INACTIVE).click();
280 checked = UIThreadRunnable.syncExec(treeCheckCounter);
281 assertEquals(UNCHECK_INACTIVE, 69, checked.intValue());
282 // test check selected
283 treeBot.getTreeItem(LttngTraceGenerator.getName()).select("gnuplot");
284 bot.button(UNCHECK_ALL).click();
285 bot.button(CHECK_SELECTED).click();
286 checked = UIThreadRunnable.syncExec(treeCheckCounter);
287 assertEquals(CHECK_SELECTED, 2, checked.intValue());
288 // test check subtree
289 bot.button(UNCHECK_ALL).click();
290 bot.button(CHECK_SUBTREE).click();
291 checked = UIThreadRunnable.syncExec(treeCheckCounter);
292 assertEquals(CHECK_SUBTREE, 2, checked.intValue());
293 // test uncheck selected
294 bot.button(CHECK_ALL).click();
295 bot.button(UNCHECK_SELECTED).click();
296 checked = UIThreadRunnable.syncExec(treeCheckCounter);
297 assertEquals(UNCHECK_SELECTED, 225, checked.intValue());
298 // test uncheck subtree
299 bot.button(CHECK_ALL).click();
300 bot.button(UNCHECK_SUBTREE).click();
301 checked = UIThreadRunnable.syncExec(treeCheckCounter);
302 assertEquals(UNCHECK_SELECTED, 225, checked.intValue());
303 // test filter
304 bot.button(UNCHECK_ALL).click();
305 checked = UIThreadRunnable.syncExec(treeCheckCounter);
306 assertEquals(0, checked.intValue());
307 bot.text().setText("half-life 3");
308 SWTBotTreeItem treeItem = treeBot.getTreeItem(LttngTraceGenerator.getName());
309 treeItem.rowCount();
310 fBot.waitUntil(ConditionHelpers.treeItemCount(treeItem, 25));
311 bot.button(CHECK_ALL).click();
312 checked = UIThreadRunnable.syncExec(treeCheckCounter);
313 assertEquals("Filtered", 26, checked.intValue());
314 bot.button("OK").click();
315 treeBot = fViewBot.bot().tree();
316 treeItem = treeBot.getTreeItem(LttngTraceGenerator.getName());
317 for (int i = 0; i < 25; i++) {
318 assertEquals("Filtered Control flow view", "Half-life 3", treeItem.cell(i, 0));
319 }
320 }
321
322 /**
323 * Test tool bar buttons "Follow CPU Forward" and "Follow CPU Backward"
324 */
325 @Test
326 public void testToolBarFollowCPUForwardBackward() {
327 /* change window range to 10 ms */
328 TmfTimeRange range = new TmfTimeRange(START_TIME, START_TIME.normalize(10000000L, ITmfTimestamp.NANOSECOND_SCALE));
329 TmfSignalManager.dispatchSignal(new TmfWindowRangeUpdatedSignal(this, range));
330 fBot.waitUntil(ConditionHelpers.windowRange(range));
331
332 /* set selection to trace start time */
333 TmfSignalManager.dispatchSignal(new TmfSelectionRangeUpdatedSignal(this, START_TIME));
334 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(START_TIME, START_TIME)));
335
336 /* select first item */
337 final SWTBotTree tree = fViewBot.bot().tree();
338 SWTBotUtils.pressShortcutGoToTreeTop(KEYBOARD);
339 fViewBot.toolbarButton(SELECT_NEXT_PROCESS).click();
340
341 /* set focus on time graph */
342 final TimeGraphControl timegraph = fViewBot.bot().widget(WidgetOfType.widgetOfType(TimeGraphControl.class));
343 UIThreadRunnable.syncExec(new VoidResult() {
344 @Override
345 public void run() {
346 timegraph.setFocus();
347 }
348 });
349
350 /* click "Follow CPU Forward" 3 times */
351 timeGraphIsReadyCondition(new TmfTimeRange(START_TIME, START_TIME));
352 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click();
353 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME1, TID1_TIME1));
354 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click();
355 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME1, TID2_TIME1));
356 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click();
357 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME2));
358 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID2_TIME2, TID2_TIME2)));
359 fBot.waitUntil(ConditionHelpers.treeSelectionContains(tree, 1, "2"));
360 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID2_TIME2));
361
362 /* shift-click "Follow CPU Forward" 3 times */
363 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
364 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME3));
365 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
366 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME4));
367 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
368 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME4));
369 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID2_TIME2, TID5_TIME1)));
370 fBot.waitUntil(ConditionHelpers.treeSelectionContains(tree, 1, "5"));
371 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID5_TIME1));
372
373 /* shift-click "Follow CPU Backward" 4 times */
374 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
375 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME4));
376 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
377 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME3));
378 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
379 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME2));
380 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
381 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME1));
382 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID2_TIME2, TID2_TIME1)));
383 fBot.waitUntil(ConditionHelpers.treeSelectionContains(tree, 1, "2"));
384 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID2_TIME1));
385
386 /* click "Follow CPU Forward" 2 times */
387 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click();
388 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME2));
389 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click();
390 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME3));
391 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID2_TIME3, TID2_TIME3)));
392 fBot.waitUntil(ConditionHelpers.treeSelectionContains(tree, 1, "2"));
393 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID2_TIME3));
394
395 /* shift-click "Follow CPU Backward" 3 times */
396 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
397 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME2));
398 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
399 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME1));
400 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
401 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID1_TIME1));
402 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID2_TIME3, TID1_TIME1)));
403 fBot.waitUntil(ConditionHelpers.treeSelectionContains(tree, 1, "1"));
404 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME1));
405
406 /* shift-click "Follow CPU Forward" 4 times */
407 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
408 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME1));
409 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
410 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME2));
411 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
412 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME3));
413 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
414 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME4));
415 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID2_TIME3, TID2_TIME4)));
416 fBot.waitUntil(ConditionHelpers.treeSelectionContains(tree, 1, "2"));
417 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID2_TIME4));
418
419 /* click "Follow CPU Backward" 5 times */
420 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click();
421 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME3));
422 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click();
423 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME2));
424 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click();
425 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME1, TID2_TIME1));
426 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click();
427 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME1, TID1_TIME1));
428 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click();
429 timeGraphIsReadyCondition(new TmfTimeRange(START_TIME, START_TIME));
430 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(START_TIME, START_TIME)));
431 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(START_TIME));
432 }
433
434 private void timeGraphIsReadyCondition(@NonNull TmfTimeRange selectionRange) {
435 IWorkbenchPart part = fViewBot.getViewReference().getPart(false);
436 fBot.waitUntil(ConditionHelpers.timeGraphIsReadyCondition((AbstractTimeGraphView) part, selectionRange, selectionRange.getEndTime()));
437 }
438 }
This page took 0.043347 seconds and 6 git commands to generate.