From 6d7a0fa83b33dedf1a41267bd2e2519f8fdb2317 Mon Sep 17 00:00:00 2001 From: Alexey Alter-Pesotskiy Date: Thu, 9 Jan 2025 15:36:38 +0000 Subject: [PATCH] JaCoCo Implementation --- .github/workflows/android.yml | 4 +-- scripts/coverage.gradle | 63 +++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 scripts/coverage.gradle diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index d1e9a5220e..6fbdc2aaa8 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -67,8 +67,8 @@ jobs: - name: Run unit tests run: | - ./gradlew :stream-video-android-ui-compose:testDebugUnitTest --scan --stacktrace - ./gradlew :stream-video-android-core:testDebugUnitTest --scan --stacktrace + ./gradlew :stream-video-android-ui-compose:testDebugUnitTest :stream-video-android-ui-compose:testCoverage --scan --stacktrace + ./gradlew :stream-video-android-core:testDebugUnitTest :stream-video-android-core:testCoverage --scan --stacktrace - name: Unit tests core results uses: actions/upload-artifact@v4 diff --git a/scripts/coverage.gradle b/scripts/coverage.gradle new file mode 100644 index 0000000000..28d042a04a --- /dev/null +++ b/scripts/coverage.gradle @@ -0,0 +1,63 @@ +if (!rootProject.ext.sonar.ignoreModules.contains(name)) { + apply plugin: 'jacoco' + apply plugin: "org.sonarqube" + + def testTask = "testDebugUnitTest" + def jacocoResults = "${buildDir}/reports/jacoco/report.xml" + + if (hasProperty('android')) { + android { + buildTypes { + debug { + testCoverageEnabled = true + enableUnitTestCoverage = true + enableAndroidTestCoverage true + } + } + } + } + + afterEvaluate { + tasks.withType(Test).configureEach { + jacoco.includeNoLocationClasses = true + jacoco.excludes = [ + 'jdk.internal.*', + 'androidx.core.*', + 'com.android.*', + 'android.*' + ] + } + + tasks.register("testCoverage", JacocoReport) { + dependsOn testTask + + reports { + xml.required.set(true) + xml.outputLocation.set(file(jacocoResults)) + } + + executionData.setFrom(fileTree(dir: buildDir, includes: [ + "outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec" + ])) + + sourceDirectories.setFrom(files([ + "src/main/kotlin" + ])) + + classDirectories.setFrom(files([ + fileTree( + dir: "${buildDir}/tmp/kotlin-classes/debug", + excludes: rootProject.ext.sonar.excludeFilter + ) + ])) + } + } + + sonarqube { + properties { + property "sonar.junit.reportPaths", "${buildDir}/test-results/${testTask}" + property "sonar.coverage.jacoco.xmlReportPaths", jacocoResults + property "sonar.sources", "src/main/kotlin" + } + } +}