From ca29f288dcb973d61afdd75084e0d40a9d309816 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Tue, 3 May 2022 17:58:03 +1000 Subject: [PATCH] Add tests for #4786 (#4801) * Add CLI tests to ensure jvm-target and language-version flags are properly mapped * Make errors while mapping jvm-target & language-version inputs more descriptive * Return IAE instead of ISE when jvm-target & language-version fails to parse * Add tests ensuring jvmTarget & languageVersion are mapped to CLI flags --- .../detekt/cli/ArgumentConverters.kt | 16 ++++++++++---- .../arturbosch/detekt/cli/CliArgsSpec.kt | 22 +++++++++++++++++++ .../gitlab/arturbosch/detekt/DetektJvmSpec.kt | 8 +++++++ 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/ArgumentConverters.kt b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/ArgumentConverters.kt index af299e59840..97490dc6c86 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/ArgumentConverters.kt +++ b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/ArgumentConverters.kt @@ -47,13 +47,21 @@ class MultipleExistingPathConverter : DetektInputPathConverter { } class LanguageVersionConverter : IStringConverter { - override fun convert(value: String): LanguageVersion = - checkNotNull(LanguageVersion.fromFullVersionString(value)) { "Invalid value passed to --language-version" } + override fun convert(value: String): LanguageVersion { + val validValues by lazy { LanguageVersion.values().joinToString { it.versionString } } + return requireNotNull(LanguageVersion.fromFullVersionString(value)) { + "\"$value\" passed to --language-version, expected one of [$validValues]" + } + } } class JvmTargetConverter : IStringConverter { - override fun convert(value: String): JvmTarget = - checkNotNull(JvmTarget.fromString(value)) { "Invalid value passed to --jvm-target" } + override fun convert(value: String): JvmTarget { + val validValues by lazy { JvmTarget.values().joinToString { it.description } } + return requireNotNull(JvmTarget.fromString(value)) { + "\"$value\" passed to --jvm-target, expected one of [$validValues]" + } + } } class ClasspathResourceConverter : IStringConverter { diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgsSpec.kt b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgsSpec.kt index fffa37c9292..77c6549fedf 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgsSpec.kt +++ b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgsSpec.kt @@ -121,4 +121,26 @@ internal class CliArgsSpec { assertThat(spec.rulesSpec.activateAllRules).isTrue() } } + + @Nested + inner class `type resolution parameters are accepted` { + + @Test + fun `--jvm-target is accepted`() { + val spec = parseArguments(arrayOf("--jvm-target", "11")).toSpec() + assertThat(spec.compilerSpec.jvmTarget).isEqualTo("11") + } + + @Test + fun `--jvm-target with decimal is accepted`() { + val spec = parseArguments(arrayOf("--jvm-target", "1.8")).toSpec() + assertThat(spec.compilerSpec.jvmTarget).isEqualTo("1.8") + } + + @Test + fun `--language-version is accepted`() { + val spec = parseArguments(arrayOf("--language-version", "1.6")).toSpec() + assertThat(spec.compilerSpec.languageVersion).isEqualTo("1.6") + } + } } 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 f38eb9f1510..d3a244d698b 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 @@ -26,6 +26,10 @@ class DetektJvmSpec { reports.txt.required.set(false) } } + tasks.named("detektTest", Detekt::class.java) { + it.jvmTarget = "1.8" + it.languageVersion = "1.6" + } }, ).also(DslGradleRunner::setupProject) @@ -41,6 +45,8 @@ class DetektJvmSpec { assertThat(argumentString).contains("--report sarif:") assertThat(argumentString).doesNotContain("--report txt:") assertThat(argumentString).contains("--classpath") + assertThat(argumentString).doesNotContain("--jvm-target") + assertThat(argumentString).doesNotContain("--language-version") } @Test @@ -55,5 +61,7 @@ class DetektJvmSpec { assertThat(argumentString).contains("--report sarif:") assertThat(argumentString).doesNotContain("--report txt:") assertThat(argumentString).contains("--classpath") + assertThat(argumentString).contains("--jvm-target 1.8") + assertThat(argumentString).contains("--language-version 1.6") } }