1
1
package com.vanniktech.android.junit.jacoco
2
2
3
+ import com.android.build.gradle.api.BaseVariant
3
4
import org.gradle.api.Plugin
4
5
import org.gradle.api.Project
5
6
import org.gradle.testing.jacoco.tasks.JacocoReport
@@ -28,9 +29,10 @@ class Generation implements Plugin<Project> {
28
29
}
29
30
}
30
31
31
- protected static boolean addJacoco (final Project subProject , final JunitJacocoExtension extension ) {
32
+ protected static boolean addJacoco (final Project subProject ,
33
+ final JunitJacocoExtension extension ) {
32
34
if (! shouldIgnore(subProject, extension)) {
33
- if (isAndroidProject (subProject)) {
35
+ if (isAndroidApplication(subProject) || isAndroidLibrary (subProject)) {
34
36
addJacocoAndroid(subProject, extension)
35
37
return true
36
38
} else if (isJavaProject(subProject)) {
@@ -84,65 +86,68 @@ class Generation implements Plugin<Project> {
84
86
toolVersion extension. jacocoVersion
85
87
}
86
88
87
- subProject. android. testOptions. unitTests. all {
89
+ subProject. android. testOptions? . unitTests? . all {
88
90
it. jacoco. includeNoLocationClasses = extension. includeNoLocationClasses
89
91
}
90
92
91
- final def buildTypes = subProject. android. buildTypes. collect { type -> type. name }
92
- final def productFlavors = subProject. android. productFlavors. collect { flavor -> flavor. name }
93
+ Collection<BaseVariant > variants = []
94
+ if (isAndroidApplication(subProject)) {
95
+ variants = subProject. android. applicationVariants
96
+ } else if (isAndroidLibrary(subProject)) {
97
+ variants = subProject. android. libraryVariants
98
+ }
93
99
94
- // When no product flavors defined, use empty
95
- if (! productFlavors) productFlavors. add(' ' )
100
+ variants. all { variant ->
96
101
97
- productFlavors . each { productFlavorName ->
98
- buildTypes . each { buildTypeName ->
102
+ def productFlavorName = variant . getFlavorName()
103
+ def buildTypeName = variant . getBuildType() . name
99
104
100
- def sourceName, sourcePath
101
- if (! productFlavorName) {
102
- sourceName = sourcePath = " ${ buildTypeName} "
103
- } else {
104
- sourceName = " ${ productFlavorName}${ buildTypeName.capitalize()} "
105
- sourcePath = " ${ productFlavorName} /${ buildTypeName} "
106
- }
107
- final def testTaskName = " test${ sourceName.capitalize()} UnitTest"
108
- final def taskName = " jacocoTestReport${ sourceName.capitalize()} "
109
-
110
- subProject. task(taskName, type : JacocoReport , dependsOn : testTaskName) {
111
- group = ' Reporting'
112
- description = " Generate Jacoco coverage reports after running ${ sourceName} tests."
113
-
114
- reports {
115
- xml {
116
- enabled = true
117
- destination " ${ subProject.buildDir} /reports/jacoco/${ sourceName} /jacoco.xml"
118
- }
119
- html {
120
- enabled = true
121
- destination " ${ subProject.buildDir} /reports/jacoco/${ sourceName} "
122
- }
123
- }
105
+ def sourceName, sourcePath
106
+ if (! productFlavorName) {
107
+ sourceName = sourcePath = " ${ buildTypeName} "
108
+ } else {
109
+ sourceName = " ${ productFlavorName}${ buildTypeName.capitalize()} "
110
+ sourcePath = " ${ productFlavorName} /${ buildTypeName} "
111
+ }
124
112
125
- classDirectories = subProject. fileTree(
126
- dir : " ${ subProject.buildDir} /intermediates/classes/${ sourcePath} " ,
127
- excludes : getExcludes(extension)
128
- )
113
+ final def testTaskName = " test${ sourceName.capitalize()} UnitTest"
114
+ final def taskName = " jacocoTestReport${ sourceName.capitalize()} "
129
115
130
- final def coverageSourceDirs = [
131
- " src/main/java" ,
132
- " src/$buildTypeName /java"
133
- ]
116
+ subProject. task(taskName, type : JacocoReport , dependsOn : testTaskName) {
117
+ group = ' Reporting'
118
+ description = " Generate Jacoco coverage reports after running ${ sourceName} tests."
134
119
135
- if (productFlavorName) {
136
- coverageSourceDirs. add(" src/$productFlavorName /java" )
120
+ reports {
121
+ xml {
122
+ enabled = true
123
+ destination " ${ subProject.buildDir} /reports/jacoco/${ sourceName} /jacoco.xml"
124
+ }
125
+ html {
126
+ enabled = true
127
+ destination " ${ subProject.buildDir} /reports/jacoco/${ sourceName} "
137
128
}
129
+ }
138
130
139
- additionalSourceDirs = subProject. files(coverageSourceDirs)
140
- sourceDirectories = subProject. files(coverageSourceDirs)
141
- executionData = subProject. files(" ${ subProject.buildDir} /jacoco/${ testTaskName} .exec" )
131
+ classDirectories = subProject. fileTree(
132
+ dir : " ${ subProject.buildDir} /intermediates/classes/${ sourcePath} " ,
133
+ excludes : getExcludes(extension)
134
+ )
135
+
136
+ final def coverageSourceDirs = [
137
+ " src/main/java" ,
138
+ " src/$buildTypeName /java"
139
+ ]
140
+
141
+ if (productFlavorName) {
142
+ coverageSourceDirs. add(" src/$productFlavorName /java" )
142
143
}
143
144
144
- subProject. check. dependsOn " ${ taskName} "
145
+ additionalSourceDirs = subProject. files(coverageSourceDirs)
146
+ sourceDirectories = subProject. files(coverageSourceDirs)
147
+ executionData = subProject. files(" ${ subProject.buildDir} /jacoco/${ testTaskName} .exec" )
145
148
}
149
+
150
+ subProject. check. dependsOn " ${ taskName} "
146
151
}
147
152
}
148
153
@@ -169,10 +174,12 @@ class Generation implements Plugin<Project> {
169
174
] : extension. excludes
170
175
}
171
176
172
- protected static boolean isAndroidProject (final Project project ) {
173
- final boolean isAndroidLibrary = project. plugins. hasPlugin(' com.android.library' )
174
- final boolean isAndroidApp = project. plugins. hasPlugin(' com.android.application' )
175
- return isAndroidLibrary || isAndroidApp
177
+ protected static boolean isAndroidLibrary (final Project project ) {
178
+ return project. plugins. hasPlugin(' com.android.library' )
179
+ }
180
+
181
+ protected static boolean isAndroidApplication (final Project project ) {
182
+ return project. plugins. hasPlugin(' com.android.application' )
176
183
}
177
184
178
185
protected static boolean isJavaProject (final Project project ) {
0 commit comments