From aa5b9bd67fffa91f37d86d37f7b1d16acf108ade Mon Sep 17 00:00:00 2001 From: Marc-Andre Laperle Date: Wed, 22 Jun 2016 17:21:29 -0400 Subject: [PATCH] swtbot: Help stabilize SWTChart tests by waiting for number of series Some tests do not have any waiting for the chart to be populated before starting to inspect its content. By waiting until the expected number of series is reached, it is much more likely that the expected content will be there. Change-Id: Id0c4f8ec2fae2507ed37c2e3ef9178f789af8b5e Signed-off-by: Marc-Andre Laperle Reviewed-on: https://git.eclipse.org/r/75782 Reviewed-by: Patrick Tasse Tested-by: Patrick Tasse Reviewed-by: Hudson CI --- .../SystemCallLatencyDensityViewTest.java | 2 + ...SystemCallLatencyScatterChartViewTest.java | 2 + .../ui/swtbot/tests/MemoryUsageViewTest.java | 24 +---------- .../META-INF/MANIFEST.MF | 3 +- .../tests/latency/PatternDensityViewTest.java | 2 + .../latency/PatternScatterChartViewTest.java | 2 + .../META-INF/MANIFEST.MF | 3 +- .../swtbot/tests/shared/ConditionHelpers.java | 42 +++++++++++++++++++ 8 files changed, 56 insertions(+), 24 deletions(-) diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/swtbot/tests/latency/SystemCallLatencyDensityViewTest.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/swtbot/tests/latency/SystemCallLatencyDensityViewTest.java index eeccab6635..bbaa540b16 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/swtbot/tests/latency/SystemCallLatencyDensityViewTest.java +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/swtbot/tests/latency/SystemCallLatencyDensityViewTest.java @@ -191,6 +191,8 @@ public class SystemCallLatencyDensityViewTest { bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "1001046400", 0, 2)); final Chart densityChart = fDensityChart; assertNotNull(densityChart); + bot.waitUntil(ConditionHelpers.numberOfSeries(densityChart, 1)); + SWTBotChart chartBot = new SWTBotChart(densityChart); assertVisible(chartBot); assertEquals("", chartBot.getToolTipText()); diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/swtbot/tests/latency/SystemCallLatencyScatterChartViewTest.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/swtbot/tests/latency/SystemCallLatencyScatterChartViewTest.java index 7c83422785..bd8f341606 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/swtbot/tests/latency/SystemCallLatencyScatterChartViewTest.java +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/swtbot/tests/latency/SystemCallLatencyScatterChartViewTest.java @@ -167,6 +167,8 @@ public class SystemCallLatencyScatterChartViewTest { final Chart scatterChart = fScatterChart; assertNotNull(scatterChart); + bot.waitUntil(ConditionHelpers.numberOfSeries(scatterChart, 1)); + SWTBotChart chartBot = new SWTBotChart(scatterChart); assertVisible(chartBot); assertEquals("", chartBot.getToolTipText()); diff --git a/lttng/org.eclipse.tracecompass.lttng2.ust.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/ust/ui/swtbot/tests/MemoryUsageViewTest.java b/lttng/org.eclipse.tracecompass.lttng2.ust.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/ust/ui/swtbot/tests/MemoryUsageViewTest.java index 5f475950f6..d74b68103b 100644 --- a/lttng/org.eclipse.tracecompass.lttng2.ust.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/ust/ui/swtbot/tests/MemoryUsageViewTest.java +++ b/lttng/org.eclipse.tracecompass.lttng2.ust.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/ust/ui/swtbot/tests/MemoryUsageViewTest.java @@ -9,7 +9,6 @@ package org.eclipse.tracecompass.lttng2.ust.ui.swtbot.tests; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -23,11 +22,11 @@ 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.waits.DefaultCondition; 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.hamcrest.Matcher; import org.junit.After; @@ -114,29 +113,10 @@ public class MemoryUsageViewTest { Chart chart = viewBot.bot().widget(matcher); // Verify that the chart has 4 series - fBot.waitUntil(new DefaultCondition() { - private String fFailureMessage; - - @Override - public boolean test() throws Exception { - int length = chart.getSeriesSet().getSeries().length; - if (length != EXPECTED_NUM_SERIES){ - fFailureMessage = "Chart did not contain the expected number series. Actual " + length + ", expected " + EXPECTED_NUM_SERIES; - return false; - } - - return true; - } - - @Override - public String getFailureMessage() { - return fFailureMessage; - } - }); + fBot.waitUntil(ConditionHelpers.numberOfSeries(chart, EXPECTED_NUM_SERIES)); ISeriesSet seriesSet = chart.getSeriesSet(); ISeries[] series = seriesSet.getSeries(); - assertEquals(EXPECTED_NUM_SERIES, series.length); // Verify that each series is a ILineSeries for (int i = 0; i < series.length; i++) { assertTrue(series[i] instanceof ILineSeries); diff --git a/releng/org.eclipse.tracecompass.alltests/META-INF/MANIFEST.MF b/releng/org.eclipse.tracecompass.alltests/META-INF/MANIFEST.MF index ee3bd6fb43..8c1bc41c70 100644 --- a/releng/org.eclipse.tracecompass.alltests/META-INF/MANIFEST.MF +++ b/releng/org.eclipse.tracecompass.alltests/META-INF/MANIFEST.MF @@ -40,7 +40,8 @@ Require-Bundle: org.junit;bundle-version="4.0.0", org.eclipse.tracecompass.tmf.pcap.ui.swtbot.tests, org.eclipse.tracecompass.tmf.remote.core.tests, org.eclipse.tracecompass.tmf.remote.ui.tests, - org.eclipse.tracecompass.tmf.remote.ui.swtbot.tests + org.eclipse.tracecompass.tmf.remote.ui.swtbot.tests, + org.eclipse.tracecompass.tmf.analysis.xml.ui.swtbot.tests Export-Package: org.eclipse.tracecompass.alltests;x-internal:=true, org.eclipse.tracecompass.alltests.perf;x-internal:=true, org.eclipse.tracecompass.alltests.swtbot;x-internal:=true diff --git a/tmf/org.eclipse.tracecompass.tmf.analysis.xml.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/swtbot/tests/latency/PatternDensityViewTest.java b/tmf/org.eclipse.tracecompass.tmf.analysis.xml.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/swtbot/tests/latency/PatternDensityViewTest.java index c73f292afa..626d851696 100644 --- a/tmf/org.eclipse.tracecompass.tmf.analysis.xml.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/swtbot/tests/latency/PatternDensityViewTest.java +++ b/tmf/org.eclipse.tracecompass.tmf.analysis.xml.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/swtbot/tests/latency/PatternDensityViewTest.java @@ -127,6 +127,8 @@ public class PatternDensityViewTest extends PatternLatencyViewTestBase { //Test the chart content final Chart densityChart = fDensityChart; assertNotNull(densityChart); + fBot.waitUntil(ConditionHelpers.numberOfSeries(densityChart, 1)); + SWTBotChart chartBot = new SWTBotChart(densityChart); assertVisible(chartBot); diff --git a/tmf/org.eclipse.tracecompass.tmf.analysis.xml.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/swtbot/tests/latency/PatternScatterChartViewTest.java b/tmf/org.eclipse.tracecompass.tmf.analysis.xml.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/swtbot/tests/latency/PatternScatterChartViewTest.java index fa0cdec077..2fd21b944a 100644 --- a/tmf/org.eclipse.tracecompass.tmf.analysis.xml.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/swtbot/tests/latency/PatternScatterChartViewTest.java +++ b/tmf/org.eclipse.tracecompass.tmf.analysis.xml.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/swtbot/tests/latency/PatternScatterChartViewTest.java @@ -23,6 +23,7 @@ import org.eclipse.swtbot.swt.finder.matchers.WidgetOfType; import org.eclipse.swtbot.swt.finder.results.Result; import org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBotControl; import org.eclipse.tracecompass.internal.tmf.analysis.xml.ui.views.latency.PatternScatterGraphView; +import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers; import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IViewReference; @@ -72,6 +73,7 @@ public class PatternScatterChartViewTest extends PatternLatencyViewTestBase { SWTBotUtils.waitForJobs(); final Chart scatterChart = fScatterChart; assertNotNull(scatterChart); + fBot.waitUntil(ConditionHelpers.numberOfSeries(scatterChart, 1)); SWTBotChart chartBot = new SWTBotChart(scatterChart); assertVisible(chartBot); diff --git a/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/META-INF/MANIFEST.MF b/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/META-INF/MANIFEST.MF index b0a7900dae..7723eccc4c 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/META-INF/MANIFEST.MF +++ b/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/META-INF/MANIFEST.MF @@ -32,7 +32,8 @@ Import-Package: com.google.common.collect, org.eclipse.swtbot.swt.finder.results, org.eclipse.swtbot.swt.finder.utils, org.eclipse.swtbot.swt.finder.waits, - org.eclipse.swtbot.swt.finder.widgets + org.eclipse.swtbot.swt.finder.widgets, + org.swtchart Export-Package: org.eclipse.tracecompass.tmf.ui.swtbot.tests.parsers.custom;x-internal:=true, org.eclipse.tracecompass.tmf.ui.swtbot.tests.perspectives;x-internal:=true, org.eclipse.tracecompass.tmf.ui.swtbot.tests.projectexplorer, diff --git a/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/shared/org/eclipse/tracecompass/tmf/ui/swtbot/tests/shared/ConditionHelpers.java b/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/shared/org/eclipse/tracecompass/tmf/ui/swtbot/tests/shared/ConditionHelpers.java index 366fb05a0a..07f4aa0a68 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/shared/org/eclipse/tracecompass/tmf/ui/swtbot/tests/shared/ConditionHelpers.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/shared/org/eclipse/tracecompass/tmf/ui/swtbot/tests/shared/ConditionHelpers.java @@ -47,6 +47,7 @@ import org.eclipse.tracecompass.tmf.ui.editors.TmfEventsEditor; import org.eclipse.tracecompass.tmf.ui.views.timegraph.AbstractTimeGraphView; import org.eclipse.ui.IEditorReference; import org.hamcrest.Matcher; +import org.swtchart.Chart; /** * Is a tree node available @@ -657,4 +658,45 @@ public final class ConditionHelpers { return fEditor; } } + + private static class NumberOfSeries extends DefaultCondition { + private String fFailureMessage; + private Chart fChart; + private final int fNumberOfSeries; + + public NumberOfSeries(Chart chart, int numberOfSeries) { + fChart = chart; + fNumberOfSeries = numberOfSeries; + } + + @Override + public boolean test() throws Exception { + int length = fChart.getSeriesSet().getSeries().length; + if (length != fNumberOfSeries){ + fFailureMessage = "Chart did not contain the expected number series. Actual " + length + ", expected " + fNumberOfSeries; + return false; + } + + return true; + } + + @Override + public String getFailureMessage() { + return fFailureMessage; + } + } + + /** + * Wait until the chart has the specified number of series. + * + * @param chart + * the chart + * @param numberOfSeries + * the number of expected series + * + * @return ICondition for verification + */ + public static ICondition numberOfSeries(Chart chart, int numberOfSeries) { + return new NumberOfSeries(chart, numberOfSeries); + } } -- 2.34.1