diff --git a/.travis.yml b/.travis.yml index c27c5e7f3..02e21942d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,7 @@ install: - export MAVEN_HOME=`mvn --version | grep 'Maven home' | sed -e 's/Maven h.* //'` script: + - git clone https://github.com/STAMP-project/pitest-descartes && cd pitest-descartes && mvn install -DskipTests && cd .. - mvn clean install - cd dspot && java -jar target/dspot-$DSPOT_VERSION-jar-with-dependencies.jar --example diff --git a/checkstyle.xml b/checkstyle.xml index 45d7e93a1..bb1ead92b 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -22,7 +22,9 @@ - + + + diff --git a/dspot/src/main/java/fr/inria/diversify/automaticbuilder/MavenAutomaticBuilder.java b/dspot/src/main/java/fr/inria/diversify/automaticbuilder/MavenAutomaticBuilder.java index 8673f026a..453092e11 100644 --- a/dspot/src/main/java/fr/inria/diversify/automaticbuilder/MavenAutomaticBuilder.java +++ b/dspot/src/main/java/fr/inria/diversify/automaticbuilder/MavenAutomaticBuilder.java @@ -1,8 +1,10 @@ package fr.inria.diversify.automaticbuilder; +import fr.inria.diversify.dspot.selector.PitMutantScoreSelector; import fr.inria.diversify.mutant.descartes.DescartesChecker; import fr.inria.diversify.mutant.descartes.DescartesInjector; import fr.inria.diversify.mutant.pit.MavenPitCommandAndOptions; +import fr.inria.diversify.utils.AmplificationHelper; import fr.inria.diversify.utils.DSpotUtils; import fr.inria.diversify.utils.sosiefier.InputConfiguration; import fr.inria.stamp.Main; @@ -33,29 +35,30 @@ public class MavenAutomaticBuilder implements AutomaticBuilder { private InputConfiguration configuration; - @Deprecated - private String backUpPom; - private String mavenHome; private String classpath; + private String contentOfOriginalPom; + private static final String FILE_SEPARATOR = "/"; private static final String POM_FILE = "pom.xml"; - MavenAutomaticBuilder(@Deprecated InputConfiguration configuration) { + MavenAutomaticBuilder(InputConfiguration configuration) { this.mavenHome = DSpotUtils.buildMavenHome(configuration); this.configuration = configuration; - final String pathToPomFile = configuration.getInputProgram().getProgramDir() + FILE_SEPARATOR + POM_FILE; - try (final BufferedReader bufferedReader = new BufferedReader(new FileReader(pathToPomFile))) { - this.backUpPom = bufferedReader.lines().collect(Collectors.joining(System.getProperty("line.separator"))); - } catch (Exception e) { - throw new RuntimeException(e); - } - if (MavenPitCommandAndOptions.descartesMode && - DescartesChecker.shouldInjectDescartes(pathToPomFile)) { - DescartesInjector.injectDescartesIntoPom(pathToPomFile); + final String pathToPom = this.configuration.getInputProgram().getProgramDir() + "/" + POM_FILE; + if (PitMutantScoreSelector.descartesMode && + DescartesChecker.shouldInjectDescartes(pathToPom)) { + try (final BufferedReader buffer = new BufferedReader(new FileReader(pathToPom))) { + this.contentOfOriginalPom = buffer.lines().collect(Collectors.joining(AmplificationHelper.LINE_SEPARATOR)); + } catch (Exception ignored) { + + } + DescartesInjector.injectDescartesIntoPom(pathToPom); + } else { + this.contentOfOriginalPom = null; } } @@ -95,13 +98,14 @@ public String buildClasspath(String pathToRootOfProject) { @Override public void reset() { - final String pathToPomFile = configuration.getInputProgram().getProgramDir() + FILE_SEPARATOR + POM_FILE; - try { - final FileWriter writer = new FileWriter(pathToPomFile, false); - writer.write(this.backUpPom); - writer.close(); - } catch (IOException e) { - throw new RuntimeException(e); + if (contentOfOriginalPom != null) { + final String pathToPom = this.configuration.getInputProgram().getProgramDir() + "/" + POM_FILE; + try (FileWriter writer = new FileWriter(pathToPom)) { + writer.write(this.contentOfOriginalPom); + this.contentOfOriginalPom = null; + } catch (Exception ignored) { + + } } } @@ -113,11 +117,8 @@ public void runPit(String pathToRootOfProject, CtType... testClasses) { } try { - String[] phases = new String[]{PRE_GOAL_PIT, // - CMD_PIT_MUTATION_COVERAGE + ":" + - (configuration.getProperties().get("pitVersion") != null ? - configuration.getProperties().get("pitVersion") : PIT_VERSION - ) + ":" + GOAL_PIT_MUTATION_COVERAGE, // + String[] phases = new String[]{CMD_PIT_MUTATION_COVERAGE + ":" + + PitMutantScoreSelector.pitVersion + ":" + GOAL_PIT_MUTATION_COVERAGE, // OPT_WITH_HISTORY, // OPT_TARGET_CLASSES + configuration.getProperty("filter"), // OPT_VALUE_REPORT_DIR, // @@ -128,11 +129,8 @@ public void runPit(String pathToRootOfProject, CtType... testClasses) { OPT_ADDITIONAL_CP_ELEMENTS + "target/dspot/dependencies/" + (configuration.getProperty(PROPERTY_ADDITIONAL_CP_ELEMENTS) != null ? "," + configuration.getProperty(PROPERTY_ADDITIONAL_CP_ELEMENTS) : "") , // - descartesMode ? OPT_MUTATION_ENGINE_DESCARTES : OPT_MUTATION_ENGINE_DEFAULT, - OPT_MUTATORS + (evosuiteMode ? - Arrays.stream(VALUE_MUTATORS_EVOSUITE).collect(Collectors.joining(",")) : - descartesMode ? Arrays.stream(VALUE_MUTATORS_DESCARTES).collect(Collectors.joining(",")) : - VALUE_MUTATORS_ALL), // + PitMutantScoreSelector.descartesMode ? OPT_MUTATION_ENGINE_DESCARTES : OPT_MUTATION_ENGINE_DEFAULT, + PitMutantScoreSelector.descartesMode ? "" : OPT_MUTATORS + VALUE_MUTATORS_ALL, // configuration.getProperty(PROPERTY_EXCLUDED_CLASSES) != null ? OPT_EXCLUDED_CLASSES + configuration.getProperty(PROPERTY_EXCLUDED_CLASSES) : ""// @@ -158,22 +156,15 @@ public void runPit(String pathToRootOfProject) { } try { - String[] phases = new String[]{PRE_GOAL_PIT, // - CMD_PIT_MUTATION_COVERAGE + ":" + - (configuration.getProperties().get("pitVersion") != null ? - configuration.getProperties().get("pitVersion") : PIT_VERSION - ) + ":" + GOAL_PIT_MUTATION_COVERAGE, // + String[] phases = new String[]{CMD_PIT_MUTATION_COVERAGE + ":" + PitMutantScoreSelector.pitVersion + ":" + GOAL_PIT_MUTATION_COVERAGE, // OPT_WITH_HISTORY, // OPT_TARGET_CLASSES + configuration.getProperty("filter"), // OPT_VALUE_REPORT_DIR, // OPT_VALUE_FORMAT, // OPT_VALUE_TIMEOUT, // OPT_VALUE_MEMORY, // - descartesMode ? OPT_MUTATION_ENGINE_DESCARTES : OPT_MUTATION_ENGINE_DEFAULT, - OPT_MUTATORS + (evosuiteMode ? - Arrays.stream(VALUE_MUTATORS_EVOSUITE).collect(Collectors.joining(",")) : - descartesMode ? Arrays.stream(VALUE_MUTATORS_DESCARTES).collect(Collectors.joining(",")) : - VALUE_MUTATORS_ALL), // + PitMutantScoreSelector.descartesMode ? OPT_MUTATION_ENGINE_DESCARTES : OPT_MUTATION_ENGINE_DEFAULT, + PitMutantScoreSelector.descartesMode? "" : OPT_MUTATORS + VALUE_MUTATORS_ALL, // OPT_ADDITIONAL_CP_ELEMENTS + "target/dspot/dependencies/" + (configuration.getProperty(PROPERTY_ADDITIONAL_CP_ELEMENTS) != null ? "," + configuration.getProperty(PROPERTY_ADDITIONAL_CP_ELEMENTS) : "") , // diff --git a/dspot/src/main/java/fr/inria/diversify/dspot/amplifier/BooleanLiteralAmplifier.java b/dspot/src/main/java/fr/inria/diversify/dspot/amplifier/BooleanLiteralAmplifier.java index 423db44e4..f999e3519 100644 --- a/dspot/src/main/java/fr/inria/diversify/dspot/amplifier/BooleanLiteralAmplifier.java +++ b/dspot/src/main/java/fr/inria/diversify/dspot/amplifier/BooleanLiteralAmplifier.java @@ -1,8 +1,8 @@ package fr.inria.diversify.dspot.amplifier; -import edu.emory.mathcs.backport.java.util.Collections; import spoon.reflect.code.CtLiteral; +import java.util.Collections; import java.util.Set; public class BooleanLiteralAmplifier extends AbstractLiteralAmplifier { diff --git a/dspot/src/main/java/fr/inria/diversify/dspot/selector/PitMutantScoreSelector.java b/dspot/src/main/java/fr/inria/diversify/dspot/selector/PitMutantScoreSelector.java index c74556a2f..e6d37a982 100644 --- a/dspot/src/main/java/fr/inria/diversify/dspot/selector/PitMutantScoreSelector.java +++ b/dspot/src/main/java/fr/inria/diversify/dspot/selector/PitMutantScoreSelector.java @@ -33,6 +33,12 @@ */ public class PitMutantScoreSelector extends TakeAllSelector { + public static String pitVersion = "1.3.0"; + + public static String descartesVersion = "0.2-SNAPSHOT"; + + public static boolean descartesMode = false; + private static final Logger LOGGER = LoggerFactory.getLogger(PitMutantScoreSelector.class); private int numberOfMutant; @@ -55,6 +61,11 @@ public PitMutantScoreSelector(String pathToOriginalResultOfPit) { @Override public void init(InputConfiguration configuration) { super.init(configuration); + if (configuration.getProperties().get("pitVersion") != null) { + pitVersion = (String) configuration.getProperties().get("pitVersion"); + } else if (descartesMode) { + pitVersion = "1.2.0"; + } if (this.originalKilledMutants == null) { final AutomaticBuilder automaticBuilder = AutomaticBuilderFactory.getAutomaticBuilder(this.configuration); automaticBuilder.runPit(this.program.getProgramDir()); diff --git a/dspot/src/main/java/fr/inria/diversify/mutant/descartes/DescartesChecker.java b/dspot/src/main/java/fr/inria/diversify/mutant/descartes/DescartesChecker.java index 03037b6de..0961714fb 100644 --- a/dspot/src/main/java/fr/inria/diversify/mutant/descartes/DescartesChecker.java +++ b/dspot/src/main/java/fr/inria/diversify/mutant/descartes/DescartesChecker.java @@ -1,5 +1,6 @@ package fr.inria.diversify.mutant.descartes; +import fr.inria.diversify.dspot.selector.PitMutantScoreSelector; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.SAXException; @@ -15,7 +16,6 @@ * benjamin.danglot@inria.fr * on 24/03/17 */ -@Deprecated public class DescartesChecker { public static boolean shouldInjectDescartes(String pathToPom) { @@ -43,7 +43,7 @@ private static boolean checkDependency(Node root) { if (dependencies == null) { return true; } - final List expectedValues = new ArrayList<>(Arrays.asList("org.pitest", "pitest-maven", "1.1.11")); + final List expectedValues = new ArrayList<>(Arrays.asList("org.pitest", "pitest-maven", PitMutantScoreSelector.pitVersion)); Optional checkDependency = getAllChildNodeNamedFrom(dependencies, "dependency").stream() .filter(dependency -> checkThatHasTheGoodDependency(dependency, expectedValues) @@ -95,7 +95,7 @@ private static Node getPlugin(Node root) { if (plugins == null) { return null; } - final List expectedValues = new ArrayList<>(Arrays.asList("org.pitest", "pitest-maven", "1.1.11")); + final List expectedValues = new ArrayList<>(Arrays.asList("org.pitest", "pitest-maven", PitMutantScoreSelector.pitVersion)); Optional checkDependency = getChildThatHasTheGoodDependency(plugins, expectedValues, "plugin"); if (!checkDependency.isPresent()) { return null; @@ -109,7 +109,7 @@ private static Optional getChildThatHasTheGoodDependency(Node parent, List .filter(plugin -> checkThatHasTheGoodDependency(plugin, expectedValues) ) - .findFirst(); + .findFirst(); } private static boolean checkPlugin(Node root) { @@ -134,7 +134,7 @@ private static boolean checkPlugin(Node root) { return true; } - final List expectedValues = new ArrayList<>(Arrays.asList("fr.inria.stamp", "descartes", "0.1-SNAPSHOT")); + final List expectedValues = new ArrayList<>(Arrays.asList("fr.inria.stamp", "descartes", PitMutantScoreSelector.descartesVersion)); return !getChildThatHasTheGoodDependency(dependencies1, expectedValues, "dependency").isPresent(); } diff --git a/dspot/src/main/java/fr/inria/diversify/mutant/descartes/DescartesInjector.java b/dspot/src/main/java/fr/inria/diversify/mutant/descartes/DescartesInjector.java index ebd2864b7..4ffc6d3e0 100644 --- a/dspot/src/main/java/fr/inria/diversify/mutant/descartes/DescartesInjector.java +++ b/dspot/src/main/java/fr/inria/diversify/mutant/descartes/DescartesInjector.java @@ -1,5 +1,7 @@ package fr.inria.diversify.mutant.descartes; +import fr.inria.diversify.dspot.selector.PitMutantScoreSelector; +import fr.inria.diversify.mutant.pit.MavenPitCommandAndOptions; import org.w3c.dom.*; import org.xml.sax.SAXException; @@ -22,11 +24,8 @@ * benjamin.danglot@inria.fr * on 23/03/17 */ -@Deprecated public class DescartesInjector { - private final static String[] mutators = {"null", "void", "0", "false"}; - private static Node getNodeNamedFromOrBuildIfDoesnotExist(Document doc, Node startNode, String name) { Node currentNode = DescartesChecker.getNodeNamedFrom(startNode, name); if (currentNode == null) { @@ -49,13 +48,13 @@ private static List buildNodesDependency(Document doc, String groupIdValue private static Node buildDependencyToPitTest(Document doc) { final Element dependency = doc.createElement("dependency"); - buildNodesDependency(doc, "org.pitest", "pitest-maven", "1.1.11").forEach(dependency::appendChild); + buildNodesDependency(doc, "org.pitest", "pitest-maven", PitMutantScoreSelector.pitVersion).forEach(dependency::appendChild); return dependency; } private static Node buildPlugin(Document doc) { final Element plugin = doc.createElement("plugin"); - buildNodesDependency(doc, "org.pitest", "pitest-maven", "1.1.11").forEach(plugin::appendChild); + buildNodesDependency(doc, "org.pitest", "pitest-maven", PitMutantScoreSelector.pitVersion).forEach(plugin::appendChild); plugin.appendChild(buildConfiguration(doc)); plugin.appendChild(buildDependencies(doc)); return plugin; @@ -63,7 +62,7 @@ private static Node buildPlugin(Document doc) { private static Node buildDependency(Document doc) { final Element dependency = doc.createElement("dependency"); - buildNodesDependency(doc, "fr.inria.stamp", "descartes", "0.1-SNAPSHOT").forEach(dependency::appendChild); + buildNodesDependency(doc, "fr.inria.stamp", "descartes", PitMutantScoreSelector.descartesVersion).forEach(dependency::appendChild); return dependency; } @@ -80,7 +79,7 @@ private static Node buildMutators(Document doc, String name) { } private static List buildListOfMutators(Document doc) { - return Arrays.stream(mutators) + return Arrays.stream(MavenPitCommandAndOptions.VALUE_MUTATORS_DESCARTES) .collect(ArrayList::new, (nodes, name) -> nodes.add(buildMutators(doc, name)), ArrayList::addAll diff --git a/dspot/src/main/java/fr/inria/diversify/mutant/pit/MavenPitCommandAndOptions.java b/dspot/src/main/java/fr/inria/diversify/mutant/pit/MavenPitCommandAndOptions.java index 5b8b869dd..5716c4da1 100644 --- a/dspot/src/main/java/fr/inria/diversify/mutant/pit/MavenPitCommandAndOptions.java +++ b/dspot/src/main/java/fr/inria/diversify/mutant/pit/MavenPitCommandAndOptions.java @@ -7,14 +7,6 @@ */ public class MavenPitCommandAndOptions { - @Deprecated - public static boolean descartesMode = false; - - @Deprecated - public static boolean evosuiteMode = false; - - public static final String PRE_GOAL_PIT = ""; // TODO those pre-goals are necessary while we do not know how to compile with spoon - public static final String OPT_WITH_HISTORY = "-DwithHistory"; public static final String OPT_VALUE_REPORT_DIR = "-DreportsDirectory=target/pit-reports"; @@ -39,8 +31,6 @@ public class MavenPitCommandAndOptions { public static final String CMD_PIT_MUTATION_COVERAGE = "org.pitest:pitest-maven"; - public static final String PIT_VERSION = "1.3.0"; - public static final String GOAL_PIT_MUTATION_COVERAGE = "mutationCoverage"; public static final String OPT_VALUE_TIMEOUT = "-DtimeoutConst=10000"; @@ -51,18 +41,6 @@ public class MavenPitCommandAndOptions { public static final String VALUE_MUTATORS_ALL = "ALL"; - public static final String[] VALUE_MUTATORS_EVOSUITE = new String[]{ - "VOID_METHOD_CALLS", - "NON_VOID_METHOD_CALLS", - "EXPERIMENTAL_MEMBER_VARIABLE", - "INCREMENTS", - "INVERT_NEGS", - "MATH", - "NEGATE_CONDITIONALS", - "CONDITIONALS_BOUNDARY", - "INLINE_CONSTS" - }; - /** * Mutant operator copied from dhell */ diff --git a/dspot/src/main/java/fr/inria/stamp/JSAPOptions.java b/dspot/src/main/java/fr/inria/stamp/JSAPOptions.java index 2dd941876..d8255c9cd 100644 --- a/dspot/src/main/java/fr/inria/stamp/JSAPOptions.java +++ b/dspot/src/main/java/fr/inria/stamp/JSAPOptions.java @@ -118,6 +118,8 @@ public static Configuration parse(String[] args) { testCriterion = SelectorEnum.valueOf(jsapConfig.getString("test-criterion")).buildSelector(); } + PitMutantScoreSelector.descartesMode = jsapConfig.getBoolean("descartes"); + TestRunnerFactory.useReflectiveTestRunner = false; DSpotUtils.withComment = jsapConfig.getBoolean("comment"); @@ -233,7 +235,6 @@ private static JSAP initJSAP() { output.setHelp("[optional] specify the output folder (default: dspot-report)"); Switch cleanOutput = new Switch("clean"); - cleanOutput.setShortFlag('q'); cleanOutput.setLongFlag("clean"); cleanOutput.setHelp("[optional] if enabled, DSpot will remove the out directory if exists, else it will append the results to the exist files. (default: off)"); @@ -256,7 +257,6 @@ private static JSAP initJSAP() { FlaggedOption seed = new FlaggedOption("seed"); seed.setStringParser(JSAP.LONG_PARSER); seed.setLongFlag("randomSeed"); - seed.setShortFlag('r'); seed.setUsageName("long integer"); seed.setHelp("specify a seed for the random object (used for all randomized operation)"); seed.setDefault("23"); @@ -264,7 +264,6 @@ private static JSAP initJSAP() { FlaggedOption timeOut = new FlaggedOption("timeOut"); timeOut.setStringParser(JSAP.INTEGER_PARSER); timeOut.setLongFlag("timeOut"); - timeOut.setShortFlag('v'); timeOut.setUsageName("long integer"); timeOut.setHelp("specify the timeout value of the degenerated tests in millisecond"); timeOut.setDefault("10000"); @@ -272,7 +271,6 @@ private static JSAP initJSAP() { FlaggedOption automaticBuilder = new FlaggedOption("builder"); automaticBuilder.setStringParser(JSAP.STRING_PARSER); automaticBuilder.setLongFlag("automatic-builder"); - automaticBuilder.setShortFlag('b'); automaticBuilder.setUsageName("MavenBuilder | GradleBuilder"); automaticBuilder.setHelp("[optional] specify the automatic builder to build the project"); automaticBuilder.setDefault("MavenBuilder"); @@ -280,7 +278,6 @@ private static JSAP initJSAP() { FlaggedOption mavenHome = new FlaggedOption("mavenHome"); mavenHome.setStringParser(JSAP.STRING_PARSER); mavenHome.setLongFlag("maven-home"); - mavenHome.setShortFlag('j'); mavenHome.setUsageName("path to maven home"); mavenHome.setHelp("specify the path to the maven home"); @@ -292,7 +289,6 @@ private static JSAP initJSAP() { FlaggedOption maxTestAmplified = new FlaggedOption("maxTestAmplified"); maxTestAmplified.setStringParser(JSAP.INTEGER_PARSER); maxTestAmplified.setLongFlag("max-test-amplified"); - maxTestAmplified.setShortFlag('g'); maxTestAmplified.setUsageName("integer"); maxTestAmplified.setHelp("[optional] specify the maximum number of amplified tests that dspot keeps (before generating assertion)"); maxTestAmplified.setDefault("200"); @@ -302,6 +298,11 @@ private static JSAP initJSAP() { withComment.setDefault("false"); withComment.setHelp("Enable comment on amplified test: details steps of the Amplification."); + Switch descartes = new Switch("descartes"); + descartes.setLongFlag("descartes"); + descartes.setDefault("false"); + descartes.setHelp("Enable the descartes engine for Pit Mutant Score Selector."); + try { jsap.registerParameter(pathToConfigFile); jsap.registerParameter(amplifiers); @@ -313,6 +314,7 @@ private static JSAP initJSAP() { jsap.registerParameter(output); jsap.registerParameter(cleanOutput); jsap.registerParameter(mutantScore); + jsap.registerParameter(descartes); jsap.registerParameter(automaticBuilder); jsap.registerParameter(mavenHome); jsap.registerParameter(seed); diff --git a/dspot/src/main/java/fr/inria/stamp/minimization/ChangeMinimizer.java b/dspot/src/main/java/fr/inria/stamp/minimization/ChangeMinimizer.java index 4b0d95639..9b24e0a23 100644 --- a/dspot/src/main/java/fr/inria/stamp/minimization/ChangeMinimizer.java +++ b/dspot/src/main/java/fr/inria/stamp/minimization/ChangeMinimizer.java @@ -1,6 +1,5 @@ package fr.inria.stamp.minimization; -import edu.emory.mathcs.backport.java.util.Collections; import fr.inria.diversify.automaticbuilder.AutomaticBuilderFactory; import fr.inria.diversify.dspot.support.DSpotCompiler; import fr.inria.diversify.utils.AmplificationChecker; @@ -18,6 +17,7 @@ import spoon.reflect.visitor.filter.TypeFilter; import java.io.File; +import java.util.Collections; import java.util.List; import java.util.Map; diff --git a/dspot/src/test/java/fr/inria/diversify/automaticbuilder/MavenAutomaticBuilderTest.java b/dspot/src/test/java/fr/inria/diversify/automaticbuilder/MavenAutomaticBuilderTest.java index 10111f19a..d4d87dc4c 100644 --- a/dspot/src/test/java/fr/inria/diversify/automaticbuilder/MavenAutomaticBuilderTest.java +++ b/dspot/src/test/java/fr/inria/diversify/automaticbuilder/MavenAutomaticBuilderTest.java @@ -30,8 +30,6 @@ public class MavenAutomaticBuilderTest { @Before public void setUp() throws Exception { Main.verbose = true; - MavenPitCommandAndOptions.evosuiteMode = false; - MavenPitCommandAndOptions.descartesMode = false; } @After diff --git a/dspot/src/test/java/fr/inria/diversify/dspot/DSpotTest.java b/dspot/src/test/java/fr/inria/diversify/dspot/DSpotTest.java index 39f81bd17..22adce692 100644 --- a/dspot/src/test/java/fr/inria/diversify/dspot/DSpotTest.java +++ b/dspot/src/test/java/fr/inria/diversify/dspot/DSpotTest.java @@ -1,17 +1,16 @@ package fr.inria.diversify.dspot; -import edu.emory.mathcs.backport.java.util.Collections; import fr.inria.diversify.Utils; import fr.inria.diversify.dspot.amplifier.Amplifier; import fr.inria.diversify.dspot.amplifier.TestMethodCallAdder; import fr.inria.diversify.dspot.selector.JacocoCoverageSelector; import fr.inria.diversify.dspot.selector.TestSelector; -import fr.inria.diversify.utils.DSpotUtils; import fr.inria.diversify.utils.sosiefier.InputConfiguration; import org.junit.Test; import spoon.reflect.declaration.CtMethod; import spoon.reflect.declaration.CtType; +import java.util.Collections; import java.util.List; import static org.junit.Assert.assertEquals; diff --git a/dspot/src/test/java/fr/inria/diversify/dspot/selector/CloverCoverageSelectorTest.java b/dspot/src/test/java/fr/inria/diversify/dspot/selector/CloverCoverageSelectorTest.java index 38d36982c..411c2ded7 100644 --- a/dspot/src/test/java/fr/inria/diversify/dspot/selector/CloverCoverageSelectorTest.java +++ b/dspot/src/test/java/fr/inria/diversify/dspot/selector/CloverCoverageSelectorTest.java @@ -1,7 +1,5 @@ package fr.inria.diversify.dspot.selector; -import edu.emory.mathcs.backport.java.util.Arrays; -import edu.emory.mathcs.backport.java.util.Collections; import fr.inria.diversify.Utils; import fr.inria.diversify.dspot.DSpot; import fr.inria.diversify.dspot.amplifier.Amplifier; @@ -11,6 +9,9 @@ import org.junit.Test; import spoon.reflect.declaration.CtType; +import java.util.Arrays; +import java.util.Collections; + import static org.junit.Assert.assertFalse; /** diff --git a/dspot/src/test/java/fr/inria/diversify/dspot/selector/PitScoreMutantSelectorTest.java b/dspot/src/test/java/fr/inria/diversify/dspot/selector/PitScoreMutantSelectorTest.java index a73df205a..c590eea71 100644 --- a/dspot/src/test/java/fr/inria/diversify/dspot/selector/PitScoreMutantSelectorTest.java +++ b/dspot/src/test/java/fr/inria/diversify/dspot/selector/PitScoreMutantSelectorTest.java @@ -53,9 +53,6 @@ public void testSelection() throws Exception { Main.verbose = true; - MavenPitCommandAndOptions.evosuiteMode = false; - MavenPitCommandAndOptions.descartesMode = false; - List pitResults = PitResultParser.parse(new File("src/test/resources/test-projects/originalpit/mutations.csv")); assertTrue(null != pitResults); diff --git a/dspot/src/test/java/fr/inria/diversify/mutant/descartes/DescartesTest.java b/dspot/src/test/java/fr/inria/diversify/mutant/descartes/DescartesTest.java index 0354e22e2..78dfca6d4 100644 --- a/dspot/src/test/java/fr/inria/diversify/mutant/descartes/DescartesTest.java +++ b/dspot/src/test/java/fr/inria/diversify/mutant/descartes/DescartesTest.java @@ -1,5 +1,6 @@ package fr.inria.diversify.mutant.descartes; +import fr.inria.diversify.utils.AmplificationHelper; import org.apache.commons.io.FileUtils; import org.junit.Ignore; import org.junit.Test; @@ -19,10 +20,6 @@ */ public class DescartesTest { - // TODO implement - - private static final String nl = System.getProperty("line.separator"); - @Test @Ignore public void testInjectionOfDescartesIfNeeded() throws Exception { @@ -37,7 +34,7 @@ public void testInjectionOfDescartesIfNeeded() throws Exception { DescartesInjector.injectDescartesIntoPom(pathname); assertFalse(DescartesChecker.shouldInjectDescartes(pathname)); try (BufferedReader buffer = new BufferedReader(new FileReader(pathname))) { - final String pomAsStr = buffer.lines().collect(Collectors.joining(nl)); + final String pomAsStr = buffer.lines().collect(Collectors.joining(AmplificationHelper.LINE_SEPARATOR)); assertEquals(expectedPom, pomAsStr); } catch (IOException e) { fail("should not throw the exception " + e.toString()); @@ -45,25 +42,39 @@ public void testInjectionOfDescartesIfNeeded() throws Exception { FileUtils.forceDelete(new File(pathname)); } - private static final String expectedPom = "" + nl + - " 4.0.0" + nl + - " example" + nl + - " example" + nl + - " 0.0.1-SNAPSHOT" + nl + - " test-projects" + nl + - "" + nl + - " " + nl + - " UTF-8" + nl + - " 1.7" + nl + - " 1.7" + nl + - " " + nl + - "" + nl + - " " + nl + - " \t" + nl + - " \t\tjunit" + nl + - " \t\tjunit" + nl + - " \t\t4.11" + nl + - " \t" + nl + - " org.pitestpitest-maven1.1.11fr.inria.stampdescartes0.1-SNAPSHOT" + nl + - "org.pitestpitest-maven1.1.11descartesnullvoid0falsefr.inria.stampdescartes0.1-SNAPSHOTstamp-maven-repository-mvn-repohttps://stamp-project.github.io/stamp-maven-repositorytruealways"; + private static final String expectedPom = "" + AmplificationHelper.LINE_SEPARATOR + + "\t4.0.0" + AmplificationHelper.LINE_SEPARATOR + + "\texample" + AmplificationHelper.LINE_SEPARATOR + + "\texample" + AmplificationHelper.LINE_SEPARATOR + + "\t0.0.1-SNAPSHOT" + AmplificationHelper.LINE_SEPARATOR + + "\ttest-projects" + AmplificationHelper.LINE_SEPARATOR + + "" + AmplificationHelper.LINE_SEPARATOR + + "\t" + AmplificationHelper.LINE_SEPARATOR + + "\t\tUTF-8" + AmplificationHelper.LINE_SEPARATOR + + "\t\t1.7" + AmplificationHelper.LINE_SEPARATOR + + "\t\t1.7" + AmplificationHelper.LINE_SEPARATOR + + "\t" + AmplificationHelper.LINE_SEPARATOR + + "" + AmplificationHelper.LINE_SEPARATOR + + "\t" + AmplificationHelper.LINE_SEPARATOR + + "\t\t" + AmplificationHelper.LINE_SEPARATOR + + "\t\t\t" + AmplificationHelper.LINE_SEPARATOR + + "\t\t\t\torg.apache.maven.plugins" + AmplificationHelper.LINE_SEPARATOR + + "\t\t\t\tmaven-compiler-plugin" + AmplificationHelper.LINE_SEPARATOR + + "\t\t\t\t3.7.0" + AmplificationHelper.LINE_SEPARATOR + + "\t\t\t\t" + AmplificationHelper.LINE_SEPARATOR + + "\t\t\t\t\t1.8" + AmplificationHelper.LINE_SEPARATOR + + "\t\t\t\t\t1.8" + AmplificationHelper.LINE_SEPARATOR + + "\t\t\t\t" + AmplificationHelper.LINE_SEPARATOR + + "\t\t\t" + AmplificationHelper.LINE_SEPARATOR + + "\t\torg.pitestpitest-maven1.3.0descartesvoidnulltruefalseempty01(byte)0(byte)1(short)1(short)20L1L0.01.00.0f1.0f' ''A'\"\"\"A\"fr.inria.stampdescartes0.0.1-SNAPSHOT" + AmplificationHelper.LINE_SEPARATOR + + "\t" + AmplificationHelper.LINE_SEPARATOR + + "" + AmplificationHelper.LINE_SEPARATOR + + "\t" + AmplificationHelper.LINE_SEPARATOR + + "\t\t" + AmplificationHelper.LINE_SEPARATOR + + "\t\t\tjunit" + AmplificationHelper.LINE_SEPARATOR + + "\t\t\tjunit" + AmplificationHelper.LINE_SEPARATOR + + "\t\t\t4.11" + AmplificationHelper.LINE_SEPARATOR + + "\t\t" + AmplificationHelper.LINE_SEPARATOR + + "\torg.pitestpitest-maven1.3.0fr.inria.stampdescartes0.0.1-SNAPSHOT" + AmplificationHelper.LINE_SEPARATOR + + "stamp-maven-repository-mvn-repohttps://stamp-project.github.io/stamp-maven-repositorytruealways"; } diff --git a/dspot/src/test/java/fr/inria/diversify/mutant/descartes/PitDescartesTest.java b/dspot/src/test/java/fr/inria/diversify/mutant/descartes/PitDescartesTest.java index ca4d3e243..b76e4753a 100644 --- a/dspot/src/test/java/fr/inria/diversify/mutant/descartes/PitDescartesTest.java +++ b/dspot/src/test/java/fr/inria/diversify/mutant/descartes/PitDescartesTest.java @@ -1,22 +1,18 @@ package fr.inria.diversify.mutant.descartes; import fr.inria.diversify.automaticbuilder.AutomaticBuilderFactory; -import fr.inria.diversify.dspot.amplifier.StatementAdd; -import fr.inria.diversify.dspot.amplifier.TestDataMutator; +import fr.inria.diversify.dspot.amplifier.NumberLiteralAmplifier; +import fr.inria.diversify.dspot.amplifier.StringLiteralAmplifier; import fr.inria.diversify.utils.AmplificationHelper; import fr.inria.diversify.dspot.DSpot; import fr.inria.diversify.dspot.selector.PitMutantScoreSelector; -import fr.inria.diversify.mutant.pit.MavenPitCommandAndOptions; import fr.inria.diversify.utils.sosiefier.InputConfiguration; import fr.inria.stamp.Main; import org.apache.commons.io.FileUtils; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; -import spoon.reflect.declaration.CtClass; -import spoon.reflect.declaration.CtType; import java.io.*; import java.util.Arrays; @@ -31,41 +27,50 @@ */ public class PitDescartesTest { - // TODO implement - @Before public void setUp() throws Exception { AmplificationHelper.setSeedRandom(23L); - FileUtils.deleteDirectory(new File("target/dspot/trash")); - FileUtils.deleteDirectory(new File("src/test/resources/descartes/target")); + try { + FileUtils.deleteDirectory(new File("target/dspot")); + } catch (Exception ignored) { + + } + try { + FileUtils.deleteDirectory(new File("src/test/resources/test-projects/target/")); + } catch (Exception ignored) { + + } Main.verbose = true; - MavenPitCommandAndOptions.descartesMode = false; + PitMutantScoreSelector.descartesMode = false; } @Test - @Ignore public void testPitDescartesMode() throws Exception { - assertFalse(MavenPitCommandAndOptions.descartesMode); - MavenPitCommandAndOptions.descartesMode = true; - InputConfiguration configuration = new InputConfiguration("src/test/resources/descartes/descartes.properties"); + + /* + weak contract: this test should not throw any exception and end properly + the increase of the mutation score and the selection is delegated to dedicated test + here we test that the descartes mode runs + */ + + assertFalse(PitMutantScoreSelector.descartesMode); + PitMutantScoreSelector.descartesMode = true; + PitMutantScoreSelector.pitVersion = "1.2.0"; + InputConfiguration configuration = new InputConfiguration("src/test/resources/test-projects/test-projects.properties"); DSpot dspot = new DSpot(configuration, 1, - new PitMutantScoreSelector("src/test/resources/descartes/mutations.csv")); - final CtClass originalTestClass = dspot.getInputProgram().getFactory().Class().get("fr.inria.stamp.mutationtest.test.TestCalculator"); - assertEquals(2, originalTestClass.getMethods().size()); - final CtType ctType = dspot.amplifyTest( - "fr.inria.stamp.mutationtest.test.TestCalculator", - Collections.singletonList("Integraltypestest") - ); -// assertTrue(originalTestClass.getMethods().size() < ctType.getMethods().size()); // TODO + Arrays.asList(new StringLiteralAmplifier(), new NumberLiteralAmplifier()), + new PitMutantScoreSelector()); + dspot.amplifyTest("example.TestSuiteExample", Collections.singletonList("test2")); FileUtils.cleanDirectory(new File(configuration.getOutputDirectory())); - assertTrue(MavenPitCommandAndOptions.descartesMode); + assertTrue(PitMutantScoreSelector.descartesMode); } @After public void tearDown() throws Exception { AutomaticBuilderFactory.reset(); Main.verbose = false; - MavenPitCommandAndOptions.descartesMode = false; + PitMutantScoreSelector.pitVersion = "1.3.0"; + PitMutantScoreSelector.descartesMode = false; } } diff --git a/dspot/src/test/java/fr/inria/diversify/mutant/pit/PitTest.java b/dspot/src/test/java/fr/inria/diversify/mutant/pit/PitTest.java index 9e9dec113..8db6e0004 100644 --- a/dspot/src/test/java/fr/inria/diversify/mutant/pit/PitTest.java +++ b/dspot/src/test/java/fr/inria/diversify/mutant/pit/PitTest.java @@ -4,6 +4,7 @@ import fr.inria.diversify.automaticbuilder.AutomaticBuilder; import fr.inria.diversify.automaticbuilder.AutomaticBuilderFactory; import fr.inria.diversify.dspot.*; +import fr.inria.diversify.dspot.selector.PitMutantScoreSelector; import fr.inria.diversify.utils.AmplificationHelper; import org.junit.Ignore; import org.junit.Test; @@ -26,38 +27,6 @@ public String getPathToPropertiesFile() { } - //TODO is flaky - @Test - @Ignore - public void testPitEvosuiteMode() throws Exception { - - /* by evosuite mode, we mean the common subset of mutation operators between pitest and evosuite */ - - AmplificationHelper.setSeedRandom(23L); - MavenPitCommandAndOptions.descartesMode = false; - MavenPitCommandAndOptions.evosuiteMode = true; - - Utils.init(this.getPathToPropertiesFile()); - CtClass testClass = Utils.getInputProgram().getFactory().Class().get("example.TestSuiteExample"); - AutomaticBuilder builder = AutomaticBuilderFactory.getAutomaticBuilder(Utils.getInputConfiguration()); - - builder.runPit(Utils.getInputProgram().getProgramDir(), testClass); - List pitResults = PitResultParser.parseAndDelete(Utils.getInputProgram().getProgramDir()+ builder.getOutputDirectoryPit()); - - assertTrue(null != pitResults); - - long nbErrors = pitResults.stream() - .filter(pitResult -> - pitResult.getStateOfMutant() == PitResult.State.MEMORY_ERROR || - pitResult.getStateOfMutant() == PitResult.State.NON_VIABLE|| - pitResult.getStateOfMutant() == PitResult.State.TIMED_OUT - ).count(); - - assertEquals(8, pitResults.stream().filter(pitResult -> pitResult.getStateOfMutant() == PitResult.State.SURVIVED).count(), nbErrors); - assertEquals(8, pitResults.stream().filter(pitResult -> pitResult.getStateOfMutant() == PitResult.State.KILLED).count(), nbErrors); - assertEquals(2, pitResults.stream().filter(pitResult -> pitResult.getStateOfMutant() == PitResult.State.NO_COVERAGE).count(), nbErrors); - } - @Test public void testPit() throws Exception { @@ -67,8 +36,6 @@ public void testPit() throws Exception { */ Utils.reset(); AmplificationHelper.setSeedRandom(23L); - MavenPitCommandAndOptions.descartesMode = false; - MavenPitCommandAndOptions.evosuiteMode = false; Utils.init(this.getPathToPropertiesFile()); CtClass testClass = Utils.getInputProgram().getFactory().Class().get("example.TestSuiteExample"); AutomaticBuilder builder = AutomaticBuilderFactory.getAutomaticBuilder(Utils.getInputConfiguration());