Skip to content

Commit 950870d

Browse files
committed
Fix issues with upgrade to Gradle 7.0 and Spock 2.0
1 parent ceb101c commit 950870d

8 files changed

+61
-33
lines changed

build.gradle

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,29 @@ repositories {
3030
mavenCentral()
3131
}
3232

33+
configurations {
34+
groovyClasspath
35+
}
36+
3337
dependencies {
34-
def agpVersion = "3.5.4"
35-
compileOnly "com.android.tools.build:gradle:$agpVersion"
38+
def versions = [
39+
'agp': '3.5.4',
40+
'spock': '2.0-M5-groovy-3.0'
41+
]
42+
43+
// Used for compiling the main classes
44+
groovyClasspath 'org.codehaus.groovy:groovy-all:2.5.12'
45+
46+
compileOnly "com.android.tools.build:gradle:${versions.agp}"
47+
3648
implementation gradleApi()
37-
testImplementation "com.android.tools.build:gradle:$agpVersion"
49+
3850
testImplementation gradleTestKit()
39-
testImplementation "junit:junit:4.13.2"
40-
testImplementation "org.spockframework:spock-core:2.0-M5-groovy-3.0@jar"
41-
testImplementation "org.opentest4j:opentest4j:1.2.0"
42-
testRuntimeOnly 'cglib:cglib-nodep:3.3.0'
43-
testRuntimeOnly 'org.objenesis:objenesis:3.2'
51+
testImplementation "com.android.tools.build:gradle:${versions.agp}"
52+
testImplementation platform("org.spockframework:spock-bom:${versions.spock}")
53+
testImplementation("org.spockframework:spock-core") { exclude group: 'org.codehaus.groovy' }
54+
testImplementation("org.spockframework:spock-junit4") { exclude group: 'org.codehaus.groovy' }
55+
testImplementation "org.junit.jupiter:junit-jupiter-api"
4456
}
4557

4658
java {
@@ -49,8 +61,15 @@ java {
4961
}
5062
}
5163

52-
def generatedResources = "$buildDir/generated-resources/main"
64+
// We do this only for the the main source set as the test source set needs to use
65+
// Groovy 3 for Spock 2.0 compatibility. The main classes need to be compiled with
66+
// Groovy 2 so that they will work with older versions of Gradle.
67+
tasks.named('compileGroovy').configure {
68+
groovyClasspath = configurations.groovyClasspath
69+
}
5370

71+
// Generate a json file that contains the matrix of Gradle and AGP versions to test against.
72+
def generatedResources = "$buildDir/generated-resources/main"
5473
tasks.register('generateVersions') {
5574
def outputFile = file("$generatedResources/versions.json")
5675
inputs.property "version", version
@@ -70,6 +89,7 @@ sourceSets {
7089
}
7190
}
7291

