/*******************************************************************************
* Copyright (c) 2015 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.lttng2.ust.ui.swtbot.tests;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
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.eclipse.finder.widgets.SWTBotView;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.eclipse.swtbot.swt.finder.matchers.WidgetOfType;
import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
import org.eclipse.tracecompass.internal.lttng2.ust.ui.views.memusage.MemoryUsageView;
import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
import org.eclipse.tracecompass.tmf.ctf.core.tests.shared.CtfTmfTestTraceUtils;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitUtils;
import org.hamcrest.Matcher;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.swtchart.Chart;
import org.swtchart.ILineSeries;
import org.swtchart.ISeries;
import org.swtchart.ISeriesSet;
/**
* Test for the Memory Usage view in trace compass
*/
@RunWith(SWTBotJunit4ClassRunner.class)
public class MemoryUsageViewTest {
private static final int EXPECTED_NUM_SERIES = 4;
private static final String UST_ID = "org.eclipse.linuxtools.lttng2.ust.tracetype";
private static final String PROJECT_NAME = "TestForMemory";
/** The Log4j logger instance. */
private static final Logger fLogger = Logger.getRootLogger();
private static SWTWorkbenchBot fBot;
/**
* Initialization
*/
@BeforeClass
public static void init() {
SWTBotUtils.initialize();
Thread.currentThread().setName("SWTBot Thread"); // for the debugger
/* set up for swtbot */
SWTBotPreferences.TIMEOUT = 20000; /* 20 second timeout */
fLogger.addAppender(new ConsoleAppender(new SimpleLayout()));
fBot = new SWTWorkbenchBot();
SWTBotUtils.closeView("welcome", fBot);
SWTBotUtils.switchToTracingPerspective();
/* finish waiting for eclipse to load */
WaitUtils.waitForJobs();
}
/**
* Open a trace in an editor
*/
@Before
public void beforeTest() {
SWTBotUtils.createProject(PROJECT_NAME);
SWTBotTreeItem treeItem = SWTBotUtils.selectTracesFolder(fBot, PROJECT_NAME);
assertNotNull(treeItem);
final CtfTestTrace cygProfile = CtfTestTrace.MEMORY_ANALYSIS;
final File file = new File(CtfTmfTestTraceUtils.getTrace(cygProfile).getPath());
CtfTmfTestTraceUtils.dispose(cygProfile);
SWTBotUtils.openTrace(PROJECT_NAME, file.getAbsolutePath(), UST_ID);
SWTBotUtils.openView(MemoryUsageView.ID);
WaitUtils.waitForJobs();
}
/**
* Close the editor
*/
@After
public void tearDown() {
fBot.closeAllEditors();
SWTBotUtils.deleteProject(PROJECT_NAME, fBot);
}
/**
* Test if Memory Usage is populated
*/
@Test
public void testOpenMemoryUsage() {
SWTBotView viewBot = fBot.viewById(MemoryUsageView.ID);
viewBot.setFocus();
// Do some basic validation
Matcher<Chart> matcher = WidgetOfType.widgetOfType(Chart.class);
Chart chart = viewBot.bot().widget(matcher);
// Verify that the chart has 4 series
fBot.waitUntil(ConditionHelpers.numberOfSeries(chart, EXPECTED_NUM_SERIES));
ISeriesSet seriesSet = chart.getSeriesSet();
ISeries[] series = seriesSet.getSeries();
// Verify that each series is a ILineSeries
for (int i = 0; i < series.length; i++) {
assertTrue(series[i] instanceof ILineSeries);
}
}
}