blob: 986bec615fb9d886e359b74891021062e9e40459 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017, 2018 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.lttng2.kernel.ui.swtbot.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
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.tracecompass.testtraces.ctf.CtfTestTrace;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotTimeGraph;
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;
/**
* Test the collapse state of the time graph view
*
* @author Jean-Christian Kouame
*
*/
@RunWith(SWTBotJunit4ClassRunner.class)
public abstract class TimegraphViewExpandStateTestBase {
private static final String FLIPPING_ENDIANNESS = "flipping-endianness";
private static final String BUG446190 = "bug446190";
/** LTTng kernel trace type */
protected static final String KERNEL_TRACE_TYPE = "org.eclipse.linuxtools.lttng2.kernel.tracetype";
/** LTTng kernel perspective */
protected static final String KERNEL_PERSPECTIVE_ID = "org.eclipse.linuxtools.lttng2.kernel.ui.perspective";
/** Default project name */
protected static final String TRACE_PROJECT_NAME = "test";
/** The workbench bot */
protected static SWTWorkbenchBot fBot;
/** The Log4j logger instance. */
private static final Logger fLogger = Logger.getRootLogger();
/**
* Before Class
*
* @throws IOException
* If the traces can not be found
*/
@BeforeClass
public static void beforeClass() throws IOException {
SWTBotUtils.initialize();
/* set up for swtbot */
SWTBotPreferences.TIMEOUT = 20000; /* 20 second timeout */
SWTBotPreferences.KEYBOARD_LAYOUT = "EN_US";
fLogger.removeAllAppenders();
fLogger.addAppender(new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT));
fBot = new SWTWorkbenchBot();
SWTBotUtils.closeView("welcome", fBot);
/* Switch perspectives */
SWTBotUtils.switchToPerspective(KERNEL_PERSPECTIVE_ID);
/* Create the trace project */
SWTBotUtils.createProject(TRACE_PROJECT_NAME);
/* Finish waiting for eclipse to load */
WaitUtils.waitForJobs();
/* Open traces */
String tracePath1 = FileUtils.toFile(FileLocator.toFileURL(CtfTestTrace.ARM_64_BIT_HEADER.getTraceURL())).getAbsolutePath();
SWTBotUtils.openTrace(TRACE_PROJECT_NAME, tracePath1, KERNEL_TRACE_TYPE);
String tracePath2 = FileUtils.toFile(FileLocator.toFileURL(CtfTestTrace.FLIPPING_ENDIANNESS.getTraceURL())).getAbsolutePath();
SWTBotUtils.openTrace(TRACE_PROJECT_NAME, tracePath2, KERNEL_TRACE_TYPE);
}
/**
* After Class
*/
@AfterClass
public static void afterClass() {
SWTBotUtils.deleteProject(TRACE_PROJECT_NAME, fBot);
fLogger.removeAllAppenders();
}
/**
* Open the view
*/
@Before
public void before() {
SWTBotUtils.openView(getViewId());
}
/**
* After Test
*/
@After
public void after() {
fBot.closeAllEditors();
SWTBotUtils.closeSecondaryShells(fBot);
}
private SWTBotView getViewBot() {
return fBot.viewByTitle(getViewTitle());
}
/**
* Get the time graph view id
*
* @return The view ID
*/
protected abstract String getViewId();
/**
* Get the time graph view title
*
* @return The view title
*/
protected abstract String getViewTitle();
/**
* Get the item label to expand/collapse in the test
*
* @return The label
*/
protected abstract String[] getItemLabel();
/**
* Test the expand state of time graph entries when switching traces This test
* collapse some entries, switch between traces then test that the expanded
* count did not change
*/
@Test
public void testExpandedState() {
// Select editor
SWTBotTimeGraph timegraphBot = new SWTBotTimeGraph(getViewBot().bot());
SWTBotUtils.activateEditor(fBot, BUG446190);
SWTBotUtils.waitUntil(root -> timegraphBot.getEntries()[0].getText().equals(root), BUG446190, "Failed to activate editor " + BUG446190);
// expand all entries
timegraphBot.expandAll();
int count1 = timegraphBot.getExpandedElementCount();
// Collapse specific entries
for (String label : getItemLabel()) {
timegraphBot.expandEntry(false, BUG446190, label);
}
int count2 = timegraphBot.getExpandedElementCount();
assertTrue("Expanded entries count sould be less than " + count1 + " but actual value is " + count2, count2 < count1);
int count3 = switchBetweenTraces(timegraphBot);
assertEquals("Expanded entries count is " + count3 + " but it should be " + count2, count2, count3);
// collapse all entries
timegraphBot.collapseAll();
int count4 = switchBetweenTraces(timegraphBot);
assertTrue("Expanded entries count sould be less than " + count3 + " but actual value is " + count4, count4 < count3);
int count5 = switchBetweenTraces(timegraphBot);
assertEquals("Expanded entries count is " + count5 + " but it should be " + count4, count4, count5);
}
private static int switchBetweenTraces(SWTBotTimeGraph timegraphBot) {
// Switch between traces
SWTBotUtils.activateEditor(fBot, FLIPPING_ENDIANNESS);
SWTBotUtils.waitUntil(root -> timegraphBot.getEntries()[0].getText().equals(root), FLIPPING_ENDIANNESS, "Failed to activate editor " + FLIPPING_ENDIANNESS);
SWTBotUtils.activateEditor(fBot, BUG446190);
SWTBotUtils.waitUntil(root -> timegraphBot.getEntries()[0].getText().equals(root), BUG446190, "Failed to activate editor " + BUG446190);
return timegraphBot.getExpandedElementCount();
}
}