-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathjacoco_global.gradle
109 lines (94 loc) · 3.6 KB
/
jacoco_global.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
apply plugin: 'jacoco'
jacoco {
toolVersion "0.8.5"
}
// https://github.com/gradle/gradle/issues/5184
tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
jacoco.excludes = ['jdk.internal.*']
}
rootProject.afterEvaluate {
def testCoverageBuildType = rootProject.getProperties().get('testBuildType') ?: 'qa'
def testTaskNames = []
def fileTrees = []
def coverageSourceDirs = []
def executionDataDirs = []
//Remember to change in sonarqube build.gradle config
def fileFilter = [
//Android stuff
'**/R.class',
'**/BR.class',
'**/R$*.class',
'**/BR$*.class',
'**/BuildConfig.*',
'android/**/*.*',
'**/Manifest*.*',
//Data Binding
'**/*databinding/**/*.*',
//Test
'**/**Test*.*',
//Interfaces
'**/interfaces/*.*',
//UI Related items that make no sense to add unit tests to
'**/views/*.*',
'**/dialogs/*.*',
'**/animation/*.*',
'**/UnfreezeScreenActivity.*',
//RxJava that also make no sense to test
'**/Schedulers.*',
//No logic utils
'**/utils/http/HttpCodes.*'
]
rootProject.subprojects.collect() { subproject ->
if (isAndroidProject(subproject)) {
subproject.android {
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
}
}
}
}
}
subproject.afterEvaluate {
testTaskNames.add(":${subproject.name}:test${testCoverageBuildType.capitalize()}UnitTest")
def javaFileTree = fileTree(
dir: "${subproject.buildDir}/intermediates/javac/${testCoverageBuildType}/classes",
excludes: fileFilter
)
fileTrees.add(javaFileTree)
def kotlinFileTree = fileTree(
dir: "${subproject.buildDir}/tmp/kotlin-classes/${testCoverageBuildType}",
excludes: fileFilter
)
fileTrees.add(kotlinFileTree)
def coverageSourceDir = [
"${subproject.projectDir}/src/main/java",
"${subproject.projectDir}/src/${testCoverageBuildType}/java"
]
coverageSourceDirs.add(coverageSourceDir)
def executionDataDir = "${subproject.buildDir}/jacoco/test${testCoverageBuildType.capitalize()}UnitTest.exec"
executionDataDirs.add(executionDataDir)
}
}
//'qa' is a default test build type. To change run:
//gradlew createGlobalSkeletoidUnitTestReport -PtestBuildType={yourTestBuildType}
task createGlobalSkeletoidUnitTestReport(type: JacocoReport, dependsOn: testTaskNames) {
group = "Reporting"
description = "Generate Jacoco Global coverage report"
getClassDirectories().from(files(fileTrees))
getAdditionalSourceDirs().from(files(coverageSourceDirs))
getSourceDirectories().from(files(coverageSourceDirs))
getExecutionData().from(files(executionDataDirs))
reports {
xml.enabled = true
html.enabled = true
}
}
}
protected static boolean isAndroidProject(final Project project) {
final boolean isAndroidLibrary = project.plugins.hasPlugin('com.android.library')
final boolean isAndroidApp = project.plugins.hasPlugin('com.android.application')
return isAndroidLibrary || isAndroidApp
}