Skip to content

Commit

Permalink
Drop (most) Groovy DSL tests (#4687)
Browse files Browse the repository at this point in the history
* Drop Groovy DSL-based tests where Kotlin DSL-based equivalent exists

* Rewrite remaining Groovy DSL-based tests to use Kotlin DSL

* Add dedicated Groovy DSL test

* Use kotlin dependency extension where possible

* Suppress LongMethod detekt warning
  • Loading branch information
3flex committed Apr 8, 2022
1 parent cc7de61 commit 966cc50
Show file tree
Hide file tree
Showing 13 changed files with 333 additions and 302 deletions.
Expand Up @@ -4,21 +4,19 @@ import io.gitlab.arturbosch.detekt.testkit.DslTestBuilder
import io.gitlab.arturbosch.detekt.testkit.ProjectLayout
import org.assertj.core.api.Assertions.assertThat
import org.gradle.testkit.runner.TaskOutcome
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.MethodSource
import org.junit.jupiter.api.Test

class CreateBaselineTaskDslSpec {
@ParameterizedTest(name = "Using {0}, detektBaseline task can be executed when baseline file is specified")
@MethodSource("io.gitlab.arturbosch.detekt.testkit.DslTestBuilder#builders")
fun baselineTaskExecutableWhenBaselineFileSpecified(builder: DslTestBuilder) {
@Test
fun `detektBaseline task can be executed when baseline file is specified`() {
val baselineFilename = "baseline.xml"

val detektConfig = """
|detekt {
| baseline = file("$baselineFilename")
|}
"""
val gradleRunner = builder
val gradleRunner = DslTestBuilder.kotlin()
.withProjectLayout(
ProjectLayout(
numberOfSourceFilesInRootPerSourceDir = 1,
Expand All @@ -35,14 +33,13 @@ class CreateBaselineTaskDslSpec {
}
}

@ParameterizedTest(name = "Using {0}, detektBaseline task can be executed when baseline file is not specified")
@MethodSource("io.gitlab.arturbosch.detekt.testkit.DslTestBuilder#builders")
fun baselineTaskExecutableWhenBaselineFileNotSpecified(builder: DslTestBuilder) {
@Test
fun `detektBaseline task can be executed when baseline file is not specified`() {
val detektConfig = """
|detekt {
|}
"""
val gradleRunner = builder
val gradleRunner = DslTestBuilder.kotlin()
.withProjectLayout(
ProjectLayout(
numberOfSourceFilesInRootPerSourceDir = 1,
Expand All @@ -58,15 +55,14 @@ class CreateBaselineTaskDslSpec {
}
}

@ParameterizedTest(name = "Using {0}, detektBaseline task can not be executed when baseline file is specified null")
@MethodSource("io.gitlab.arturbosch.detekt.testkit.DslTestBuilder#builders")
fun baselineTaskNotExecutableWhenBaselineFileIsNull(builder: DslTestBuilder) {
@Test
fun `detektBaseline task can not be executed when baseline file is specified null`() {
val detektConfig = """
|detekt {
| baseline = null
|}
"""
val gradleRunner = builder
val gradleRunner = DslTestBuilder.kotlin()
.withProjectLayout(
ProjectLayout(
numberOfSourceFilesInRootPerSourceDir = 1,
Expand Down
Expand Up @@ -4,63 +4,27 @@ import io.gitlab.arturbosch.detekt.testkit.DslGradleRunner
import io.gitlab.arturbosch.detekt.testkit.DslTestBuilder
import io.gitlab.arturbosch.detekt.testkit.ProjectLayout
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Nested
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.Arguments
import org.junit.jupiter.params.provider.Arguments.arguments
import org.junit.jupiter.params.provider.MethodSource
import org.junit.jupiter.api.Test

class DetektReportMergeSpec {

@Nested
inner class `Sarif merge is configured correctly for multi module project` {

val groovy = DslTestBuilder.groovy()
val groovyBuildFileContent =
@Test
@Suppress("LongMethod")
fun `Sarif merge is configured correctly for multi module project`() {
val builder = DslTestBuilder.kotlin()
val buildFileContent =
"""
|${groovy.gradlePlugins}
|${builder.gradlePlugins}
|
|allprojects {
| ${groovy.gradleRepositories}
|}
|
|task sarifReportMerge(type: io.gitlab.arturbosch.detekt.report.ReportMergeTask) {
| output = project.layout.buildDirectory.file("reports/detekt/merge.sarif")
|}
|
|subprojects {
| ${groovy.gradleSubprojectsApplyPlugins}
|
| detekt {
| reports.sarif.enabled = true
| }
|
| plugins.withType(io.gitlab.arturbosch.detekt.DetektPlugin) {
| tasks.withType(io.gitlab.arturbosch.detekt.Detekt) { detektTask ->
| sarifReportMerge.configure { mergeTask ->
| mergeTask.mustRunAfter(detektTask)
| mergeTask.input.from(detektTask.sarifReportFile)
| }
| }
| }
|}
|
""".trimMargin()
val kotlin = DslTestBuilder.kotlin()
val kotlinBuildFileContent =
"""
|${kotlin.gradlePlugins}
|
|allprojects {
| ${kotlin.gradleRepositories}
| ${builder.gradleRepositories}
|}
|
|val sarifReportMerge by tasks.registering(io.gitlab.arturbosch.detekt.report.ReportMergeTask::class) {
| output.set(project.layout.buildDirectory.file("reports/detekt/merge.sarif"))
|}
|
|subprojects {
| ${kotlin.gradleSubprojectsApplyPlugins}
| ${builder.gradleSubprojectsApplyPlugins}
|
| detekt {
| reports.sarif.enabled = true
Expand All @@ -78,103 +42,62 @@ class DetektReportMergeSpec {
|
""".trimMargin()

fun scenarios(): List<Arguments> = listOf(
arguments(groovy, groovyBuildFileContent),
arguments(kotlin, kotlinBuildFileContent)
)

@ParameterizedTest(name = "Using {0}")
@MethodSource("scenarios")
fun sarifMerge(builder: DslTestBuilder, mainBuildFileContent: String) {
val projectLayout = ProjectLayout(numberOfSourceFilesInRootPerSourceDir = 0).apply {
addSubmodule(
name = "child1",
numberOfSourceFilesPerSourceDir = 2,
numberOfCodeSmells = 2
)
addSubmodule(
name = "child2",
numberOfSourceFilesPerSourceDir = 4,
numberOfCodeSmells = 4
)
}
val projectLayout = ProjectLayout(numberOfSourceFilesInRootPerSourceDir = 0).apply {
addSubmodule(
name = "child1",
numberOfSourceFilesPerSourceDir = 2,
numberOfCodeSmells = 2
)
addSubmodule(
name = "child2",
numberOfSourceFilesPerSourceDir = 4,
numberOfCodeSmells = 4
)
}

val gradleRunner = DslGradleRunner(projectLayout, builder.gradleBuildName, mainBuildFileContent)
gradleRunner.setupProject()
gradleRunner.runTasksAndExpectFailure("detekt", "sarifReportMerge", "--continue") { result ->
assertThat(result.output).contains("FAILURE: Build completed with 2 failures.")
assertThat(result.output).containsIgnoringWhitespaces(
"""
Execution failed for task ':child1:detekt'.
> Analysis failed with 2 weighted issues.
"""
)
assertThat(result.output).containsIgnoringWhitespaces(
"""
Execution failed for task ':child2:detekt'.
> Analysis failed with 4 weighted issues.
"""
)
assertThat(projectFile("build/reports/detekt/detekt.sarif")).doesNotExist()
assertThat(projectFile("build/reports/detekt/merge.sarif")).exists()
assertThat(projectFile("build/reports/detekt/merge.sarif").readText())
.contains("\"ruleId\": \"detekt.style.MagicNumber\"")
projectLayout.submodules.forEach {
assertThat(projectFile("${it.name}/build/reports/detekt/detekt.sarif")).exists()
}
val gradleRunner = DslGradleRunner(projectLayout, builder.gradleBuildName, buildFileContent)
gradleRunner.setupProject()
gradleRunner.runTasksAndExpectFailure("detekt", "sarifReportMerge", "--continue") { result ->
assertThat(result.output).contains("FAILURE: Build completed with 2 failures.")
assertThat(result.output).containsIgnoringWhitespaces(
"""
Execution failed for task ':child1:detekt'.
> Analysis failed with 2 weighted issues.
"""
)
assertThat(result.output).containsIgnoringWhitespaces(
"""
Execution failed for task ':child2:detekt'.
> Analysis failed with 4 weighted issues.
"""
)
assertThat(projectFile("build/reports/detekt/detekt.sarif")).doesNotExist()
assertThat(projectFile("build/reports/detekt/merge.sarif")).exists()
assertThat(projectFile("build/reports/detekt/merge.sarif").readText())
.contains("\"ruleId\": \"detekt.style.MagicNumber\"")
projectLayout.submodules.forEach {
assertThat(projectFile("${it.name}/build/reports/detekt/detekt.sarif")).exists()
}
}
}

@Nested
inner class `XML merge is configured correctly for multi module project` {

val groovy = DslTestBuilder.groovy()
val groovyBuildFileContent =
"""
|${groovy.gradlePlugins}
|
|allprojects {
| ${groovy.gradleRepositories}
|}
|
|task xmlReportMerge(type: io.gitlab.arturbosch.detekt.report.ReportMergeTask) {
| output = project.layout.buildDirectory.file("reports/detekt/merge.xml")
|}
|
|subprojects {
| ${groovy.gradleSubprojectsApplyPlugins}
|
| detekt {
| reports.xml.enabled = true
| }
|
| plugins.withType(io.gitlab.arturbosch.detekt.DetektPlugin) {
| tasks.withType(io.gitlab.arturbosch.detekt.Detekt) { detektTask ->
| xmlReportMerge.configure { mergeTask ->
| mergeTask.mustRunAfter(detektTask)
| mergeTask.input.from(detektTask.xmlReportFile)
| }
| }
| }
|}
|
""".trimMargin()
val kotlin = DslTestBuilder.kotlin()
val kotlinBuildFileContent =
"""
|${kotlin.gradlePlugins}
@Test
@Suppress("LongMethod")
fun `XML merge is configured correctly for multi module project`() {
val builder = DslTestBuilder.kotlin()
val buildFileContent = """
|${builder.gradlePlugins}
|
|allprojects {
| ${kotlin.gradleRepositories}
| ${builder.gradleRepositories}
|}
|
|val xmlReportMerge by tasks.registering(io.gitlab.arturbosch.detekt.report.ReportMergeTask::class) {
| output.set(project.layout.buildDirectory.file("reports/detekt/merge.xml"))
|}
|
|subprojects {
| ${kotlin.gradleSubprojectsApplyPlugins}
| ${builder.gradleSubprojectsApplyPlugins}
|
| detekt {
| reports.xml.enabled = true
Expand All @@ -190,52 +113,43 @@ class DetektReportMergeSpec {
| }
|}
|
""".trimMargin()
""".trimMargin()

fun scenarios(): List<Arguments> = listOf(
arguments(groovy, groovyBuildFileContent),
arguments(kotlin, kotlinBuildFileContent)
)

@ParameterizedTest(name = "Using {0}")
@MethodSource("scenarios")
fun sarifMerge(builder: DslTestBuilder, mainBuildFileContent: String) {
val projectLayout = ProjectLayout(numberOfSourceFilesInRootPerSourceDir = 0).apply {
addSubmodule(
name = "child1",
numberOfSourceFilesPerSourceDir = 2,
numberOfCodeSmells = 2
)
addSubmodule(
name = "child2",
numberOfSourceFilesPerSourceDir = 4,
numberOfCodeSmells = 4
)
}
val projectLayout = ProjectLayout(numberOfSourceFilesInRootPerSourceDir = 0).apply {
addSubmodule(
name = "child1",
numberOfSourceFilesPerSourceDir = 2,
numberOfCodeSmells = 2
)
addSubmodule(
name = "child2",
numberOfSourceFilesPerSourceDir = 4,
numberOfCodeSmells = 4
)
}

val gradleRunner = DslGradleRunner(projectLayout, builder.gradleBuildName, mainBuildFileContent)
gradleRunner.setupProject()
gradleRunner.runTasksAndExpectFailure("detekt", "xmlReportMerge", "--continue") { result ->
assertThat(result.output).contains("FAILURE: Build completed with 2 failures.")
assertThat(result.output).containsIgnoringWhitespaces(
"""
Execution failed for task ':child1:detekt'.
> Analysis failed with 2 weighted issues.
"""
)
assertThat(result.output).containsIgnoringWhitespaces(
"""
Execution failed for task ':child2:detekt'.
> Analysis failed with 4 weighted issues.
"""
)
assertThat(projectFile("build/reports/detekt/detekt.xml")).doesNotExist()
assertThat(projectFile("build/reports/detekt/merge.xml")).exists()
assertThat(projectFile("build/reports/detekt/merge.xml").readText())
.contains("<error column=\"30\" line=\"4\"")
projectLayout.submodules.forEach {
assertThat(projectFile("${it.name}/build/reports/detekt/detekt.xml")).exists()
}
val gradleRunner = DslGradleRunner(projectLayout, builder.gradleBuildName, buildFileContent)
gradleRunner.setupProject()
gradleRunner.runTasksAndExpectFailure("detekt", "xmlReportMerge", "--continue") { result ->
assertThat(result.output).contains("FAILURE: Build completed with 2 failures.")
assertThat(result.output).containsIgnoringWhitespaces(
"""
Execution failed for task ':child1:detekt'.
> Analysis failed with 2 weighted issues.
"""
)
assertThat(result.output).containsIgnoringWhitespaces(
"""
Execution failed for task ':child2:detekt'.
> Analysis failed with 4 weighted issues.
"""
)
assertThat(projectFile("build/reports/detekt/detekt.xml")).doesNotExist()
assertThat(projectFile("build/reports/detekt/merge.xml")).exists()
assertThat(projectFile("build/reports/detekt/merge.xml").readText())
.contains("<error column=\"30\" line=\"4\"")
projectLayout.submodules.forEach {
assertThat(projectFile("${it.name}/build/reports/detekt/detekt.xml")).exists()
}
}
}
Expand Down

0 comments on commit 966cc50

Please sign in to comment.