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 / 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("Align Views", "Optimize", SEPARATOR,
103 "Show View Filters", "Show Legend", SEPARATOR,
104 "Reset the Time Scale to Default", "Select Previous State Change", "Select Next State Change", SEPARATOR,
105 "Add Bookmark...", "Previous Marker", "Next Marker", SEPARATOR,
106 "Select Previous Process", "Select Next Process", "Zoom In", "Zoom Out", SEPARATOR,
107 "Hide Arrows", "Follow CPU Backward", "Follow CPU Forward",
108 "Go to previous event of the selected thread", "Go to next event of the selected thread" );
109 }
110
111 /**
112 * Before Test
113 */
114 @Override
115 @Before
116 public void before() {
117 super.before();
118 fViewBot = fBot.viewByTitle("Control Flow");
119 fViewBot.show();
120 fViewBot.setFocus();
121 }
122
123 /**
124 * Test keyboard navigation using ARROW_RIGHT and ARROW_LEFT
125 */
126 @Test
127 public void testKeyboardLeftRight() {
128 testNextPreviousEvent(() -> KEYBOARD.pressShortcut(Keystrokes.RIGHT),
129 () -> KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.RIGHT),
130 () -> KEYBOARD.pressShortcut(Keystrokes.LEFT),
131 () -> KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.LEFT));
132 }
133
134 /**
135 * Test tool bar buttons "Select Next State Change" and "Select Previous
136 * State Change"
137 */
138 @Test
139 public void testToolBarSelectNextPreviousStateChange() {
140 testNextPreviousEvent(() -> fViewBot.toolbarButton(SELECT_NEXT_STATE_CHANGE).click(),
141 () -> fViewBot.toolbarButton(SELECT_NEXT_STATE_CHANGE).click(SWT.SHIFT),
142 () -> fViewBot.toolbarButton(SELECT_PREVIOUS_STATE_CHANGE).click(),
143 () -> fViewBot.toolbarButton(SELECT_PREVIOUS_STATE_CHANGE).click(SWT.SHIFT));
144 }
145
146 private void testNextPreviousEvent(Runnable selectNext, Runnable shiftSelectNext, Runnable selectPrevious, Runnable shiftSelectPrevious) {
147 /* change window range to 10 ms */
148 TmfTimeRange range = new TmfTimeRange(START_TIME, START_TIME.normalize(10000000L, ITmfTimestamp.NANOSECOND_SCALE));
149 TmfSignalManager.dispatchSignal(new TmfWindowRangeUpdatedSignal(this, range));
150 fBot.waitUntil(ConditionHelpers.windowRange(range));
151
152 /* set selection to trace start time */
153 TmfSignalManager.dispatchSignal(new TmfSelectionRangeUpdatedSignal(this, START_TIME));
154 timeGraphIsReadyCondition(new TmfTimeRange(START_TIME, START_TIME));
155
156 /* select first item */
157 SWTBotUtils.pressShortcutGoToTreeTop(KEYBOARD);
158 fViewBot.toolbarButton(SELECT_NEXT_PROCESS).click();
159
160 /* set focus on time graph */
161 final TimeGraphControl timegraph = fViewBot.bot().widget(WidgetOfType.widgetOfType(TimeGraphControl.class));
162 UIThreadRunnable.syncExec(new VoidResult() {
163 @Override
164 public void run() {
165 timegraph.setFocus();
166 }
167 });
168
169 /* click "Select Next State Change" 3 times */
170 selectNext.run();
171 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME1, TID1_TIME1));
172 selectNext.run();
173 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME2, TID1_TIME2));
174 selectNext.run();
175 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME3));
176 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME3)));
177 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME3));
178
179 /* shift-click "Select Next State Change" 3 times */
180 shiftSelectNext.run();
181 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME4));
182 shiftSelectNext.run();
183 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME5));
184 shiftSelectNext.run();
185 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME6));
186 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME6)));
187 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME6));
188
189 /* shift-click "Select Previous State Change" 4 times */
190 shiftSelectPrevious.run();
191 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME5));
192 shiftSelectPrevious.run();
193 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME4));
194 shiftSelectPrevious.run();
195 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME3));
196 shiftSelectPrevious.run();
197 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME2));
198 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME2)));
199 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME2));
200
201 /* click "Select Next State Change" 2 times */
202 selectNext.run();
203 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME3));
204 selectNext.run();
205 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME4));
206 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME4)));
207 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME4));
208
209 /* shift-click "Select Previous State Change" 3 times */
210 shiftSelectPrevious.run();
211 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME3));
212 shiftSelectPrevious.run();
213 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME2));
214 shiftSelectPrevious.run();
215 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME1));
216 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME1)));
217 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME1));
218
219 /* shift-click "Select Next State Change" 4 times */
220 shiftSelectNext.run();
221 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME2));
222 shiftSelectNext.run();
223 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME3));
224 shiftSelectNext.run();
225 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME4));
226 shiftSelectNext.run();
227 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME5));
228 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME5)));
229 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME5));
230
231 /* click "Select Previous State Change" 5 times */
232 selectPrevious.run();
233 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME4, TID1_TIME4));
234 selectPrevious.run();
235 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME3, TID1_TIME3));
236 selectPrevious.run();
237 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME2, TID1_TIME2));
238 selectPrevious.run();
239 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME1, TID1_TIME1));
240 selectPrevious.run();
241 timeGraphIsReadyCondition(new TmfTimeRange(START_TIME, START_TIME));
242 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(START_TIME, START_TIME)));
243 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(START_TIME));
244 }
245
246 /**
247 * Test the filter
248 */
249 @Test
250 public void testFilter() {
251 /* change window range to 1 ms */
252 TmfTimeRange range = new TmfTimeRange(START_TIME, START_TIME.normalize(1000000L, ITmfTimestamp.NANOSECOND_SCALE));
253 TmfSignalManager.dispatchSignal(new TmfWindowRangeUpdatedSignal(this, range));
254 timeGraphIsReadyCondition(new TmfTimeRange(START_TIME, START_TIME));
255
256 SWTBotToolbarButton filterButton = fViewBot.toolbarButton("Show View Filters");
257 filterButton.click();
258 fBot.waitUntil(org.eclipse.swtbot.swt.finder.waits.Conditions.shellIsActive("Filter"));
259 SWTBot bot = fBot.activeShell().bot();
260 SWTBotTree treeBot = bot.tree();
261 TreeCheckedCounter treeCheckCounter = new TreeCheckedCounter(treeBot);
262 // get how many items there are
263 Integer checked = UIThreadRunnable.syncExec(treeCheckCounter);
264 assertEquals("default", 226, checked.intValue());
265 // test "uncheck all button"
266 bot.button(UNCHECK_ALL).click();
267 checked = UIThreadRunnable.syncExec(treeCheckCounter);
268 assertEquals(0, checked.intValue());
269 // test check active
270 bot.button(CHECK_ACTIVE).click();
271 checked = UIThreadRunnable.syncExec(treeCheckCounter);
272 assertEquals(CHECK_ACTIVE, 69, checked.intValue());
273 // test check all
274 bot.button(CHECK_ALL).click();
275 checked = UIThreadRunnable.syncExec(treeCheckCounter);
276 assertEquals(CHECK_ALL, 226, checked.intValue());
277 // test uncheck inactive
278 bot.button(UNCHECK_INACTIVE).click();
279 checked = UIThreadRunnable.syncExec(treeCheckCounter);
280 assertEquals(UNCHECK_INACTIVE, 69, checked.intValue());
281 // test check selected
282 treeBot.getTreeItem(LttngTraceGenerator.getName()).select("gnuplot");
283 bot.button(UNCHECK_ALL).click();
284 bot.button(CHECK_SELECTED).click();
285 checked = UIThreadRunnable.syncExec(treeCheckCounter);
286 assertEquals(CHECK_SELECTED, 2, checked.intValue());
287 // test check subtree
288 bot.button(UNCHECK_ALL).click();
289 bot.button(CHECK_SUBTREE).click();
290 checked = UIThreadRunnable.syncExec(treeCheckCounter);
291 assertEquals(CHECK_SUBTREE, 2, checked.intValue());
292 // test uncheck selected
293 bot.button(CHECK_ALL).click();
294 bot.button(UNCHECK_SELECTED).click();
295 checked = UIThreadRunnable.syncExec(treeCheckCounter);
296 assertEquals(UNCHECK_SELECTED, 225, checked.intValue());
297 // test uncheck subtree
298 bot.button(CHECK_ALL).click();
299 bot.button(UNCHECK_SUBTREE).click();
300 checked = UIThreadRunnable.syncExec(treeCheckCounter);
301 assertEquals(UNCHECK_SELECTED, 225, checked.intValue());
302 // test filter
303 bot.button(UNCHECK_ALL).click();
304 checked = UIThreadRunnable.syncExec(treeCheckCounter);
305 assertEquals(0, checked.intValue());
306 bot.text().setText("half-life 3");
307 SWTBotTreeItem treeItem = treeBot.getTreeItem(LttngTraceGenerator.getName());
308 treeItem.rowCount();
309 fBot.waitUntil(ConditionHelpers.treeItemCount(treeItem, 25));
310 bot.button(CHECK_ALL).click();
311 checked = UIThreadRunnable.syncExec(treeCheckCounter);
312 assertEquals("Filtered", 26, checked.intValue());
313 bot.button("OK").click();
314 treeBot = fViewBot.bot().tree();
315 treeItem = treeBot.getTreeItem(LttngTraceGenerator.getName());
316 for (int i = 0; i < 25; i++) {
317 assertEquals("Filtered Control flow view", "Half-life 3", treeItem.cell(i, 0));
318 }
319 }
320
321 /**
322 * Test tool bar buttons "Follow CPU Forward" and "Follow CPU Backward"
323 */
324 @Test
325 public void testToolBarFollowCPUForwardBackward() {
326 /* change window range to 10 ms */
327 TmfTimeRange range = new TmfTimeRange(START_TIME, START_TIME.normalize(10000000L, ITmfTimestamp.NANOSECOND_SCALE));
328 TmfSignalManager.dispatchSignal(new TmfWindowRangeUpdatedSignal(this, range));
329 fBot.waitUntil(ConditionHelpers.windowRange(range));
330
331 /* set selection to trace start time */
332 TmfSignalManager.dispatchSignal(new TmfSelectionRangeUpdatedSignal(this, START_TIME));
333 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(START_TIME, START_TIME)));
334
335 /* select first item */
336 final SWTBotTree tree = fViewBot.bot().tree();
337 SWTBotUtils.pressShortcutGoToTreeTop(KEYBOARD);
338 fViewBot.toolbarButton(SELECT_NEXT_PROCESS).click();
339
340 /* set focus on time graph */
341 final TimeGraphControl timegraph = fViewBot.bot().widget(WidgetOfType.widgetOfType(TimeGraphControl.class));
342 UIThreadRunnable.syncExec(new VoidResult() {
343 @Override
344 public void run() {
345 timegraph.setFocus();
346 }
347 });
348
349 /* click "Follow CPU Forward" 3 times */
350 timeGraphIsReadyCondition(new TmfTimeRange(START_TIME, START_TIME));
351 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click();
352 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME1, TID1_TIME1));
353 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click();
354 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME1, TID2_TIME1));
355 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click();
356 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME2));
357 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID2_TIME2, TID2_TIME2)));
358 fBot.waitUntil(ConditionHelpers.treeSelectionContains(tree, 1, "2"));
359 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID2_TIME2));
360
361 /* shift-click "Follow CPU Forward" 3 times */
362 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
363 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME3));
364 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
365 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME4));
366 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
367 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME4));
368 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID2_TIME2, TID5_TIME1)));
369 fBot.waitUntil(ConditionHelpers.treeSelectionContains(tree, 1, "5"));
370 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID5_TIME1));
371
372 /* shift-click "Follow CPU Backward" 4 times */
373 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
374 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME4));
375 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
376 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME3));
377 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
378 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME2));
379 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
380 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME1));
381 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID2_TIME2, TID2_TIME1)));
382 fBot.waitUntil(ConditionHelpers.treeSelectionContains(tree, 1, "2"));
383 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID2_TIME1));
384
385 /* click "Follow CPU Forward" 2 times */
386 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click();
387 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME2));
388 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click();
389 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME3));
390 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID2_TIME3, TID2_TIME3)));
391 fBot.waitUntil(ConditionHelpers.treeSelectionContains(tree, 1, "2"));
392 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID2_TIME3));
393
394 /* shift-click "Follow CPU Backward" 3 times */
395 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
396 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME2));
397 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
398 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME1));
399 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click(SWT.SHIFT);
400 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID1_TIME1));
401 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID2_TIME3, TID1_TIME1)));
402 fBot.waitUntil(ConditionHelpers.treeSelectionContains(tree, 1, "1"));
403 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME1));
404
405 /* shift-click "Follow CPU Forward" 4 times */
406 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
407 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME1));
408 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
409 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME2));
410 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
411 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME3));
412 fViewBot.toolbarButton(FOLLOW_CPU_FORWARD).click(SWT.SHIFT);
413 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME4));
414 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID2_TIME3, TID2_TIME4)));
415 fBot.waitUntil(ConditionHelpers.treeSelectionContains(tree, 1, "2"));
416 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID2_TIME4));
417
418 /* click "Follow CPU Backward" 5 times */
419 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click();
420 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME3, TID2_TIME3));
421 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click();
422 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME2, TID2_TIME2));
423 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click();
424 timeGraphIsReadyCondition(new TmfTimeRange(TID2_TIME1, TID2_TIME1));
425 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click();
426 timeGraphIsReadyCondition(new TmfTimeRange(TID1_TIME1, TID1_TIME1));
427 fViewBot.toolbarButton(FOLLOW_CPU_BACKWARD).click();
428 timeGraphIsReadyCondition(new TmfTimeRange(START_TIME, START_TIME));
429 fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(START_TIME, START_TIME)));
430 assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(START_TIME));
431 }
432
433 private void timeGraphIsReadyCondition(@NonNull TmfTimeRange selectionRange) {
434 IWorkbenchPart part = fViewBot.getViewReference().getPart(false);
435 fBot.waitUntil(ConditionHelpers.timeGraphIsReadyCondition((AbstractTimeGraphView) part, selectionRange, selectionRange.getEndTime()));
436 }
437 }
This page took 0.041864 seconds and 5 git commands to generate.