92+
// Main plugin publishing metadata
7393
gradlePlugin {
7494
plugins {
7595
androidCacheFixPlugin {
@@ -92,8 +112,9 @@ pluginBundle {
92112
}
93113
}
94114

115+
// A local repo we publish our library to for testing in order to workaround limitations
116+
// in the TestKit plugin classpath.
95117
def localRepo = file("$buildDir/local-repo")
96-
97118
publishing {
98119
repositories {
99120
maven {
@@ -115,22 +136,17 @@ tasks.register('generateTestTasksJson') {
115136
}
116137
}
117138

139+
// Configuration common to all test tasks
118140
tasks.withType(Test).configureEach {
119141
dependsOn publish
120142
systemProperty "local.repo", localRepo.toURI()
143+
useJUnitPlatform()
121144
retry {
122145
maxRetries = isCI ? 1 : 0
123146
maxFailures = 20
124147
}
125148
}
126149

127-
tasks.named("test").configure {
128-
useJUnit {
129-
// The main test task runs everything not annotated with the MultiVersionTest category
130-
excludeCategories 'org.gradle.android.MultiVersionTest'
131-
}
132-
}
133-
134150
// Generate a test task for each Android version and run the tests annotated with the MultiVersionTest category
135151
supportedVersions.keySet().each { androidVersion ->
136152
def versionSpecificTest = tasks.register(androidTestTaskName(androidVersion), Test) {
@@ -140,9 +156,7 @@ supportedVersions.keySet().each { androidVersion ->
140156
javaLauncher = javaToolchains.launcherFor {
141157
languageVersion = jdkVersionFor(androidVersion)
142158
}
143-
useJUnit {
144-
includeCategories 'org.gradle.android.MultiVersionTest'
145-
}
159+
146160
systemProperty 'org.gradle.android.testVersion', androidVersion
147161
}
148162

@@ -163,6 +177,7 @@ static def jdkVersionFor(String version) {
163177
return JavaLanguageVersion.of(VersionNumber.parse(version) > VersionNumber.parse("7.0.0-alpha01") ? 11 : 8)
164178
}
165179

180+
// A basic sanity check to run before running all test tasks
166181
tasks.register("sanityCheck") {
167182
dependsOn tasks.withType(CodeNarc), validatePlugins
168183
}

src/test/groovy/org/gradle/android/ConfigurationCachingTest.groovy

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ package org.gradle.android
33
import org.gradle.testkit.runner.BuildResult
44
import org.gradle.util.VersionNumber
55
import org.junit.Assume
6-
import org.junit.experimental.categories.Category
76

8-
@Category(MultiVersionTest)
7+
@MultiVersionTest
98
class ConfigurationCachingTest extends AbstractTest {
109
private static final VersionNumber SUPPORTED_KOTLIN_VERSION = VersionNumber.parse("1.4.30")
1110

src/test/groovy/org/gradle/android/CrossVersionOutcomeAndRelocationTest.groovy

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import org.gradle.testkit.runner.BuildResult
55
import org.gradle.testkit.runner.TaskOutcome
66
import org.gradle.util.GradleVersion
77
import org.gradle.util.VersionNumber
8-
import org.junit.experimental.categories.Category
98
import spock.lang.Unroll
109

1110
import static org.gradle.android.Versions.android
@@ -14,7 +13,7 @@ import static org.gradle.testkit.runner.TaskOutcome.NO_SOURCE
1413
import static org.gradle.testkit.runner.TaskOutcome.SUCCESS
1514
import static org.gradle.testkit.runner.TaskOutcome.UP_TO_DATE
1615

17-
@Category(MultiVersionTest)
16+
@MultiVersionTest
1817
class CrossVersionOutcomeAndRelocationTest extends AbstractTest {
1918

2019
@Unroll

src/test/groovy/org/gradle/android/MergeJavaResourcesWorkaroundTest.groovy

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ package org.gradle.android
22

33
import org.gradle.testkit.runner.BuildResult
44
import org.gradle.testkit.runner.TaskOutcome
5-
import org.junit.experimental.categories.Category
65
import spock.lang.Issue
76
import spock.lang.Unroll
87

9-
@Category(MultiVersionTest)
8+
@MultiVersionTest
109
class MergeJavaResourcesWorkaroundTest extends AbstractTest {
1110
@Unroll
1211
@Issue('https://github.com/gradle/android-cache-fix-gradle-plugin/issues/78')
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
package org.gradle.android
22

3+
import java.lang.annotation.ElementType
4+
import java.lang.annotation.Inherited
5+
import java.lang.annotation.Retention
6+
import java.lang.annotation.RetentionPolicy
7+
import java.lang.annotation.Target
8+
39
/**
410
* Represents tests that span multiple versions of Android Gradle Plugin and need to be executed
511
* with multiple versions of the JDK.
612
*/
7-
interface MultiVersionTest {
8-
9-
}
13+
@Inherited
14+
@Retention(RetentionPolicy.RUNTIME)
15+
@Target(ElementType.TYPE)
16+
@interface MultiVersionTest { }

src/test/groovy/org/gradle/android/RoomSchemaLocationWorkaroundTest.groovy

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@ import org.gradle.testkit.runner.BuildResult
55
import org.gradle.testkit.runner.TaskOutcome
66
import org.gradle.util.VersionNumber
77
import org.junit.Assume
8-
import org.junit.experimental.categories.Category
98
import spock.lang.Unroll
109

1110
import static org.gradle.testkit.runner.TaskOutcome.FROM_CACHE
1211
import static org.gradle.testkit.runner.TaskOutcome.SUCCESS
1312

14-
@Category(MultiVersionTest)
13+
@MultiVersionTest
1514
class RoomSchemaLocationWorkaroundTest extends AbstractTest {
1615
private static final String[] CLEAN_BUILD = ["clean", "testDebug", "testRelease", "assembleAndroidTest", "--build-cache", "--stacktrace"]
1716
private static final List<String> ALL_PROJECTS = ["app", "library"]

src/test/groovy/org/gradle/android/TaskAvoidanceTest.groovy

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package org.gradle.android
22

3-
import org.junit.experimental.categories.Category
43
import spock.lang.Unroll
54

6-
@Category(MultiVersionTest)
5+
@MultiVersionTest
76
class TaskAvoidanceTest extends AbstractTest {
87
@Unroll
98
def "Source Tasks are avoided with #gradleVersion and Android plugin #androidVersion"() {

src/test/resources/SpockConfig.groovy

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import org.gradle.android.MultiVersionTest
2+
3+
def testAndroidVersion = System.getProperty('org.gradle.android.testVersion')
4+
5+
runner {
6+
if (testAndroidVersion) {
7+
include MultiVersionTest
8+
} else {
9+
exclude MultiVersionTest
10+
}
11+
}

0 commit comments

Comments
 (0)