blob: ce4a0d180bbcc19ec00b93427850244d55cab49d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017, 2019 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
*
* Contributors:
* Patrick Tasse - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.integration.swtbot.tests.perspectives;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
import org.eclipse.swtbot.swt.finder.SWTBot;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
import org.eclipse.tracecompass.ctf.core.tests.shared.LttngTraceGenerator;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitUtils;
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;
/**
* SWTBot test for the perspective manager.
*/
@RunWith(SWTBotJunit4ClassRunner.class)
public class TmfPerspectiveManagerTest {
private static final String TRACE_PROJECT_NAME = "test";
private static final String KERNEL_TRACE_TYPE = "org.eclipse.linuxtools.lttng2.kernel.tracetype";
private static final String UST_TRACE_TYPE = "org.eclipse.linuxtools.lttng2.ust.tracetype";
private static File fTmpFolder = null;
private static String fKernelPath = null;
private static String fUstPath = null;
private static SWTWorkbenchBot fBot;
/** The Log4j logger instance. */
private static final Logger fLogger = Logger.getRootLogger();
/**
* Test Class setup
*
* @throws IOException if an exception occurs
*/
@BeforeClass
public static void beforeClass() throws IOException {
SWTBotUtils.initialize();
fTmpFolder = File.createTempFile("testTraces", "");
if (!fTmpFolder.isDirectory()) {
fTmpFolder.delete();
fTmpFolder.mkdir();
}
LttngTraceGenerator kernelGenerator = new LttngTraceGenerator(1000, 1000, 1);
LttngTraceGenerator ustGenerator = new LttngTraceGenerator(1000, 1000, 1, false);
fKernelPath = fTmpFolder.getAbsolutePath() + File.separator + "kernel";
fUstPath = fTmpFolder.getAbsolutePath() + File.separator + "ust";
kernelGenerator.writeTrace(new File(fKernelPath));
ustGenerator.writeTrace(new File(fUstPath));
/* Set up for swtbot */
SWTBotPreferences.TIMEOUT = 20000; /* 20 second timeout */
fLogger.removeAllAppenders();
fLogger.addAppender(new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT));
fBot = new SWTWorkbenchBot();
/* Close welcome view */
SWTBotUtils.closeView("Welcome", fBot);
/* Finish waiting for eclipse to load */
WaitUtils.waitForJobs();
SWTBotUtils.createProject(TRACE_PROJECT_NAME);
}
/**
* Test class tear down method.
*/
@AfterClass
public static void afterClass() {
SWTBotUtils.deleteProject(TRACE_PROJECT_NAME, fBot);
fLogger.removeAllAppenders();
}
/**
* Before Test
*/
@Before
public void before() {
/* Reset to default (Resource) perspective */
SWTBotUtils.switchToPerspective("org.eclipse.ui.resourcePerspective");
}
/**
* After Test
*/
@After
public void after() {
fBot.closeAllEditors();
SWTBotUtils.closeSecondaryShells(fBot);
}
/**
* Test the Switch to Perspective prompt, selecting Yes
*/
@Test
public void testPromptYes() {
setSwitchToPerspectivePreference("Prompt");
SWTBotUtils.openTrace(TRACE_PROJECT_NAME, fKernelPath, KERNEL_TRACE_TYPE);
confirmPerspectiveSwitch(true, false);
assertActivePerspective("LTTng Kernel");
assertSwitchToPerspectivePreference("Prompt");
}
/**
* Test the Switch to Perspective prompt, selecting No
*/
@Test
public void testPromptNo() {
setSwitchToPerspectivePreference("Prompt");
SWTBotUtils.openTrace(TRACE_PROJECT_NAME, fKernelPath, KERNEL_TRACE_TYPE);
confirmPerspectiveSwitch(false, false);
assertActivePerspective("Resource");
assertSwitchToPerspectivePreference("Prompt");
}
/**
* Test the Switch to Perspective prompt, selecting Yes and remember
*/
@Test
public void testPromptYesRemember() {
setSwitchToPerspectivePreference("Prompt");
SWTBotUtils.openTrace(TRACE_PROJECT_NAME, fKernelPath, KERNEL_TRACE_TYPE);
confirmPerspectiveSwitch(true, true);
assertActivePerspective("LTTng Kernel");
assertSwitchToPerspectivePreference("Always");
}
/**
* Test the Switch to Perspective prompt, selecting No and remember
*/
@Test
public void testPromptNoRemember() {
setSwitchToPerspectivePreference("Prompt");
SWTBotUtils.openTrace(TRACE_PROJECT_NAME, fKernelPath, KERNEL_TRACE_TYPE);
confirmPerspectiveSwitch(false, true);
assertActivePerspective("Resource");
assertSwitchToPerspectivePreference("Never");
}
/**
* Test the Switch to Perspective "Always" preference
*/
@Test
public void testAlways() {
setSwitchToPerspectivePreference("Always");
SWTBotUtils.openTrace(TRACE_PROJECT_NAME, fKernelPath, KERNEL_TRACE_TYPE);
assertActivePerspective("LTTng Kernel");
}
/**
* Test the Switch to Perspective "Never" preference
*/
@Test
public void testNever() {
setSwitchToPerspectivePreference("Never");
SWTBotUtils.openTrace(TRACE_PROJECT_NAME, fKernelPath, KERNEL_TRACE_TYPE);
assertActivePerspective("Resource");
}
/**
* Test trace with no associated perspective
*/
@Test
public void testNoAssociatedPerspective() {
setSwitchToPerspectivePreference("Always");
SWTBotUtils.openTrace(TRACE_PROJECT_NAME, fUstPath, UST_TRACE_TYPE);
assertActivePerspective("Resource");
}
/**
* Test experiment with associated perspective
*/
@Test
public void testExperiment() {
setSwitchToPerspectivePreference("Always");
SWTBotUtils.openTrace(TRACE_PROJECT_NAME, fKernelPath, KERNEL_TRACE_TYPE);
assertActivePerspective("LTTng Kernel");
SWTBotTreeItem tracesFolder = SWTBotUtils.selectTracesFolder(fBot, TRACE_PROJECT_NAME);
SWTBotTreeItem kernelTrace = SWTBotUtils.getTraceProjectItem(fBot, tracesFolder, "kernel");
kernelTrace.contextMenu().menu("Open As Experiment...", "Test trace", "Test experiment").click();
assertActivePerspective("Testing");
}
private static void setSwitchToPerspectivePreference(String value) {
SWTBotUtils.openPreferences(fBot);
SWTBot shellBot = fBot.shell("Preferences").bot();
shellBot.tree().expandNode("Tracing", "Perspectives").select();
shellBot.radioInGroup(value, "Open the associated perspective when a trace is opened").click();
SWTBotUtils.pressOKishButtonInPreferences(fBot);
}
private static void assertSwitchToPerspectivePreference(String value) {
SWTBotUtils.openPreferences(fBot);
SWTBot shellBot = fBot.shell("Preferences").bot();
shellBot.tree().expandNode("Tracing", "Perspectives").select();
assertTrue(shellBot.radioInGroup(value, "Open the associated perspective when a trace is opened").isSelected());
shellBot.button("Cancel").click();
}
private static void confirmPerspectiveSwitch(boolean confirm, boolean remember) {
SWTBot shellBot = fBot.shell("Confirm Perspective Switch").bot();
if (remember) {
shellBot.checkBox("Remember my decision").click();
}
if (confirm) {
shellBot.button("Yes").click();
} else {
shellBot.button("No").click();
}
}
private static void assertActivePerspective(String perspective) {
SWTBotUtils.waitUntil(bot -> bot.activePerspective().getLabel().equals(perspective), fBot,
() -> String.format("expected: %s, but was: %s", perspective, fBot.activePerspective().getLabel()));
}
}