tmf.ui: test TmfRawEventViewer using SwtBot
authorMatthew Khouzam <matthew.khouzam@ericsson.com>
Tue, 17 May 2016 02:33:50 +0000 (22:33 -0400)
committerMatthew Khouzam <matthew.khouzam@ericsson.com>
Thu, 2 Jun 2016 22:40:36 +0000 (18:40 -0400)
This tests keystrokes too to make sure that there are
no surprise exceptions.

Change-Id: Ia2a325a0a520bde3db56a04ddf1779a095342ecb
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/72865
Reviewed-by: Hudson CI
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
Tested-by: Patrick Tasse <patrick.tasse@gmail.com>
tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/RawTextEditorTest.java [new file with mode: 0644]

diff --git a/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/RawTextEditorTest.java b/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/RawTextEditorTest.java
new file mode 100644 (file)
index 0000000..6e0ad57
--- /dev/null
@@ -0,0 +1,228 @@
+/*******************************************************************************
+ * Copyright (c) 2016 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.viewers.events;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.varia.NullAppender;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
+import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEditor;
+import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
+import org.eclipse.swtbot.swt.finder.keyboard.Keystrokes;
+import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
+import org.eclipse.swtbot.swt.finder.waits.DefaultCondition;
+import org.eclipse.swtbot.swt.finder.waits.ICondition;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotStyledText;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test reading a trace in raw and eventy modes.
+ */
+@RunWith(SWTBotJunit4ClassRunner.class)
+public class RawTextEditorTest {
+
+    private static final RGB WHITE = new RGB(255, 255, 255);
+    private static final RGB HIGHLIGHT_COLOR = new RGB(231, 246, 254);
+    private static final String PROJECT_NAME = "Test";
+    private static final String TRACE_TYPE_SYSLOG = "org.eclipse.linuxtools.tmf.tests.stubs.trace.text.testsyslog";
+    private static final String TIMESTAMP_FORMAT = "MMM dd HH:mm:ss";
+
+    private static final long INITIAL_NB_EVENTS = 100;
+    private static final long SECOND_TO_MILLISECOND = 1000;
+
+    private static final String TRACE_LOCATION = TmfTraceManager.getTemporaryDirPath() + File.separator + "test.txt";
+    private static SWTWorkbenchBot fBot;
+
+    private long fNbWrittenEvents = 0;
+
+    /** Test Class setup */
+    @BeforeClass
+    public static void init() {
+        SWTBotPreferences.KEYBOARD_LAYOUT = "EN_US";
+        SWTBotUtils.initialize();
+        SWTBotPreferences.TIMEOUT = 20000; /* 20 second timeout */
+        Logger.getRootLogger().addAppender(new NullAppender());
+        fBot = new SWTWorkbenchBot();
+
+        SWTBotUtils.closeView("welcome", fBot);
+
+        SWTBotUtils.switchToTracingPerspective();
+        /* finish waiting for eclipse to load */
+        SWTBotUtils.waitForJobs();
+    }
+
+    /**
+     * Test setup
+     *
+     * @throws Exception
+     *             on error
+     */
+    @Before
+    public void before() throws Exception {
+        SWTBotUtils.createProject(PROJECT_NAME);
+        SWTBotUtils.openTrace(PROJECT_NAME, createTrace(INITIAL_NB_EVENTS), getTraceType());
+        SWTBotUtils.waitForJobs();
+    }
+
+    /**
+     * Test tear down
+     */
+    @After
+    public void after() {
+        SWTBotUtils.deleteProject(PROJECT_NAME, fBot);
+    }
+
+    /**
+     * Test going to raw and back
+     */
+    @Test
+    public void testRead() {
+        ITmfTrace activeTrace = TmfTraceManager.getInstance().getActiveTrace();
+
+        fBot.waitUntil(new NumberOfEventsCondition(activeTrace, INITIAL_NB_EVENTS));
+
+        SWTBotEditor eventsEditor = SWTBotUtils.activeEventsEditor(fBot);
+        eventsEditor.setFocus();
+        assertFalse(eventsEditor.bot().table().rowCount() == 0);
+        eventsEditor.bot().table().select(4);
+        eventsEditor.bot().table().getTableItem(4).contextMenu("Show Raw").click();
+        eventsEditor.bot().table().getTableItem(4).click();
+        final SWTBotStyledText rawViewer = eventsEditor.bot().styledText();
+
+        String selection = rawViewer.getText();
+        assertEquals(":03 HostF LoggerF: SourceFileF:9 Message F", selection.substring(12, 54));
+        rawViewer.pressShortcut(Keystrokes.DOWN);
+        final ICondition colorIsNotHighlight = new DefaultCondition() {
+            @Override
+            public boolean test() throws Exception {
+                return !HIGHLIGHT_COLOR.equals(rawViewer.getLineBackground(0));
+            }
+
+            @Override
+            public String getFailureMessage() {
+                return "Timed out";
+            }
+        };
+        final ICondition colorIsHighlight = new DefaultCondition() {
+            @Override
+            public boolean test() {
+                return HIGHLIGHT_COLOR.equals(rawViewer.getLineBackground(0));
+            }
+
+            @Override
+            public String getFailureMessage() {
+                return "Timed out";
+            }
+        };
+        fBot.waitUntil(colorIsNotHighlight);
+        assertEquals("Non-highlighted color", WHITE, rawViewer.getLineBackground(0));
+        assertEquals("Highlighted color", HIGHLIGHT_COLOR, rawViewer.getLineBackground(1));
+        rawViewer.pressShortcut(Keystrokes.UP);
+        fBot.waitUntil(colorIsHighlight);
+        assertEquals("Highlighted color", HIGHLIGHT_COLOR, rawViewer.getLineBackground(0));
+        rawViewer.pressShortcut(Keystrokes.DOWN);
+        fBot.waitUntil(colorIsNotHighlight);
+        assertEquals("Non-highlighted color", WHITE, rawViewer.getLineBackground(0));
+        assertEquals("Highlighted color", HIGHLIGHT_COLOR, rawViewer.getLineBackground(1));
+        rawViewer.pressShortcut(Keystrokes.PAGE_UP);
+        fBot.waitUntil(colorIsHighlight);
+        assertEquals("Highlighted color", HIGHLIGHT_COLOR, rawViewer.getLineBackground(0));
+        rawViewer.pressShortcut(SWT.CTRL, SWT.END, ' ');
+        assertEquals("Highlighted color", HIGHLIGHT_COLOR, rawViewer.getLineBackground(0));
+        rawViewer.pressShortcut(Keystrokes.UP);
+        rawViewer.pressShortcut(Keystrokes.PAGE_DOWN);
+        fBot.waitUntil(colorIsNotHighlight);
+        assertEquals("Non-highlighted color", WHITE, rawViewer.getLineBackground(0));
+        assertEquals("Highlighted color", HIGHLIGHT_COLOR, rawViewer.getLineBackground(1));
+        rawViewer.pressShortcut(SWT.CTRL, SWT.HOME, ' ');
+        fBot.waitUntil(colorIsHighlight);
+        assertEquals("Highlighted color", HIGHLIGHT_COLOR, rawViewer.getLineBackground(0));
+        eventsEditor.bot().table().getTableItem(5).click();
+        eventsEditor.bot().table().getTableItem(4).contextMenu("Hide Raw").click();
+        assertFalse(rawViewer.isActive());
+    }
+
+    private static class NumberOfEventsCondition extends DefaultCondition {
+
+        private ITmfTrace fTrace;
+        private long fNbEvents;
+
+        private NumberOfEventsCondition(ITmfTrace trace, long nbEvents) {
+            fTrace = trace;
+            fNbEvents = nbEvents;
+        }
+
+        @Override
+        public boolean test() throws Exception {
+            return fTrace.getNbEvents() == fNbEvents;
+        }
+
+        @Override
+        public String getFailureMessage() {
+            return fTrace.getName() + " did not contain the expected number of " + fNbEvents + " events. Current: " + fTrace.getNbEvents();
+        }
+    }
+
+    /**
+     * Create a trace with a number of events.
+     *
+     * @param nbEvents
+     *            the number of events to generate
+     * @return the path to the created trace
+     * @throws Exception
+     *             on error
+     */
+    protected String createTrace(long nbEvents) throws Exception {
+        writeToTrace(nbEvents, false);
+        return TRACE_LOCATION;
+    }
+
+    private void writeToTrace(long nbEvents, boolean append) throws IOException {
+        final File file = new File(TRACE_LOCATION);
+        try (FileWriter writer = new FileWriter(file, append)) {
+            for (int i = 0; i < nbEvents; ++i) {
+                writeEvent(writer);
+            }
+        }
+    }
+
+    private void writeEvent(FileWriter fw) throws IOException {
+        SimpleDateFormat f = new SimpleDateFormat(TIMESTAMP_FORMAT);
+        String timeStampStr = f.format(new Date(fNbWrittenEvents * SECOND_TO_MILLISECOND));
+        fw.write(timeStampStr + " HostF LoggerF: SourceFileF:9 Message F\n");
+        fNbWrittenEvents++;
+    }
+
+    /**
+     * Get the trace type for the test.
+     *
+     * @return the trace type
+     */
+    protected String getTraceType() {
+        return TRACE_TYPE_SYSLOG;
+    }
+}
This page took 0.028093 seconds and 5 git commands to generate.