diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml index d7cd09e74..0b8ea81c4 100644 --- a/config/detekt/detekt.yml +++ b/config/detekt/detekt.yml @@ -43,6 +43,8 @@ complexity: excludes: ['**/test/**', '**/*.Test.kt', '**/*.Spec.kt'] MethodOverloading: active: true + TooManyFunctions: + excludes: ['**/test/**', '**/functionalTest/**'] coroutines: active: true @@ -129,6 +131,10 @@ naming: VariableMinLength: active: true +performance: + SpreadOperator: + excludes: ['**/test/**', '**/functionalTest/**'] + potential-bugs: AvoidReferentialEquality: active: true diff --git a/detekt-gradle-plugin/build.gradle.kts b/detekt-gradle-plugin/build.gradle.kts index 483372541..8fe7fe491 100644 --- a/detekt-gradle-plugin/build.gradle.kts +++ b/detekt-gradle-plugin/build.gradle.kts @@ -90,10 +90,15 @@ gradlePlugin { testSourceSets( sourceSets["testFixtures"], sourceSets["functionalTest"], - sourceSets["test"] ) } +// Some functional tests reference internal functions in the Gradle plugin. This should become unnecessary as further +// updates are made to the functional test suite. +kotlin.target.compilations.getByName("functionalTest") { + associateWith(target.compilations.getByName("main")) +} + // Manually inject dependency to gradle-testkit since the default injected plugin classpath is from `main.runtime`. tasks.pluginUnderTestMetadata { pluginClasspath.from(pluginCompileOnly) diff --git a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/ConfigurationCacheSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/ConfigurationCacheSpec.kt similarity index 100% rename from detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/ConfigurationCacheSpec.kt rename to detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/ConfigurationCacheSpec.kt diff --git a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektAndroidSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektAndroidSpec.kt similarity index 100% rename from detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektAndroidSpec.kt rename to detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektAndroidSpec.kt 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 new file mode 100644 index 000000000..326a73144 --- /dev/null +++ b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt @@ -0,0 +1,89 @@ +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 DetektJvmSpec { + @Nested + inner class `When applying detekt in a JVM project` { + + @Nested + inner class `report location set on extension & task` { + val gradleRunner = DslGradleRunner( + projectLayout = ProjectLayout(numberOfSourceFilesInRootPerSourceDir = 1), + buildFileName = "build.gradle.kts", + mainBuildFileContent = """ + plugins { + kotlin("jvm") + id("io.gitlab.arturbosch.detekt") + } + + repositories { + mavenCentral() + mavenLocal() + } + + detekt { + reports { + txt.destination = file("output-path.txt") + } + } + + tasks.withType().configureEach { + reports { + txt.destination = file("output-path2.txt") + } + } + """.trimIndent(), + dryRun = false + ).also { + it.setupProject() + } + + @Test + fun `logs a warning`() { + gradleRunner.runTasksAndCheckResult(":detektMain") { buildResult -> + assertThat(buildResult.output).contains("TXT report location set on detekt {} extension will be ignored for detektMain task.") + } + } + } + + @Nested + inner class `report location set on task only` { + val gradleRunner = DslGradleRunner( + projectLayout = ProjectLayout(numberOfSourceFilesInRootPerSourceDir = 1), + buildFileName = "build.gradle.kts", + mainBuildFileContent = """ + plugins { + kotlin("jvm") + id("io.gitlab.arturbosch.detekt") + } + + repositories { + mavenCentral() + mavenLocal() + } + + tasks.withType().configureEach { + reports { + txt.destination = file("output-path2.txt") + } + } + """.trimIndent(), + dryRun = false + ).also { + it.setupProject() + } + + @Test + fun `logs a warning`() { + gradleRunner.runTasksAndCheckResult(":detektMain") { buildResult -> + assertThat(buildResult.output).doesNotContain("report location set on detekt {} extension will be ignored") + } + } + } + } +} diff --git a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektMultiplatformSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektMultiplatformSpec.kt similarity index 100% rename from detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektMultiplatformSpec.kt rename to detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektMultiplatformSpec.kt diff --git a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektPlainSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektPlainSpec.kt similarity index 100% rename from detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektPlainSpec.kt rename to detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektPlainSpec.kt diff --git a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektTaskDslSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektTaskDslSpec.kt similarity index 100% rename from detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektTaskDslSpec.kt rename to detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektTaskDslSpec.kt diff --git a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/GradleVersionSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/GradleVersionSpec.kt similarity index 100% rename from detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/GradleVersionSpec.kt rename to detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/GradleVersionSpec.kt diff --git a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/report/ReportMergeSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/report/ReportMergeSpec.kt similarity index 100% rename from detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/report/ReportMergeSpec.kt rename to detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/report/ReportMergeSpec.kt diff --git a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt b/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt index 8d15e9bb7..ed102f50c 100644 --- a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt +++ b/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt @@ -64,81 +64,5 @@ class DetektJvmSpec { assertThat(argumentString).contains("--classpath") } } - - @Nested - inner class `report location set on extension & task` { - val gradleRunner = DslGradleRunner( - projectLayout = ProjectLayout(numberOfSourceFilesInRootPerSourceDir = 1), - buildFileName = "build.gradle.kts", - mainBuildFileContent = """ - plugins { - kotlin("jvm") - id("io.gitlab.arturbosch.detekt") - } - - repositories { - mavenCentral() - mavenLocal() - } - - detekt { - reports { - txt.destination = file("output-path.txt") - } - } - - tasks.withType().configureEach { - reports { - txt.destination = file("output-path2.txt") - } - } - """.trimIndent(), - dryRun = false - ).also { - it.setupProject() - } - - @Test - fun `logs a warning`() { - gradleRunner.runTasksAndCheckResult(":detektMain") { buildResult -> - assertThat(buildResult.output).contains("TXT report location set on detekt {} extension will be ignored for detektMain task.") - } - } - } - - @Nested - inner class `report location set on task only` { - val gradleRunner = DslGradleRunner( - projectLayout = ProjectLayout(numberOfSourceFilesInRootPerSourceDir = 1), - buildFileName = "build.gradle.kts", - mainBuildFileContent = """ - plugins { - kotlin("jvm") - id("io.gitlab.arturbosch.detekt") - } - - repositories { - mavenCentral() - mavenLocal() - } - - tasks.withType().configureEach { - reports { - txt.destination = file("output-path2.txt") - } - } - """.trimIndent(), - dryRun = false - ).also { - it.setupProject() - } - - @Test - fun `logs a warning`() { - gradleRunner.runTasksAndCheckResult(":detektMain") { buildResult -> - assertThat(buildResult.output).doesNotContain("report location set on detekt {} extension will be ignored") - } - } - } } }