Skip to content

Commit 2e6efc8

Browse files
authored
Expose reportDir property in KoverHtmlReport interface
if there is a need to analyze the HTML report after it is generated, or if you need to improve the report (for example, by editing CSS styles), you need to know the directory of each report. Currently, it is not possible to easily link a specific report generation task and a directory. Resolves #590 PR #591
1 parent e2882be commit 2e6efc8

File tree

4 files changed

+94
-2
lines changed

4 files changed

+94
-2
lines changed

kover-gradle-plugin/api/kover-gradle-plugin.api

+1
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ public abstract interface class kotlinx/kover/gradle/plugin/dsl/tasks/KoverBinar
304304
}
305305

306306
public abstract interface class kotlinx/kover/gradle/plugin/dsl/tasks/KoverHtmlReport : kotlinx/kover/gradle/plugin/dsl/tasks/KoverReport {
307+
public abstract fun getReportDir ()Lorg/gradle/api/provider/Provider;
307308
}
308309

309310
public abstract interface class kotlinx/kover/gradle/plugin/dsl/tasks/KoverLogReport : kotlinx/kover/gradle/plugin/dsl/tasks/KoverReport {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/*
2+
* Copyright 2017-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
package kotlinx.kover.gradle.plugin.test.functional.cases
5+
6+
import kotlinx.kover.gradle.plugin.test.functional.framework.runner.generateBuild
7+
import kotlinx.kover.gradle.plugin.test.functional.framework.runner.runWithParams
8+
import org.junit.jupiter.api.Test
9+
import kotlin.test.assertTrue
10+
11+
internal class TaskInterfacesTests {
12+
13+
@Test
14+
fun testDefaultHtmlDir() {
15+
val build = generateBuild { dir ->
16+
dir.resolve("settings.gradle.kts").createNewFile()
17+
18+
dir.resolve("build.gradle.kts").writeText(
19+
"""
20+
import kotlinx.kover.gradle.plugin.dsl.tasks.KoverHtmlReport
21+
22+
plugins {
23+
kotlin("jvm") version "1.9.22"
24+
id("org.jetbrains.kotlinx.kover")
25+
}
26+
27+
tasks.register("checkDir") {
28+
doFirst {
29+
val task = tasks.withType<KoverHtmlReport>().matching { it.name == "koverHtmlReport" }.first()
30+
if (task.reportDir.get().asFile != layout.buildDirectory.dir("reports/kover/html").get().asFile) {
31+
throw Exception("Default directory differ, expect ${'$'}{layout.buildDirectory.dir("reports/kover/html").get().asFile} actual ${'$'}{task.reportDir.get().asFile}")
32+
}
33+
}
34+
}
35+
""".trimIndent()
36+
)
37+
}.generate()
38+
39+
val result = build.runWithParams("checkDir")
40+
assertTrue(result.isSuccessful)
41+
}
42+
43+
@Test
44+
fun testCustomHtmlDir() {
45+
val build = generateBuild { dir ->
46+
dir.resolve("settings.gradle.kts").createNewFile()
47+
48+
dir.resolve("build.gradle.kts").writeText(
49+
"""
50+
import kotlinx.kover.gradle.plugin.dsl.tasks.KoverHtmlReport
51+
52+
plugins {
53+
kotlin("jvm") version "1.9.22"
54+
id("org.jetbrains.kotlinx.kover")
55+
}
56+
57+
kover {
58+
reports {
59+
total {
60+
html {
61+
htmlDir.set(layout.buildDirectory.dir("customHtmlReport"))
62+
}
63+
}
64+
}
65+
}
66+
67+
tasks.register("checkDir") {
68+
doFirst {
69+
val task = tasks.withType<KoverHtmlReport>().matching { it.name == "koverHtmlReport" }.first()
70+
if (task.reportDir.get().asFile != layout.buildDirectory.dir("customHtmlReport").get().asFile) {
71+
throw Exception("Custom directory differ, expect ${'$'}{layout.buildDirectory.dir("customHtmlReport").get().asFile} actual ${'$'}{task.reportDir.get().asFile}")
72+
}
73+
}
74+
}
75+
""".trimIndent()
76+
)
77+
}.generate()
78+
79+
val result = build.runWithParams("checkDir")
80+
assertTrue(result.isSuccessful)
81+
}
82+
}

kover-gradle-plugin/src/main/kotlin/kotlinx/kover/gradle/plugin/dsl/tasks/KoverTasks.kt

+10-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
package kotlinx.kover.gradle.plugin.dsl.tasks
66

77
import org.gradle.api.Task
8+
import org.gradle.api.file.Directory
9+
import org.gradle.api.provider.Provider
10+
import org.gradle.api.tasks.OutputDirectory
811

912
/**
1013
* Common interface for all Kover report tasks.
@@ -19,7 +22,13 @@ interface KoverXmlReport: KoverReport
1922
/**
2023
* Interface for Kover HTML report generation tasks.
2124
*/
22-
interface KoverHtmlReport: KoverReport
25+
interface KoverHtmlReport: KoverReport {
26+
/**
27+
* The directory where the HTML report will be saved.
28+
*/
29+
@get:OutputDirectory
30+
val reportDir: Provider<Directory>
31+
}
2332

2433
/**
2534
* Interface for Kover tasks that print coverage to the build log.

kover-gradle-plugin/src/main/kotlin/kotlinx/kover/gradle/plugin/tasks/reports/KoverHtmlTask.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import java.net.URI
1414
@CacheableTask
1515
internal abstract class KoverHtmlTask : AbstractKoverReportTask(), KoverHtmlReport {
1616
@get:OutputDirectory
17-
abstract val reportDir: DirectoryProperty
17+
abstract override val reportDir: DirectoryProperty
1818

1919
@get:Input
2020
abstract val title: Property<String>

0 commit comments

Comments
 (0)