From cb8280d8d9b8b440d074d157d453db82d62a53db Mon Sep 17 00:00:00 2001 From: Sergey Shanshin Date: Tue, 23 Aug 2022 16:31:11 +0300 Subject: [PATCH] Ordered report tasks before verification Resolves #209 --- .../functional/cases/TasksOrderingTests.kt | 54 +++++++++++++++++++ .../kover/test/functional/core/Builder.kt | 6 +++ .../kover/test/functional/core/Types.kt | 2 + .../core/writer/MergedExtensionWriter.kt | 1 + .../kover/appliers/KoverMergedApplier.kt | 2 + .../kover/appliers/KoverProjectApplier.kt | 2 + 6 files changed, 67 insertions(+) create mode 100644 src/functionalTest/kotlin/kotlinx/kover/test/functional/cases/TasksOrderingTests.kt diff --git a/src/functionalTest/kotlin/kotlinx/kover/test/functional/cases/TasksOrderingTests.kt b/src/functionalTest/kotlin/kotlinx/kover/test/functional/cases/TasksOrderingTests.kt new file mode 100644 index 00000000..790085ef --- /dev/null +++ b/src/functionalTest/kotlin/kotlinx/kover/test/functional/cases/TasksOrderingTests.kt @@ -0,0 +1,54 @@ +package kotlinx.kover.test.functional.cases + +import kotlinx.kover.test.functional.cases.utils.* +import kotlinx.kover.test.functional.core.* +import kotlinx.kover.test.functional.core.BaseGradleScriptTest +import kotlin.test.* + +internal class TasksOrderingTests : BaseGradleScriptTest() { + @Test + fun testProjectTasks() { + val build = diverseBuild() + build.addKoverRootProject { + sourcesFrom("simple") + kover { + verify { + rule { + bound { + minValue = 100 + } + } + } + } + } + val runner = build.prepare() + runner.runWithError("koverVerify", "koverReport") { + // reports should be generated even if verification failed with an error + checkDefaultReports() + } + } + + @Test + fun testMergedTasks() { + val build = diverseBuild() + build.addKoverRootProject { + sourcesFrom("simple") + koverMerged { + enable() + verify { + rule { + bound { + minValue = 100 + } + } + } + } + } + val runner = build.prepare() + runner.runWithError("koverMergedVerify", "koverMergedReport") { + // reports should be generated even if verification failed with an error + checkDefaultMergedReports() + } + } + +} diff --git a/src/functionalTest/kotlin/kotlinx/kover/test/functional/core/Builder.kt b/src/functionalTest/kotlin/kotlinx/kover/test/functional/core/Builder.kt index 6d33425e..8302fca7 100644 --- a/src/functionalTest/kotlin/kotlinx/kover/test/functional/core/Builder.kt +++ b/src/functionalTest/kotlin/kotlinx/kover/test/functional/core/Builder.kt @@ -211,6 +211,8 @@ internal class RepositoriesState : Repositories { internal class TestKoverMergedConfigState : TestKoverMergedConfig { var enabled: Boolean = false val filters: TestKoverMergedFiltersState = TestKoverMergedFiltersState() + val verify: TestKoverVerifyConfigState = TestKoverVerifyConfigState() + override fun enable() { enabled = true } @@ -218,6 +220,10 @@ internal class TestKoverMergedConfigState : TestKoverMergedConfig { override fun filters(config: TestKoverMergedFilters.() -> Unit) { filters.also(config) } + + override fun verify(config: TestKoverVerifyConfig.() -> Unit) { + verify.also(config) + } } internal class TestKoverMergedFiltersState : TestKoverMergedFilters { diff --git a/src/functionalTest/kotlin/kotlinx/kover/test/functional/core/Types.kt b/src/functionalTest/kotlin/kotlinx/kover/test/functional/core/Types.kt index 20d5e806..480fd228 100644 --- a/src/functionalTest/kotlin/kotlinx/kover/test/functional/core/Types.kt +++ b/src/functionalTest/kotlin/kotlinx/kover/test/functional/core/Types.kt @@ -98,6 +98,8 @@ internal interface TestKoverMergedConfig { public fun enable() public fun filters(config: TestKoverMergedFilters.() -> Unit) + + public fun verify(config: TestKoverVerifyConfig.() -> Unit) } public interface TestKoverMergedFilters { diff --git a/src/functionalTest/kotlin/kotlinx/kover/test/functional/core/writer/MergedExtensionWriter.kt b/src/functionalTest/kotlin/kotlinx/kover/test/functional/core/writer/MergedExtensionWriter.kt index f42a5a7f..cd80bf1d 100644 --- a/src/functionalTest/kotlin/kotlinx/kover/test/functional/core/writer/MergedExtensionWriter.kt +++ b/src/functionalTest/kotlin/kotlinx/kover/test/functional/core/writer/MergedExtensionWriter.kt @@ -14,6 +14,7 @@ internal fun PrintWriter.printKoverMerged(merged: TestKoverMergedConfigState?, s indented(indents, "koverMerged {") printEnabled(merged.enabled, indents + 1) printFilters(merged.filters, slice, indents + 1) + printVerify(merged.verify, slice, indents + 1) indented(indents, "}") } diff --git a/src/main/kotlin/kotlinx/kover/appliers/KoverMergedApplier.kt b/src/main/kotlin/kotlinx/kover/appliers/KoverMergedApplier.kt index 0424a9e2..6c1da980 100644 --- a/src/main/kotlin/kotlinx/kover/appliers/KoverMergedApplier.kt +++ b/src/main/kotlin/kotlinx/kover/appliers/KoverMergedApplier.kt @@ -92,6 +92,8 @@ private class ProcessMergeExtensionAction(private val extension: KoverMergedConf // TODO `onlyIf` block moved out from config lambda because of bug in Kotlin compiler - it implicitly adds closure on `Project` inside onlyIf's lambda verifyTask.onlyIf { extension.verify.hasActiveRules() } + // ordering of task calls, so that if a verification error occurs, reports are generated and the values can be viewed in them + verifyTask.shouldRunAfter(xmlTask, htmlTask) container.tasks.create(MERGED_REPORT_TASK_NAME) { it.group = VERIFICATION_GROUP diff --git a/src/main/kotlin/kotlinx/kover/appliers/KoverProjectApplier.kt b/src/main/kotlin/kotlinx/kover/appliers/KoverProjectApplier.kt index 48a7a34b..ee17236f 100644 --- a/src/main/kotlin/kotlinx/kover/appliers/KoverProjectApplier.kt +++ b/src/main/kotlin/kotlinx/kover/appliers/KoverProjectApplier.kt @@ -68,6 +68,8 @@ internal fun Project.applyToProject() { // TODO `onlyIf` block moved out from config lambda because of bug in Kotlin compiler - it implicitly adds closure on `Project` inside onlyIf's lambda verifyTask.onlyIf { extension.verify.hasActiveRules() } + // ordering of task calls, so that if a verification error occurs, reports are generated and the values can be viewed in them + verifyTask.shouldRunAfter(xmlTask, htmlTask) tasks.create(KoverNames.REPORT_TASK_NAME) { it.group = KoverNames.VERIFICATION_GROUP