@@ -43,112 +43,38 @@ class ProjectJacocoConventionPlugin : Plugin<Project> {
43
43
with (pluginManager) {
44
44
apply (" jacoco" )
45
45
}
46
- tasks.register( " createMergedJacocoReport " ) {
46
+ tasks.register< JacocoReport >( " MergeHTMLJacocoReports " ) {
47
47
val jacocoReport = this
48
48
group = " Reporting"
49
- description = " Generate test coverage reports on the debug build"
49
+ description = " Merge all generated JacocoReport"
50
+ logger.quiet(" ======Merging HTML Reports=========" )
51
+ val javaClasses: MutableCollection <String > = mutableListOf ()
52
+ val kotlinClasses: MutableCollection <String > = mutableListOf ()
53
+ val sourceDir: MutableCollection <String > = mutableListOf ()
54
+ val coverageFiles: MutableCollection <String > = mutableListOf ()
50
55
subprojects {
51
- val subproject = this
52
- subproject.plugins.withType<JacocoPlugin >().configureEach {
53
- if (tasks.findByName(" createDemoDebugJacocoReport" ) != null ) {
54
- val moduleTask = tasks.findByName(" createDemoDebugJacocoReport" )
55
- jacocoReport.dependsOn(moduleTask)
56
- }
56
+ val subProject = this
57
+ subProject.plugins.withType<JacocoPlugin >().configureEach {
58
+ val moduleTask = tasks.findByName(" createDemoDebugJacocoReport" )
59
+ jacocoReport.dependsOn(moduleTask)
60
+ javaClasses.add(" ${subProject.buildDir} /intermediates/javac/demoDebug/classes" )
61
+ kotlinClasses.add(" ${subProject.buildDir} /tmp/kotlin-classes/demoDebug" )
62
+ sourceDir.add(" ${subProject.projectDir} /src/main/java" )
63
+ sourceDir.add(" ${subProject.projectDir} /src/main/kotlin" )
64
+ sourceDir.add(" ${subProject.projectDir} /src/demoDebug/java" )
65
+ coverageFiles.add(" ${subProject.buildDir} /outputs/unit_test_code_coverage/demoDebugUnitTest/testDemoDebugUnitTest.exec" )
66
+ coverageFiles.add(" ${subProject.buildDir} /outputs/code_coverage/demoDebugAndroidTest/connected/coverage.ec" )
57
67
}
58
68
}
59
- doLast {
60
- logger.lifecycle(" Making Overall coverage report" )
61
- addReportMergingTask()
62
- val metrics = mutableMapOf<String , Map <String , Double >>()
63
- val moduleLimits = mutableMapOf<String , Map <String , Double >>()
64
- val failures = mutableMapOf<String , List <String >>()
65
-
66
- if (! extra.has(" limits" )) {
67
- setProjectTestCoverageLimits()
68
- }
69
- subprojects {
70
- if (tasks.findByName(" createDemoDebugJacocoReport" ) != null ) {
71
- val reportDir = jacoco.reportsDirectory.asFile.get()
72
- val report =
73
- file(" $reportDir /createDemoDebugJacocoReport/createDemoDebugJacocoReport.xml" )
74
- if (report.exists()) {
75
- logger.lifecycle(" Checking coverage results:$report " )
76
- metrics[project.name] = report.extractTestCoverage()
77
- moduleLimits[project.name] =
78
- project.extra[" limits" ] as Map <String , Double >
79
- }
80
- }
81
- }
82
- metrics.forEach { (key, metricsMap) ->
83
- val extractedMetricsMap = mutableMapOf<String , Double >()
84
- if (metricsMap.isNotEmpty()) {
85
- val failureMap = metricsMap.filter { item ->
86
- item.value < moduleLimits[key]!! [item.key]!!
87
- }.map { item ->
88
- extractedMetricsMap[item.key] = item.value
89
- " -${item.key} coverage is: ${item.value} %, minimum is ${moduleLimits[item.key]} %"
90
- }
91
- if (failureMap.isNotEmpty()) {
92
- failures[key] = failureMap
93
- }
94
- }
95
- moduleLimits[key] = extractedMetricsMap
96
- }
97
-
98
-
99
- if (failures.isNotEmpty()) {
100
- logger.quiet(" ======Code coverage failures=========" )
101
- failures.forEach { entry ->
102
- logger.quiet(" ======Module: ${entry.key} =========" )
103
- entry.value.forEach { logger.quiet(it) }
104
- }
105
- logger.quiet(" ===========================================" )
106
- }
107
-
108
- if (metrics.isNotEmpty()) {
109
- logger.quiet(" ======Code coverage success=========" )
110
- metrics.forEach { entry ->
111
- logger.quiet(" ======Module: ${entry.key} =========" )
112
- entry.value.forEach {
113
- logger.quiet(" - ${it.key} coverage: ${it.value} " )
114
- }
115
- }
116
- logger.quiet(" ===========================================" )
117
- }
69
+ classDirectories.setFrom(files(javaClasses, kotlinClasses))
70
+ additionalClassDirs.setFrom(files(sourceDir))
71
+ sourceDirectories.setFrom(files(sourceDir))
72
+ executionData.setFrom(files(coverageFiles))
73
+ reports {
74
+ xml.required.set(true )
75
+ html.required.set(true )
118
76
}
119
-
120
77
}
121
-
122
-
123
78
}
124
79
}
125
-
126
- private fun Project.addReportMergingTask () {
127
- tasks.register<JacocoReport >(" MergeHTMLJacocoReports" ) {
128
- logger.quiet(" ======Merging HTML Reports=========" )
129
- val javaClasses : MutableCollection <String > = mutableListOf ()
130
- val kotlinClasses : MutableCollection <String > = mutableListOf ()
131
- val sourceDir : MutableCollection <String > = mutableListOf ()
132
- val coverageFiles : MutableCollection <String > = mutableListOf ()
133
- subprojects.forEach { subProject ->
134
- javaClasses.add(" ${subProject.buildDir} /intermediates/javac/demoDebug/classes" )
135
- kotlinClasses.add(" ${subProject.buildDir} /tmp/kotlin-classes/demoDebug" )
136
- sourceDir.add( " ${subProject.projectDir} /src/main/java" )
137
- sourceDir.add( " ${subProject.projectDir} /src/main/kotlin" )
138
- sourceDir.add( " ${subProject.projectDir} /src/demoDebug/java" )
139
- coverageFiles.add(" ${subProject.buildDir} /outputs/unit_test_code_coverage/demoDebugUnitTest/testDemoDebugUnitTest.exec" )
140
- coverageFiles.add(" ${subProject.buildDir} /outputs/code_coverage/demoDebugAndroidTest/connected/coverage.ec" )
141
- }
142
- classDirectories.setFrom(files(javaClasses, kotlinClasses))
143
- additionalClassDirs.setFrom(files(sourceDir))
144
- sourceDirectories.setFrom(files(sourceDir))
145
- executionData.setFrom(files(coverageFiles))
146
- reports {
147
- xml.required.set(true )
148
- html.required.set(true )
149
- }
150
- }
151
-
152
- }
153
-
154
80
}
0 commit comments