Skip to content

Commit 7a5464c

Browse files
committed
Implemented the use of the full path to the project instead of the name
Fixes #151
1 parent e1f3fbc commit 7a5464c

File tree

11 files changed

+43
-33
lines changed

11 files changed

+43
-33
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ kover {
332332
intellijEngineVersion.set("1.0.656") // change version of IntelliJ agent and reporter
333333
jacocoEngineVersion.set("0.8.7") // change version of JaCoCo agent and reporter
334334
generateReportOnCheck = true // false to do not execute `koverMergedReport` task before `check` task
335-
disabledProjects = setOf() // setOf("project-name") to disable coverage for project with name `project-name`
335+
disabledProjects = setOf() // setOf(":project-name") to disable coverage for project with path `:project-name` (`:` for the root project)
336336
instrumentAndroidPackage = false // true to instrument packages `android.*` and `com.android.*`
337337
runAllTestsForProjectTask = false // true to run all tests in all projects if `koverHtmlReport`, `koverXmlReport`, `koverReport`, `koverVerify` or `check` tasks executed on some project
338338
}
@@ -349,7 +349,7 @@ kover {
349349
intellijEngineVersion.set('1.0.656') // change version of IntelliJ agent and reporter
350350
jacocoEngineVersion.set('0.8.7') // change version of JaCoCo agent and reporter
351351
generateReportOnCheck = true // false to do not execute `koverMergedReport` task before `check` task
352-
disabledProjects = [] // ["project-name"] to disable coverage for project with name `project-name`
352+
disabledProjects = [] // [":project-name"] to disable coverage for project with path `:project-name` (`:` for the root project)
353353
instrumentAndroidPackage = false // true to instrument packages `android.*` and `com.android.*`
354354
runAllTestsForProjectTask = false // true to run all tests in all projects if `koverHtmlReport`, `koverXmlReport`, `koverReport`, `koverVerify` or `check` tasks executed on some project
355355
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version=0.5.0
1+
version=0.5.1-SNAPSHOT
22
group=org.jetbrains.kotlinx
33

44
kotlin.code.style=official

src/functionalTest/kotlin/kotlinx/kover/test/functional/cases/MultiProjectTests.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ internal class MultiProjectTests : BaseGradleScriptTest() {
124124
.subproject(subprojectName) {
125125
sources("multiproject-common")
126126
}
127-
.configKover { disabledProjects += subprojectName }
127+
.configKover { disabledProjects += ":$subprojectName" }
128128
.build()
129129
.run("build", "koverReport") {
130130
checkDefaultBinaryReport()

src/main/kotlin/kotlinx/kover/KoverPlugin.kt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class KoverPlugin : Plugin<Project> {
5555

5656
private fun Project.applyToProject(providers: BuildProviders, agents: Map<CoverageEngine, CoverageAgent>) {
5757
val projectProviders =
58-
providers.projects[name] ?: throw GradleException("Kover: Providers for project '$name' was not found")
58+
providers.projects[path] ?: throw GradleException("Kover: Providers for project '$name' ('$path') was not found")
5959

6060
val xmlReportTask = createKoverProjectTask(
6161
XML_REPORT_TASK_NAME,
@@ -165,10 +165,10 @@ class KoverPlugin : Plugin<Project> {
165165

166166
task.group = VERIFICATION_GROUP
167167

168-
providers.projects.forEach { (projectName, m) ->
169-
task.binaryReportFiles.put(projectName, NestedFiles(task.project.objects, m.reports))
170-
task.srcDirs.put(projectName, NestedFiles(task.project.objects, m.sources))
171-
task.outputDirs.put(projectName, NestedFiles(task.project.objects, m.output))
168+
providers.projects.forEach { (projectPath, m) ->
169+
task.binaryReportFiles.put(projectPath, NestedFiles(task.project.objects, m.reports))
170+
task.srcDirs.put(projectPath, NestedFiles(task.project.objects, m.sources))
171+
task.outputDirs.put(projectPath, NestedFiles(task.project.objects, m.output))
172172
}
173173

174174
task.coverageEngine.set(providers.engine)
@@ -199,8 +199,8 @@ class KoverPlugin : Plugin<Project> {
199199
task.mustRunAfter(xmlReportTask)
200200
task.mustRunAfter(htmlReportTask)
201201

202-
task.xmlFiles[proj.name] = xmlReportTask.xmlReportFile
203-
task.htmlDirs[proj.name] = htmlReportTask.htmlReportDir
202+
task.xmlFiles[proj.path] = xmlReportTask.xmlReportFile
203+
task.htmlDirs[proj.path] = htmlReportTask.htmlReportDir
204204
}
205205
}
206206
}
@@ -279,7 +279,7 @@ class KoverPlugin : Plugin<Project> {
279279
}
280280
val targetErrorProvider = project.layout.buildDirectory.file("kover/errors/$name.log").map { it.asFile }
281281

282-
doFirst(BinaryReportCleanupAction(project.name, providers.koverExtension, taskExtension))
282+
doFirst(BinaryReportCleanupAction(project.path, providers.koverExtension, taskExtension))
283283
doLast(MoveIntellijErrorLogAction(sourceErrorProvider, targetErrorProvider))
284284
}
285285
}
@@ -289,7 +289,7 @@ class KoverPlugin : Plugin<Project> {
289289
For this reason, before starting the tests, it is necessary to clear the file from the results of previous runs.
290290
*/
291291
private class BinaryReportCleanupAction(
292-
private val projectName: String,
292+
private val projectPath: String,
293293
private val koverExtensionProvider: Provider<KoverExtension>,
294294
private val taskExtension: KoverTaskExtension
295295
) : Action<Task> {
@@ -302,7 +302,7 @@ private class BinaryReportCleanupAction(
302302

303303
if (!taskExtension.isDisabled
304304
&& !koverExtension.isDisabled
305-
&& !koverExtension.disabledProjects.contains(projectName)
305+
&& !koverExtension.disabledProjects.contains(projectPath)
306306
&& koverExtension.coverageEngine.get() == CoverageEngine.INTELLIJ
307307
) {
308308
// IntelliJ engine expected empty file for parallel test execution.
@@ -333,7 +333,7 @@ private class CoverageArgumentProvider(
333333
@get:Input val excludeAndroidPackage: Provider<Boolean>
334334
) : CommandLineArgumentProvider, Named {
335335

336-
private val projectName: String = task.project.name
336+
private val projectPath: String = task.project.path
337337

338338
@Internal
339339
override fun getName(): String {
@@ -345,7 +345,7 @@ private class CoverageArgumentProvider(
345345

346346
if (taskExtension.isDisabled
347347
|| koverExtensionValue.isDisabled
348-
|| koverExtensionValue.disabledProjects.contains(projectName)
348+
|| koverExtensionValue.disabledProjects.contains(projectPath)
349349
) {
350350
return mutableListOf()
351351
}

src/main/kotlin/kotlinx/kover/Providers.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ internal fun Project.createProviders(agents: Map<CoverageEngine, CoverageAgent>)
1515
val projects: MutableMap<String, ProjectProviders> = mutableMapOf()
1616

1717
allprojects {
18-
projects[it.name] = ProjectProviders(
18+
projects[it.path] = ProjectProviders(
1919
it.provider { it.files(if (runAllTests()) allBinaryReports() else it.binaryReports(this)) },
2020
it.provider { if (runAllTests()) allTestTasks() else it.testTasks(this) },
2121
it.provider { it.collectDirs(this).first },
@@ -108,7 +108,7 @@ private fun Project.collectDirs(root: Project): Pair<FileCollection, FileCollect
108108

109109
private fun Project.isDisabled(root: Project): Boolean {
110110
val koverExtension = root.extensions.getByType(KoverExtension::class.java)
111-
return koverExtension.isDisabled || koverExtension.disabledProjects.contains(name)
111+
return koverExtension.isDisabled || koverExtension.disabledProjects.contains(path)
112112
}
113113

114114
private fun Project.runAllTests(): Boolean {

src/main/kotlin/kotlinx/kover/engines/commons/Reports.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,5 @@ internal fun String.wildcardsToRegex(): String {
3030

3131
return builder.toString()
3232
}
33+
34+
internal val ONE_HUNDRED = 100.toBigDecimal()

src/main/kotlin/kotlinx/kover/engines/intellij/IntellijReports.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,9 +189,9 @@ private fun Task.checkRule(counters: Map<VerificationValueType, Int>, rule: Veri
189189

190190
val ruleName = if (rule.name != null) "'${rule.name}' " else ""
191191
return if (boundsViolations.size > 1) {
192-
"Rule ${ruleName}violated for '${project.name}':" + boundsViolations.joinToString("\n ", "\n ")
192+
"Rule ${ruleName}violated for '${project.path}':" + boundsViolations.joinToString("\n ", "\n ")
193193
} else if (boundsViolations.size == 1) {
194-
"Rule ${ruleName}violated for '${project.name}': ${boundsViolations[0]}"
194+
"Rule ${ruleName}violated for '${project.path}': ${boundsViolations[0]}"
195195
} else {
196196
null
197197
}

src/main/kotlin/kotlinx/kover/engines/jacoco/JacocoReports.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ package kotlinx.kover.engines.jacoco
66

77
import groovy.lang.*
88
import kotlinx.kover.api.*
9+
import kotlinx.kover.engines.commons.*
10+
import kotlinx.kover.engines.commons.ONE_HUNDRED
911
import kotlinx.kover.engines.commons.Report
1012
import org.gradle.api.*
1113
import org.gradle.api.file.*
@@ -40,7 +42,7 @@ private fun Task.callJacocoAntReportTask(
4042
invokeWithBody("executiondata") {
4143
project.files(report.files).addToAntBuilder(this, "resources")
4244
}
43-
invokeWithBody("structure", mapOf("name" to project.name)) {
45+
invokeWithBody("structure", mapOf("name" to project.path)) {
4446
invokeWithBody("sourcefiles") {
4547
project.files(sources).addToAntBuilder(this, "resources")
4648
}
@@ -93,8 +95,8 @@ internal fun Task.jacocoVerification(
9395
}
9496
VerificationValueType.COVERED_LINES_PERCENTAGE -> {
9597
limitArgs["value"] = "COVEREDRATIO"
96-
min = min?.divide(BigDecimal(100))
97-
max = max?.divide(BigDecimal(100))
98+
min = min?.divide(ONE_HUNDRED)
99+
max = max?.divide(ONE_HUNDRED)
98100
}
99101
}
100102

src/main/kotlin/kotlinx/kover/tasks/KoverCollectingTask.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,26 @@ open class KoverCollectingTask : DefaultTask() {
2424
it.into(outputDir)
2525
xmlFiles.forEach { (p, f) ->
2626
it.from(f) { c ->
27-
c.rename { "$p.xml" }
27+
c.rename { "${p.pathAsFilename()}.xml" }
2828
}
2929
}
3030
}
3131

3232

3333
htmlDirs.forEach { (p, d) ->
34+
val name = p.pathAsFilename()
35+
3436
// delete directory for HTML reports so that the old reports do not overlap with the new ones
35-
project.delete(outputDir.dir("html/$p"))
37+
project.delete(outputDir.dir("html/$name"))
3638

3739
project.copy {
3840
it.from(d)
39-
it.into(outputDir.dir("html/$p"))
41+
it.into(outputDir.dir("html/$name"))
4042
}
4143
}
4244
}
45+
46+
private fun String.pathAsFilename(): String {
47+
return if (this == ":") "_root_" else replace(':', '_')
48+
}
4349
}

src/main/kotlin/kotlinx/kover/tasks/KoverHtmlReport.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ open class KoverMergedHtmlReportTask : KoverMergedTask() {
4444

4545
@CacheableTask
4646
open class KoverHtmlReportTask : KoverProjectTask() {
47-
private val projectName = project.name
47+
private val projectPath = project.path
4848

4949
/**
5050
* Specifies directory path of generated HTML report.
@@ -72,6 +72,6 @@ open class KoverHtmlReportTask : KoverProjectTask() {
7272
classpath.get(),
7373
)
7474
}
75-
logger.lifecycle("Kover: HTML report for '$projectName' file://${htmlDirFile.canonicalPath}/index.html")
75+
logger.lifecycle("Kover: HTML report for '$projectPath' file://${htmlDirFile.canonicalPath}/index.html")
7676
}
7777
}

0 commit comments

Comments
 (0)