| /******************************************************************************* |
| * 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(); |
| } |
| } |