118 строки
4.2 KiB
Groovy
118 строки
4.2 KiB
Groovy
/*
|
|
* Nextcloud Android Common Library
|
|
*
|
|
* SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-FileCopyrightText: 2023 Andy Scherzinger <info@andy-scherzinger.de>
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
apply plugin: 'jacoco'
|
|
|
|
jacoco {
|
|
toolVersion = "$jacoco_version"
|
|
}
|
|
|
|
// Force Jacoco Version
|
|
|
|
subprojects {
|
|
configurations.all {
|
|
resolutionStrategy {
|
|
eachDependency { details ->
|
|
if ('org.jacoco' == details.requested.group) {
|
|
details.useVersion "$jacocoVersion"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
project.afterEvaluate { project ->
|
|
|
|
tasks.withType(Test) {
|
|
jacoco.includeNoLocationClasses = true
|
|
jacoco.excludes = ['jdk.internal.*']
|
|
}
|
|
|
|
final flavor = "Gplay"
|
|
final buildType = "Debug"
|
|
final variant = "$flavor${buildType.capitalize()}"
|
|
final taskName = "jacocoTest${variant.capitalize()}UnitTestReport"
|
|
|
|
task "$taskName"(type: JacocoReport, dependsOn: "test${buildType.capitalize()}UnitTest") {
|
|
|
|
reports {
|
|
csv.required = Boolean.FALSE
|
|
xml.required = Boolean.TRUE
|
|
html.required = Boolean.TRUE
|
|
}
|
|
|
|
final fileFilter = [
|
|
// data binding
|
|
'**/databinding/*',
|
|
'android/databinding/**/*.class',
|
|
'**/android/databinding/*Binding.class',
|
|
'**/android/databinding/*',
|
|
'**/androidx/databinding/*',
|
|
'**/BR.*',
|
|
// android
|
|
'**/R.class',
|
|
'**/R$*.class',
|
|
'**/BuildConfig.*',
|
|
'**/Manifest*.*',
|
|
'**/*Test*.*',
|
|
'android/**/*.*',
|
|
// kotlin
|
|
'**/*MapperImpl*.*',
|
|
'**/*$ViewInjector*.*',
|
|
'**/*$ViewBinder*.*',
|
|
'**/BuildConfig.*',
|
|
'**/*Component*.*',
|
|
'**/*BR*.*',
|
|
'**/Manifest*.*',
|
|
'**/*$Lambda$*.*',
|
|
'**/*Companion*.*',
|
|
'**/*Module*.*',
|
|
'**/*Dagger*.*',
|
|
'**/*Hilt*.*',
|
|
'**/*MembersInjector*.*',
|
|
'**/*_MembersInjector.class',
|
|
'**/*_Factory*.*',
|
|
'**/*_Provide*Factory*.*',
|
|
'**/*Extensions*.*',
|
|
// sealed and data classes
|
|
'**/*$Result.*',
|
|
'**/*$Result$*.*',
|
|
// adapters generated by moshi
|
|
'**/*JsonAdapter.*',
|
|
// Hilt
|
|
'**/*Module.kt',
|
|
'**/di/**',
|
|
'dagger.hilt.internal/*',
|
|
'hilt_aggregated_deps/*',
|
|
|
|
'**/*$Result.*', /* filtering `sealed` and `data` classes */
|
|
'**/*$Result$*.*',/* filtering `sealed` and `data` classes */
|
|
'**/*Args*.*', /* filtering Navigation Component generated classes */
|
|
'**/*Directions*.*', /* filtering Navigation Component generated classes */
|
|
'**/*inlined*.class', /* filtering inlined classes */
|
|
'**/composables/**'
|
|
/* INSERT ANY OTHER JUNK YOU WANT FILTERED OUT HERE */
|
|
]
|
|
|
|
final androidKotlinTree = fileTree(dir: "${project.buildDir}/tmp/kotlin-classes/${variant}", excludes: fileFilter)
|
|
final kotlinTree = fileTree(dir: "${project.buildDir}/classes/kotlin/main", excludes: fileFilter)
|
|
final javacTree = fileTree(dir: "${project.buildDir}/intermediates/javac/${variant}/classes", excludes: fileFilter)
|
|
|
|
final mainSrc = "${project.projectDir}/src/main/java"
|
|
final productFlavorSrc = "${project.projectDir}/src/${flavor}/java"
|
|
final buildTypeSrc = "${project.projectDir}/src/${buildType}/java"
|
|
|
|
sourceDirectories.setFrom files([mainSrc, productFlavorSrc, buildTypeSrc])
|
|
classDirectories.setFrom files([androidKotlinTree, kotlinTree, javacTree])
|
|
executionData.setFrom fileTree(dir: project.buildDir, includes: [
|
|
"jacoco/test${variant.capitalize()}UnitTest.exec",
|
|
"outputs/unit_test_code_coverage/${variant}UnitTest/test${variant.capitalize()}UnitTest.exec",
|
|
])
|
|
}
|
|
}
|