From 496b9c884dffc095895d56a405068bbb277f3751 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Mon, 25 Apr 2022 10:25:39 +1000 Subject: [PATCH 1/5] Add task dependency helpers --- .../kotlin/io/gitlab/arturbosch/detekt/testkit/Helpers.kt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 detekt-gradle-plugin/src/testFixtures/kotlin/io/gitlab/arturbosch/detekt/testkit/Helpers.kt diff --git a/detekt-gradle-plugin/src/testFixtures/kotlin/io/gitlab/arturbosch/detekt/testkit/Helpers.kt b/detekt-gradle-plugin/src/testFixtures/kotlin/io/gitlab/arturbosch/detekt/testkit/Helpers.kt new file mode 100644 index 00000000000..d1f2b98e348 --- /dev/null +++ b/detekt-gradle-plugin/src/testFixtures/kotlin/io/gitlab/arturbosch/detekt/testkit/Helpers.kt @@ -0,0 +1,6 @@ +package io.gitlab.arturbosch.detekt.testkit + +import org.gradle.api.Task + +fun Task.dependenciesAsNames() = this.taskDependencies.getDependencies(this).map { it.name } +fun Task.dependenciesAsPaths() = this.taskDependencies.getDependencies(this).map { it.path } From 284851fd0d6e46e2f4b01dc857d7592b4d2ee874 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Sat, 16 Apr 2022 14:18:57 +1000 Subject: [PATCH 2/5] Use ProjectBuilder instead of dryRun for DetektPlainSpec --- .../arturbosch/detekt/DetektPlainSpec.kt | 78 ------------------ .../arturbosch/detekt/DetektPlainSpec.kt | 82 +++++++++++++++++++ 2 files changed, 82 insertions(+), 78 deletions(-) delete mode 100644 detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektPlainSpec.kt create mode 100644 detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektPlainSpec.kt diff --git a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektPlainSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektPlainSpec.kt deleted file mode 100644 index 93929c9376e..00000000000 --- a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektPlainSpec.kt +++ /dev/null @@ -1,78 +0,0 @@ -package io.gitlab.arturbosch.detekt - -import io.gitlab.arturbosch.detekt.testkit.DslGradleRunner -import io.gitlab.arturbosch.detekt.testkit.ProjectLayout -import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test - -class DetektPlainSpec { - @Nested - inner class `When detekt is applied before JVM plugin` { - val gradleRunner = DslGradleRunner( - projectLayout = ProjectLayout(numberOfSourceFilesInRootPerSourceDir = 1), - buildFileName = "build.gradle.kts", - mainBuildFileContent = """ - plugins { - id("io.gitlab.arturbosch.detekt") - kotlin("jvm") - } - - repositories { - mavenCentral() - mavenLocal() - } - - detekt { - } - """.trimIndent(), - dryRun = true - ).also { it.setupProject() } - - @Test - fun `lazily adds detekt as a dependency of the 'check' task`() { - gradleRunner.runTasksAndCheckResult("check") { buildResult -> - assertThat(buildResult.task(":detekt")).isNotNull - } - } - } - - @Nested - inner class `When applying detekt in a project` { - val gradleRunner = DslGradleRunner( - projectLayout = ProjectLayout(numberOfSourceFilesInRootPerSourceDir = 1), - buildFileName = "build.gradle.kts", - baselineFiles = listOf("detekt-baseline.xml"), - mainBuildFileContent = """ - plugins { - kotlin("jvm") - id("io.gitlab.arturbosch.detekt") - } - - repositories { - mavenCentral() - mavenLocal() - } - - tasks.withType().configureEach { - reports { - sarif.enabled = true - txt.enabled = false - } - } - """.trimIndent(), - dryRun = true - ).also { it.setupProject() } - - @Test - fun `configures detekt plain task`() { - gradleRunner.runTasksAndCheckResult(":detekt") { buildResult -> - assertThat(buildResult.output).containsPattern("""--baseline \S*[/\\]detekt-baseline.xml """) - assertThat(buildResult.output).contains("--report xml:") - assertThat(buildResult.output).contains("--report sarif:") - assertThat(buildResult.output).doesNotContain("--report txt:") - assertThat(buildResult.output).doesNotContain("--classpath") - } - } - } -} diff --git a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektPlainSpec.kt b/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektPlainSpec.kt new file mode 100644 index 00000000000..abe2e5ea52e --- /dev/null +++ b/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektPlainSpec.kt @@ -0,0 +1,82 @@ +package io.gitlab.arturbosch.detekt + +import io.gitlab.arturbosch.detekt.extensions.DetektExtension +import io.gitlab.arturbosch.detekt.testkit.DslGradleRunner +import io.gitlab.arturbosch.detekt.testkit.ProjectLayout +import io.gitlab.arturbosch.detekt.testkit.dependenciesAsPaths +import org.assertj.core.api.Assertions.assertThat +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.get +import org.gradle.kotlin.dsl.repositories +import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +class DetektPlainSpec { + @Nested + inner class `When detekt is applied before JVM plugin` { + val gradleRunner = DslGradleRunner( + projectLayout = ProjectLayout(numberOfSourceFilesInRootPerSourceDir = 1), + buildFileName = "build.gradle.kts", + projectScript = { + apply() + apply() // org.jetbrains.kotlin.jvm + + repositories { + mavenCentral() + mavenLocal() + } + + configure { + } + }, + ).also { it.setupProject() } + + @Test + fun `lazily adds detekt as a dependency of the 'check' task`() { + val project = gradleRunner.buildProject() + + assertThat(project.tasks["check"].dependenciesAsPaths()).contains(":detekt") + } + } + + @Nested + inner class `When applying detekt in a project` { + val gradleRunner = DslGradleRunner( + projectLayout = ProjectLayout(numberOfSourceFilesInRootPerSourceDir = 1), + buildFileName = "build.gradle.kts", + baselineFiles = listOf("detekt-baseline.xml"), + projectScript = { + apply() // org.jetbrains.kotlin.jvm + apply() + + repositories { + mavenCentral() + mavenLocal() + } + + tasks.withType(Detekt::class.java).configureEach { + it.reports { reports -> + reports.sarif.enabled = true + reports.txt.enabled = false + } + } + }, + ).also { it.setupProject() } + + @Test + fun `configures detekt plain task`() { + val project = gradleRunner.buildProject() + + val detektTask = project.tasks.getByPath("detekt") as Detekt + val argumentString = detektTask.arguments.get().joinToString(" ") + + assertThat(argumentString).containsPattern("""--baseline \S*[/\\]detekt-baseline.xml """) + assertThat(argumentString).contains("--report xml:") + assertThat(argumentString).contains("--report sarif:") + assertThat(argumentString).doesNotContain("--report txt:") + assertThat(argumentString).doesNotContain("--classpath") + } + } +} From dd138985bdee201eba28d5463a28c52562e27434 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Sat, 16 Apr 2022 14:07:01 +1000 Subject: [PATCH 3/5] Don't explicitly disable dryRun mode dryRun mode is already disabled by default. --- .../kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt index 6ab22b1923e..0b4aea6d21b 100644 --- a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt +++ b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt @@ -35,8 +35,7 @@ class DetektJvmSpec { txt.destination = file("output-path2.txt") } } - """.trimIndent(), - dryRun = false + """.trimIndent() ).also { it.setupProject() } @@ -70,8 +69,7 @@ class DetektJvmSpec { txt.destination = file("output-path2.txt") } } - """.trimIndent(), - dryRun = false + """.trimIndent() ).also { it.setupProject() } From bf84dfbe798bcd66460e5087d3cd61d3d6648833 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Mon, 25 Apr 2022 10:51:06 +1000 Subject: [PATCH 4/5] Run real detekt task in GradleVersionSpec --- .../kotlin/io/gitlab/arturbosch/detekt/GradleVersionSpec.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/GradleVersionSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/GradleVersionSpec.kt index 0ed3b3b6902..211d91501d8 100644 --- a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/GradleVersionSpec.kt +++ b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/GradleVersionSpec.kt @@ -15,7 +15,7 @@ class GradleVersionSpec { @EnabledForJreRange(max = JAVA_13, disabledReason = "Gradle $gradleVersion unsupported on this Java version") fun runsOnOldestSupportedGradleVersion() { val builder = DslTestBuilder.kotlin() - val gradleRunner = builder.dryRun().withGradleVersion(gradleVersion).build() + val gradleRunner = builder.withGradleVersion(gradleVersion).build() gradleRunner.runDetektTaskAndCheckResult { result -> assertThat(result.task(":detekt")?.outcome).isEqualTo(TaskOutcome.SUCCESS) } From bca98afc6e65dd0641d035f1bbf4045af7db578f Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Mon, 25 Apr 2022 11:19:39 +1000 Subject: [PATCH 5/5] Run real detekt task in ConfigurationCacheSpec --- .../arturbosch/detekt/ConfigurationCacheSpec.kt | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/ConfigurationCacheSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/ConfigurationCacheSpec.kt index b492a5ca99e..c763cf66c17 100644 --- a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/ConfigurationCacheSpec.kt +++ b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/ConfigurationCacheSpec.kt @@ -4,24 +4,17 @@ import io.gitlab.arturbosch.detekt.testkit.DslTestBuilder import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test -import org.junit.jupiter.params.ParameterizedTest -import org.junit.jupiter.params.provider.CsvSource class ConfigurationCacheSpec { - @ParameterizedTest(name = "Given {0}, can be loaded from the configuration cache") - @CsvSource( - "regular invocation, 'detekt'", - "dry-run invocation, 'detekt,-Pdetekt-dry-run=true'", - ) - @Suppress("UnusedPrivateMember") // `unused` is used in the parameterized test name - fun detektConfigCache(unused: String, arguments: String) { + @Test + fun `detekt task can be loaded from the configuration cache`() { val gradleRunner = DslTestBuilder.kotlin().build() // First run primes the cache - gradleRunner.runTasks("--configuration-cache", *arguments.split(',').toTypedArray()) + gradleRunner.runTasks("--configuration-cache", "detekt") // Second run reuses the cache - val result = gradleRunner.runTasks("--configuration-cache", *arguments.split(',').toTypedArray()) + val result = gradleRunner.runTasks("--configuration-cache", "detekt") assertThat(result.output).contains("Reusing configuration cache.") } @@ -36,7 +29,6 @@ class ConfigurationCacheSpec { |} """ val gradleRunner = DslTestBuilder.kotlin() - .dryRun() .withDetektConfig(detektConfig) .build() @@ -55,7 +47,6 @@ class ConfigurationCacheSpec { @Test fun `can be loaded from the configuration cache`() { val gradleRunner = DslTestBuilder.kotlin() - .dryRun() .build() // First run primes the cache