diff --git a/build.gradle b/build.gradle index 0644343..fd97eea 100644 --- a/build.gradle +++ b/build.gradle @@ -8,6 +8,7 @@ buildscript { ext.compileSdkVersion = 32 ext.minSdkVersion = 21 ext.targetSdkVersion = 32 + ext.jacoco_version = "0.8.8" repositories { mavenCentral() google() @@ -20,6 +21,7 @@ buildscript { classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version" classpath "org.jlleitschuh.gradle:ktlint-gradle:10.2.1" classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$detekt_version" + classpath "org.jacoco:org.jacoco.core:$jacoco_version" } } @@ -50,3 +52,4 @@ apply from: 'gradlescripts/testoptions.gradle' apply from: 'gradlescripts/test.tasks.gradle' apply from: 'gradlescripts/testdependencies.gradle' apply from: 'gradlescripts/disable.test.task.gradle' +apply from: 'gradlescripts/jacoco.config.gradle' diff --git a/gradlescripts/jacoco.config.gradle b/gradlescripts/jacoco.config.gradle new file mode 100644 index 0000000..5ea4d01 --- /dev/null +++ b/gradlescripts/jacoco.config.gradle @@ -0,0 +1,88 @@ +def androidFileFilter = + [ //jdk + 'jdk.internal.*', + // data binding + '**/databinding/*.class', + '**/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.*', + // room + '**/*_Impl.class', + '**/*_Impl*.*', + ] + +subprojects { module -> + plugins.withType(JavaPlugin).whenPluginAdded { + configure(module) { + apply plugin: "jacoco" + + jacocoTestReport { + dependsOn test // tests are required to run before generating the report + + afterEvaluate { + classDirectories.setFrom(files(classDirectories.files.collect { + fileTree(dir: it, exclude: androidFileFilter) + })) + } + } + } + } + + plugins.withId("com.android.application") { + configure(module) { + apply plugin: "jacoco" + + module.android.testOptions.unitTests.all { + jacoco.includeNoLocationClasses = true + jacoco.excludes = androidFileFilter + } + android.buildTypes.debug.enableAndroidTestCoverage true + android.buildTypes.debug.enableUnitTestCoverage true + + jacoco.toolVersion = "$jacoco_version" + } + } + + plugins.withId("com.android.library") { + configure(module) { + apply plugin: "jacoco" + + module.android.testOptions.unitTests.all { + jacoco.includeNoLocationClasses = true + jacoco.excludes = androidFileFilter + } + android.buildTypes.debug.enableAndroidTestCoverage true + android.buildTypes.debug.enableUnitTestCoverage true + + jacoco.toolVersion = "$jacoco_version" + } + } +} \ No newline at end of file