diff --git a/CHANGELOG.md b/CHANGELOG.md index 68e7b24b..9033de68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# 0.2.5 - 2020-08-19 +- Merge upstream changes 16873cb7a67b2b21287ba65c0ac89c7266f2d659 +- Add compatiblity witn Anroid Gradle Plugin 4 [#64](https://github.com/koral--/gradle-pitest-plugin/issue/64) +- Fix report directory parameter handling [#63](https://github.com/koral--/gradle-pitest-plugin/issue/63) + # 0.2.4 - 2020-05-27 - Fix Gradle 6.4 execution break while trying to change mainClass [#60](https://github.com/koral--/gradle-pitest-plugin/issue/60) diff --git a/README.md b/README.md index a4e8fd63..7d7af066 100644 --- a/README.md +++ b/README.md @@ -7,32 +7,34 @@ which supports Android gradle projects. ```groovy plugins { - id 'pl.droidsonroids.pitest' version '0.2.4' + id 'pl.droidsonroids.pitest' version '0.2.5' +} +``` + +```kotlin +plugins { + id("pl.droidsonroids.pitest") version "0.2.5" } ``` ## With Maven central repository -```groovy +```kotlin buildscript { repositories { mavenCentral() google() - // If you're using a version of Gradle lower than 4.1, you must instead use: - // maven { - // url 'https://maven.google.com' - // } - // An alternative URL is 'https://dl.google.com/dl/android/maven2/' } dependencies { - classpath 'pl.droidsonroids.gradle:gradle-pitest-plugin:0.2.4' + classpath "pl.droidsonroids.gradle:gradle-pitest-plugin:0.2.5" } } -apply plugin: 'com.android.application' -//or apply plugin: 'com.android.library' -//or apply plugin: 'com.android.test' - -apply plugin: 'pl.droidsonroids.pitest' +plugins { + id("com.android.application") + //or id("com.android.library") + //or id("com.android.test") + id("pl.droidsonroids.pitest") +} ``` # Usage diff --git a/build.gradle b/build.gradle index 9099c66e..19e0aeb9 100644 --- a/build.gradle +++ b/build.gradle @@ -19,11 +19,7 @@ repositories { } sourceSets { - funcTest { - java.srcDir file('src/funcTest/java') - groovy.srcDir file('src/funcTest/groovy') - resources.srcDir file('src/funcTest/resources') - } + funcTest } dependencies { diff --git a/gradle.properties b/gradle.properties index 38882dbd..55d9cc93 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION=0.2.4 +VERSION=0.2.5 GROUP=pl.droidsonroids.gradle POM_DESCRIPTION=Gradle plugin for PIT Mutation Testing in Android projects POM_URL=https://github.com/koral--/gradle-pitest-plugin diff --git a/gradle/cdeliveryboy-release.gradle b/gradle/cdeliveryboy-release.gradle index 2b8f6117..345425e5 100644 --- a/gradle/cdeliveryboy-release.gradle +++ b/gradle/cdeliveryboy-release.gradle @@ -16,8 +16,6 @@ cDeliveryBoy { nexusStaging { packageGroup = "info.solidsoft" stagingProfileId = "34a3a5beeaa96" - numberOfRetries = 40 - delayBetweenRetriesInMillis = 3000 } scmVersion { diff --git a/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/PitestPluginPitVersionFunctionalSpec.groovy b/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/PitestPluginPitVersionFunctionalSpec.groovy index c0790a9b..611f66c7 100644 --- a/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/PitestPluginPitVersionFunctionalSpec.groovy +++ b/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/PitestPluginPitVersionFunctionalSpec.groovy @@ -9,9 +9,7 @@ import org.gradle.internal.jvm.Jvm @CompileDynamic class PitestPluginPitVersionFunctionalSpec extends AbstractPitestFunctionalSpec { - private static final String PIT_1_3_VERSION = "1.3.1" - private static final String MINIMAL_JAVA9_COMPATIBLE_PIT_VERSION = "1.2.3" //https://github.com/hcoles/pitest/issues/380 - private static final String MINIMAL_JAVA10_COMPATIBLE_PIT_VERSION = "1.4.0" + private static final String MINIMAL_SUPPORTED_PIT_VERSION = "1.4.0" //minimal PIT version that required Java 8 - May 2018 private static final String MINIMAL_JAVA11_COMPATIBLE_PIT_VERSION = "1.4.2" //in fact 1.4.1, but 1.4.2 is also Java 12 compatible private static final String MINIMAL_JAVA13_COMPATIBLE_PIT_VERSION = "1.4.6" //not officially, but at least simple case works private static final String MINIMAL_JAVA14_COMPATIBLE_PIT_VERSION = "1.4.11" //not officially, but with ASM 7.3.1 @@ -41,25 +39,22 @@ class PitestPluginPitVersionFunctionalSpec extends AbstractPitestFunctionalSpec pitVersion << getPitVersionsCompatibleWithCurrentJavaVersion().unique() //be aware that unique() is available since Groovy 2.4.0 } - @SuppressWarnings("IfStatementCouldBeTernary") private List getPitVersionsCompatibleWithCurrentJavaVersion() { + return [getMinimalPitVersionCompatibleWithCurrentJavaVersion(), PitestPlugin.DEFAULT_PITEST_VERSION] + } + + @SuppressWarnings("IfStatementCouldBeTernary") + private String getMinimalPitVersionCompatibleWithCurrentJavaVersion() { if (isJava14Compatible()) { - return [PitestPlugin.DEFAULT_PITEST_VERSION, MINIMAL_JAVA14_COMPATIBLE_PIT_VERSION] + return [MINIMAL_JAVA14_COMPATIBLE_PIT_VERSION] } if (isJava13Compatible()) { - return [PitestPlugin.DEFAULT_PITEST_VERSION, MINIMAL_JAVA13_COMPATIBLE_PIT_VERSION] + return [MINIMAL_JAVA13_COMPATIBLE_PIT_VERSION] } - if (Jvm.current().javaVersion.isJava11Compatible()) { - return [PitestPlugin.DEFAULT_PITEST_VERSION, MINIMAL_JAVA11_COMPATIBLE_PIT_VERSION] - } - if (Jvm.current().javaVersion.isJava10Compatible()) { - return [PitestPlugin.DEFAULT_PITEST_VERSION, MINIMAL_JAVA10_COMPATIBLE_PIT_VERSION] - } - if (Jvm.current().javaVersion.isJava9Compatible()) { - return [PitestPlugin.DEFAULT_PITEST_VERSION, MINIMAL_JAVA9_COMPATIBLE_PIT_VERSION, PIT_1_3_VERSION] + return [MINIMAL_JAVA11_COMPATIBLE_PIT_VERSION] } - return [PitestPlugin.DEFAULT_PITEST_VERSION, "1.2.0", PIT_1_3_VERSION, "1.4.0"] + return [MINIMAL_SUPPORTED_PIT_VERSION] } } diff --git a/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/TestFixturesFunctionalSpec.groovy b/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/TestFixturesFunctionalSpec.groovy new file mode 100644 index 00000000..501debaa --- /dev/null +++ b/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/TestFixturesFunctionalSpec.groovy @@ -0,0 +1,21 @@ +package pl.droidsonroids.gradle.pitest.functional + +import groovy.transform.CompileDynamic +import nebula.test.functional.ExecutionResult + +@CompileDynamic +class TestFixturesFunctionalSpec extends AbstractPitestFunctionalSpec { + + void "should work with java-test-fixtures plugin"() { + given: + copyResources("testProjects/testFixtures", "") + when: + ExecutionResult result = runTasks('pitestRelease') + then: + !result.standardError.contains("Build failed with an exception") + !result.failure + result.wasExecuted('pitestRelease') + result.standardOutput.contains('Generated 1 mutations Killed 1 (100%)') + } + +} diff --git a/src/funcTest/resources/testProjects/junit5spock2/build.gradle b/src/funcTest/resources/testProjects/junit5spock2/build.gradle new file mode 100644 index 00000000..2deb5256 --- /dev/null +++ b/src/funcTest/resources/testProjects/junit5spock2/build.gradle @@ -0,0 +1,35 @@ +apply plugin: 'java' +apply plugin: 'groovy' +apply plugin: 'info.solidsoft.pitest' + +/* +//Local/current version of the plugin should be put on a classpath earlier to override that plugin version +buildscript { + repositories { + mavenCentral() + mavenLocal() + } + dependencies { + classpath 'info.solidsoft.gradle.pitest:gradle-pitest-plugin:X.Y.Z-SNAPSHOT' + } +} +*/ + +repositories { + mavenCentral() +} + +group = "pitest.test" + +dependencies { + testImplementation 'org.spockframework:spock-core:2.0-M3-groovy-2.5' +} + +test { + useJUnitPlatform() +} + +pitest { +// testPlugin = "junit5" //not needed - 'junit5PluginVersion' should implicitly set it + junit5PluginVersion = "0.12" +} diff --git a/src/funcTest/resources/testProjects/junit5spock2/settings.gradle b/src/funcTest/resources/testProjects/junit5spock2/settings.gradle new file mode 100644 index 00000000..367b6eee --- /dev/null +++ b/src/funcTest/resources/testProjects/junit5spock2/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'simpleSpock2' diff --git a/src/funcTest/resources/testProjects/junit5spock2/src/main/java/pitest/test/Library.java b/src/funcTest/resources/testProjects/junit5spock2/src/main/java/pitest/test/Library.java new file mode 100644 index 00000000..099a336b --- /dev/null +++ b/src/funcTest/resources/testProjects/junit5spock2/src/main/java/pitest/test/Library.java @@ -0,0 +1,7 @@ +package pitest.test; + +public class Library { + public boolean someLibraryMethod() { + return true; + } +} diff --git a/src/funcTest/resources/testProjects/junit5spock2/src/test/groovy/pitest/test/LibrarySpock2Spec.groovy b/src/funcTest/resources/testProjects/junit5spock2/src/test/groovy/pitest/test/LibrarySpock2Spec.groovy new file mode 100644 index 00000000..7e661229 --- /dev/null +++ b/src/funcTest/resources/testProjects/junit5spock2/src/test/groovy/pitest/test/LibrarySpock2Spec.groovy @@ -0,0 +1,13 @@ +package pitest.test; + +import spock.lang.Specification; + +class LibrarySpock2Spec extends Specification { + + void "should generate some mutation coverage"() { + given: + Library classUnderTest = new Library(); + expect: + classUnderTest.someLibraryMethod() + } +} diff --git a/src/funcTest/resources/testProjects/testFixtures/build.gradle b/src/funcTest/resources/testProjects/testFixtures/build.gradle new file mode 100644 index 00000000..e8c47ebd --- /dev/null +++ b/src/funcTest/resources/testProjects/testFixtures/build.gradle @@ -0,0 +1,36 @@ +apply plugin: 'com.android.library' +apply plugin: 'java-test-fixtures' +apply plugin: 'pl.droidsonroids.pitest' + +buildscript { + repositories { + mavenCentral() + mavenLocal() + } + dependencies { + //Local/current version of the plugin should be put on a classpath earlier to override that plugin version +// classpath 'info.solidsoft.gradle.pitest:gradle-pitest-plugin:1.1.7-SNAPSHOT' + } +} + +repositories { + mavenCentral() +} + +group = "pitest.test" + +dependencies { + testImplementation 'junit:junit:4.12' +} + +android { + compileSdkVersion 30 + defaultConfig { + minSdkVersion 24 + targetSdkVersion 30 + } + lintOptions { + //ignore missing lint database + abortOnError false + } +} diff --git a/src/funcTest/resources/testProjects/testFixtures/settings.gradle b/src/funcTest/resources/testProjects/testFixtures/settings.gradle new file mode 100644 index 00000000..0109c47a --- /dev/null +++ b/src/funcTest/resources/testProjects/testFixtures/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'testFixtures' diff --git a/src/funcTest/resources/testProjects/testFixtures/src/main/AndroidManifest.xml b/src/funcTest/resources/testProjects/testFixtures/src/main/AndroidManifest.xml new file mode 100644 index 00000000..36e4014b --- /dev/null +++ b/src/funcTest/resources/testProjects/testFixtures/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/src/funcTest/resources/testProjects/testFixtures/src/main/java/pitest/test/Library.java b/src/funcTest/resources/testProjects/testFixtures/src/main/java/pitest/test/Library.java new file mode 100644 index 00000000..099a336b --- /dev/null +++ b/src/funcTest/resources/testProjects/testFixtures/src/main/java/pitest/test/Library.java @@ -0,0 +1,7 @@ +package pitest.test; + +public class Library { + public boolean someLibraryMethod() { + return true; + } +} diff --git a/src/funcTest/resources/testProjects/testFixtures/src/test/java/pitest/test/LibraryTest.java b/src/funcTest/resources/testProjects/testFixtures/src/test/java/pitest/test/LibraryTest.java new file mode 100644 index 00000000..64fac064 --- /dev/null +++ b/src/funcTest/resources/testProjects/testFixtures/src/test/java/pitest/test/LibraryTest.java @@ -0,0 +1,13 @@ +package pitest.test; + +import org.junit.Test; +import pitest.test.Library; + +import static org.junit.Assert.*; + +public class LibraryTest { + @Test public void testSomeLibraryMethod() { + Library classUnderTest = new Library(); + assertTrue("someLibraryMethod should return 'true'", classUnderTest.someLibraryMethod()); + } +} diff --git a/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestTask.groovy b/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestTask.groovy index 7ecfb834..3c20f00b 100644 --- a/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestTask.groovy +++ b/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestTask.groovy @@ -326,7 +326,6 @@ class PitestTask extends JavaExec { @Override void exec() { - //Workaround for compatibility with Gradle <4.0 due to setArgs(List) and setJvmArgs(List) added in Gradle 4.0 args = argumentsForPit() jvmArgs = ((List) getMainProcessJvmArgs().getOrNull() ?: getJvmArgs()) classpath = getLaunchClasspath() diff --git a/src/test/groovy/pl/droidsonroids/gradle/pitest/PitestTaskConfigurationSpec.groovy b/src/test/groovy/pl/droidsonroids/gradle/pitest/PitestTaskConfigurationSpec.groovy index aef85c5b..8b4e5469 100644 --- a/src/test/groovy/pl/droidsonroids/gradle/pitest/PitestTaskConfigurationSpec.groovy +++ b/src/test/groovy/pl/droidsonroids/gradle/pitest/PitestTaskConfigurationSpec.groovy @@ -16,7 +16,6 @@ package pl.droidsonroids.gradle.pitest import groovy.transform.CompileDynamic -import spock.lang.Ignore import spock.lang.Issue @CompileDynamic @@ -236,13 +235,4 @@ class PitestTaskConfigurationSpec extends BasicProjectBuilderSpec implements Wit }*.absolutePath } - @Ignore("TODO move to funcTest") - void "should consider testSourceSets in (additional) classpath"() { - given: - project.android.sourceSets.test.java.srcDir("intTest") - project.pitest.testSourceSets = [project.android.sourceSets.test] - expect: - task.taskArgumentMap()['classPath'].find(".*/intTest") != null - } - }