blob: aee0bcd87b35f0d6c28941d1c1b556dbfbcd9a26 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.tracecompass.integration.swtbot.tests.markers;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.List;
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEclipseEditor;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotRootMenu;
import org.eclipse.tracecompass.analysis.profiling.ui.views.flamechart.FlameChartView;
import org.eclipse.tracecompass.lttng2.ust.core.tests.shared.LttngUstTestTraceUtils;
import org.eclipse.tracecompass.lttng2.ust.core.trace.LttngUstTrace;
import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
import org.eclipse.tracecompass.tmf.core.signal.TmfWindowRangeUpdatedSignal;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace;
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.tests.shared.WaitUtils;
import org.eclipse.tracecompass.tmf.ui.views.timegraph.AbstractTimeGraphView;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Test for marker set in timegraph view. This test uses the Call Stack View.
*
* @author Jean-Christian Kouame
*/
@RunWith(SWTBotJunit4ClassRunner.class)
public class MarkerSetSwtBotTest {
/**
* Valid marker set content
*/
private static final String XML_CONTENT =
"<marker-sets>" +
" <marker-set name=\"Set A\" id=\"set.a\">" +
" <marker name=\"Marker A-1\" label=\"A-1 %d\" id=\"marker.a.1\" referenceid=\"ref.a.1\" color=\"blue\" period=\"10\" unit=\"ns\" range=\"0..4095\" offset=\"0\">" +
" </marker>" +
" </marker-set>" +
"<marker-set name=\"Set B\" id=\"set.b\">" +
" <marker name=\"Marker B-1\" label=\"B-1 %d\" id=\"marker.b.1\" referenceid=\"ref.b.1\" color=\"#010203\" period=\"1000\" unit=\"cycles\" range=\"1..\" offset=\"5\">" +
" </marker>" +
" </marker-set>" +
"</marker-sets>";
private static final String EDITOR_TITLE = "markers.xml";
/** The Log4j logger instance. */
private static final String TRACE_PROJECT_NAME = "test_project";
private static final String UST_ID = "org.eclipse.linuxtools.lttng2.ust.tracetype";
private static SWTWorkbenchBot fBot;
private static SWTBotView fViewBot;
private static String[] MENU_ITEMS_NO_MARKERS_SET = new String[] { "None", "Example", "", "Edit..." };
private static String[] MENU_ITEMS_2_MARKERS_SET = new String[] { "None", "Set A", "Set B","Example", "", "Edit..." };
private static long fStart;
private static TmfTimeRange fFullRange;
/**
* Set up the test context and environment
*/
@BeforeClass
public static void setUp() {
SWTBotUtils.initialize();
/* set up for swtbot */
SWTBotPreferences.TIMEOUT = 10000; /* 10 second timeout */
SWTBotPreferences.KEYBOARD_LAYOUT = "EN_US";
fBot = new SWTWorkbenchBot();
SWTBotUtils.createProject(TRACE_PROJECT_NAME);
WaitUtils.waitForJobs();
final CtfTestTrace cygProfile = CtfTestTrace.CYG_PROFILE;
LttngUstTrace trace = LttngUstTestTraceUtils.getTrace(cygProfile);
fStart = ((CtfTmfTrace) trace).getStartTime().toNanos();
fFullRange = new TmfTimeRange(TmfTimestamp.fromNanos(fStart), TmfTimestamp.fromNanos(fStart + 100l));
final File file = new File(trace.getPath());
LttngUstTestTraceUtils.dispose(cygProfile);
SWTBotUtils.openTrace(TRACE_PROJECT_NAME, file.getAbsolutePath(), UST_ID);
SWTBotUtils.openView(FlameChartView.ID);
fViewBot = fBot.viewByTitle("Flame Chart");
WaitUtils.waitForJobs();
}
/**
* Test the marker set menu items when there is no marker set
*/
@Test
public void testMenuNoMarkerSet() {
SWTBotRootMenu viewMenu = fViewBot.viewMenu();
List<String> menuItems = viewMenu.menu("Marker Set").menuItems();
assertArrayEquals("menu items, no marker set", MENU_ITEMS_NO_MARKERS_SET, menuItems.toArray());
}
/**
* Test the marker set menu Edit... item
*/
@Test
public void testEditMarkerSet() {
insertContent();
SWTBotRootMenu viewMenu = fViewBot.viewMenu();
List<String> menuItems = viewMenu.menu("Marker Set").menuItems();
assertArrayEquals("menu items, two marker sets", MENU_ITEMS_2_MARKERS_SET, menuItems.toArray());
assertTrue("None is checked", viewMenu.menu("Marker Set").menu(MENU_ITEMS_2_MARKERS_SET[0]).isChecked());
// Select Set A
viewMenu.menu("Marker Set", MENU_ITEMS_2_MARKERS_SET[1]).click();
assertTrue("Set A is checked", viewMenu.menu("Marker Set").menu(MENU_ITEMS_2_MARKERS_SET[1]).isChecked());
// Select Set B
viewMenu.menu("Marker Set", MENU_ITEMS_2_MARKERS_SET[2]).click();
assertTrue("set B is checked", viewMenu.menu("Marker Set").menu(MENU_ITEMS_2_MARKERS_SET[2]).isChecked());
// Select None
viewMenu.menu("Marker Set", MENU_ITEMS_2_MARKERS_SET[0]).click();
assertTrue("None is checked", viewMenu.menu("Marker Set").menu(MENU_ITEMS_2_MARKERS_SET[0]).isChecked());
// Remove all markers set
removeContent();
menuItems = viewMenu.menu("Marker Set").menuItems();
assertArrayEquals("menu items, no marker set", MENU_ITEMS_NO_MARKERS_SET, menuItems.toArray());
}
/**
* Test navigation between markers
*/
@Test
public void testNavigateBetweenMarkers() {
AbstractTimeGraphView part = (AbstractTimeGraphView) fViewBot.getViewReference().getPart(false);
TmfSignalManager.dispatchSignal(new TmfWindowRangeUpdatedSignal(this, fFullRange));
fBot.waitUntil(ConditionHelpers.windowRange(fFullRange));
insertContent();
fViewBot.setFocus();
SWTBotRootMenu viewMenu = fViewBot.viewMenu();
viewMenu.menu("Marker Set", "Set A").click();
fBot.waitUntil(ConditionHelpers.timeGraphIsReadyCondition(part, new TmfTimeRange(TmfTimestamp.fromNanos(fStart), TmfTimestamp.fromNanos(fStart)), TmfTimestamp.fromNanos(fStart)));
fViewBot.toolbarButton("Next Marker").click();
//Marker A-1: period = 10, unit = ns, offset = 0
long period = 10l;
long nextStart = fStart + (period - (fStart % period));
fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TmfTimestamp.fromNanos(nextStart), TmfTimestamp.fromNanos(nextStart + period))));
viewMenu.menu("Show Markers", "Marker A-1").hide();
fViewBot.toolbarButton("Previous Marker").click();
fBot.waitUntil(ConditionHelpers.timeGraphIsReadyCondition(part, new TmfTimeRange(TmfTimestamp.fromNanos(fStart), TmfTimestamp.fromNanos(nextStart)), TmfTimestamp.fromNanos(fStart)));
removeContent();
}
private static void insertContent() {
SWTBotRootMenu viewMenu = fViewBot.viewMenu();
viewMenu.menu("Marker Set").menu("Edit...").click();
fBot.waitUntil(ConditionHelpers.isEditorOpened(fBot, EDITOR_TITLE));
SWTBotEclipseEditor editor = fBot.editorByTitle(EDITOR_TITLE).toTextEditor();
editor.setText(XML_CONTENT);
editor.saveAndClose();
WaitUtils.waitForJobs();
}
private static void removeContent() {
SWTBotRootMenu viewMenu = fViewBot.viewMenu();
viewMenu.menu("Marker Set").menu("Edit...").click();
fBot.waitUntil(ConditionHelpers.isEditorOpened(fBot, EDITOR_TITLE));
SWTBotEclipseEditor editor = fBot.editorByTitle(EDITOR_TITLE).toTextEditor();
editor.setText("<marker-sets></marker-sets>");
editor.saveAndClose();
WaitUtils.waitForJobs();
}
/**
* After class method
*/
@AfterClass
public static void tearDown() {
fBot.closeAllEditors();
SWTBotUtils.deleteProject(TRACE_PROJECT_NAME, fBot);
}
}