Issue#35 Jacoco works for both Android and Java Modules.
Report can be aggregated into one. The aggregated report contains data from AndroidTest/UnitTest and Java UnitTest
This commit is contained in:
parent
52713aaa3d
commit
9964f25e78
1 changed files with 96 additions and 0 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
// filter of files that shouldn't be part of the report
|
||||||
def androidFileFilter =
|
def androidFileFilter =
|
||||||
[ //jdk
|
[ //jdk
|
||||||
'jdk.internal.*',
|
'jdk.internal.*',
|
||||||
|
|
@ -12,6 +13,7 @@ def androidFileFilter =
|
||||||
'**/*Test*.*',
|
'**/*Test*.*',
|
||||||
'android/**/*.*',
|
'android/**/*.*',
|
||||||
// kotlin
|
// kotlin
|
||||||
|
'**/META-INF/*',
|
||||||
'**/*MapperImpl*.*',
|
'**/*MapperImpl*.*',
|
||||||
'**/*$ViewInjector*.*',
|
'**/*$ViewInjector*.*',
|
||||||
'**/*$ViewBinder*.*',
|
'**/*$ViewBinder*.*',
|
||||||
|
|
@ -37,6 +39,8 @@ def androidFileFilter =
|
||||||
// room
|
// room
|
||||||
'**/*_Impl.class',
|
'**/*_Impl.class',
|
||||||
'**/*_Impl*.*',
|
'**/*_Impl*.*',
|
||||||
|
// hilt
|
||||||
|
'**/hilt_aggregated_deps/*'
|
||||||
]
|
]
|
||||||
|
|
||||||
subprojects { module ->
|
subprojects { module ->
|
||||||
|
|
@ -53,6 +57,10 @@ subprojects { module ->
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task unitTest(dependsOn: ["test"]) {
|
||||||
|
group = "verification"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -68,6 +76,16 @@ subprojects { module ->
|
||||||
android.buildTypes.debug.enableUnitTestCoverage true
|
android.buildTypes.debug.enableUnitTestCoverage true
|
||||||
|
|
||||||
jacoco.toolVersion = "$jacoco_version"
|
jacoco.toolVersion = "$jacoco_version"
|
||||||
|
|
||||||
|
task jacocoTestReport(dependsOn: ["createDebugUnitTestCoverageReport", "createDebugAndroidTestCoverageReport"]) {
|
||||||
|
group = "verification"
|
||||||
|
}
|
||||||
|
task jacocoUnitTestReport(dependsOn: ["createDebugUnitTestCoverageReport"]) {
|
||||||
|
group = "verification"
|
||||||
|
}
|
||||||
|
task jacocoAndroidTestReport(dependsOn: ["createDebugAndroidTestCoverageReport"]) {
|
||||||
|
group = "verification"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -83,6 +101,84 @@ subprojects { module ->
|
||||||
android.buildTypes.debug.enableUnitTestCoverage true
|
android.buildTypes.debug.enableUnitTestCoverage true
|
||||||
|
|
||||||
jacoco.toolVersion = "$jacoco_version"
|
jacoco.toolVersion = "$jacoco_version"
|
||||||
|
|
||||||
|
println(module.projectDir)
|
||||||
|
def hasAndroidTests = new File("${module.projectDir}/src/androidTest").exists()
|
||||||
|
def hasUnitTests = new File("${module.projectDir}/src/test").exists()
|
||||||
|
if (hasUnitTests) {
|
||||||
|
task jacocoUnitTestReport(dependsOn: ["createDebugUnitTestCoverageReport"]) {
|
||||||
|
group = "verification"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
task jacocoUnitTestReport() {
|
||||||
|
group = "verification"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hasAndroidTests) {
|
||||||
|
task jacocoAndroidTestReport(dependsOn: ["createDebugAndroidTestCoverageReport"]) {
|
||||||
|
group = "verification"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
task jacocoAndroidTestReport() {
|
||||||
|
group = "verification"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
task jacocoTestReport(dependsOn: ["jacocoUnitTestReport", "jacocoAndroidTestReport"]) {
|
||||||
|
group = "verification"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
configure(rootProject) {
|
||||||
|
apply plugin: "jacoco"
|
||||||
|
|
||||||
|
def testTypeName = "debug"
|
||||||
|
if (rootProject.extensions.extraProperties.has("testVariant")) {
|
||||||
|
testTypeName = rootProject.extensions.extraProperties.getByName("testVariant")
|
||||||
|
}
|
||||||
|
|
||||||
|
task runTestAndJacocoRootReport(type: JacocoReport, group: 'Coverage reports') {
|
||||||
|
description = 'Run Tests and Generates report from all subprojects'
|
||||||
|
|
||||||
|
def codeProjects = subprojects.findAll({ it.subprojects.isEmpty() })
|
||||||
|
codeProjects.forEach {
|
||||||
|
dependsOn += ["$it.path:jacocoTestReport"]
|
||||||
|
}
|
||||||
|
|
||||||
|
finalizedBy("jacocoRootReport")
|
||||||
|
}
|
||||||
|
|
||||||
|
task jacocoRootReport(type: JacocoReport, group: 'Coverage reports') {
|
||||||
|
description = 'Generates report from all subprojects'
|
||||||
|
|
||||||
|
def codeProjects = subprojects.findAll({ it.subprojects.isEmpty() })
|
||||||
|
sourceDirectories.from = files(codeProjects.collect { "${it.projectDir}/src/main/java" })
|
||||||
|
def filetrees = codeProjects.collect {
|
||||||
|
def javaTree = fileTree(dir: "${it.buildDir}/classes/java/main", excludes: androidFileFilter)
|
||||||
|
def kotlinTree = fileTree(dir: "${it.buildDir}/classes/kotlin/main", excludes: androidFileFilter)
|
||||||
|
def androidJavaTree = fileTree(dir: "${it.buildDir}/intermediates/javac/${testTypeName}/classes", excludes: androidFileFilter)
|
||||||
|
def androidKotlinTree = fileTree(dir: "${it.buildDir}/tmp/kotlin-classes/${testTypeName}", excludes: androidFileFilter)
|
||||||
|
files([javaTree, kotlinTree, androidJavaTree, androidKotlinTree])
|
||||||
|
}.flatten()
|
||||||
|
|
||||||
|
classDirectories.from = files(filetrees)
|
||||||
|
executionData.from = files(
|
||||||
|
codeProjects.collect {
|
||||||
|
[
|
||||||
|
fileTree(dir: "${it.buildDir}/outputs/code_coverage/${testTypeName}AndroidTest/connected/", includes: ["**/*.ec", "**/*.exec"]), // androidTest
|
||||||
|
fileTree(dir: "${it.buildDir}/outputs/unit_test_code_coverage/", includes: ["**/*.ec", "**/*.exec"]), // android unitTest
|
||||||
|
"${it.buildDir}/jacoco/test.exec" // java
|
||||||
|
]
|
||||||
|
}.flatten()
|
||||||
|
)
|
||||||
|
|
||||||
|
reports {
|
||||||
|
html {
|
||||||
|
required = true
|
||||||
|
destination file("${buildDir}/coverage-report")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue