1
+
2
+ import org.gradle.api.DefaultTask
3
+ import org.gradle.api.Project
4
+ import org.gradle.api.Task
5
+ import org.gradle.api.file.ConfigurableFileCollection
6
+ import org.gradle.api.internal.tasks.testing.junit.result.TestClassResult
7
+ import org.gradle.api.internal.tasks.testing.junit.result.TestResultSerializer
8
+ import org.gradle.api.tasks.InputFiles
9
+ import org.gradle.api.tasks.OutputFile
10
+ import org.gradle.api.tasks.PathSensitive
11
+ import org.gradle.api.tasks.PathSensitivity
12
+ import org.gradle.api.tasks.TaskAction
13
+ import org.gradle.api.tasks.TaskProvider
14
+ import java.io.File
15
+
16
+ fun Project.rootSetup (ciBuild : TaskProvider <Task >) {
17
+ val apolloTestAggregationConsumer = configurations.create(" apolloTestAggregationConsumer" ) {
18
+ isCanBeConsumed = false
19
+ isCanBeResolved = true
20
+
21
+ attributes {
22
+ attribute(org.gradle.api.attributes.Usage .USAGE_ATTRIBUTE , objects.named(org.gradle.api.attributes.Usage ::class .java, " apolloTestAggregation" ))
23
+ }
24
+ }
25
+
26
+ allprojects.forEach {
27
+ dependencies.add(" apolloTestAggregationConsumer" , it)
28
+ }
29
+
30
+ val task = tasks.register(" apolloTestAggregation" , GenerateApolloTestAggregation ::class .java) {
31
+ binaryTestResults.from(apolloTestAggregationConsumer)
32
+
33
+ output = file(" build/apolloTestAggregation.txt" )
34
+ }
35
+
36
+ ciBuild.configure {
37
+ dependsOn(task)
38
+ }
39
+ }
40
+
41
+ abstract class GenerateApolloTestAggregation : DefaultTask () {
42
+ @get:InputFiles
43
+ @get:PathSensitive(PathSensitivity .RELATIVE )
44
+ abstract val binaryTestResults: ConfigurableFileCollection
45
+
46
+ @get:OutputFile
47
+ abstract var output: File
48
+
49
+ @TaskAction
50
+ fun taskAction () {
51
+ var count = 0
52
+ val result = binaryTestResults.files.map { binaryDir ->
53
+ val classResults = mutableListOf<TestClassResult >()
54
+ TestResultSerializer (binaryDir).read {
55
+ classResults.add(this )
56
+ }
57
+
58
+ binaryDir.parentFile to classResults
59
+ }.flatMap { (parent, classResults) ->
60
+ classResults.map { classResult ->
61
+ count + = classResult.results.size
62
+ String .format(" %-100s - %-40s - %5d" , classResult.className, parent.name, classResult.results.size)
63
+ }
64
+ }.sorted()
65
+ .joinToString(" \n " )
66
+
67
+ output.writeText(result + " \n total: $count " )
68
+ println (" test executed: $count " )
69
+ }
70
+ }
0 commit comments