Skip to content

Commit

Permalink
Merge pull request #237 from robstoll/fix-jacoco
Browse files Browse the repository at this point in the history
fix classDirectories in jacoco plugin, add additionalProjectSources
  • Loading branch information
robstoll authored Sep 20, 2023
2 parents 3c87f47 + c36c5e1 commit ede4ad7
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import org.gradle.testing.jacoco.tasks.JacocoReport
import org.gradle.kotlin.dsl.create
import org.gradle.kotlin.dsl.named
import org.gradle.kotlin.dsl.withType
import java.io.File

class JunitJacocoPlugin : Plugin<Project> {

Expand All @@ -31,37 +30,34 @@ class JunitJacocoPlugin : Plugin<Project> {
useJUnitPlatform()
reports.junitXml.required.set(false)
}
@Suppress("UNCHECKED_CAST")
val jacocoReportTask = project.tasks.named(JACOCO_TASK_NAME) as TaskProvider<JacocoReport>
project.tasks.named("check") {
dependsOn(jacocoReportTask)
}
defaultConfig(project, jacocoReportTask)

defaultConfig(project, extension)
configureTestTasks(project, extension)
}

private fun defaultConfig(target: Project, jacocoReportTask: TaskProvider<JacocoReport>) {
private fun defaultConfig(target: Project, extension: JunitJacocoPluginExtension) {
@Suppress("UNCHECKED_CAST")
val jacocoReportTask = target.tasks.named(JACOCO_TASK_NAME) as TaskProvider<JacocoReport>
target.tasks.named("check") {
dependsOn(jacocoReportTask)
}
val jacocoPluginExtension = target.extensions.getByType(JacocoPluginExtension::class.java)
jacocoPluginExtension.toolVersion = Dependencies.jacocoToolsVersion

jacocoReportTask.configure {

if (project.plugins.findPlugin("org.jetbrains.kotlin.multiplatform") != null) {
val coverageSourceDirs = arrayOf(
"src/commonMain",
"src/jvmMain"
)
if (target.plugins.findPlugin("org.jetbrains.kotlin.multiplatform") != null) {

val classFiles = File("${project.buildDir}/classes/kotlin/jvm/main")
.walkBottomUp()
.toSet()
configureProjectSources(target)

classDirectories.setFrom(classFiles)
sourceDirectories.setFrom(project.files(coverageSourceDirs))
executionData.setFrom(target.files("${target.buildDir}/jacoco/jvmTest.exec"))
dependsOn(target.tasks.named("jvmTest"))
}

executionData.setFrom(project.files("${project.buildDir}/jacoco/jvmTest.exec"))
dependsOn(project.tasks.named("jvmTest"))
extension.additionalProjectSources.get().forEach { otherProject ->
configureProjectSources(otherProject)
}

reports {
csv.required.set(false)
xml.required.set(true)
Expand All @@ -75,6 +71,10 @@ class JunitJacocoPlugin : Plugin<Project> {
}
}

private fun JacocoReport.configureProjectSources(project: Project) {
sourceDirectories.from(project.files(coverageSourceDirs))
classDirectories.from(project.layout.buildDirectory.map { it.dir("classes/kotlin/jvm/main").asFileTree })
}

private fun configureTestTasks(project: Project, extension: JunitJacocoPluginExtension) {

Expand Down Expand Up @@ -158,5 +158,11 @@ class JunitJacocoPlugin : Plugin<Project> {
companion object {
const val JACOCO_TASK_NAME = "jacocoTestReport"
const val EXTENSION_NAME = "junitjacoco"
private val coverageSourceDirs = arrayOf(
"src/commonMain",
"src/jvmMain",
"src/main"
)

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ import org.gradle.kotlin.dsl.listProperty

open class JunitJacocoPluginExtension(project: Project) {
val allowedTestTasksWithoutTests: ListProperty<String> = project.objects.listProperty()
val additionalProjectSources: ListProperty<Project> = project.objects.listProperty()

init {
allowedTestTasksWithoutTests.convention(listOf("jsBrowserTest"))
additionalProjectSources.convention(emptyList())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,6 @@ class JunitJacocoPluginTest {
project.evaluate()
//assert
assertEquals(["jsBrowserTest"], extension.allowedTestTasksWithoutTests.get())
assertEquals([], extension.additionalProjectSources.get())
}
}

0 comments on commit ede4ad7

Please sign in to comment.