diff --git a/README.md b/README.md index 42592735a..76403c56b 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ Read all about it at http://pitest.org * #1063 - Improve filtering of equivalent return mutants * #1066 - Expand static initializer filtering +* #1070 - Remove jacoco agent if present on argline ### 1.9.3 diff --git a/pitest-entry/src/main/java/org/pitest/process/WrappingProcess.java b/pitest-entry/src/main/java/org/pitest/process/WrappingProcess.java index 5c067a99c..aa6aca8eb 100644 --- a/pitest-entry/src/main/java/org/pitest/process/WrappingProcess.java +++ b/pitest-entry/src/main/java/org/pitest/process/WrappingProcess.java @@ -85,13 +85,23 @@ private ProcessBuilder createProcessBuilder(String javaProc, // IBM jdk adds this, thereby breaking everything removeClassPathProperties(cmd); + + removeJacocoAgent(cmd); return new ProcessBuilder(cmd); } + private void removeJacocoAgent(List cmd) { + removeFromClassPath(cmd, line -> line.startsWith("-javaagent") && line.contains("jacoco")); + } + private static void removeClassPathProperties(List cmd) { + removeFromClassPath(cmd, s -> s.startsWith("-Djava.class.path")); + } + + private static void removeFromClassPath(List cmd, Predicate match) { for (int i = cmd.size() - 1; i >= 0; i--) { - if (cmd.get(i).startsWith("-Djava.class.path")) { + if (match.test(cmd.get(i))) { cmd.remove(i); } } @@ -106,10 +116,10 @@ private List createLaunchArgs(String javaProcess, createClasspathJar(classPath, cmd); - cmd.addAll(args); - addPITJavaAgent(agentJarLocator, cmd); + cmd.addAll(args); + addLaunchJavaAgents(cmd); cmd.add(mainClass.getName()); diff --git a/pitest-maven-verification/src/test/java/org/pitest/PitMojoIT.java b/pitest-maven-verification/src/test/java/org/pitest/PitMojoIT.java index 3acf6401e..4ec7d2c12 100755 --- a/pitest-maven-verification/src/test/java/org/pitest/PitMojoIT.java +++ b/pitest-maven-verification/src/test/java/org/pitest/PitMojoIT.java @@ -34,6 +34,7 @@ import java.io.InputStream; import java.util.Properties; +import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.*; import static org.junit.Assume.assumeFalse; @@ -445,6 +446,14 @@ public void shouldFailCleanlyWhenTestPluginMissing() throws IOException { } } + @Test + public void shouldDisableJacoco() throws IOException, VerificationException { + File testDir = prepare("/pit-jacoco"); + verifier.executeGoals(asList("test-compile", "org.pitest:pitest-maven:mutationCoverage")); + + String actual = readResults(testDir); + assertThat(actual).doesNotContain("RUN_ERROR"); + } private void skipIfJavaVersionNotSupportByThirdParty() { String javaVersion = System.getProperty("java.version"); @@ -474,6 +483,7 @@ private File prepare(String testPath) throws IOException, verifier = new Verifier(path); verifier.setAutoclean(false); verifier.setDebug(true); + verifier.getCliOptions().add("-Dverbose=true"); verifier.getCliOptions().add("-Dpit.version=" + VERSION); verifier.getCliOptions().add( "-Dthreads=" + (Runtime.getRuntime().availableProcessors())); diff --git a/pitest-maven-verification/src/test/resources/pit-jacoco/pom.xml b/pitest-maven-verification/src/test/resources/pit-jacoco/pom.xml new file mode 100644 index 000000000..9db273815 --- /dev/null +++ b/pitest-maven-verification/src/test/resources/pit-jacoco/pom.xml @@ -0,0 +1,96 @@ + + + 4.0.0 + com.example + pitest-sample + 0.1-SNAPSHOT + pit maven findOccupiedTestPackages coverage + + + UTF-8 + + + + + junit + junit + 4.13.1 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.4 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M1 + + + org.pitest + pitest-maven + ${pit.version} + + true + + XML + + false + true + + + + org.jacoco + jacoco-maven-plugin + 0.8.8 + + + + prepare-agent + + + + jacoco-report + test + + report + + + + + jacoco-check + + check + + + + + PACKAGE + + + LINE + COVEREDRATIO + 0.9 + + + + + + + + + + + + diff --git a/pitest-maven-verification/src/test/resources/pit-jacoco/src/main/java/sources/DiscoveredClass.java b/pitest-maven-verification/src/test/resources/pit-jacoco/src/main/java/sources/DiscoveredClass.java new file mode 100644 index 000000000..acc8b6fa6 --- /dev/null +++ b/pitest-maven-verification/src/test/resources/pit-jacoco/src/main/java/sources/DiscoveredClass.java @@ -0,0 +1,9 @@ +package sources; + +public class DiscoveredClass { + + public int add(int a, int b) { + return a + b; + } + +} diff --git a/pitest-maven-verification/src/test/resources/pit-jacoco/src/main/java/sources/MessageBuilder.java b/pitest-maven-verification/src/test/resources/pit-jacoco/src/main/java/sources/MessageBuilder.java new file mode 100644 index 000000000..e3cb4e6fb --- /dev/null +++ b/pitest-maven-verification/src/test/resources/pit-jacoco/src/main/java/sources/MessageBuilder.java @@ -0,0 +1,17 @@ +package sources; + +public class MessageBuilder { + + public String getMessage(String name) { + + StringBuilder result = new StringBuilder(); + + if (name == null || name.trim().length() == 0) { + result.append("Stuff!"); + } else { + result.append("Hello " + name); + } + return result.toString(); + } + +} diff --git a/pitest-maven-verification/src/test/resources/pit-jacoco/src/test/java/tests/DiscoveredTest.java b/pitest-maven-verification/src/test/resources/pit-jacoco/src/test/java/tests/DiscoveredTest.java new file mode 100644 index 000000000..77d8c45c9 --- /dev/null +++ b/pitest-maven-verification/src/test/resources/pit-jacoco/src/test/java/tests/DiscoveredTest.java @@ -0,0 +1,16 @@ +package tests; + +import static junit.framework.Assert.assertEquals; + +import org.junit.Test; + +import sources.DiscoveredClass; + +public class DiscoveredTest { + + @Test + public void testAdd() { + assertEquals(2, new DiscoveredClass().add(1, 1)); + } + +} diff --git a/pitest-maven-verification/src/test/resources/pit-jacoco/src/test/java/tests/TestMessageBuilder.java b/pitest-maven-verification/src/test/resources/pit-jacoco/src/test/java/tests/TestMessageBuilder.java new file mode 100644 index 000000000..ef4d014cf --- /dev/null +++ b/pitest-maven-verification/src/test/resources/pit-jacoco/src/test/java/tests/TestMessageBuilder.java @@ -0,0 +1,16 @@ +package tests; + +import org.junit.Test; +import sources.MessageBuilder; + +import static org.junit.Assert.assertEquals; + +public class TestMessageBuilder { + + @Test + public void testName() { + MessageBuilder obj = new MessageBuilder(); + assertEquals("Hello there", obj.getMessage("there")); + } + +}