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
This commit is contained in:
Matthew Haughton
2022-05-03 17:58:03 +10:00
committed by GitHub
parent 84ac72e165
commit ca29f288dc
3 changed files with 42 additions and 4 deletions

View File

@@ -47,13 +47,21 @@ class MultipleExistingPathConverter : DetektInputPathConverter<Path> {
}
class LanguageVersionConverter : IStringConverter<LanguageVersion> {
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<JvmTarget> {
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<URL> {

View File

@@ -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")
}
}
}

View File

@@ -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")
}
}