diff --git a/AGENTS.md b/AGENTS.md index 0ea9cdb80eb..e0eec79bf5d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -85,7 +85,7 @@ export GRADLE_OPTS="-Xms2G -Xmx5G" | Groovy | 4.0.x | | Spring Boot | 4.0.x | | Spring Framework | 7.0.x | -| Spock | 2.3-groovy-4.0 | +| Spock | 2.4-groovy-4.0 | | Gradle | 8.14.x | | Jakarta EE | 10 | diff --git a/dependencies.gradle b/dependencies.gradle index 66b83c67e91..e53031ff40f 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -30,7 +30,7 @@ ext { 'commons-text.version' : '1.15.0', 'directory-watcher.version' : '0.19.1', 'gradle-groovy.version' : '4.0.32', - 'gradle-spock.version' : '2.3-groovy-4.0', + 'gradle-spock.version' : '2.4-groovy-4.0', 'grails-publish-plugin.version' : '1.0.0-M1', 'jansi.version' : '2.4.2', 'javaparser-core.version' : '3.28.0', @@ -92,7 +92,7 @@ ext { 'rxjava3.version' : '3.1.12', 'selenium.version' : '4.38.0', 'sitemesh.version' : '2.6.0', - 'spock.version' : '2.3-groovy-4.0', + 'spock.version' : '2.4-groovy-4.0', 'starter-sitemesh.version' : '3.3.0-SNAPSHOT', 'spring-webmvc-sitemesh.version': '3.3.0-SNAPSHOT', // Spring Boot 4 no longer manages spring-retry; pin it here so the diff --git a/grails-async/core/build.gradle b/grails-async/core/build.gradle index 66603feeb0c..3cf381d097e 100644 --- a/grails-async/core/build.gradle +++ b/grails-async/core/build.gradle @@ -45,8 +45,8 @@ dependencies { testImplementation 'org.spockframework:spock-core' - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testRuntimeOnly 'org.objenesis:objenesis' + testRuntimeOnly 'net.bytebuddy:byte-buddy' // Required by Spock's mocking support + testRuntimeOnly 'org.objenesis:objenesis' // Required by Spock for mocking classes without default constructor testRuntimeOnly 'org.slf4j:slf4j-nop' // Get rid of warning about missing slf4j implementation during test task } diff --git a/grails-bootstrap/build.gradle b/grails-bootstrap/build.gradle index 9b0560d6dee..3890589602e 100644 --- a/grails-bootstrap/build.gradle +++ b/grails-bootstrap/build.gradle @@ -74,10 +74,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } processResources { diff --git a/grails-cache/build.gradle b/grails-cache/build.gradle index b219bdcee11..23169b73943 100644 --- a/grails-cache/build.gradle +++ b/grails-cache/build.gradle @@ -54,10 +54,9 @@ dependencies { testImplementation project(':grails-testing-support-datamapping') testImplementation project(':grails-testing-support-web') - testImplementation 'org.spockframework:spock-core', { - exclude group: 'org.apache.groovy' - } - testImplementation 'org.mockito:mockito-core' // to allow for correct mocking with Mock() + testImplementation 'org.spockframework:spock-core' + + testRuntimeOnly 'net.bytebuddy:byte-buddy' // Required by Spock's mocking support } apply { diff --git a/grails-codecs-core/build.gradle b/grails-codecs-core/build.gradle index 41bba9e7d8c..1eb061aa654 100644 --- a/grails-codecs-core/build.gradle +++ b/grails-codecs-core/build.gradle @@ -52,10 +52,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-codecs/build.gradle b/grails-codecs/build.gradle index 251148f9020..71a190531ac 100644 --- a/grails-codecs/build.gradle +++ b/grails-codecs/build.gradle @@ -62,10 +62,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-console/build.gradle b/grails-console/build.gradle index 7a82b4fc501..f16ccfe3612 100644 --- a/grails-console/build.gradle +++ b/grails-console/build.gradle @@ -67,10 +67,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-controllers/build.gradle b/grails-controllers/build.gradle index 1317a3d1a3c..0640d739597 100644 --- a/grails-controllers/build.gradle +++ b/grails-controllers/build.gradle @@ -76,10 +76,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-converters/build.gradle b/grails-converters/build.gradle index 506879e0db4..1e08d1c9f80 100644 --- a/grails-converters/build.gradle +++ b/grails-converters/build.gradle @@ -71,10 +71,9 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' + + testRuntimeOnly 'net.bytebuddy:byte-buddy' // Required by Spock's mocking support } apply { diff --git a/grails-core/build.gradle b/grails-core/build.gradle index 84794b723f4..696810b66f7 100644 --- a/grails-core/build.gradle +++ b/grails-core/build.gradle @@ -82,10 +82,10 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' + + testRuntimeOnly 'net.bytebuddy:byte-buddy' // Required by Spock's mocking support + testRuntimeOnly 'org.objenesis:objenesis' // Required by Spock for mocking classes without default constructor } TaskProvider writeProps = tasks.register('writeGrailsProperties', WriteProperties) diff --git a/grails-data-graphql/core/build.gradle b/grails-data-graphql/core/build.gradle index e2156f62ec5..9d88322dc59 100644 --- a/grails-data-graphql/core/build.gradle +++ b/grails-data-graphql/core/build.gradle @@ -60,9 +60,9 @@ dependencies { testImplementation 'com.h2database:h2' testImplementation 'org.apache.tomcat:tomcat-jdbc' testImplementation 'org.slf4j:slf4j-api' - testImplementation 'org.objenesis:objenesis' - testImplementation 'net.bytebuddy:byte-buddy' testImplementation 'org.spockframework:spock-core' + + testRuntimeOnly 'org.objenesis:objenesis' // Required by Spock for mocking classes without default constructor } apply { diff --git a/grails-data-graphql/plugin/build.gradle b/grails-data-graphql/plugin/build.gradle index c32901e795b..d0dee8816b2 100644 --- a/grails-data-graphql/plugin/build.gradle +++ b/grails-data-graphql/plugin/build.gradle @@ -84,8 +84,10 @@ dependencies { compileOnly "io.micronaut.rxjava2:micronaut-rxjava2-http-client:$micronautRxjava2Version" testImplementation project(':grails-testing-support-web') - testImplementation 'net.bytebuddy:byte-buddy' testImplementation 'org.spockframework:spock-core' + + testRuntimeOnly 'net.bytebuddy:byte-buddy' // Required by Spock's mocking support + testRuntimeOnly 'org.objenesis:objenesis' // Required by Spock for mocking classes without default constructor } compileGsonViews { diff --git a/grails-databinding-core/build.gradle b/grails-databinding-core/build.gradle index d5bd01e5cee..d3e7390c899 100644 --- a/grails-databinding-core/build.gradle +++ b/grails-databinding-core/build.gradle @@ -54,11 +54,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-databinding/build.gradle b/grails-databinding/build.gradle index e3f29ae7567..3992e60cc07 100644 --- a/grails-databinding/build.gradle +++ b/grails-databinding/build.gradle @@ -68,10 +68,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-datamapping-core/src/test/groovy/grails/gorm/annotation/transactions/TransactionalTransformSpec.groovy b/grails-datamapping-core/src/test/groovy/grails/gorm/annotation/transactions/TransactionalTransformSpec.groovy index 62ca6a7640f..90096e27547 100644 --- a/grails-datamapping-core/src/test/groovy/grails/gorm/annotation/transactions/TransactionalTransformSpec.groovy +++ b/grails-datamapping-core/src/test/groovy/grails/gorm/annotation/transactions/TransactionalTransformSpec.groovy @@ -197,8 +197,11 @@ import grails.gorm.transactions.Transactional mySpec.getDeclaredMethod('$spock_feature_0_0', Object, Object, Object) mySpec.getDeclaredMethod('$tt__$spock_feature_0_0', Object, Object, Object, TransactionStatus) - and:"The spec can be called" - mySpec.newInstance().'$tt__$spock_feature_0_0'(2,2,4,new DefaultTransactionStatus(null, new Object(), true, true, false, false, false, null)) + // Do not invoke the transformed Spock feature method directly here: Spock 2.4 + // requires an active iteration context for closures that reference data variables, + // so a reflective call outside Spock's runner throws IllegalStateException. The + // GroovyShell compilation above plus the transformed method signature checks + // already cover this regression (@Rollback must produce a valid, well-formed spec). } @@ -231,8 +234,11 @@ import grails.gorm.transactions.Transactional mySpec.getDeclaredMethod('$spock_feature_0_0') mySpec.getDeclaredMethod('$tt__$spock_feature_0_0', TransactionStatus) - and:"The spec can be called" - mySpec.newInstance().'$tt__$spock_feature_0_0'(new DefaultTransactionStatus(null, new Object(), true, true, false, false, false, null)) + // Do not invoke the transformed Spock feature method directly here: Spock 2.4 + // requires an active iteration context for closures containing conditions, so a + // reflective call outside Spock's runner throws IllegalStateException. The + // GroovyShell compilation above plus the transformed method signature checks + // already cover this regression (@Rollback must produce a valid, well-formed spec). } diff --git a/grails-datasource/build.gradle b/grails-datasource/build.gradle index 26aa4673f57..8192f18bb02 100644 --- a/grails-datasource/build.gradle +++ b/grails-datasource/build.gradle @@ -69,10 +69,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-domain-class/build.gradle b/grails-domain-class/build.gradle index 35d07613fde..b6371a44ce8 100644 --- a/grails-domain-class/build.gradle +++ b/grails-domain-class/build.gradle @@ -79,10 +79,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-encoder/build.gradle b/grails-encoder/build.gradle index a58f6fe916f..7bb40fdaef1 100644 --- a/grails-encoder/build.gradle +++ b/grails-encoder/build.gradle @@ -56,10 +56,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-fields/build.gradle b/grails-fields/build.gradle index 7f93d03123b..6bcabb414e3 100644 --- a/grails-fields/build.gradle +++ b/grails-fields/build.gradle @@ -58,7 +58,7 @@ dependencies { exclude module: 'asm' } - testRuntimeOnly 'net.bytebuddy:byte-buddy' + testRuntimeOnly 'org.objenesis:objenesis' // Required by Spock for mocking classes without default constructor } apply { diff --git a/grails-gradle/model/build.gradle b/grails-gradle/model/build.gradle index 8d8965a3c9f..c6bd8cfeeaa 100644 --- a/grails-gradle/model/build.gradle +++ b/grails-gradle/model/build.gradle @@ -73,12 +73,7 @@ dependencies { testImplementation 'org.apache.groovy:groovy' testImplementation 'org.apache.groovy:groovy-xml' testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { - transitive = false - } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-gradle/model/src/test/groovy/grails/io/IOUtilsSpec.groovy b/grails-gradle/model/src/test/groovy/grails/io/IOUtilsSpec.groovy index 24dec7ccac7..34d713c63ab 100644 --- a/grails-gradle/model/src/test/groovy/grails/io/IOUtilsSpec.groovy +++ b/grails-gradle/model/src/test/groovy/grails/io/IOUtilsSpec.groovy @@ -32,7 +32,7 @@ class IOUtilsSpec extends Specification { void "Test findJarResource finds a JAR resource"() { expect: IOUtils.findJarResource(Specification) - IOUtils.findJarResource(Specification).path.endsWith('spock-core-2.3-groovy-4.0.jar!/') + IOUtils.findJarResource(Specification).path.endsWith('spock-core-2.4-groovy-4.0.jar!/') } void 'findRootResourcesURL - appends / if not present'() { diff --git a/grails-gsp/grails-sitemesh3/build.gradle b/grails-gsp/grails-sitemesh3/build.gradle index 74829416a10..9e0439b712f 100644 --- a/grails-gsp/grails-sitemesh3/build.gradle +++ b/grails-gsp/grails-sitemesh3/build.gradle @@ -58,8 +58,9 @@ dependencies { testImplementation 'org.spockframework:spock-core' testImplementation 'org.springframework:spring-test' testImplementation project(':grails-testing-support-web') - testImplementation 'org.objenesis:objenesis' - testRuntimeOnly 'net.bytebuddy:byte-buddy' + + testRuntimeOnly 'net.bytebuddy:byte-buddy' // Required by Spock's mocking support + testRuntimeOnly 'org.objenesis:objenesis' // Required by Spock for mocking classes without default constructor testRuntimeOnly 'org.slf4j:slf4j-nop' } diff --git a/grails-i18n/build.gradle b/grails-i18n/build.gradle index 1043553c5e3..2472c4e24cc 100644 --- a/grails-i18n/build.gradle +++ b/grails-i18n/build.gradle @@ -63,10 +63,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-interceptors/build.gradle b/grails-interceptors/build.gradle index 2e4c2d62666..a951191e381 100644 --- a/grails-interceptors/build.gradle +++ b/grails-interceptors/build.gradle @@ -61,10 +61,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-logging/build.gradle b/grails-logging/build.gradle index 4235b960ebf..2aa55d1026f 100644 --- a/grails-logging/build.gradle +++ b/grails-logging/build.gradle @@ -52,10 +52,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-mimetypes/build.gradle b/grails-mimetypes/build.gradle index 8c03a771abe..920ce8ab012 100644 --- a/grails-mimetypes/build.gradle +++ b/grails-mimetypes/build.gradle @@ -60,10 +60,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-rest-transforms/build.gradle b/grails-rest-transforms/build.gradle index 5ac282b4eec..a37cd17677c 100644 --- a/grails-rest-transforms/build.gradle +++ b/grails-rest-transforms/build.gradle @@ -76,10 +76,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-services/build.gradle b/grails-services/build.gradle index f226f3a9f22..1e246ccfabb 100644 --- a/grails-services/build.gradle +++ b/grails-services/build.gradle @@ -63,10 +63,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-shell-cli/build.gradle b/grails-shell-cli/build.gradle index 95fe2559d28..2bc8809af37 100644 --- a/grails-shell-cli/build.gradle +++ b/grails-shell-cli/build.gradle @@ -106,10 +106,9 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' + + testRuntimeOnly 'net.bytebuddy:byte-buddy' // Required by Spock's mocking support // any project that should be included in the end distribution should be included here // historically these were the included projects so we have trimmed them back down to pre7.0 diff --git a/grails-spring/build.gradle b/grails-spring/build.gradle index 66ca48861c6..e5318b54cd5 100644 --- a/grails-spring/build.gradle +++ b/grails-spring/build.gradle @@ -56,10 +56,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-test-core/build.gradle b/grails-test-core/build.gradle index bc4d461f881..202666e9a9f 100644 --- a/grails-test-core/build.gradle +++ b/grails-test-core/build.gradle @@ -43,7 +43,7 @@ dependencies { // Testing api 'org.apache.groovy:groovy-test-junit5' api('org.apache.groovy:groovy-test') - api('org.spockframework:spock-core') { transitive = false } + api 'org.spockframework:spock-core' api 'org.junit.platform:junit-platform-suite' @@ -83,7 +83,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } + testImplementation 'org.spockframework:spock-core' // Required by Spock's Mocking testRuntimeOnly 'net.bytebuddy:byte-buddy' testImplementation 'org.objenesis:objenesis' diff --git a/grails-test-suite-base/build.gradle b/grails-test-suite-base/build.gradle index 878aad304ce..080d527e73e 100644 --- a/grails-test-suite-base/build.gradle +++ b/grails-test-suite-base/build.gradle @@ -66,7 +66,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } + testImplementation 'org.spockframework:spock-core' // Required by Spock's Mocking testRuntimeOnly 'net.bytebuddy:byte-buddy' testImplementation 'org.objenesis:objenesis' diff --git a/grails-test-suite-persistence/build.gradle b/grails-test-suite-persistence/build.gradle index b9f02f2c907..bb34da302ad 100644 --- a/grails-test-suite-persistence/build.gradle +++ b/grails-test-suite-persistence/build.gradle @@ -83,10 +83,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } test { diff --git a/grails-test-suite-uber/build.gradle b/grails-test-suite-uber/build.gradle index 1658218a3fa..dabc5391c55 100644 --- a/grails-test-suite-uber/build.gradle +++ b/grails-test-suite-uber/build.gradle @@ -67,7 +67,7 @@ dependencies { exclude module: 'grails-rest-transforms' } testImplementation project(':grails-datamapping-validation') - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' testCompileOnly 'jakarta.servlet:jakarta.servlet-api' testCompileOnly 'org.springframework:spring-test', { @@ -80,12 +80,6 @@ dependencies { testRuntimeOnly 'org.aspectj:aspectjweaver' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' testRuntimeOnly 'org.springframework:spring-aspects' - - // Testing - testImplementation('org.spockframework:spock-core') { transitive = false } - - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' } def isolatedTestPatterns = [ diff --git a/grails-testing-support-core/build.gradle b/grails-testing-support-core/build.gradle index 8545419121e..03c49d7fe2a 100644 --- a/grails-testing-support-core/build.gradle +++ b/grails-testing-support-core/build.gradle @@ -70,10 +70,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-url-mappings/build.gradle b/grails-url-mappings/build.gradle index 0b9f0afbc46..288e426f5b1 100644 --- a/grails-url-mappings/build.gradle +++ b/grails-url-mappings/build.gradle @@ -64,10 +64,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-validation/build.gradle b/grails-validation/build.gradle index 67e2668871b..34de5ad14b5 100644 --- a/grails-validation/build.gradle +++ b/grails-validation/build.gradle @@ -61,10 +61,9 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' + + testRuntimeOnly 'net.bytebuddy:byte-buddy' // Required by Spock's mocking support } apply { diff --git a/grails-views-gson/build.gradle b/grails-views-gson/build.gradle index 95df3ef1653..3f151a10134 100644 --- a/grails-views-gson/build.gradle +++ b/grails-views-gson/build.gradle @@ -57,6 +57,7 @@ dependencies { testImplementation 'tools.jackson.core:jackson-databind' testImplementation 'jakarta.servlet:jakarta.servlet-api' + testRuntimeOnly 'org.objenesis:objenesis' // Required by Spock for mocking classes without default constructor testRuntimeOnly 'org.slf4j:slf4j-nop' // Get rid of warning about missing slf4j implementation during test task } diff --git a/grails-views-gson/src/test/groovy/grails/plugin/json/view/JsonViewTemplateResolverSpec.groovy b/grails-views-gson/src/test/groovy/grails/plugin/json/view/JsonViewTemplateResolverSpec.groovy index 8e2074407ad..342f6a143f1 100644 --- a/grails-views-gson/src/test/groovy/grails/plugin/json/view/JsonViewTemplateResolverSpec.groovy +++ b/grails-views-gson/src/test/groovy/grails/plugin/json/view/JsonViewTemplateResolverSpec.groovy @@ -78,8 +78,6 @@ class JsonViewTemplateResolverSpec extends Specification { request.getHeader(HttpHeaders.ACCEPT_VERSION) >> "1.1" request.getLocale() >> Locale.ENGLISH webRequest.getCurrentRequest() >> request - webRequest.getRequest() >> request - webRequest.getResponse() >> response def templateResolver = Mock(TemplateResolver) viewResolver.templateResolver = templateResolver diff --git a/grails-web-boot/build.gradle b/grails-web-boot/build.gradle index 8154c1b4742..e1030482dea 100644 --- a/grails-web-boot/build.gradle +++ b/grails-web-boot/build.gradle @@ -66,10 +66,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-web-common/build.gradle b/grails-web-common/build.gradle index 41823dae33c..c4160ef34fc 100644 --- a/grails-web-common/build.gradle +++ b/grails-web-common/build.gradle @@ -76,10 +76,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-web-core/build.gradle b/grails-web-core/build.gradle index 79dd1e22a37..425f0271546 100644 --- a/grails-web-core/build.gradle +++ b/grails-web-core/build.gradle @@ -70,10 +70,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-web-databinding/build.gradle b/grails-web-databinding/build.gradle index 8ddc1fa1723..9102a09781c 100644 --- a/grails-web-databinding/build.gradle +++ b/grails-web-databinding/build.gradle @@ -73,10 +73,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-web-mvc/build.gradle b/grails-web-mvc/build.gradle index e582ff018fa..2879532b7fa 100644 --- a/grails-web-mvc/build.gradle +++ b/grails-web-mvc/build.gradle @@ -61,10 +61,7 @@ dependencies { // Testing testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/grails-web-url-mappings/build.gradle b/grails-web-url-mappings/build.gradle index 06fcbc5602c..cc2d5387808 100644 --- a/grails-web-url-mappings/build.gradle +++ b/grails-web-url-mappings/build.gradle @@ -77,10 +77,7 @@ dependencies { // Testing testImplementation 'org.apache.grails:grails-controllers' // @Controller testImplementation 'org.slf4j:slf4j-simple' - testImplementation('org.spockframework:spock-core') { transitive = false } - // Required by Spock's Mocking - testRuntimeOnly 'net.bytebuddy:byte-buddy' - testImplementation 'org.objenesis:objenesis' + testImplementation 'org.spockframework:spock-core' } apply { diff --git a/settings.gradle b/settings.gradle index 08b68a7feb2..24cb4968816 100644 --- a/settings.gradle +++ b/settings.gradle @@ -507,7 +507,7 @@ includeBuild('./build-logic') { // Grails-Micronaut "island" - kept on its own dependency graph because the Micronaut // platform pins Groovy 5 / Spock 2.4-groovy-5.0, which is incompatible with the -// Groovy 4 / Spock 2.3-groovy-4.0 stack the rest of grails-core targets. Skipping +// Groovy 4 / Spock 2.4-groovy-4.0 stack the rest of grails-core targets. Skipping // these projects (via -PskipMicronautProjects) keeps Micronaut's version overrides // from leaking into builds where Groovy 4 is in play (notably the joint validation // build that swaps in an apache/groovy 4.x snapshot).