From 45eb46d17b000d141e746c3cd7ac7772eafdf7fa Mon Sep 17 00:00:00 2001 From: Matthew Khouzam Date: Mon, 16 May 2016 22:33:50 -0400 Subject: [PATCH] tmf.ui: test TmfRawEventViewer using SwtBot This tests keystrokes too to make sure that there are no surprise exceptions. Change-Id: Ia2a325a0a520bde3db56a04ddf1779a095342ecb Signed-off-by: Matthew Khouzam Reviewed-on: https://git.eclipse.org/r/72865 Reviewed-by: Hudson CI Reviewed-by: Patrick Tasse Tested-by: Patrick Tasse --- .../viewers/events/RawTextEditorTest.java | 228 ++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/RawTextEditorTest.java 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 index 0000000000..6e0ad5754a --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/RawTextEditorTest.java @@ -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; + } +} -- 2.34.1