blob: 00bd2058aa1797f8efeda828bf99efc57ff31b3d [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
*******************************************************************************/
package org.eclipse.tracecompass.analysis.counters.ui.swtbot.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
import org.eclipse.tracecompass.analysis.counters.ui.CounterView;
import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.ctf.core.tests.shared.CtfTmfTestTraceUtils;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.XYDataProviderBaseTest;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitUtils;
import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.linecharts.TmfCommonXAxisChartViewer;
import org.eclipse.ui.IViewPart;
import org.junit.Test;
import org.swtchart.Chart;
import org.swtchart.ISeries;
import org.swtchart.LineStyle;
/**
* SWTBot tests for Counters view.
*
* @author Mikael Ferland
*/
public class CounterViewTest extends XYDataProviderBaseTest {
private static final int NUMBER_OF_POINTS = 50;
private static final RGB BLUE = new RGB(0, 0, 255);
private static final @NonNull String TRACE_NAME = "kernel_vm";
private static final @NonNull String COUNTER_NAME = "minor_faults";
private static final @NonNull String COUNTERS_VIEW_TITLE = "Counters View";
private static final @NonNull String MAIN_SERIES_NAME = "kernel_vm/Ungrouped/minor_faults";
private static final @NonNull String COUNTERS_VIEW_ID = "org.eclipse.tracecompass.analysis.counters.ui.view.counters";
/**
* Ensure the data displayed in the chart viewer reflects the tree viewer's
* selected entries.
*/
@Test
public void testManipulatingTreeViewer() {
final Chart chart = getChart();
assertNotNull(chart);
assertEquals(0, chart.getSeriesSet().getSeries().length);
SWTBotTree treeBot = getSWTBotView().bot().tree();
WaitUtils.waitUntil(tree -> tree.rowCount() >= 1, treeBot, "The tree viewer did not finish loading.");
SWTBotTreeItem root = treeBot.getTreeItem(TRACE_NAME);
assertNotNull(root);
SWTBotTreeItem counter = retrieveTreeItem(root, COUNTER_NAME);
assertNotNull(counter);
// Check all elements of the tree
root.check();
WaitUtils.waitUntil(SWTBotTreeItem::isChecked, root, "Root entry was not checked");
assertTrue(counter.isChecked());
assertFalse(root.isGrayed());
assertFalse(counter.isGrayed());
WaitUtils.waitUntil(c -> c.getSeriesSet().getSeries().length >= 3, chart, "The data series did not load.");
// Uncheck a leaf of the tree
counter.uncheck();
assertTrue(root.isChecked());
assertTrue(root.isGrayed());
assertFalse(counter.isChecked());
assertFalse(counter.isGrayed());
WaitUtils.waitUntil(c -> c.getSeriesSet().getSeries().length >= 2, chart,
"A data series has not been removed.");
}
/**
* Validate the Counters view data model.
*/
@Test
public void testDisplayingDataSeries() {
// Setup the chart viewer
IViewPart viewPart = getSWTBotView().getViewReference().getView(true);
assertTrue(viewPart instanceof CounterView);
final TmfCommonXAxisChartViewer chartViewer = (TmfCommonXAxisChartViewer) getChartViewer(viewPart);
assertNotNull(chartViewer);
fBot.waitUntil(ConditionHelpers.xyViewerIsReadyCondition(chartViewer));
chartViewer.setNbPoints(NUMBER_OF_POINTS);
fBot.waitUntil(ConditionHelpers.xyViewerIsReadyCondition(chartViewer));
final Chart chart = getChart();
assertNotNull(chart);
assertEquals(0, chart.getSeriesSet().getSeries().length);
// Check the counter entry
SWTBotTree treeBot = getSWTBotView().bot().tree();
WaitUtils.waitUntil(tree -> tree.rowCount() >= 1, treeBot, "The tree viewer did not finish loading.");
SWTBotTreeItem root = treeBot.getTreeItem(TRACE_NAME);
SWTBotTreeItem counter = retrieveTreeItem(root, COUNTER_NAME);
assertNotNull(counter);
counter.check();
fBot.waitUntil(ConditionHelpers.xyViewerIsReadyCondition(chartViewer));
WaitUtils.waitUntil(c -> c.getSeriesSet().getSeries().length >= 1, chart, "The data series did not load.");
// Ensure the data series has the correct styling
verifySeriesStyle(MAIN_SERIES_NAME, ISeries.SeriesType.LINE, BLUE, LineStyle.SOLID, false);
// Ensure the data model is valid
WaitUtils.waitUntil(json -> isChartDataValid(chart, json, MAIN_SERIES_NAME),
"resources/minor_faults-res50.json", "The chart data is not valid.");
}
private @Nullable SWTBotTreeItem retrieveTreeItem(SWTBotTreeItem rootItem, @NonNull String id) {
if (rootItem.getNodes().contains(id)) {
return rootItem.getNode(id);
}
for (SWTBotTreeItem child : rootItem.getItems()) {
SWTBotTreeItem grandChild = retrieveTreeItem(child, id);
if (grandChild != null) {
return grandChild;
}
}
return null;
}
@Override
protected @NonNull String getMainSeriesName() {
return MAIN_SERIES_NAME;
}
@Override
protected @NonNull String getTitle() {
return COUNTERS_VIEW_TITLE;
}
@Override
protected String getViewID() {
return COUNTERS_VIEW_ID;
}
@Override
protected ITmfTrace getTestTrace() {
return CtfTmfTestTraceUtils.getTrace(CtfTestTrace.KERNEL_VM);
}
@Override
protected void disposeTestTrace() {
CtfTmfTestTraceUtils.dispose(CtfTestTrace.KERNEL_VM);
}
}