From 1ee7687ba02368fd08386239152ae65e199dc1be Mon Sep 17 00:00:00 2001 From: "Sergey.Shanshin" Date: Tue, 9 Apr 2024 12:15:09 +0200 Subject: [PATCH] Add property variantName to KoverReport interface Property variantName will help to filter Kover tasks by selecting those that relate to specific variant. Resolves #587 --- .../api/kover-gradle-plugin.api | 1 + .../functional/cases/TaskInterfacesTests.kt | 34 ++++++ .../app/build.gradle.kts | 111 ++++++++++++++++++ .../app/src/main/AndroidManifest.xml | 24 ++++ .../kotlinx/kover/test/android/DebugUtil.kt | 7 ++ .../kover/test/android/MainActivity.kt | 13 ++ .../java/kotlinx/kover/test/android/Maths.kt | 13 ++ .../app/src/main/res/layout/activity_main.xml | 36 ++++++ .../app/src/main/res/values/colors.xml | 10 ++ .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/themes.xml | 4 + .../kotlinx/kover/test/android/LocalTests.kt | 13 ++ .../build.gradle.kts | 6 + .../gradle.properties | 23 ++++ .../settings.gradle.kts | 19 +++ .../appliers/tasks/VariantReportsSet.kt | 4 +- .../gradle/plugin/dsl/tasks/KoverTasks.kt | 11 +- .../tasks/reports/AbstractKoverReportTask.kt | 4 +- .../plugin/tasks/reports/KoverBinaryTask.kt | 3 +- .../plugin/tasks/reports/KoverDoVerifyTask.kt | 3 +- .../tasks/reports/KoverFormatCoverageTask.kt | 3 +- .../plugin/tasks/reports/KoverHtmlTask.kt | 3 +- .../plugin/tasks/reports/KoverVerifyTask.kt | 3 +- .../plugin/tasks/reports/KoverXmlTask.kt | 3 +- 24 files changed, 344 insertions(+), 10 deletions(-) create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/build.gradle.kts create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/AndroidManifest.xml create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/java/kotlinx/kover/test/android/DebugUtil.kt create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/java/kotlinx/kover/test/android/MainActivity.kt create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/java/kotlinx/kover/test/android/Maths.kt create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/layout/activity_main.xml create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/values/colors.xml create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/values/strings.xml create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/values/themes.xml create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/test/java/kotlinx/kover/test/android/LocalTests.kt create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/build.gradle.kts create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/gradle.properties create mode 100644 kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/settings.gradle.kts diff --git a/kover-gradle-plugin/api/kover-gradle-plugin.api b/kover-gradle-plugin/api/kover-gradle-plugin.api index c20d7ddf..98666c1d 100644 --- a/kover-gradle-plugin/api/kover-gradle-plugin.api +++ b/kover-gradle-plugin/api/kover-gradle-plugin.api @@ -311,6 +311,7 @@ public abstract interface class kotlinx/kover/gradle/plugin/dsl/tasks/KoverLogRe } public abstract interface class kotlinx/kover/gradle/plugin/dsl/tasks/KoverReport : org/gradle/api/Task { + public abstract fun getVariantName ()Ljava/lang/String; } public abstract interface class kotlinx/kover/gradle/plugin/dsl/tasks/KoverVerifyReport : kotlinx/kover/gradle/plugin/dsl/tasks/KoverReport { diff --git a/kover-gradle-plugin/src/functionalTest/kotlin/kotlinx/kover/gradle/plugin/test/functional/cases/TaskInterfacesTests.kt b/kover-gradle-plugin/src/functionalTest/kotlin/kotlinx/kover/gradle/plugin/test/functional/cases/TaskInterfacesTests.kt index d3eb8c1d..a4d03b6b 100644 --- a/kover-gradle-plugin/src/functionalTest/kotlin/kotlinx/kover/gradle/plugin/test/functional/cases/TaskInterfacesTests.kt +++ b/kover-gradle-plugin/src/functionalTest/kotlin/kotlinx/kover/gradle/plugin/test/functional/cases/TaskInterfacesTests.kt @@ -3,9 +3,12 @@ */ package kotlinx.kover.gradle.plugin.test.functional.cases +import kotlinx.kover.gradle.plugin.test.functional.framework.checker.CheckerContext import kotlinx.kover.gradle.plugin.test.functional.framework.runner.generateBuild import kotlinx.kover.gradle.plugin.test.functional.framework.runner.runWithParams +import kotlinx.kover.gradle.plugin.test.functional.framework.starter.TemplateTest import org.junit.jupiter.api.Test +import kotlin.test.assertEquals import kotlin.test.assertTrue internal class TaskInterfacesTests { @@ -79,4 +82,35 @@ internal class TaskInterfacesTests { val result = build.runWithParams("checkDir") assertTrue(result.isSuccessful) } + + @TemplateTest("android-test-tasks-filtering", [":app:findAllTasks"]) + fun CheckerContext.testTasksSearch() { + taskOutput(":app:findTotalTasks") { + assertEquals( + """ + XML=koverXmlReport + HTML=koverHtmlReport + Verify=koverVerify + Log=koverLog + Binary=koverBinaryReport + + """.trimIndent() + , this + ) + } + + taskOutput(":app:findDebugTasks") { + assertEquals( + """ + XML=koverXmlReportDebug + HTML=koverHtmlReportDebug + Verify=koverVerifyDebug + Log=koverLogDebug + Binary=koverBinaryReportDebug + + """.trimIndent(), + this + ) + } + } } diff --git a/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/build.gradle.kts b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/build.gradle.kts new file mode 100644 index 00000000..4223f17b --- /dev/null +++ b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/build.gradle.kts @@ -0,0 +1,111 @@ +import kotlinx.kover.gradle.plugin.dsl.tasks.* + +plugins { + id ("org.jetbrains.kotlinx.kover") + id ("com.android.application") + id ("org.jetbrains.kotlin.android") +} + +android { + namespace = "kotlinx.kover.test.android" + compileSdk = 32 + + defaultConfig { + applicationId = "kotlinx.kover.test.android" + minSdk = 21 + targetSdk = 31 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = true + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } + buildFeatures { + viewBinding = true + } +} + +dependencies { + implementation("androidx.core:core-ktx:1.8.0") + implementation("androidx.appcompat:appcompat:1.5.0") + implementation("com.google.android.material:material:1.6.1") + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + testImplementation("junit:junit:4.13.2") +} + +tasks.register("findAllTasks") { + dependsOn("findTotalTasks") + dependsOn("findDebugTasks") +} + +tasks.register("findDebugTasks") { + doLast { + val xmlName = tasks.withType().matching { + it.variantName == "debug" + }.single().name + + val htmlName = tasks.withType().matching { + it.variantName == "debug" + }.single().name + + val verifyName = tasks.withType().matching { + it.variantName == "debug" + }.single().name + + val logName = tasks.withType().matching { + it.variantName == "debug" + }.single().name + + val binaryName = tasks.withType().matching { + it.variantName == "debug" + }.single().name + + println("XML=$xmlName") + println("HTML=$htmlName") + println("Verify=$verifyName") + println("Log=$logName") + println("Binary=$binaryName") + } +} + +tasks.register("findTotalTasks") { + doLast { + val xmlName = tasks.withType().matching { + it.variantName == "" + }.single().name + + val htmlName = tasks.withType().matching { + it.variantName == "" + }.single().name + + val verifyName = tasks.withType().matching { + it.variantName == "" + }.single().name + + val logName = tasks.withType().matching { + it.variantName == "" + }.single().name + + val binaryName = tasks.withType().matching { + it.variantName == "" + }.single().name + + println("XML=$xmlName") + println("HTML=$htmlName") + println("Verify=$verifyName") + println("Log=$logName") + println("Binary=$binaryName") + } +} diff --git a/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/AndroidManifest.xml b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..358fac25 --- /dev/null +++ b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/java/kotlinx/kover/test/android/DebugUtil.kt b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/java/kotlinx/kover/test/android/DebugUtil.kt new file mode 100644 index 00000000..efe82040 --- /dev/null +++ b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/java/kotlinx/kover/test/android/DebugUtil.kt @@ -0,0 +1,7 @@ +package kotlinx.kover.test.android + +object DebugUtil { + fun log(message: String) { + println("DEBUG: $message") + } +} \ No newline at end of file diff --git a/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/java/kotlinx/kover/test/android/MainActivity.kt b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/java/kotlinx/kover/test/android/MainActivity.kt new file mode 100644 index 00000000..1caaf5b6 --- /dev/null +++ b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/java/kotlinx/kover/test/android/MainActivity.kt @@ -0,0 +1,13 @@ +package kotlinx.kover.test.android + +import android.os.Bundle +import android.app.Activity + +class MainActivity : Activity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + } + +} diff --git a/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/java/kotlinx/kover/test/android/Maths.kt b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/java/kotlinx/kover/test/android/Maths.kt new file mode 100644 index 00000000..03edc099 --- /dev/null +++ b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/java/kotlinx/kover/test/android/Maths.kt @@ -0,0 +1,13 @@ +package kotlinx.kover.test.android + +object Maths { + fun sum(a: Int, b: Int): Int { + DebugUtil.log("invoked sum") + return a + b + } + + fun sub(a: Int, b: Int): Int { + DebugUtil.log("invoked sub") + return a - b + } +} \ No newline at end of file diff --git a/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/layout/activity_main.xml b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..ee57d166 --- /dev/null +++ b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,36 @@ + + + + + + + + \ No newline at end of file diff --git a/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/values/colors.xml b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/values/colors.xml new file mode 100644 index 00000000..f8c6127d --- /dev/null +++ b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/values/strings.xml b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/values/strings.xml new file mode 100644 index 00000000..fa43411e --- /dev/null +++ b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Android Test + \ No newline at end of file diff --git a/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/values/themes.xml b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/values/themes.xml new file mode 100644 index 00000000..0b4cfc4c --- /dev/null +++ b/kover-gradle-plugin/src/functionalTest/templates/builds/android-test-tasks-filtering/app/src/main/res/values/themes.xml @@ -0,0 +1,4 @@ + + +