diff --git a/README.md b/README.md index 402bdb24..45cba2d1 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,22 @@ pitest { ``` In such case default mockable Android JAR won't be added and alternative one will be used under tests. +## Using jetifier +This plugin tries to discover all the unit test dependencies and add them to the pitest classpath automatically. +But, this feature doesn't work with [jetifier](https://developer.android.com/studio/command-line/jetifier) +(`android.enableJetifier=true` in `gradle.properties`). + +If you are using jetifier and encounter `NoClassDefFoundError`s in tests run under pitest, you may want to add +some dependencies manually to the `pitestTestCompile` configuration. For example: +```groovy +buildscript { + configurations.create("pitestTestCompile") + dependencies { + pitestTestCompile 'io.mockk:mockk-agent-jvm:1.11.0' + } +} +``` + # Troubleshooting ## Tests fail when run under pitest but pass without it Issue occurs when using [Android API](https://developer.android.com/reference/packages.html) diff --git a/build.gradle b/build.gradle index 30108869..3578f8cf 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ plugins { sourceCompatibility = 1.8 -ext.pitestAggregatorVersion = "1.9.11" //Must be equal to default PIT version in PitestPlugin +ext.pitestAggregatorVersion = "1.15.0" //Must be equal to default PIT version in PitestPlugin repositories { mavenCentral() @@ -39,21 +39,15 @@ dependencies { testImplementation('org.spockframework:spock-junit4:2.3-groovy-3.0') { exclude group: 'org.codehaus.groovy' } - testImplementation 'net.bytebuddy:byte-buddy:1.14.7' //for Spying in Spock + testImplementation 'net.bytebuddy:byte-buddy:1.14.8' //for Spying in Spock - funcTestImplementation sourceSets.main.output - //to make production plugin classes visible in functional tests (it's not in testImplementation configuration) + funcTestImplementation sourceSets.main.output //to make production plugin classes visible in functional tests (it's not in testCompile configuration) + funcTestImplementation sourceSets.test.output funcTestImplementation configurations.testImplementation funcTestRuntimeOnly configurations.testRuntimeOnly funcTestImplementation('com.netflix.nebula:nebula-test:10.5.0') { exclude group: 'org.codehaus.groovy', module: 'groovy-all' } - def toolingApiBuildersJar = (project as ProjectInternal).services.get(ModuleRegistry.class) - .getModule("gradle-tooling-api-builders") - .classpath - .asFiles - .first() - testRuntimeOnly(files(toolingApiBuildersJar)) } tasks.register('funcTest', Test) { diff --git a/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/KotlinPitestPluginFunctionalSpec.groovy b/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/KotlinPitestPluginFunctionalSpec.groovy index 954ccca3..f43b4ef8 100644 --- a/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/KotlinPitestPluginFunctionalSpec.groovy +++ b/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/KotlinPitestPluginFunctionalSpec.groovy @@ -67,19 +67,7 @@ class KotlinPitestPluginFunctionalSpec extends AbstractPitestFunctionalSpec { result.wasExecuted(':test') } - void "should run mutation analysis with Android Gradle plugin 3"() { - when: - copyResources("testProjects/simpleKotlin", "") - then: - fileExists('build.gradle') - when: - ExecutionResult result = runTasksSuccessfully('pitestRelease') - then: - result.wasExecuted(':pitestRelease') - result.standardOutput.contains('Generated 3 mutations Killed 3 (100%)') - } - - void "should run mutation analysis with Android Gradle plugin 2"() { + void "should run mutation analysis with kotlin Android plugin"() { when: copyResources("testProjects/simpleKotlin", "") then: diff --git a/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/MockableAndroidJarFunctionalSpec.groovy b/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/MockableAndroidJarFunctionalSpec.groovy index 312e01e3..32888194 100644 --- a/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/MockableAndroidJarFunctionalSpec.groovy +++ b/src/funcTest/groovy/pl/droidsonroids/gradle/pitest/functional/MockableAndroidJarFunctionalSpec.groovy @@ -50,6 +50,7 @@ class MockableAndroidJarFunctionalSpec extends AbstractPitestFunctionalSpec { dependencies { testImplementation 'junit:junit:4.13.2' + testImplementation 'org.json:json:20180813' } """.stripIndent() and: diff --git a/src/funcTest/resources/testProjects/mockableAndroidJar/src/test/java/pitest/test/LibraryTest.java b/src/funcTest/resources/testProjects/mockableAndroidJar/src/test/java/pitest/test/LibraryTest.java index e85e86aa..397a1741 100644 --- a/src/funcTest/resources/testProjects/mockableAndroidJar/src/test/java/pitest/test/LibraryTest.java +++ b/src/funcTest/resources/testProjects/mockableAndroidJar/src/test/java/pitest/test/LibraryTest.java @@ -3,6 +3,7 @@ import org.junit.Test; import pitest.test.Library; +import org.json.JSONObject; import static org.junit.Assert.*; @@ -12,4 +13,10 @@ public void testSomeLibraryMethod() { Library classUnderTest = new Library(); assertTrue("someLibraryMethod should return 'true'", classUnderTest.someLibraryMethod()); } + + @Test + public void testJSON() throws Exception { + JSONObject jsonObject = new JSONObject("{\"id\": 123}"); + assertEquals("123", jsonObject.optString("id")); + } } diff --git a/src/funcTest/resources/testProjects/simpleKotlin/gradle.properties b/src/funcTest/resources/testProjects/simpleKotlin/gradle.properties new file mode 100644 index 00000000..646c51b9 --- /dev/null +++ b/src/funcTest/resources/testProjects/simpleKotlin/gradle.properties @@ -0,0 +1,2 @@ +android.useAndroidX=true +android.enableJetifier=true diff --git a/src/main/groovy/pl/droidsonroids/gradle/pitest/AggregateReportTask.groovy b/src/main/groovy/pl/droidsonroids/gradle/pitest/AggregateReportTask.groovy index 8b6f9629..dcff7d81 100644 --- a/src/main/groovy/pl/droidsonroids/gradle/pitest/AggregateReportTask.groovy +++ b/src/main/groovy/pl/droidsonroids/gradle/pitest/AggregateReportTask.groovy @@ -104,7 +104,7 @@ abstract class AggregateReportTask extends DefaultTask { @TaskAction void aggregate() { - logger.info("Aggregating pitest reports") + logger.info("Aggregating pitest reports (mutationFiles: {}, lineCoverageFiles: {})", mutationFiles.elements.getOrNull(), lineCoverageFiles.elements.getOrNull()) WorkQueue workQueue = getWorkerExecutor().classLoaderIsolation { workerSpec -> workerSpec.getClasspath().from(getPitestReportClasspath()) diff --git a/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestAggregatorPlugin.groovy b/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestAggregatorPlugin.groovy index e72b0d56..6140777a 100644 --- a/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestAggregatorPlugin.groovy +++ b/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestAggregatorPlugin.groovy @@ -49,19 +49,19 @@ class PitestAggregatorPlugin implements Plugin { return configuration } + addPitAggregateReportDependency(pitestReportConfiguration) project.tasks.register(PITEST_REPORT_AGGREGATE_TASK_NAME, AggregateReportTask) { t -> t.description = "Aggregate PIT reports" t.group = PitestPlugin.PITEST_TASK_GROUP configureTaskDefaults(t) //shouldRunAfter should be enough, but it fails in functional tests as :pitestReportAggregate is executed before :pitest tasks from subprojects t.mustRunAfter(project.allprojects.collect { Project p -> p.tasks.withType(PitestTask) }) - addPitAggregateReportDependency(pitestReportConfiguration) t.pitestReportClasspath.from(pitestReportConfiguration) } } private void configureTaskDefaults(AggregateReportTask aggregateReportTask) { - aggregateReportTask.with { + aggregateReportTask.with { task -> reportDir.set(new File(getReportBaseDirectory(), PitestPlugin.PITEST_REPORT_DIRECTORY_NAME)) reportFile.set(reportDir.file("index.html")) diff --git a/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestPlugin.groovy b/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestPlugin.groovy index 3666b2c3..99be027c 100644 --- a/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestPlugin.groovy +++ b/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestPlugin.groovy @@ -15,17 +15,18 @@ */ package pl.droidsonroids.gradle.pitest +import com.android.build.api.dsl.AndroidSourceSet import com.android.build.gradle.AppPlugin import com.android.build.gradle.BaseExtension import com.android.build.gradle.LibraryPlugin import com.android.build.gradle.TestPlugin -import com.android.build.api.dsl.AndroidSourceSet import com.android.build.gradle.api.BaseVariant import com.android.build.gradle.internal.api.TestedVariant import com.android.builder.model.AndroidProject import com.vdurmont.semver4j.Semver import groovy.transform.CompileDynamic import groovy.transform.PackageScope +import org.gradle.api.GradleException import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.Task @@ -51,9 +52,10 @@ import static org.gradle.language.base.plugins.LifecycleBasePlugin.VERIFICATION_ @CompileDynamic class PitestPlugin implements Plugin { - public final static String DEFAULT_PITEST_VERSION = '1.9.11' + public final static String DEFAULT_PITEST_VERSION = '1.15.0' public final static String PITEST_TASK_GROUP = VERIFICATION_GROUP public final static String PITEST_TASK_NAME = "pitest" + public final static String PITEST_REPORT_DIRECTORY_NAME = 'pitest' public final static String PITEST_CONFIGURATION_NAME = 'pitest' public final static String PITEST_TEST_COMPILE_CONFIGURATION_NAME = 'pitestTestCompile' @@ -69,7 +71,6 @@ class PitestPlugin implements Plugin { //visible for testing final static String PIT_HISTORY_DEFAULT_FILE_NAME = 'pitHistory.txt' private final static String PIT_ADDITIONAL_CLASSPATH_DEFAULT_FILE_NAME = "pitClasspath" - public final static String PITEST_REPORT_DIRECTORY_NAME = 'pitest' public static final String PLUGIN_ID = 'pl.droidsonroids.pitest' private Project project @@ -89,6 +90,7 @@ class PitestPlugin implements Plugin { void apply(Project project) { this.project = project + failWithMeaningfulErrorMessageOnUnsupportedConfigurationInRootProjectBuildScript() createConfigurations() pitestExtension = project.extensions.create("pitest", PitestPluginExtension, project) @@ -96,6 +98,7 @@ class PitestPlugin implements Plugin { pitestExtension.fileExtensionsToFilter.set(DEFAULT_FILE_EXTENSIONS_TO_FILTER_FROM_CLASSPATH) pitestExtension.useClasspathFile.set(false) pitestExtension.verbosity.set("NO_SPINNER") + pitestExtension.addJUnitPlatformLauncher.set(true) project.pluginManager.apply(BasePlugin) @@ -121,6 +124,14 @@ class PitestPlugin implements Plugin { } } + private void failWithMeaningfulErrorMessageOnUnsupportedConfigurationInRootProjectBuildScript() { + if (project.rootProject.buildscript.configurations.findByName(PITEST_CONFIGURATION_NAME) != null) { + throw new GradleException("The '${PITEST_CONFIGURATION_NAME}' buildscript configuration found in the root project. " + + "This is no longer supported in 1.5.0+ and has to be changed to the regular (sub)project configuration. " + + "See the project FAQ for migration details.") + } + } + @SuppressWarnings("BuilderMethodWithSideEffects") private void createPitestTasks(DefaultDomainObjectSet variants) { Task globalTask = project.tasks.create(PITEST_TASK_NAME) @@ -133,6 +144,11 @@ class PitestPlugin implements Plugin { variants.all { BaseVariant variant -> PitestTask variantTask = project.tasks.create("${PITEST_TASK_NAME}${variant.name.capitalize()}", PitestTask) + boolean includeMockableAndroidJar = !pitestExtension.excludeMockableAndroidJar.getOrElse(false) + if (includeMockableAndroidJar) { + addMockableAndroidJarDependencies() + } + Task mockableAndroidJarTask if (ANDROID_GRADLE_PLUGIN_VERSION_NUMBER < new Semver("3.2.0")) { mockableAndroidJarTask = project.tasks.findByName("mockableAndroidJar") @@ -142,7 +158,7 @@ class PitestPlugin implements Plugin { configureTaskDefault(variantTask, variant, mockableAndroidJarTask.outputJar) } - if (!pitestExtension.excludeMockableAndroidJar.getOrElse(false)) { + if (includeMockableAndroidJar) { variantTask.dependsOn mockableAndroidJarTask } @@ -158,6 +174,18 @@ class PitestPlugin implements Plugin { } } + private void addMockableAndroidJarDependencies() { + //according to https://search.maven.org/artifact/com.google.android/android/4.1.1.4/jar + project.buildscript.dependencies { + "$PITEST_TEST_COMPILE_CONFIGURATION_NAME" "org.json:json:20080701" + "$PITEST_TEST_COMPILE_CONFIGURATION_NAME" "xpp3:xpp3:1.1.4c" + "$PITEST_TEST_COMPILE_CONFIGURATION_NAME" "xerces:xmlParserAPIs:2.6.2" + "$PITEST_TEST_COMPILE_CONFIGURATION_NAME" "org.khronos:opengl-api:gl1.1-android-2.1_r1" + "$PITEST_TEST_COMPILE_CONFIGURATION_NAME" "org.apache.httpcomponents:httpclient:4.0.1" + "$PITEST_TEST_COMPILE_CONFIGURATION_NAME" "commons-logging:commons-logging:1.1.1" + } + } + @SuppressWarnings("BuilderMethodWithSideEffects") private void createConfigurations() { [PITEST_CONFIGURATION_NAME, PITEST_TEST_COMPILE_CONFIGURATION_NAME].each { configuration -> @@ -181,7 +209,7 @@ class PitestPlugin implements Plugin { from(mockableAndroidJar) } - if (ANDROID_GRADLE_PLUGIN_VERSION_NUMBER.major == 3) { + if (ANDROID_GRADLE_PLUGIN_VERSION_NUMBER.major == 3 && project.findProperty("android.enableJetifier") != "true") { if (ANDROID_GRADLE_PLUGIN_VERSION_NUMBER.minor < 3) { from(project.configurations["${variant.name}CompileClasspath"].copyRecursive { configuration -> configuration.properties.dependencyProject == null @@ -196,9 +224,9 @@ class PitestPlugin implements Plugin { } else if (ANDROID_GRADLE_PLUGIN_VERSION_NUMBER.major == 4) { from(project.configurations["compile"]) from(project.configurations["testCompile"]) - } else if (ANDROID_GRADLE_PLUGIN_VERSION_NUMBER.major > 4) { + } else if (ANDROID_GRADLE_PLUGIN_VERSION_NUMBER.major > 4 && project.findProperty("android.enableJetifier") != "true") { from(project.configurations["${variant.name}UnitTestRuntimeClasspath"].copyRecursive { configuration -> - configuration.properties.dependencyProject == null + configuration.properties.dependencyProject == null && configuration.version != null }) } from(project.configurations["pitestRuntimeOnly"]) @@ -240,7 +268,6 @@ class PitestPlugin implements Plugin { return targetClasses.getOrNull() } } as Provider>) - dependencyDistance.set(pitestExtension.dependencyDistance) threads.set(pitestExtension.threads) mutators.set(pitestExtension.mutators) excludedMethods.set(pitestExtension.excludedMethods) @@ -351,7 +378,7 @@ class PitestPlugin implements Plugin { final GradleVersion minimalPitVersionNotNeedingTestPluginProperty = GradleVersion.version("1.6.7") if (GradleVersion.version(configuredPitVersion) >= minimalPitVersionNotNeedingTestPluginProperty) { log.info("Passing '--testPlugin' to PIT disabled for PIT 1.6.7+. See https://github.com/szpak/gradle-pitest-plugin/issues/277") - pitestTask.testPlugin.set((String)null) + pitestTask.testPlugin.set((String) null) } } catch (IllegalArgumentException e) { log.warn("Error during PIT versions comparison. Is '$configuredPitVersion' really valid? If yes, please report that case. " + diff --git a/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestPluginExtension.groovy b/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestPluginExtension.groovy index c2175ea9..84599a57 100644 --- a/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestPluginExtension.groovy +++ b/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestPluginExtension.groovy @@ -53,6 +53,7 @@ class PitestPluginExtension { * Related issue: https://github.com/szpak/gradle-pitest-plugin/issues/277 * * @since 1.3.0 + * @deprecated Not needed with PIT 1.6.7+, to be removed in PIT 1.8.0. */ @Deprecated final Property testPlugin @@ -74,7 +75,6 @@ class PitestPluginExtension { final SetProperty targetClasses final SetProperty targetTests - final Property dependencyDistance final Property threads final SetProperty mutators final SetProperty excludedMethods @@ -83,7 +83,8 @@ class PitestPluginExtension { /** * A list of test classes which should be excluded when mutating. * - * @since 1.3.0* @see #excludedClasses + * @since 1.3.0 + * @see #excludedClasses * @see #excludedMethods */ @Incubating @@ -156,13 +157,21 @@ class PitestPluginExtension { * * Samples usage ("itest" project depends on "shared" project): *
-     * configure(project(':itest')) {*     dependencies {*         compile project(':shared')
-     *}*
-     *     apply plugin: "pl.droidsonroids.pitest"
+     * configure(project(':itest')) {
+     *     dependencies {
+     *         compile project(':shared')
+     *     }
+     *
+     *     apply plugin: "info.solidsoft.pitest"
      *     //mutableCodeBase - additional configuration to resolve :shared project JAR as mutable code path for PIT
-     *     configurations { mutableCodeBase { transitive false }}*     dependencies { mutableCodeBase project(':shared') }*     pitest {*         mainSourceSets = [project.sourceSets.main, project(':shared').sourceSets.main]
+     *     configurations { mutableCodeBase { transitive false } }
+     *     dependencies { mutableCodeBase project(':shared') }
+     *     pitest {
+     *         mainSourceSets = [project.sourceSets.main, project(':shared').sourceSets.main]
      *         additionalMutableCodePaths = [configurations.mutableCodeBase.singleFile]
-     *}*}* 
+ * } + * } + * * * @since 1.1.3 (specific for Gradle plugin) */ @@ -188,8 +197,10 @@ class PitestPluginExtension { * * Should be defined a map: *
-     * pitest {*     pluginConfiguration = ["plugin1.key1": "value1", "plugin1.key2": "value2"]
-     *}* 
+ * pitest { + * pluginConfiguration = ["plugin1.key1": "value1", "plugin1.key2": "value2"] + * } + * */ MapProperty pluginConfiguration @@ -217,8 +228,10 @@ class PitestPluginExtension { * PIT fails on not Java specific file passed on a classpath (e.g. native libraries). Native libraries ('*.so', '*.dll', '*.dylib') * and '*.pom' files are filtered by default, but a developer can add extra extensions to the list: *
-     * pitest {*     fileExtensionsToFilter += ['xml', 'orbit']
-     *}* 
+ * pitest { + * fileExtensionsToFilter += ['xml', 'orbit'] + * } + * * * Rationale: https://github.com/szpak/gradle-pitest-plugin/issues/53 * @@ -226,8 +239,10 @@ class PitestPluginExtension { * * Please note. Starting with 1.4.6 due to Gradle limitations only the new syntax with addAll()/addAll([] is possible (instead of "+="): * - * pitest {* fileExtensionsToFilter.addAll('xml', 'orbit') - *}* + * pitest { + * fileExtensionsToFilter.addAll('xml', 'orbit') + * } + * * More information: https://github.com/gradle/gradle/issues/10475 * * @since 1.2.4 @@ -235,6 +250,23 @@ class PitestPluginExtension { @Incubating final ListProperty fileExtensionsToFilter + /** + * Adds 'junit-platform-launcher' automatically to the 'testRuntimeOnly' configuration. + * + * Starting with PIT 1.14.0 (with pitest-junit-plugin 1.2.0+) that dependency is no longer shaded and has to be explicitly added to avoid: + * "Minion exited abnormally due to UNKNOWN_ERROR" or "NoClassDefFoundError: org.junit.platform.launcher.core.LauncherFactory". + * This feature is enabled by default if junit-platform is found on the testImplementation classes. + * + * PLEASE NOTE. This feature is experimental and might not work as expected in some corner cases. In that situation, just disable it and add + * required dependency 'junit-platform-launcher' in a proper version to 'testRuntimeOnly' manually. + * + * More information: https://github.com/szpak/gradle-pitest-plugin/issues/337 + * + * @since 1.14.0 + */ + @Incubating + final Property addJUnitPlatformLauncher + final ReportAggregatorProperties reportAggregatorProperties PitestPluginExtension(Project project) { @@ -248,7 +280,6 @@ class PitestPluginExtension { targetClasses = nullSetPropertyOf(p, String) //null instead of empty collection to distinguish on optional parameters targetTests = nullSetPropertyOf(p, String) - dependencyDistance = of.property(Integer) threads = of.property(Integer) mutators = nullSetPropertyOf(p, String) excludedMethods = nullSetPropertyOf(p, String) @@ -291,6 +322,7 @@ class PitestPluginExtension { outputCharset = of.property(Charset) features = nullListPropertyOf(p, String) fileExtensionsToFilter = nullListPropertyOf(p, String) + addJUnitPlatformLauncher = of.property(Boolean) reportAggregatorProperties = new ReportAggregatorProperties(of) excludeMockableAndroidJar = of.property(Boolean) } diff --git a/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestTask.groovy b/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestTask.groovy index 3a94818b..1bb145d3 100644 --- a/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestTask.groovy +++ b/src/main/groovy/pl/droidsonroids/gradle/pitest/PitestTask.groovy @@ -67,10 +67,6 @@ class PitestTask extends JavaExec { @Optional final SetProperty targetTests - @Input - @Optional - final Property dependencyDistance - @Input @Optional final Property threads @@ -257,16 +253,19 @@ class PitestTask extends JavaExec { List overriddenTargetTests //should be Set or SetProperty but it's not supported in Gradle as of 5.6.1 + @Internal + File rootDir + PitestTask() { getMainClass().set("org.pitest.mutationtest.commandline.MutationCoverageReport") ObjectFactory of = project.objects + rootDir = project.rootDir testPlugin = of.property(String) reportDir = of.directoryProperty() targetClasses = of.setProperty(String) targetTests = of.setProperty(String) - dependencyDistance = of.property(Integer) threads = of.property(Integer) mutators = of.setProperty(String) excludedMethods = of.setProperty(String) @@ -304,29 +303,29 @@ class PitestTask extends JavaExec { pluginConfiguration = of.mapProperty(String, String) maxSurviving = of.property(Integer) useClasspathJar = of.property(Boolean) + inputEncoding = of.property(Charset) + outputEncoding = of.property(Charset) additionalClasspath = of.fileCollection() useAdditionalClasspathFile = of.property(Boolean) additionalClasspathFile = of.fileProperty() features = of.listProperty(String) - inputEncoding = of.property(Charset) - outputEncoding = of.property(Charset) } @Input String getAdditionalClasspathFilePath() { - return additionalClasspathFile.asFile.get().relativePath(project.rootProject.rootDir) + return additionalClasspathFile.asFile.get().relativePath(rootDir) } @Input @Optional String getHistoryInputLocationPath() { //?. operator doesn't work with Gradle Providers - return historyInputLocation.isPresent() ? historyInputLocation.asFile.get().relativePath(project.rootProject.rootDir) : null + return historyInputLocation.isPresent() ? historyInputLocation.asFile.get().relativePath(rootDir) : null } @Input String getDefaultFileForHistoryDataPath() { - return defaultFileForHistoryData.asFile.get().relativePath(project.rootProject.rootDir) + return defaultFileForHistoryData.asFile.get().relativePath(rootDir) } @Input @@ -358,7 +357,6 @@ class PitestTask extends JavaExec { map['reportDir'] = reportDir.getOrNull()?.toString() map['targetClasses'] = targetClasses.get().join(',') map['targetTests'] = overriddenTargetTests ? overriddenTargetTests.join(',') : optionalCollectionAsString(targetTests) - map['dependencyDistance'] = optionalPropertyAsString(dependencyDistance) map['threads'] = optionalPropertyAsString(threads) map["mutators"] = optionalCollectionAsString(mutators) map['excludedMethods'] = optionalCollectionAsString(excludedMethods) diff --git a/src/test/groovy/pl/droidsonroids/gradle/pitest/PitestAggregatorPluginTest.groovy b/src/test/groovy/pl/droidsonroids/gradle/pitest/PitestAggregatorPluginTest.groovy index 46ee429a..bba35380 100644 --- a/src/test/groovy/pl/droidsonroids/gradle/pitest/PitestAggregatorPluginTest.groovy +++ b/src/test/groovy/pl/droidsonroids/gradle/pitest/PitestAggregatorPluginTest.groovy @@ -48,6 +48,8 @@ class PitestAggregatorPluginTest extends Specification { } // void "use pitest version from subproject project configuration"() {} //TODO: Can be implemented with ProjectBuilder? withParent()? +// void "use configured charset in aggregation"() {} //TODO: Can be tested in "unit" way? + // void "use configured charset in aggregation"() {} //TODO: Can be tested in "unit" way? private void assertThatTasksAreInGroup(List taskNames, String group) { diff --git a/src/test/groovy/pl/droidsonroids/gradle/pitest/PitestTaskConfigurationSpec.groovy b/src/test/groovy/pl/droidsonroids/gradle/pitest/PitestTaskConfigurationSpec.groovy index d202f658..5ef99957 100644 --- a/src/test/groovy/pl/droidsonroids/gradle/pitest/PitestTaskConfigurationSpec.groovy +++ b/src/test/groovy/pl/droidsonroids/gradle/pitest/PitestTaskConfigurationSpec.groovy @@ -30,7 +30,6 @@ class PitestTaskConfigurationSpec extends BasicProjectBuilderSpec implements Wit 'features', 'excludedTestClasses', 'testPlugin', - 'dependencyDistance', 'threads', "mutators", 'excludedMethods', @@ -143,7 +142,6 @@ class PitestTaskConfigurationSpec extends BasicProjectBuilderSpec implements Wit "reportDir" | new File("//tmp//foo") || new File("//tmp//foo//release").path //due to issues on Windows "targetClasses" | ["a", "b"] || "a,b" "targetTests" | ["t1", "t2"] || "t1,t2" - "dependencyDistance" | 42 || "42" "threads" | 42 || "42" "mutators" | ["MUTATOR_X", "MUTATOR_Y", "-MUTATOR_Z"] || "MUTATOR_X,MUTATOR_Y,-MUTATOR_Z" "excludedMethods" | ["methodX", "methodY"] || "methodX,methodY"