tmf.ui.swtbot: test the bookmarks view
Change-Id: I19f4dec4edc1960b3b0b6337e4f73a8346337783
Signed-off-by: Loïc Prieur-Drevon <loic.prieurdrevon@gmail.com>
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/97385
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
Tested-by: Trace Compass Bot <tracecompass-bot@eclipse.org>
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/views/BookmarksViewTest.java b/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/views/BookmarksViewTest.java
new file mode 100644
index 0000000..622e84a
--- /dev/null
+++ b/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/views/BookmarksViewTest.java
@@ -0,0 +1,262 @@
+/**********************************************************************
+ * Copyright (c) 2017, 2020 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ **********************************************************************/
+
+package org.eclipse.tracecompass.tmf.ui.swtbot.tests.views;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import java.io.IOException;
+import java.util.function.Predicate;
+
+import org.apache.log4j.ConsoleAppender;
+import org.apache.log4j.Logger;
+import org.apache.log4j.SimpleLayout;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
+import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEditor;
+import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
+import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
+import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
+import org.eclipse.swtbot.swt.finder.results.Result;
+import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
+import org.eclipse.swtbot.swt.finder.utils.TableCollection;
+import org.eclipse.swtbot.swt.finder.utils.TableRow;
+import org.eclipse.swtbot.swt.finder.waits.Conditions;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTable;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTableItem;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSelectionRangeUpdatedSignal;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
+import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
+import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
+import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
+import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitUtils;
+import org.eclipse.ui.internal.views.markers.BookmarksView;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import com.google.common.base.Objects;
+
+/**
+ * SWT bot test to test the {@link BookmarksView} in Trace Compass
+ *
+ * @author Loic Prieur-Drevon
+ */
+@RunWith(SWTBotJunit4ClassRunner.class)
+public class BookmarksViewTest {
+
+ /** The Log4j logger instance. */
+ private static final Logger fLogger = Logger.getRootLogger();
+
+ private static final String PROJECT_NAME = "TestBookmarks";
+ private static final String TRACE_TYPE = "org.eclipse.linuxtools.tmf.core.tests.secondtt";
+ private static final String BOOKMARK_NAME = "banana";
+
+ private static final @NonNull String EXPERIMENT_NAME = "experiment";
+ private static final Predicate<SWTBotTable> TABLE_NOT_EMPTY = tb -> tb.rowCount() > 2;
+
+ private static SWTWorkbenchBot fBot;
+
+ /**
+ * Initialization
+ */
+ @BeforeClass
+ public static void init() {
+ SWTBotUtils.initialize();
+ Thread.currentThread().setName("SWTBot Thread"); // for the debugger
+ /* set up for swtbot */
+ SWTBotPreferences.TIMEOUT = 20000; /* 20 second timeout */
+ fLogger.removeAllAppenders();
+ fLogger.addAppender(new ConsoleAppender(new SimpleLayout()));
+ fBot = new SWTWorkbenchBot();
+
+ SWTBotUtils.switchToTracingPerspective();
+ /* finish waiting for eclipse to load */
+ WaitUtils.waitForJobs();
+ }
+
+ /**
+ * Open a trace and focus on the Bookmarks view
+ */
+ @Before
+ public void beforeTest() {
+ SWTBotUtils.createProject(PROJECT_NAME);
+ SWTBotTreeItem treeItem = SWTBotUtils.selectTracesFolder(fBot, PROJECT_NAME);
+ assertNotNull(treeItem);
+ }
+
+ /**
+ * Test bookmarks on a trace.
+ *
+ * @throws IOException
+ * if an error occurs during the file URL -> path conversion
+ */
+ @Test
+ public void testTrace() throws IOException {
+ SWTBotUtils.openTrace(PROJECT_NAME, FileLocator.toFileURL(TmfTraceStub.class.getResource("/testfiles/A-Test-10K")).getPath(), TRACE_TYPE);
+
+ bookmarkTest("A-Test-10K");
+ }
+
+ /**
+ * Test bookmarking an experiment
+ *
+ * @throws IOException
+ * if an error occurs during the file URL -> path conversion
+ */
+ @Test
+ public void testExperiment() throws IOException {
+ /**
+ * Create Experiment with 2 LTTng CTF Kernel traces in it and open
+ * experiment. Verify that an Events editor is opened showing LTTng
+ * Kernel specific columns.
+ */
+ SWTBotUtils.openTrace(PROJECT_NAME, FileLocator.toFileURL(TmfTraceStub.class.getResource("/testfiles/A-Test-10K")).getPath(), TRACE_TYPE);
+ SWTBotUtils.openTrace(PROJECT_NAME, FileLocator.toFileURL(TmfTraceStub.class.getResource("/testfiles/A-Test-10K-2")).getPath(), TRACE_TYPE);
+ WaitUtils.waitForJobs();
+ SWTBotUtils.createExperiment(fBot, PROJECT_NAME, EXPERIMENT_NAME);
+ SWTBotTreeItem project = SWTBotUtils.selectProject(fBot, PROJECT_NAME);
+ SWTBotTreeItem experiment = SWTBotUtils.getTraceProjectItem(fBot, project, "Experiments", EXPERIMENT_NAME);
+ experiment.contextMenu("Select Traces...").click();
+ SWTBotShell selectTracesShell = fBot.shell("Select Traces");
+ selectTracesShell.bot().button("Select All").click();
+ selectTracesShell.bot().button("Finish").click();
+ experiment.select();
+ experiment.doubleClick();
+ SWTBotEditor editor = SWTBotUtils.activeEventsEditor(fBot, EXPERIMENT_NAME);
+ assertEquals("Event editor is displaying the wrong trace/experiment", EXPERIMENT_NAME, editor.getTitle());
+
+ bookmarkTest(EXPERIMENT_NAME);
+ }
+
+ private static void bookmarkTest(String editorName) throws IOException {
+ SWTBotView fViewBot = fBot.viewByPartName("Bookmarks");
+ fViewBot.setFocus();
+ WaitUtils.waitForJobs();
+ assertEquals("Failed to show the Bookmarks View", "Bookmarks", fViewBot.getTitle());
+ /**
+ * Add a bookmark: a) Double click to select an event in the event
+ * editor b) Go to the Edit > Add Bookmark... menu c) Enter the bookmark
+ * description in dialog box
+ */
+ SWTBotEditor editorBot = SWTBotUtils.activateEditor(fBot, editorName);
+ SWTBotTable tableBot = editorBot.bot().table();
+ SWTBotTableItem tableItem = tableBot.getTableItem(7);
+ String expectedTimeStamp = tableItem.getText(1);
+ assertNull("The image should not be bookmarked yet", getBookmarkImage(tableItem));
+
+ tableItem.select();
+ tableItem.doubleClick();
+ fBot.menu("Edit").menu("Add Bookmark...").click();
+ WaitUtils.waitForJobs();
+ SWTBotShell addBookmarkShell = fBot.shell("Add Bookmark");
+ addBookmarkShell.bot().text().setText(BOOKMARK_NAME);
+ addBookmarkShell.bot().button("OK").click();
+ assertNotNull("Failed to add bookmark in event editor", getBookmarkImage(tableItem));
+
+ fViewBot.setFocus();
+ WaitUtils.waitForJobs();
+ SWTBotTree bookmarkTree = fViewBot.bot().tree();
+ WaitUtils.waitForJobs();
+ /**
+ * throws WidgetNotFoundException - if the node was not found, nothing
+ * to assert
+ */
+ SWTBotTreeItem bookmark = bookmarkTree.getTreeItem(BOOKMARK_NAME);
+ assertEquals(BOOKMARK_NAME, bookmark.cell(0));
+
+ /**
+ * Scroll within event table so that bookmark is not visible anymore and
+ * then double-click on bookmark in Bookmarks View
+ */
+ UIThreadRunnable.syncExec(() -> TmfSignalManager.dispatchSignal(new TmfSelectionRangeUpdatedSignal(null, TmfTimestamp.fromMicros(22))));
+ bookmark.doubleClick();
+ WaitUtils.waitUntil(TABLE_NOT_EMPTY, tableBot, "Table is still empty");
+ TableCollection selection = tableBot.selection();
+ TableRow row = selection.get(0);
+ assertNotNull(selection.toString(), row);
+ assertEquals("Wrong event was selected " + selection, expectedTimeStamp, row.get(1));
+
+ /**
+ * Open another trace #2 and then double-click on bookmark in Bookmarks
+ * view
+ */
+ SWTBotUtils.openTrace(PROJECT_NAME, FileLocator.toFileURL(TmfTraceStub.class.getResource("/testfiles/E-Test-10K")).getPath(), TRACE_TYPE);
+ WaitUtils.waitForJobs();
+ bookmark.doubleClick();
+ assertEquals("Editor was open on wrong trace", editorName, fBot.activeEditor().getTitle());
+ WaitUtils.waitUntil(TABLE_NOT_EMPTY, tableBot, "Table is still empty");
+ selection = tableBot.selection();
+ row = selection.get(0);
+ assertNotNull(selection.toString(), row);
+ assertEquals("Wrong event was selected " + selection, expectedTimeStamp, row.get(1));
+
+ /**
+ * Close the trace #1 and then double-click on bookmark in Bookmarks
+ * view
+ */
+ editorBot.close();
+ WaitUtils.waitUntil(eb -> !eb.isActive(), editorBot, "Waiting for the editor to close");
+ bookmark.doubleClick();
+ editorBot = fBot.activeEditor();
+ WaitUtils.waitUntil(SWTBotEditor::isActive, editorBot, "Waiting for the editor to open");
+ assertEquals("Editor was open on wrong trace", editorName, editorBot.getTitle());
+ tableBot = editorBot.bot().table();
+ WaitUtils.waitUntil(tb -> tb.selection().rowCount() > 0, tableBot, "Selection is still empty");
+ WaitUtils.waitUntil(tb -> !Objects.equal(tb.selection().get(0).get(1), "<srch>"), tableBot, "Header is still selected");
+ selection = tableBot.selection();
+ row = selection.get(0);
+ assertNotNull(selection.toString(), row);
+ assertEquals("Wrong event was selected " + selection, expectedTimeStamp, row.get(1));
+
+ /**
+ * Select bookmarks icon in bookmark view right-click on icon and select
+ * "Remove Bookmark"
+ */
+ bookmark.select();
+ bookmark.contextMenu("Delete").click();
+ SWTBotShell deleteBookmarkShell = fBot.shell("Delete Selected Entries");
+ deleteBookmarkShell.bot().button("Delete").click();
+ fBot.waitUntil(Conditions.treeHasRows(bookmarkTree, 0));
+ tableItem = editorBot.bot().table().getTableItem(7);
+ assertNull("Bookmark not deleted from event table", getBookmarkImage(tableItem));
+ }
+
+ private static Image getBookmarkImage(SWTBotTableItem tableItem) {
+ return UIThreadRunnable.syncExec((Result<Image>) () -> tableItem.widget.getImage(0));
+ }
+
+ /**
+ * Close the editor
+ */
+ @After
+ public void tearDown() {
+ fBot.closeAllEditors();
+ SWTBotUtils.deleteProject(PROJECT_NAME, fBot);
+ }
+
+ /**
+ * Delete the file
+ */
+ @AfterClass
+ public static void cleanUp() {
+ fLogger.removeAllAppenders();
+ }
+
+}