From b69bf3dc1d765c8f847204fadeff01d29dade7ed Mon Sep 17 00:00:00 2001 From: Lorenzo Bettini <lorenzo.bettini@gmail.com> Date: Wed, 12 May 2021 19:16:29 +0200 Subject: [PATCH] 81: test selection in PitMutationsView Task-Url: http://github.com/pitest/pitclipse/issues/81 --- .../ui/view/mutations/PitMutationsView.java | 1 - .../pageobjects/PitMutationsView.java | 2 +- .../ui/behaviours/steps/PitclipseSteps.java | 4 ++ .../ui/tests/AbstractPitclipseSWTBotTest.java | 37 ++++++----- .../tests/PitclipsePitMutationsViewTest.java | 66 +++++++++++++++++++ 5 files changed, 92 insertions(+), 18 deletions(-) create mode 100644 tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/tests/PitclipsePitMutationsViewTest.java diff --git a/bundles/org.pitest.pitclipse.ui/src/org/pitest/pitclipse/ui/view/mutations/PitMutationsView.java b/bundles/org.pitest.pitclipse.ui/src/org/pitest/pitclipse/ui/view/mutations/PitMutationsView.java index 26d86e2a..f9ff3b44 100644 --- a/bundles/org.pitest.pitclipse.ui/src/org/pitest/pitclipse/ui/view/mutations/PitMutationsView.java +++ b/bundles/org.pitest.pitclipse.ui/src/org/pitest/pitclipse/ui/view/mutations/PitMutationsView.java @@ -39,7 +39,6 @@ private void createTreeViewer(Composite parent) { viewer.setLabelProvider(new ViewLabelProvider()); viewer.addDoubleClickListener(ExpandingDoubleClick.LISTENER); viewer.addDoubleClickListener(OpenMutationDoubleClick.LISTENER); - // viewer.addSelectionChangedListener(listener); viewer.setInput(MutationsModel.EMPTY_MODEL); } diff --git a/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/behaviours/pageobjects/PitMutationsView.java b/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/behaviours/pageobjects/PitMutationsView.java index 5ad72307..bec966b0 100644 --- a/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/behaviours/pageobjects/PitMutationsView.java +++ b/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/behaviours/pageobjects/PitMutationsView.java @@ -50,12 +50,12 @@ public PitMutationsView(SWTWorkbenchBot bot) { } public List<PitMutation> getMutations() { - PAGES.views().waitForTestsAreRunOnConsole(); SWTBotTree mutationTree = mutationTreeRoot(); return mutationsFrom(mutationTree); } private SWTBotTree mutationTreeRoot() { + PAGES.views().waitForTestsAreRunOnConsole(); SWTBotView mutationsView = bot.viewByTitle("PIT Mutations"); mutationsView.show(); // Make sure the 'PIT Mutations' view is opened diff --git a/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/behaviours/steps/PitclipseSteps.java b/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/behaviours/steps/PitclipseSteps.java index 19686875..77ab1693 100644 --- a/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/behaviours/steps/PitclipseSteps.java +++ b/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/behaviours/steps/PitclipseSteps.java @@ -91,6 +91,10 @@ public void mutationsAre(DataTable tableOfMutations) { @When("the following mutation is selected") public void mutationIsSelected(DataTable tableOfMutations) { PitMutation mutation = mutationsFromExampleTable(tableOfMutations).get(0); + mutationIsSelected(mutation); + } + + public void mutationIsSelected(PitMutation mutation) { PAGES.getPitMutationsView() .select(mutation); } diff --git a/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/tests/AbstractPitclipseSWTBotTest.java b/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/tests/AbstractPitclipseSWTBotTest.java index 839b5676..177d214f 100644 --- a/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/tests/AbstractPitclipseSWTBotTest.java +++ b/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/tests/AbstractPitclipseSWTBotTest.java @@ -55,6 +55,12 @@ @RunWith(SWTBotJunit4ClassRunner.class) public abstract class AbstractPitclipseSWTBotTest { protected static SWTWorkbenchBot bot; + private static int statusIndex = 0; + private static int projectIndex = 1; + private static int packageIndex = 2; + private static int classIndex = 3; + private static int lineIndex = 4; + private static int mutationIndex = 5; @BeforeClass public static void beforeClass() throws Exception { @@ -292,27 +298,26 @@ protected static void consoleContains(int generatedMutants, int killedMutants, protected static void mutationsAre(String expectedMutationsTable) { List<PitMutation> expectedMutations = new ArrayList<>(); String[] lines = expectedMutationsTable.split("\n"); - final int statusIndex = 0; - final int projectIndex = 1; - final int packageIndex = 2; - final int classIndex = 3; - final int lineIndex = 4; - final int mutationIndex = 5; - for (String string : lines) { - String[] mutationRow = string.split("\\|"); - DetectionStatus status = DetectionStatus.valueOf(mutationRow[statusIndex].trim()); - String project = mutationRow[projectIndex].trim(); - String pkg = mutationRow[packageIndex].trim(); - String className = mutationRow[classIndex].trim(); - int line = parseInt(mutationRow[lineIndex].trim()); - String mutation = mutationRow[mutationIndex].trim(); - PitMutation pitMutation = PitMutation.builder().withStatus(status).withProject(project).withPackage(pkg) - .withClassName(className).withLineNumber(line).withMutation(mutation).build(); + for (String line : lines) { + PitMutation pitMutation = fromMutationLine(line); expectedMutations.add(pitMutation); } mutationsAre(expectedMutations); } + protected static PitMutation fromMutationLine(String line) { + String[] mutationRow = line.split("\\|"); + DetectionStatus status = DetectionStatus.valueOf(mutationRow[statusIndex].trim()); + String project = mutationRow[projectIndex].trim(); + String pkg = mutationRow[packageIndex].trim(); + String className = mutationRow[classIndex].trim(); + int lineNum = parseInt(mutationRow[lineIndex].trim()); + String mutation = mutationRow[mutationIndex].trim(); + PitMutation pitMutation = PitMutation.builder().withStatus(status).withProject(project).withPackage(pkg) + .withClassName(className).withLineNumber(lineNum).withMutation(mutation).build(); + return pitMutation; + } + protected static void mutationsAre(List<PitMutation> expectedMutations) { List<PitMutation> actualMutations = PAGES.getPitMutationsView().getMutations(); assertThat(actualMutations, equalTo(expectedMutations)); diff --git a/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/tests/PitclipsePitMutationsViewTest.java b/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/tests/PitclipsePitMutationsViewTest.java new file mode 100644 index 00000000..aa1243ae --- /dev/null +++ b/tests/org.pitest.pitclipse.ui.tests/src/org/pitest/pitclipse/ui/tests/PitclipsePitMutationsViewTest.java @@ -0,0 +1,66 @@ +package org.pitest.pitclipse.ui.tests; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.pitest.pitclipse.ui.behaviours.steps.PitMutation; +import org.pitest.pitclipse.ui.behaviours.steps.PitclipseSteps; + +/** + * @author Lorenzo Bettini + * + */ +@RunWith(SWTBotJunit4ClassRunner.class) +public class PitclipsePitMutationsViewTest extends AbstractPitclipseSWTBotTest { + + private static final String TEST_PROJECT = "project1"; + private static final String FOO_BAR_PACKAGE = "foo.bar"; + private static final String FOO_CLASS = "Foo"; + private static final String FOO_TEST_CLASS = "FooTest"; + private static final String BAR_CLASS = "Bar"; + private static final String BAR_TEST_CLASS = "BarTest"; + + @Test + public void selectMutationOpensTheClassAtTheRightLineNumber() throws CoreException { + createJavaProjectWithJUnit4(TEST_PROJECT); + verifyProjectExists(TEST_PROJECT); + createClassWithMethod(FOO_CLASS, FOO_BAR_PACKAGE, TEST_PROJECT, + "public int f(int i) {\n" + + " java.util.ArrayList<Object> pointless = new java.util.ArrayList<>();\n" + + " if (pointless.size() == 1)\n" + + " return i + 1;\n" + + " else\n" + + " return 0;\n" + + "}"); + createClassWithMethod(FOO_TEST_CLASS, FOO_BAR_PACKAGE, TEST_PROJECT, + "@org.junit.Test public void badTest() {\n" + + " " + FOO_CLASS + " x = new " + FOO_CLASS + "();\n" + + " x.f(1);\n" + + "}"); + createClassWithMethod(BAR_CLASS, FOO_BAR_PACKAGE, TEST_PROJECT, + "public int f(int i) {\n" + + " java.util.ArrayList<Object> pointless = new java.util.ArrayList<>();\n" + + " if (pointless.size() == 1)\n" + + " return i + 1;\n" + + " else\n" + + " return 0;\n" + + "}"); + createClassWithMethod(BAR_TEST_CLASS, FOO_BAR_PACKAGE, TEST_PROJECT, + "@org.junit.Test public void badTest() {\n" + + " " + BAR_CLASS + " x = new " + BAR_CLASS + "();\n" + + " x.f(1);\n" + + "}"); + runPackageTest(FOO_BAR_PACKAGE, TEST_PROJECT); + coverageReportGenerated(2, 80, 0); + PitclipseSteps pitclipseSteps = new PitclipseSteps(); + PitMutation mutation = fromMutationLine( + "SURVIVED | project1 | foo.bar | foo.bar.Foo | 7 | negated conditional"); + pitclipseSteps.mutationIsSelected(mutation); + pitclipseSteps.mutationIsOpened(FOO_CLASS + ".java", 7); + mutation = fromMutationLine( + "SURVIVED | project1 | foo.bar | foo.bar.Bar | 7 | negated conditional"); + pitclipseSteps.mutationIsSelected(mutation); + pitclipseSteps.mutationIsOpened(BAR_CLASS + ".java", 7); + } +}