From: Matthew Khouzam Date: Tue, 10 May 2016 00:59:04 +0000 (-0400) Subject: lttng.ui: Add SWTBot test for CPU selection signals. X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=1d9948f9cfe1c9bb3d0e08977ec12c95e7bf25c2;p=deliverable%2Ftracecompass.git lttng.ui: Add SWTBot test for CPU selection signals. This changes the behavior of the TmfTreeViewer by converting a thread to a job. Change-Id: I4369c8ef9cddf7b64dc1e526cce401a0e2472bec Signed-off-by: Matthew Khouzam --- diff --git a/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/META-INF/MANIFEST.MF b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/META-INF/MANIFEST.MF index deafc42c91..47e70dfd27 100644 --- a/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/META-INF/MANIFEST.MF +++ b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/META-INF/MANIFEST.MF @@ -13,6 +13,7 @@ Require-Bundle: org.apache.log4j, org.eclipse.core.runtime, org.eclipse.tracecompass.lttng2.kernel.core, org.eclipse.tracecompass.lttng2.kernel.ui, + org.eclipse.tracecompass.analysis.os.linux.core, org.eclipse.tracecompass.lttng2.control.ui, org.eclipse.tracecompass.analysis.os.linux.ui, org.eclipse.tracecompass.tmf.core, @@ -28,4 +29,5 @@ Require-Bundle: org.apache.log4j, org.eclipse.ui.ide, org.eclipse.ui.views, org.junit -Import-Package: org.eclipse.tracecompass.testtraces.ctf +Import-Package: org.eclipse.tracecompass.testtraces.ctf, + org.swtchart;version="0.7.0" diff --git a/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ResourcesAndCpuViewTest.java b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ResourcesAndCpuViewTest.java new file mode 100644 index 0000000000..28dcc424da --- /dev/null +++ b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ResourcesAndCpuViewTest.java @@ -0,0 +1,133 @@ +/******************************************************************************* + * Copyright (c) 2016 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.kernel.ui.swtbot.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Paths; + +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.swt.widgets.Widget; +import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView; +import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable; +import org.eclipse.swtbot.swt.finder.matchers.WidgetOfType; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem; +import org.eclipse.tracecompass.analysis.os.linux.core.signals.TmfCpuSelectedSignal; +import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.cpuusage.CpuUsageView; +import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace; +import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager; +import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; +import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager; +import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils; +import org.hamcrest.Matcher; +import org.junit.Before; +import org.junit.Test; +import org.swtchart.Chart; + +/** + * SWTBot tests for Resources view + * + * @author Matthew Khouzam + */ +public class ResourcesAndCpuViewTest extends KernelTestBase { + + private SWTBotView fViewBotRv; + private SWTBotView fViewBotCpu; + + /** + * Before Test + */ + @Override + @Before + public void before() { + fViewBotRv = fBot.viewByPartName("Resources"); + SWTBotUtils.openView(CpuUsageView.ID); + fViewBotCpu = fBot.viewById(CpuUsageView.ID); + fViewBotCpu.show(); + fViewBotRv.show(); + try { + SWTBotUtils.openTrace(TRACE_PROJECT_NAME, Paths.get(FileLocator.toFileURL(CtfTestTrace.ARM_64_BIT_HEADER.getTraceURL()).toURI()).toString(), KERNEL_TRACE_TYPE); + } catch (IOException | URISyntaxException e) { + fail(e.getMessage()); + } + SWTBotUtils.activateEditor(fBot, "bug446190"); + fViewBotRv.setFocus(); + } + + /** + * Simple test to check the CPU Usage view after getting signals. + */ + @Test + public void testSignals() { + Widget widget = fViewBotRv.getWidget(); + assertNotNull(widget); + ITmfTrace activeTrace = TmfTraceManager.getInstance().getActiveTrace(); + assertNotNull(activeTrace); + + // clear everything + TmfCpuSelectedSignal signal = new TmfCpuSelectedSignal(widget, -1, activeTrace); + broadcast(signal); + assertEquals("Before signal - CPU Usage Title", "CPU Usage", getTitle()); + assertEquals("Before signal - Thread Table", 12, getTableCount()); + fViewBotRv.setFocus(); + + // select cpu 1 + signal = new TmfCpuSelectedSignal(widget, 1, activeTrace); + broadcast(signal); + assertEquals("After signal - CPU Usage Title", "CPU Usage 1", getTitle()); + assertEquals("After signal - Thread Table", 4, getTableCount()); + + // select cpu 3 and 1 + signal = new TmfCpuSelectedSignal(widget, 3, activeTrace); + broadcast(signal); + assertEquals("After signal 2 - CPU Usage Title", "CPU Usage 1, 3", getTitle()); + assertEquals("After signal 2 - Thread Table", 8, getTableCount()); + + // reset + signal = new TmfCpuSelectedSignal(widget, -1, activeTrace); + broadcast(signal); + assertEquals("After signal clear - CPU Usage Title", "CPU Usage", getTitle()); + assertEquals("After signal clear - Thread Table", 12, getTableCount()); + } + + private static void broadcast(TmfCpuSelectedSignal signal) { + UIThreadRunnable.syncExec(() -> TmfSignalManager.dispatchSignal(signal)); + SWTBotUtils.waitForJobs(); + } + + private String getTitle() { + fViewBotCpu.setFocus(); + // Do some basic validation + Matcher matcher = WidgetOfType.widgetOfType(Chart.class); + Chart chart = fViewBotCpu.bot().widget(matcher); + return chart.getTitle().getText(); + } + + private int getTableCount() { + fViewBotCpu.setFocus(); + // Do some basic validation + Matcher matcher = WidgetOfType.widgetOfType(Tree.class); + SWTBotTree treeBot = new SWTBotTree(fViewBotCpu.bot().widget(matcher)); + int count = 0; + for (SWTBotTreeItem bot : treeBot.getAllItems()) { + final String text = bot.getText(); + if (!text.isEmpty()) { + count++; + } + } + return count; + } +} diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/tree/AbstractTmfTreeViewer.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/tree/AbstractTmfTreeViewer.java index 97fe501b62..c44108b21b 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/tree/AbstractTmfTreeViewer.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/tree/AbstractTmfTreeViewer.java @@ -14,6 +14,10 @@ package org.eclipse.tracecompass.tmf.ui.viewers.tree; import java.util.List; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.IBaseLabelProvider; @@ -399,9 +403,9 @@ public abstract class AbstractTmfTreeViewer extends TmfTimeViewer { * false for the visible time range */ protected void updateContent(final long start, final long end, final boolean isSelection) { - Thread thread = new Thread() { + Job thread = new Job("") { //$NON-NLS-1$ @Override - public void run() { + public IStatus run(IProgressMonitor monitor) { final ITmfTreeViewerEntry rootEntry = updateElements(start, end, isSelection); /* Set the input in main thread only if it didn't change */ if (rootEntry != null) { @@ -426,9 +430,11 @@ public abstract class AbstractTmfTreeViewer extends TmfTimeViewer { } }); } + return Status.OK_STATUS; } }; - thread.start(); + thread.setSystem(true); + thread.schedule(); } /**