diff --git a/.github/actions/setup-test-jdk/action.yml b/.github/actions/setup-test-jdk/action.yml index b2d6b1dbc46b..068010d5d97d 100644 --- a/.github/actions/setup-test-jdk/action.yml +++ b/.github/actions/setup-test-jdk/action.yml @@ -15,3 +15,10 @@ runs: check-latest: true - shell: bash run: echo "JDK8=$JAVA_HOME" >> $GITHUB_ENV + - uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4 + with: + distribution: ${{ inputs.distribution }} + java-version: 17 + check-latest: true + - shell: bash + run: echo "JDK17=$JAVA_HOME" >> $GITHUB_ENV diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index df818e926e01..9c2aff67f90c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -248,16 +248,13 @@ jobs: with: script: | const releaseVersion = "${{ github.event.inputs.releaseVersion }}"; - const jupiterVersion = releaseVersion; - const vintageVersion = releaseVersion; - const platformVersion = "1." + releaseVersion.substring(2); const requestBody = { owner: context.repo.owner, repo: context.repo.repo, tag_name: `r${releaseVersion}`, name: `JUnit ${releaseVersion}`, generate_release_notes: true, - body: `JUnit ${jupiterVersion} = Platform ${platformVersion} + Jupiter ${jupiterVersion} + Vintage ${vintageVersion}\n\nSee [Release Notes](https://junit.org/junit5/docs/${releaseVersion}/release-notes/).`, + body: `JUnit ${releaseVersion} = Platform ${releaseVersion} + Jupiter ${releaseVersion} + Vintage ${releaseVersion}\n\nSee [Release Notes](https://junit.org/junit5/docs/${releaseVersion}/release-notes/).`, prerelease: releaseVersion.includes("-"), }; console.log(requestBody); diff --git a/RELEASING.md b/RELEASING.md index bdbb753eba27..35f3b3e6c522 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -3,13 +3,13 @@ ## Pre-release steps - [ ] Switch or create the release branch for this feature release (e.g. `releases/5.12.x`) -- [ ] Change `version`, `platformVersion`, and `vintageVersion` in `gradle.properties` to the versions about to be released +- [ ] Change `version` in `gradle.properties` to the versions about to be released - [ ] Change release date in Release Notes - [ ] Change release date in `README.MD` - [ ] Commit with message "Release ${VERSION}" - [ ] Execute `./gradlew --no-build-cache --no-configuration-cache clean build publish closeSonatypeStagingRepository` - [ ] Tag current commit: `git tag -s -m ${VERSION} r${VERSION}` -- [ ] Change `version`, `platformVersion`, and `vintageVersion` properties in `gradle.properties` on release branch to new development versions and commit with message "Back to snapshots for further development" or similar +- [ ] Change `version` in `gradle.properties` on release branch to new development versions and commit with message "Back to snapshots for further development" or similar - [ ] Push release branch and tag to GitHub: `git push --set-upstream --follow-tags origin HEAD` - [ ] Trigger a [release build](https://github.com/junit-team/junit5/actions/workflows/release.yml): `gh workflow run --ref r${VERSION} -f releaseVersion=${VERSION} -f stagingRepoId=orgjunit-1234 release.yml` - Select the release branch diff --git a/documentation/documentation.gradle.kts b/documentation/documentation.gradle.kts index 799c16ae3833..bcc1d0203766 100644 --- a/documentation/documentation.gradle.kts +++ b/documentation/documentation.gradle.kts @@ -25,8 +25,8 @@ val modularProjects: List by rootProject modularProjects.forEach { evaluationDependsOn(it.path) } javaLibrary { - mainJavaVersion = JavaVersion.VERSION_1_8 - testJavaVersion = JavaVersion.VERSION_1_8 + mainJavaVersion = JavaVersion.VERSION_17 + testJavaVersion = JavaVersion.VERSION_17 } val apiReport = configurations.dependencyScope("apiReport") @@ -295,15 +295,9 @@ tasks { // Temporary workaround for https://github.com/asciidoctor/asciidoctor-gradle-plugin/issues/599 inputs.dir(sourceDir).withPropertyName("sourceDir").withPathSensitivity(RELATIVE) - val platformVersion: String by project - val vintageVersion: String by project - attributeProviders += AsciidoctorAttributeProvider { mapOf( - "jupiter-version" to version, - "platform-version" to platformVersion, - "vintage-version" to vintageVersion, - "bom-version" to version, + "version" to version, "junit4-version" to libs.versions.junit4.get(), "apiguardian-version" to libs.versions.apiguardian.get(), "ota4j-version" to libs.versions.opentest4j.get(), diff --git a/documentation/src/docs/asciidoc/release-notes/index.adoc b/documentation/src/docs/asciidoc/release-notes/index.adoc index af8a4feabdaf..77cebcff7ea9 100644 --- a/documentation/src/docs/asciidoc/release-notes/index.adoc +++ b/documentation/src/docs/asciidoc/release-notes/index.adoc @@ -17,6 +17,8 @@ authors as well as build tool and IDE vendors. include::{includedir}/link-attributes.adoc[] +include::{basedir}/release-notes-6.0.0-M1.adoc[] + include::{basedir}/release-notes-5.13.0-M3.adoc[] include::{basedir}/release-notes-5.13.0-M2.adoc[] diff --git a/documentation/src/docs/asciidoc/release-notes/release-notes-6.0.0-M1.adoc b/documentation/src/docs/asciidoc/release-notes/release-notes-6.0.0-M1.adoc new file mode 100644 index 000000000000..34b669feff8d --- /dev/null +++ b/documentation/src/docs/asciidoc/release-notes/release-notes-6.0.0-M1.adoc @@ -0,0 +1,86 @@ +[[release-notes-6.0.0-M1]] +== 6.0.0-M1 + +*Date of Release:* ❓ + +*Scope:* ❓ + +For a complete list of all _closed_ issues and pull requests for this release, consult the +link:{junit5-repo}+/milestone/87?closed=1+[6.0.0-M1] milestone page in the JUnit +repository on GitHub. + + +[[release-notes-6.0.0-M1-overall-improvements]] +=== Overall Improvements + +[[release-notes-6.0.0-M1-overall-bug-fixes]] +==== Bug Fixes + +* ❓ + +[[release-notes-6.0.0-M1-overall-deprecations-and-breaking-changes]] +==== Deprecations and Breaking Changes + +* Minimum required Java version is now Java 17. + +[[release-notes-6.0.0-M1-overall-new-features-and-improvements]] +==== New Features and Improvements + +* ❓ + + +[[release-notes-6.0.0-M1-junit-platform]] +=== JUnit Platform + +[[release-notes-6.0.0-M1-junit-platform-bug-fixes]] +==== Bug Fixes + +* ❓ + +[[release-notes-6.0.0-M1-junit-platform-deprecations-and-breaking-changes]] +==== Deprecations and Breaking Changes + +* ❓ + +[[release-notes-6.0.0-M1-junit-platform-new-features-and-improvements]] +==== New Features and Improvements + +* ❓ + + +[[release-notes-6.0.0-M1-junit-jupiter]] +=== JUnit Jupiter + +[[release-notes-6.0.0-M1-junit-jupiter-bug-fixes]] +==== Bug Fixes + +* ❓ + +[[release-notes-6.0.0-M1-junit-jupiter-deprecations-and-breaking-changes]] +==== Deprecations and Breaking Changes + +* ❓ + +[[release-notes-6.0.0-M1-junit-jupiter-new-features-and-improvements]] +==== New Features and Improvements + +* ❓ + + +[[release-notes-6.0.0-M1-junit-vintage]] +=== JUnit Vintage + +[[release-notes-6.0.0-M1-junit-vintage-bug-fixes]] +==== Bug Fixes + +* ❓ + +[[release-notes-6.0.0-M1-junit-vintage-deprecations-and-breaking-changes]] +==== Deprecations and Breaking Changes + +* ❓ + +[[release-notes-6.0.0-M1-junit-vintage-new-features-and-improvements]] +==== New Features and Improvements + +* ❓ diff --git a/documentation/src/docs/asciidoc/user-guide/advanced-topics/junit-platform-reporting.adoc b/documentation/src/docs/asciidoc/user-guide/advanced-topics/junit-platform-reporting.adoc index 79f67cc42404..fc3384dae01b 100644 --- a/documentation/src/docs/asciidoc/user-guide/advanced-topics/junit-platform-reporting.adoc +++ b/documentation/src/docs/asciidoc/user-guide/advanced-topics/junit-platform-reporting.adoc @@ -63,7 +63,7 @@ using Gradle's Build Cache. .Groovy DSL ---- dependencies { - testRuntimeOnly("org.junit.platform:junit-platform-reporting:{platform-version}") + testRuntimeOnly("org.junit.platform:junit-platform-reporting:{version}") } tasks.withType(Test).configureEach { def outputDir = reports.junitXml.outputLocation @@ -81,7 +81,7 @@ tasks.withType(Test).configureEach { .Kotlin DSL ---- dependencies { - testRuntimeOnly("org.junit.platform:junit-platform-reporting:{platform-version}") + testRuntimeOnly("org.junit.platform:junit-platform-reporting:{version}") } tasks.withType().configureEach { val outputDir = reports.junitXml.outputLocation @@ -109,7 +109,7 @@ XML reports as follows: org.junit.platform junit-platform-reporting - {platform-version} + {version} test @@ -140,7 +140,7 @@ output by setting the configuration parameters via `--config`: [source,console,subs=attributes+] ---- -$ java -jar junit-platform-console-standalone-{platform-version}.jar \ +$ java -jar junit-platform-console-standalone-{version}.jar \ --config=junit.platform.reporting.open.xml.enabled=true \ --config=junit.platform.reporting.output.dir=reports ---- @@ -150,7 +150,7 @@ classpath resource via the `--config-resource` option: [source,console,subs=attributes+] ---- -$ java -jar junit-platform-console-standalone-{platform-version}.jar \ +$ java -jar junit-platform-console-standalone-{version}.jar \ --config-resource=configuration.properties ---- diff --git a/documentation/src/docs/asciidoc/user-guide/advanced-topics/testkit.adoc b/documentation/src/docs/asciidoc/user-guide/advanced-topics/testkit.adoc index 3f134f3f8ba1..7d79da360376 100644 --- a/documentation/src/docs/asciidoc/user-guide/advanced-topics/testkit.adoc +++ b/documentation/src/docs/asciidoc/user-guide/advanced-topics/testkit.adoc @@ -5,7 +5,7 @@ The `junit-platform-testkit` artifact provides support for executing a test plan on the JUnit Platform and then verifying the expected results. As of JUnit Platform -{platform-version}, this support is limited to the execution of a single `TestEngine` (see +{version}, this support is limited to the execution of a single `TestEngine` (see <>). [[testkit-engine]] diff --git a/documentation/src/docs/asciidoc/user-guide/appendix.adoc b/documentation/src/docs/asciidoc/user-guide/appendix.adoc index 9df8622629d5..25fa10af297f 100644 --- a/documentation/src/docs/asciidoc/user-guide/appendix.adoc +++ b/documentation/src/docs/asciidoc/user-guide/appendix.adoc @@ -45,7 +45,7 @@ Please refer to the corresponding sections for < org.junit junit-bom - {bom-version} + {version} pom import @@ -160,7 +160,7 @@ versions of all JUnit 5 artifacts. .Explicit platform dependency on the BOM ---- dependencies { - testImplementation(platform("org.junit:junit-bom:{bom-version}")) + testImplementation(platform("org.junit:junit-bom:{version}")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } @@ -181,7 +181,7 @@ artifacts. .Implicit platform dependency on the BOM ---- dependencies { - testImplementation("org.junit.jupiter:junit-jupiter:{jupiter-version}") // <1> + testImplementation("org.junit.jupiter:junit-jupiter:{version}") // <1> testRuntimeOnly("org.junit.platform:junit-platform-launcher") // <2> } ---- @@ -212,7 +212,7 @@ on the dependency-aggregating JUnit Jupiter artifact similar to the following. [subs=attributes+] ---- dependencies { - testImplementation("org.junit.jupiter:junit-jupiter:{jupiter-version}") + testImplementation("org.junit.jupiter:junit-jupiter:{version}") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } ---- @@ -228,7 +228,7 @@ support. testing { suites { named("test") { - useJUnitJupiter("{jupiter-version}") + useJUnitJupiter("{version}") } } } @@ -241,7 +241,7 @@ testing { testing { suites { test { - useJUnitJupiter("{jupiter-version}") + useJUnitJupiter("{version}") } } } @@ -256,7 +256,7 @@ implementation similar to the following. ---- dependencies { testImplementation("junit:junit:{junit4-version}") - testRuntimeOnly("org.junit.vintage:junit-vintage-engine:{vintage-version}") + testRuntimeOnly("org.junit.vintage:junit-vintage-engine:{version}") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } ---- @@ -337,7 +337,7 @@ Maven build as follows. org.junit.platform junit-platform-launcher - {platform-version} + {version} test ---- @@ -358,7 +358,7 @@ versions of all JUnit 5 artifacts. org.junit junit-bom - {bom-version} + {version} pom import @@ -391,7 +391,7 @@ following. org.junit.jupiter junit-jupiter - {jupiter-version} + {version} test @@ -430,7 +430,7 @@ long as you configure `test` scoped dependencies on JUnit 4 and the JUnit Vintag org.junit.vintage junit-vintage-engine - {vintage-version} + {version} test @@ -659,7 +659,7 @@ With Gradle you can override the JUnit Jupiter version by including the followin [source,groovy,indent=0] [subs=attributes+] ---- - ext['junit-jupiter.version'] = '{jupiter-version}' + ext['junit-jupiter.version'] = '{version}' ---- With Maven you can override the JUnit Jupiter version by including the following in your @@ -669,7 +669,7 @@ With Maven you can override the JUnit Jupiter version by including the following [subs=attributes+] ---- - {jupiter-version} + {version} ---- @@ -680,7 +680,7 @@ The `{ConsoleLauncher}` is a command-line Java application that lets you launch Platform from the console. For example, it can be used to run JUnit Vintage and JUnit Jupiter tests and print test execution results to the console. -An executable _Fat JAR_ (`junit-platform-console-standalone-{platform-version}.jar`) that +An executable _Fat JAR_ (`junit-platform-console-standalone-{version}.jar`) that contains the contents of all of its dependencies is published in the {Maven_Central} repository under the https://repo1.maven.org/maven2/org/junit/platform/junit-platform-console-standalone[junit-platform-console-standalone] @@ -711,7 +711,7 @@ standalone `ConsoleLauncher` as shown below. [source,console,subs=attributes+] ---- -$ java -jar junit-platform-console-standalone-{platform-version}.jar execute +$ java -jar junit-platform-console-standalone-{version}.jar execute ├─ JUnit Vintage │ └─ example.JUnit4Tests @@ -820,7 +820,7 @@ files using the `--redirect-stdout` and `--redirect-stderr` options: [source,console,subs=attributes+] ---- -$ java -jar junit-platform-console-standalone-{platform-version}.jar \ +$ java -jar junit-platform-console-standalone-{version}.jar \ --redirect-stdout=stdout.txt \ --redirect-stderr=stderr.txt ---- @@ -1255,7 +1255,7 @@ to a problem. In order to record Flight Recorder events generated while running tests, you need to: 1. Ensure that you are using either Java 8 Update 262 or higher or Java 11 or later. -2. Provide the `org.junit.platform.jfr` module (`junit-platform-jfr-{platform-version}.jar`) +2. Provide the `org.junit.platform.jfr` module (`junit-platform-jfr-{version}.jar`) on the class-path or module-path at test runtime. 3. Start flight recording when launching a test run. Flight Recorder can be started via java command line option: diff --git a/gradle.properties b/gradle.properties index ff88b232c506..e7d531663896 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,20 +1,11 @@ -group = org.junit -version = 5.13.0-SNAPSHOT - -jupiterGroup = org.junit.jupiter - -platformGroup = org.junit.platform -platformVersion = 1.13.0-SNAPSHOT - -vintageGroup = org.junit.vintage -vintageVersion = 5.13.0-SNAPSHOT +version = 6.0.0-SNAPSHOT # We need more metaspace due to apparent memory leak in Asciidoctor/JRuby org.gradle.jvmargs=-Xmx1g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError org.gradle.caching=true org.gradle.parallel=true org.gradle.configuration-cache.parallel=true -org.gradle.java.installations.fromEnv=JDK8,JDK18,JDK19,JDK20,JDK21,JDK22,JDK23,JDK24 +org.gradle.java.installations.fromEnv=JDK8,JDK17,JDK21,JDK23,JDK24,JDK25 org.gradle.kotlin.dsl.allWarningsAsErrors=true org.gradle.warning.mode=fail diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 21d105473db1..eb86c9c32899 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -101,6 +101,7 @@ jmh = { id = "me.champeau.jmh", version = "0.7.3" } # check if workaround in gradle.properties can be removed when updating kotlin = { id = "org.jetbrains.kotlin.jvm", version = "2.1.20" } nexusPublish = { id = "io.github.gradle-nexus.publish-plugin", version = "2.0.0" } +openrewrite = { id = "org.openrewrite.rewrite", version = "7.1.7" } plantuml = { id = "io.freefair.plantuml", version = "8.13.1" } shadow = { id = "com.gradleup.shadow", version = "8.3.6" } spotless = { id = "com.diffplug.spotless", version = "6.25.0" } diff --git a/gradle/plugins/common/build.gradle.kts b/gradle/plugins/common/build.gradle.kts index 48c05c7f0a80..00a24d40003b 100644 --- a/gradle/plugins/common/build.gradle.kts +++ b/gradle/plugins/common/build.gradle.kts @@ -10,6 +10,7 @@ dependencies { implementation(libs.plugins.develocity.markerCoordinates) implementation(libs.plugins.foojayResolver.markerCoordinates) implementation(libs.plugins.jmh.markerCoordinates) + implementation(libs.plugins.openrewrite.markerCoordinates) implementation(libs.plugins.shadow.markerCoordinates) implementation(libs.plugins.spotless.markerCoordinates) implementation(libs.plugins.versions.markerCoordinates) diff --git a/gradle/plugins/common/src/main/kotlin/JavaLibraryExtension.kt b/gradle/plugins/common/src/main/kotlin/JavaLibraryExtension.kt index 64a61da7fb7b..122dccc585ff 100644 --- a/gradle/plugins/common/src/main/kotlin/JavaLibraryExtension.kt +++ b/gradle/plugins/common/src/main/kotlin/JavaLibraryExtension.kt @@ -1,7 +1,15 @@ import org.gradle.api.JavaVersion +import org.gradle.api.provider.Property + +@Suppress("LeakingThis") +abstract class JavaLibraryExtension { + + abstract val mainJavaVersion: Property + abstract val testJavaVersion: Property + + init { + mainJavaVersion.convention(JavaVersion.VERSION_17) + testJavaVersion.convention(JavaVersion.VERSION_21) + } -open class JavaLibraryExtension { - var mainJavaVersion: JavaVersion = JavaVersion.VERSION_1_8 - var testJavaVersion: JavaVersion = JavaVersion.VERSION_21 - var configureRelease: Boolean = true } diff --git a/gradle/plugins/common/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts index b14973e05474..ae09fab5dfa7 100644 --- a/gradle/plugins/common/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts @@ -14,6 +14,16 @@ plugins { id("junitbuild.build-parameters") id("junitbuild.checkstyle-conventions") id("junitbuild.jacoco-java-conventions") + id("org.openrewrite.rewrite") +} + +rewrite { + activeRecipe("org.openrewrite.java.migrate.UpgradeToJava17") +} + +dependencies { + rewrite(platform("org.openrewrite.recipe:rewrite-recipe-bom:latest.release")) + rewrite("org.openrewrite.recipe:rewrite-migrate-java") } val mavenizedProjects: List by rootProject.extra @@ -184,10 +194,8 @@ val compileModule by tasks.registering(JavaCompile::class) { enabled = project in modularProjects source = fileTree(combinedModuleSourceDir).builtBy(prepareModuleSourceDir) destinationDirectory = moduleOutputDir - sourceCompatibility = "9" - targetCompatibility = "9" classpath = files() - options.release = 9 + options.release = 17 options.compilerArgs.addAll(listOf( // Suppress warnings for automatic modules: org.apiguardian.api, org.opentest4j "-Xlint:all,-requires-automatic,-requires-transitive-automatic", @@ -262,17 +270,14 @@ tasks.withType().configureEach { } tasks.compileJava { - // See: https://docs.oracle.com/en/java/javase/12/tools/javac.html options.compilerArgs.addAll(listOf( "-Xlint:all", // Enables all recommended warnings. "-Werror", // Terminates compilation when warnings occur. - // Required for compatibility with Java 8's reflection APIs (see https://github.com/junit-team/junit5/issues/3797). "-parameters", // Generates metadata for reflection on method parameters. )) } tasks.compileTestJava { - // See: https://docs.oracle.com/en/java/javase/12/tools/javac.html options.compilerArgs.addAll(listOf( "-Xlint", // Enables all recommended warnings. "-Xlint:-overrides", // Disables "method overrides" warnings. @@ -281,47 +286,39 @@ tasks.compileTestJava { )) } -afterEvaluate { - configurations { - apiElements { - attributes { - attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, extension.mainJavaVersion.majorVersion.toInt()) - } - } - runtimeElements { - attributes { - attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, extension.mainJavaVersion.majorVersion.toInt()) - } +configurations { + apiElements { + attributes { + attributeProvider(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, extension.mainJavaVersion.map { it.majorVersion.toInt() }) } } - tasks { - compileJava { - if (extension.configureRelease) { - options.release = extension.mainJavaVersion.majorVersion.toInt() - } else { - sourceCompatibility = extension.mainJavaVersion.majorVersion - targetCompatibility = extension.mainJavaVersion.majorVersion - } - } - compileTestJava { - if (extension.configureRelease) { - options.release = extension.testJavaVersion.majorVersion.toInt() - } else { - sourceCompatibility = extension.testJavaVersion.majorVersion - targetCompatibility = extension.testJavaVersion.majorVersion - } + runtimeElements { + attributes { + attributeProvider(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, extension.mainJavaVersion.map { it.majorVersion.toInt() }) } } +} + +tasks { + compileJava { + options.release = extension.mainJavaVersion.map { it.majorVersion.toInt() } + } + compileTestJava { + options.release = extension.testJavaVersion.map { it.majorVersion.toInt() } + } +} + +afterEvaluate { pluginManager.withPlugin("groovy") { tasks.named("compileGroovy").configure { // Groovy compiler does not support the --release flag. - sourceCompatibility = extension.mainJavaVersion.majorVersion - targetCompatibility = extension.mainJavaVersion.majorVersion + sourceCompatibility = extension.mainJavaVersion.get().majorVersion + targetCompatibility = extension.mainJavaVersion.get().majorVersion } tasks.named("compileTestGroovy").configure { // Groovy compiler does not support the --release flag. - sourceCompatibility = extension.testJavaVersion.majorVersion - targetCompatibility = extension.testJavaVersion.majorVersion + sourceCompatibility = extension.testJavaVersion.get().majorVersion + targetCompatibility = extension.testJavaVersion.get().majorVersion } } } @@ -340,6 +337,6 @@ pluginManager.withPlugin("java-test-fixtures") { config = resources.text.fromFile(checkstyle.configDirectory.file("checkstyleTest.xml")) } tasks.named("compileTestFixturesJava") { - options.release = extension.testJavaVersion.majorVersion.toInt() + options.release = extension.testJavaVersion.map { it.majorVersion.toInt() } } } diff --git a/gradle/plugins/common/src/main/kotlin/junitbuild.java-multi-release-sources.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.java-multi-release-sources.gradle.kts deleted file mode 100644 index 83b2a8e8e273..000000000000 --- a/gradle/plugins/common/src/main/kotlin/junitbuild.java-multi-release-sources.gradle.kts +++ /dev/null @@ -1,45 +0,0 @@ -import junitbuild.extensions.capitalized - -plugins { - id("junitbuild.java-library-conventions") -} - -val mavenizedProjects: List by rootProject.extra - -listOf(9, 17).forEach { javaVersion -> - val sourceSet = sourceSets.register("mainRelease${javaVersion}") { - compileClasspath += sourceSets.main.get().output - runtimeClasspath += sourceSets.main.get().output - java { - setSrcDirs(setOf("src/main/java${javaVersion}")) - } - } - - configurations.named(sourceSet.get().compileClasspathConfigurationName).configure { - extendsFrom(configurations.compileClasspath.get()) - } - - tasks { - - named("allMainClasses").configure { - dependsOn(sourceSet.get().classesTaskName) - } - - named(sourceSet.get().compileJavaTaskName).configure { - options.release = javaVersion - } - - named("checkstyle${sourceSet.name.capitalized()}").configure { - config = resources.text.fromFile(checkstyle.configDirectory.file("checkstyleMain.xml")) - } - - if (project in mavenizedProjects) { - javadoc { - source(sourceSet.get().allJava) - } - named("sourcesJar").configure { - from(sourceSet.get().allSource) - } - } - } -} diff --git a/gradle/plugins/common/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts index 73680fcf6e6d..083de1511d7a 100644 --- a/gradle/plugins/common/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts @@ -1,5 +1,5 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.dsl.KotlinVersion +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_1 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -11,26 +11,19 @@ tasks.named("kotlinSourcesJar") { enabled = false } +val javaLibraryExtension = project.the() + tasks.withType().configureEach { compilerOptions { - apiVersion = KotlinVersion.fromVersion("1.6") + jvmTarget = javaLibraryExtension.mainJavaVersion.map { JvmTarget.fromTarget(it.toString()) } + apiVersion = KOTLIN_2_1 languageVersion = apiVersion - allWarningsAsErrors = false - // Compiler arg is required for Kotlin 1.6 and below - // see https://kotlinlang.org/docs/whatsnew17.html#stable-opt-in-requirements - freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn") + allWarningsAsErrors.convention(true) + javaParameters = true + freeCompilerArgs.addAll("-opt-in=kotlin.RequiresOptIn") } } -afterEvaluate { - val extension = project.the() - tasks { - withType().configureEach { - compilerOptions.jvmTarget = JvmTarget.fromTarget(extension.mainJavaVersion.toString()) - compilerOptions.javaParameters = true - } - named("compileTestKotlin") { - compilerOptions.jvmTarget = JvmTarget.fromTarget(extension.testJavaVersion.toString()) - } - } +tasks.named("compileTestKotlin") { + compilerOptions.jvmTarget = javaLibraryExtension.testJavaVersion.map { JvmTarget.fromTarget(it.toString()) } } diff --git a/gradle/plugins/common/src/main/kotlin/junitbuild.osgi-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.osgi-conventions.gradle.kts index d1adaa09ff68..03514d7e967a 100644 --- a/gradle/plugins/common/src/main/kotlin/junitbuild.osgi-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.osgi-conventions.gradle.kts @@ -79,8 +79,8 @@ tasks.withType().named { val osgiProperties by tasks.registering(WriteProperties::class) { destinationFile = layout.buildDirectory.file("verifyOSGiProperties.bndrun") property("-standalone", true) - project.extensions.getByType(JavaLibraryExtension::class.java).let { javaLibrary -> - property("-runee", "JavaSE-${javaLibrary.mainJavaVersion}") + project.extensions.getByType(JavaLibraryExtension::class).let { javaLibrary -> + property("-runee", Callable { "JavaSE-${javaLibrary.mainJavaVersion.get()}" }) } property("-runrequires", "osgi.identity;filter:='(osgi.identity=${project.name})'") property("-runsystempackages", "jdk.internal.misc,jdk.jfr,sun.misc") diff --git a/gradle/plugins/common/src/main/kotlin/junitbuild.publishing-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.publishing-conventions.gradle.kts index 90146181e380..0885637fe791 100644 --- a/gradle/plugins/common/src/main/kotlin/junitbuild.publishing-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.publishing-conventions.gradle.kts @@ -9,18 +9,11 @@ val jupiterProjects: List by rootProject val platformProjects: List by rootProject val vintageProjects: List by rootProject -when (project) { - in jupiterProjects -> { - group = property("jupiterGroup")!! - } - in platformProjects -> { - group = property("platformGroup")!! - version = property("platformVersion")!! - } - in vintageProjects -> { - group = property("vintageGroup")!! - version = property("vintageVersion")!! - } +group = when (project) { + in jupiterProjects -> "org.junit.jupiter" + in platformProjects -> "org.junit.platform" + in vintageProjects -> "org.junit.vintage" + else -> "org.junit" } // ensure project is built successfully before publishing it diff --git a/junit-jupiter-api/junit-jupiter-api.gradle.kts b/junit-jupiter-api/junit-jupiter-api.gradle.kts index 378fc86a3d5d..9faac9373aaa 100644 --- a/junit-jupiter-api/junit-jupiter-api.gradle.kts +++ b/junit-jupiter-api/junit-jupiter-api.gradle.kts @@ -23,6 +23,10 @@ dependencies { } tasks { + compileKotlin { + // https://github.com/junit-team/junit5/issues/4371 + compilerOptions.allWarningsAsErrors = false + } jar { bundle { val version = project.version diff --git a/junit-jupiter-api/src/main/kotlin/org/junit/jupiter/api/Assertions.kt b/junit-jupiter-api/src/main/kotlin/org/junit/jupiter/api/Assertions.kt index ce93a2fdd56b..44c13138a03d 100644 --- a/junit-jupiter-api/src/main/kotlin/org/junit/jupiter/api/Assertions.kt +++ b/junit-jupiter-api/src/main/kotlin/org/junit/jupiter/api/Assertions.kt @@ -17,7 +17,6 @@ import org.apiguardian.api.API.Status.STABLE import org.junit.jupiter.api.function.Executable import org.junit.jupiter.api.function.ThrowingSupplier import java.time.Duration -import java.util.function.Supplier import java.util.stream.Stream import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind.AT_MOST_ONCE @@ -43,7 +42,7 @@ fun fail(message: () -> String): Nothing { callsInPlace(message, EXACTLY_ONCE) } - return Assertions.fail(message) + return Assertions.fail(message()) } /** @@ -334,7 +333,7 @@ inline fun assertThrows( throw throwable } }, - Supplier(message) + message ) } @@ -404,18 +403,24 @@ inline fun assertDoesNotThrow( return Assertions.assertDoesNotThrow( evaluateAndWrap(executable), - Supplier(message) + message ) } +@OptIn(ExperimentalContracts::class) @PublishedApi -internal inline fun evaluateAndWrap(executable: () -> R): ThrowingSupplier = - try { +internal inline fun evaluateAndWrap(executable: () -> R): ThrowingSupplier { + contract { + callsInPlace(executable, EXACTLY_ONCE) + } + + return try { val result = executable() ThrowingSupplier { result } } catch (throwable: Throwable) { ThrowingSupplier { throw throwable } } +} /** * Example usage: diff --git a/junit-jupiter-engine/junit-jupiter-engine.gradle.kts b/junit-jupiter-engine/junit-jupiter-engine.gradle.kts index 819993462c0e..dd05352bd1d7 100644 --- a/junit-jupiter-engine/junit-jupiter-engine.gradle.kts +++ b/junit-jupiter-engine/junit-jupiter-engine.gradle.kts @@ -19,7 +19,6 @@ dependencies { tasks { jar { bundle { - val platformVersion: String by rootProject.extra bnd(""" Provide-Capability:\ org.junit.platform.engine;\ @@ -27,7 +26,7 @@ tasks { version:Version="${'$'}{version_cleanup;${project.version}}" Require-Capability:\ org.junit.platform.launcher;\ - filter:='(&(org.junit.platform.launcher=junit-platform-launcher)(version>=${'$'}{version_cleanup;${platformVersion}})(!(version>=${'$'}{versionmask;+;${'$'}{version_cleanup;${platformVersion}}})))';\ + filter:='(&(org.junit.platform.launcher=junit-platform-launcher)(version>=${'$'}{version_cleanup;${project.version}})(!(version>=${'$'}{versionmask;+;${'$'}{version_cleanup;${project.version}}})))';\ effective:=active """) } diff --git a/junit-platform-commons/junit-platform-commons.gradle.kts b/junit-platform-commons/junit-platform-commons.gradle.kts index 3de45a7edfee..eba72705cce1 100644 --- a/junit-platform-commons/junit-platform-commons.gradle.kts +++ b/junit-platform-commons/junit-platform-commons.gradle.kts @@ -1,8 +1,5 @@ -import junitbuild.java.UpdateJarAction - plugins { id("junitbuild.java-library-conventions") - id("junitbuild.java-multi-release-sources") id("junitbuild.native-image-properties") `java-test-fixtures` } @@ -14,28 +11,3 @@ dependencies { compileOnlyApi(libs.apiguardian) } - -tasks.jar { - val release9ClassesDir = sourceSets.mainRelease9.get().output.classesDirs.singleFile - inputs.dir(release9ClassesDir).withPathSensitivity(PathSensitivity.RELATIVE) - doLast(objects.newInstance(UpdateJarAction::class).apply { - javaLauncher = javaToolchains.launcherFor(java.toolchain) - args.addAll( - "--file", archiveFile.get().asFile.absolutePath, - "--release", "9", - "-C", release9ClassesDir.absolutePath, "." - ) - }) -} - -tasks.codeCoverageClassesJar { - exclude("org/junit/platform/commons/util/ModuleUtils.class") - exclude("org/junit/platform/commons/util/PackageNameUtils.class") - exclude("org/junit/platform/commons/util/ServiceLoaderUtils.class") -} - -eclipse { - classpath { - sourceSets -= project.sourceSets.mainRelease9.get() - } -} diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ModuleUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ModuleUtils.java index 980c06394ea2..9f20d964f471 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ModuleUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ModuleUtils.java @@ -10,18 +10,34 @@ package org.junit.platform.commons.util; -import static java.util.Collections.emptyList; -import static java.util.Collections.emptySet; +import static java.util.function.Predicate.isEqual; +import static java.util.stream.Collectors.toCollection; +import static java.util.stream.Collectors.toSet; import static org.apiguardian.api.API.Status.INTERNAL; +import java.io.IOException; +import java.lang.module.Configuration; +import java.lang.module.ModuleFinder; +import java.lang.module.ModuleReader; +import java.lang.module.ModuleReference; +import java.lang.module.ResolvedModule; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashSet; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apiguardian.api.API; +import org.junit.platform.commons.JUnitException; import org.junit.platform.commons.logging.Logger; import org.junit.platform.commons.logging.LoggerFactory; +import org.junit.platform.commons.support.DefaultResource; import org.junit.platform.commons.support.Resource; import org.junit.platform.commons.support.scanning.ClassFilter; @@ -49,42 +65,40 @@ public class ModuleUtils { * potentially empty */ public static Set findAllNonSystemBootModuleNames() { - logger.config(() -> "Basic version of findAllNonSystemBootModuleNames() always returns an empty set!"); - return emptySet(); + // @formatter:off + Set systemModules = ModuleFinder.ofSystem().findAll().stream() + .map(reference -> reference.descriptor().name()) + .collect(toSet()); + return streamResolvedModules(name -> !systemModules.contains(name)) + .map(ResolvedModule::name) + .collect(toCollection(LinkedHashSet::new)); + // @formatter:on } /** - * Determine if the current Java runtime supports the Java Platform Module System. + * Java 9+ runtime supports the Java Platform Module System. * - * @return {@code true} if the Java Platform Module System is available, - * otherwise {@code false} + * @return {@code true} */ public static boolean isJavaPlatformModuleSystemAvailable() { - return false; + return true; } - /** - * Return the name of the module that the class or interface is a member of. - * - * @param type class or interface to analyze - * @return the module name; never {@code null} but potentially empty - */ public static Optional getModuleName(Class type) { - return Optional.empty(); + Preconditions.notNull(type, "Class type must not be null"); + + return Optional.ofNullable(type.getModule().getName()); } - /** - * Return the raw version of the module that the class or interface is a member of. - * - * @param type class or interface to analyze - * @return the raw module version; never {@code null} but potentially empty - */ public static Optional getModuleVersion(Class type) { - return Optional.empty(); + Preconditions.notNull(type, "Class type must not be null"); + + Module module = type.getModule(); + return module.isNamed() ? module.getDescriptor().rawVersion() : Optional.empty(); } /** - * Find all classes for the given module name. + * Find all {@linkplain Class classes} for the given module name. * * @param moduleName the name of the module to scan; never {@code null} or * empty @@ -96,12 +110,17 @@ public static List> findAllClassesInModule(String moduleName, ClassFilt Preconditions.notBlank(moduleName, "Module name must not be null or empty"); Preconditions.notNull(filter, "Class filter must not be null"); - logger.config(() -> "Basic version of findAllClassesInModule() always returns an empty list!"); - return emptyList(); + logger.debug(() -> "Looking for classes in module: " + moduleName); + // @formatter:off + Set moduleReferences = streamResolvedModules(isEqual(moduleName)) + .map(ResolvedModule::reference) + .collect(toSet()); + // @formatter:on + return scan(moduleReferences, filter, ModuleUtils.class.getClassLoader()); } /** - * Find all resources for the given module name. + * Find all {@linkplain Resource resources} for the given module name. * * @param moduleName the name of the module to scan; never {@code null} or * empty @@ -115,8 +134,178 @@ public static List findAllResourcesInModule(String moduleName, Predica Preconditions.notBlank(moduleName, "Module name must not be null or empty"); Preconditions.notNull(filter, "Resource filter must not be null"); - logger.config(() -> "Basic version of findAllResourcesInModule() always returns an empty list!"); - return emptyList(); + logger.debug(() -> "Looking for classes in module: " + moduleName); + // @formatter:off + Set moduleReferences = streamResolvedModules(isEqual(moduleName)) + .map(ResolvedModule::reference) + .collect(toSet()); + // @formatter:on + return scan(moduleReferences, filter, ModuleUtils.class.getClassLoader()); + } + + /** + * Stream resolved modules from current (or boot) module layer. + */ + private static Stream streamResolvedModules(Predicate moduleNamePredicate) { + Module module = ModuleUtils.class.getModule(); + ModuleLayer layer = module.getLayer(); + if (layer == null) { + logger.config(() -> ModuleUtils.class + " is a member of " + module + + " - using boot layer returned by ModuleLayer.boot() as fall-back."); + layer = ModuleLayer.boot(); + } + return streamResolvedModules(moduleNamePredicate, layer); + } + + /** + * Stream resolved modules from the supplied layer. + */ + private static Stream streamResolvedModules(Predicate moduleNamePredicate, + ModuleLayer layer) { + logger.debug(() -> "Streaming modules for layer @" + System.identityHashCode(layer) + ": " + layer); + Configuration configuration = layer.configuration(); + logger.debug(() -> "Module layer configuration: " + configuration); + Stream stream = configuration.modules().stream(); + return stream.filter(module -> moduleNamePredicate.test(module.name())); + } + + /** + * Scan for classes using the supplied set of module references, class + * filter, and loader. + */ + private static List> scan(Set references, ClassFilter filter, ClassLoader loader) { + logger.debug(() -> "Scanning " + references.size() + " module references: " + references); + ModuleReferenceClassScanner scanner = new ModuleReferenceClassScanner(filter, loader); + List> classes = new ArrayList<>(); + for (ModuleReference reference : references) { + classes.addAll(scanner.scan(reference)); + } + logger.debug(() -> "Found " + classes.size() + " classes: " + classes); + return Collections.unmodifiableList(classes); + } + + /** + * Scan for classes using the supplied set of module references, class + * filter, and loader. + */ + private static List scan(Set references, Predicate filter, + ClassLoader loader) { + logger.debug(() -> "Scanning " + references.size() + " module references: " + references); + ModuleReferenceResourceScanner scanner = new ModuleReferenceResourceScanner(filter, loader); + List classes = new ArrayList<>(); + for (ModuleReference reference : references) { + classes.addAll(scanner.scan(reference)); + } + logger.debug(() -> "Found " + classes.size() + " classes: " + classes); + return Collections.unmodifiableList(classes); + } + + /** + * {@link ModuleReference} class scanner. + * + * @since 1.1 + */ + static class ModuleReferenceClassScanner { + + private final ClassFilter classFilter; + private final ClassLoader classLoader; + + ModuleReferenceClassScanner(ClassFilter classFilter, ClassLoader classLoader) { + this.classFilter = classFilter; + this.classLoader = classLoader; + } + + /** + * Scan module reference for classes that potentially contain testable methods. + */ + List> scan(ModuleReference reference) { + try (ModuleReader reader = reference.open()) { + try (Stream names = reader.list()) { + // @formatter:off + return names.filter(name -> name.endsWith(".class")) + .map(this::className) + .filter(name -> !name.equals("module-info")) + .filter(classFilter::match) + .map(this::loadClassUnchecked) + .filter(classFilter::match) + .collect(Collectors.toList()); + // @formatter:on + } + } + catch (IOException e) { + throw new JUnitException("Failed to read contents of " + reference + ".", e); + } + } + + /** + * Convert resource name to binary class name. + */ + private String className(String resourceName) { + resourceName = resourceName.substring(0, resourceName.length() - 6); // 6 = ".class".length() + resourceName = resourceName.replace('/', '.'); + return resourceName; + } + + /** + * Load class by its binary name. + * + * @see ClassLoader#loadClass(String) + */ + private Class loadClassUnchecked(String binaryName) { + try { + return classLoader.loadClass(binaryName); + } + catch (ClassNotFoundException e) { + throw new JUnitException("Failed to load class with name '" + binaryName + "'.", e); + } + } + + } + + /** + * {@link ModuleReference} resource class scanner. + * + * @since 1.11 + */ + static class ModuleReferenceResourceScanner { + + private final Predicate resourceFilter; + private final ClassLoader classLoader; + + ModuleReferenceResourceScanner(Predicate resourceFilter, ClassLoader classLoader) { + this.resourceFilter = resourceFilter; + this.classLoader = classLoader; + } + + /** + * Scan module reference for resources that potentially contain testable resources. + */ + List scan(ModuleReference reference) { + try (ModuleReader reader = reference.open()) { + try (Stream names = reader.list()) { + // @formatter:off + return names.filter(name -> !name.endsWith(".class")) + .map(this::loadResourceUnchecked) + .filter(resourceFilter) + .collect(Collectors.toList()); + // @formatter:on + } + } + catch (IOException e) { + throw new JUnitException("Failed to read contents of " + reference + ".", e); + } + } + + private Resource loadResourceUnchecked(String binaryName) { + try { + URI uri = classLoader.getResource(binaryName).toURI(); + return new DefaultResource(binaryName, uri); + } + catch (URISyntaxException e) { + throw new JUnitException("Failed to load resource with name '" + binaryName + "'.", e); + } + } + } } diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/PackageNameUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/PackageNameUtils.java index 2a0094dda4c4..0cb6aec9e8d8 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/PackageNameUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/PackageNameUtils.java @@ -10,8 +10,6 @@ package org.junit.platform.commons.util; -import static org.junit.platform.commons.util.PackageUtils.DEFAULT_PACKAGE_NAME; - /** * Collection of utilities for working with package names. * @@ -26,13 +24,7 @@ class PackageNameUtils { static String getPackageName(Class clazz) { - Package p = clazz.getPackage(); - if (p != null) { - return p.getName(); - } - String className = clazz.getName(); - int index = className.lastIndexOf('.'); - return index == -1 ? DEFAULT_PACKAGE_NAME : className.substring(0, index); + return clazz.getPackageName(); } } diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ServiceLoaderUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ServiceLoaderUtils.java index 0a060bee0999..db209116b615 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ServiceLoaderUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ServiceLoaderUtils.java @@ -13,9 +13,9 @@ import java.util.ServiceLoader; import java.util.function.Predicate; import java.util.stream.Stream; -import java.util.stream.StreamSupport; import org.apiguardian.api.API; +import org.apiguardian.api.API.Status; /** * Collection of utilities for working with {@link ServiceLoader}. @@ -28,7 +28,7 @@ * * @since 1.11 */ -@API(status = API.Status.INTERNAL, since = "1.11") +@API(status = Status.INTERNAL, since = "1.11") public class ServiceLoaderUtils { private ServiceLoaderUtils() { @@ -45,11 +45,12 @@ private ServiceLoaderUtils() { */ public static Stream filter(ServiceLoader serviceLoader, Predicate> providerPredicate) { - return StreamSupport.stream(serviceLoader.spliterator(), false).filter(it -> { - @SuppressWarnings("unchecked") - Class type = (Class) it.getClass(); - return providerPredicate.test(type); - }); + // @formatter:off + return serviceLoader + .stream() + .filter(provider -> providerPredicate.test(provider.type())) + .map(ServiceLoader.Provider::get); + // @formatter:on } } diff --git a/junit-platform-commons/src/main/java9/org/junit/platform/commons/util/ModuleUtils.java b/junit-platform-commons/src/main/java9/org/junit/platform/commons/util/ModuleUtils.java deleted file mode 100644 index 9f20d964f471..000000000000 --- a/junit-platform-commons/src/main/java9/org/junit/platform/commons/util/ModuleUtils.java +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Copyright 2015-2025 the original author or authors. - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License v2.0 which - * accompanies this distribution and is available at - * - * https://www.eclipse.org/legal/epl-v20.html - */ - -package org.junit.platform.commons.util; - -import static java.util.function.Predicate.isEqual; -import static java.util.stream.Collectors.toCollection; -import static java.util.stream.Collectors.toSet; -import static org.apiguardian.api.API.Status.INTERNAL; - -import java.io.IOException; -import java.lang.module.Configuration; -import java.lang.module.ModuleFinder; -import java.lang.module.ModuleReader; -import java.lang.module.ModuleReference; -import java.lang.module.ResolvedModule; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.function.Predicate; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.apiguardian.api.API; -import org.junit.platform.commons.JUnitException; -import org.junit.platform.commons.logging.Logger; -import org.junit.platform.commons.logging.LoggerFactory; -import org.junit.platform.commons.support.DefaultResource; -import org.junit.platform.commons.support.Resource; -import org.junit.platform.commons.support.scanning.ClassFilter; - -/** - * Collection of utilities for working with {@code java.lang.Module} - * and friends. - * - *

DISCLAIMER

- * - *

These utilities are intended solely for usage within the JUnit framework - * itself. Any usage by external parties is not supported. - * Use at your own risk! - * - * @since 1.1 - */ -@API(status = INTERNAL, since = "1.1") -public class ModuleUtils { - - private static final Logger logger = LoggerFactory.getLogger(ModuleUtils.class); - - /** - * Find all non-system boot modules names. - * - * @return a set of all such module names; never {@code null} but - * potentially empty - */ - public static Set findAllNonSystemBootModuleNames() { - // @formatter:off - Set systemModules = ModuleFinder.ofSystem().findAll().stream() - .map(reference -> reference.descriptor().name()) - .collect(toSet()); - return streamResolvedModules(name -> !systemModules.contains(name)) - .map(ResolvedModule::name) - .collect(toCollection(LinkedHashSet::new)); - // @formatter:on - } - - /** - * Java 9+ runtime supports the Java Platform Module System. - * - * @return {@code true} - */ - public static boolean isJavaPlatformModuleSystemAvailable() { - return true; - } - - public static Optional getModuleName(Class type) { - Preconditions.notNull(type, "Class type must not be null"); - - return Optional.ofNullable(type.getModule().getName()); - } - - public static Optional getModuleVersion(Class type) { - Preconditions.notNull(type, "Class type must not be null"); - - Module module = type.getModule(); - return module.isNamed() ? module.getDescriptor().rawVersion() : Optional.empty(); - } - - /** - * Find all {@linkplain Class classes} for the given module name. - * - * @param moduleName the name of the module to scan; never {@code null} or - * empty - * @param filter the class filter to apply; never {@code null} - * @return an immutable list of all such classes found; never {@code null} - * but potentially empty - */ - public static List> findAllClassesInModule(String moduleName, ClassFilter filter) { - Preconditions.notBlank(moduleName, "Module name must not be null or empty"); - Preconditions.notNull(filter, "Class filter must not be null"); - - logger.debug(() -> "Looking for classes in module: " + moduleName); - // @formatter:off - Set moduleReferences = streamResolvedModules(isEqual(moduleName)) - .map(ResolvedModule::reference) - .collect(toSet()); - // @formatter:on - return scan(moduleReferences, filter, ModuleUtils.class.getClassLoader()); - } - - /** - * Find all {@linkplain Resource resources} for the given module name. - * - * @param moduleName the name of the module to scan; never {@code null} or - * empty - * @param filter the class filter to apply; never {@code null} - * @return an immutable list of all such resources found; never {@code null} - * but potentially empty - * @since 1.11 - */ - @API(status = INTERNAL, since = "1.11") - public static List findAllResourcesInModule(String moduleName, Predicate filter) { - Preconditions.notBlank(moduleName, "Module name must not be null or empty"); - Preconditions.notNull(filter, "Resource filter must not be null"); - - logger.debug(() -> "Looking for classes in module: " + moduleName); - // @formatter:off - Set moduleReferences = streamResolvedModules(isEqual(moduleName)) - .map(ResolvedModule::reference) - .collect(toSet()); - // @formatter:on - return scan(moduleReferences, filter, ModuleUtils.class.getClassLoader()); - } - - /** - * Stream resolved modules from current (or boot) module layer. - */ - private static Stream streamResolvedModules(Predicate moduleNamePredicate) { - Module module = ModuleUtils.class.getModule(); - ModuleLayer layer = module.getLayer(); - if (layer == null) { - logger.config(() -> ModuleUtils.class + " is a member of " + module - + " - using boot layer returned by ModuleLayer.boot() as fall-back."); - layer = ModuleLayer.boot(); - } - return streamResolvedModules(moduleNamePredicate, layer); - } - - /** - * Stream resolved modules from the supplied layer. - */ - private static Stream streamResolvedModules(Predicate moduleNamePredicate, - ModuleLayer layer) { - logger.debug(() -> "Streaming modules for layer @" + System.identityHashCode(layer) + ": " + layer); - Configuration configuration = layer.configuration(); - logger.debug(() -> "Module layer configuration: " + configuration); - Stream stream = configuration.modules().stream(); - return stream.filter(module -> moduleNamePredicate.test(module.name())); - } - - /** - * Scan for classes using the supplied set of module references, class - * filter, and loader. - */ - private static List> scan(Set references, ClassFilter filter, ClassLoader loader) { - logger.debug(() -> "Scanning " + references.size() + " module references: " + references); - ModuleReferenceClassScanner scanner = new ModuleReferenceClassScanner(filter, loader); - List> classes = new ArrayList<>(); - for (ModuleReference reference : references) { - classes.addAll(scanner.scan(reference)); - } - logger.debug(() -> "Found " + classes.size() + " classes: " + classes); - return Collections.unmodifiableList(classes); - } - - /** - * Scan for classes using the supplied set of module references, class - * filter, and loader. - */ - private static List scan(Set references, Predicate filter, - ClassLoader loader) { - logger.debug(() -> "Scanning " + references.size() + " module references: " + references); - ModuleReferenceResourceScanner scanner = new ModuleReferenceResourceScanner(filter, loader); - List classes = new ArrayList<>(); - for (ModuleReference reference : references) { - classes.addAll(scanner.scan(reference)); - } - logger.debug(() -> "Found " + classes.size() + " classes: " + classes); - return Collections.unmodifiableList(classes); - } - - /** - * {@link ModuleReference} class scanner. - * - * @since 1.1 - */ - static class ModuleReferenceClassScanner { - - private final ClassFilter classFilter; - private final ClassLoader classLoader; - - ModuleReferenceClassScanner(ClassFilter classFilter, ClassLoader classLoader) { - this.classFilter = classFilter; - this.classLoader = classLoader; - } - - /** - * Scan module reference for classes that potentially contain testable methods. - */ - List> scan(ModuleReference reference) { - try (ModuleReader reader = reference.open()) { - try (Stream names = reader.list()) { - // @formatter:off - return names.filter(name -> name.endsWith(".class")) - .map(this::className) - .filter(name -> !name.equals("module-info")) - .filter(classFilter::match) - .map(this::loadClassUnchecked) - .filter(classFilter::match) - .collect(Collectors.toList()); - // @formatter:on - } - } - catch (IOException e) { - throw new JUnitException("Failed to read contents of " + reference + ".", e); - } - } - - /** - * Convert resource name to binary class name. - */ - private String className(String resourceName) { - resourceName = resourceName.substring(0, resourceName.length() - 6); // 6 = ".class".length() - resourceName = resourceName.replace('/', '.'); - return resourceName; - } - - /** - * Load class by its binary name. - * - * @see ClassLoader#loadClass(String) - */ - private Class loadClassUnchecked(String binaryName) { - try { - return classLoader.loadClass(binaryName); - } - catch (ClassNotFoundException e) { - throw new JUnitException("Failed to load class with name '" + binaryName + "'.", e); - } - } - - } - - /** - * {@link ModuleReference} resource class scanner. - * - * @since 1.11 - */ - static class ModuleReferenceResourceScanner { - - private final Predicate resourceFilter; - private final ClassLoader classLoader; - - ModuleReferenceResourceScanner(Predicate resourceFilter, ClassLoader classLoader) { - this.resourceFilter = resourceFilter; - this.classLoader = classLoader; - } - - /** - * Scan module reference for resources that potentially contain testable resources. - */ - List scan(ModuleReference reference) { - try (ModuleReader reader = reference.open()) { - try (Stream names = reader.list()) { - // @formatter:off - return names.filter(name -> !name.endsWith(".class")) - .map(this::loadResourceUnchecked) - .filter(resourceFilter) - .collect(Collectors.toList()); - // @formatter:on - } - } - catch (IOException e) { - throw new JUnitException("Failed to read contents of " + reference + ".", e); - } - } - - private Resource loadResourceUnchecked(String binaryName) { - try { - URI uri = classLoader.getResource(binaryName).toURI(); - return new DefaultResource(binaryName, uri); - } - catch (URISyntaxException e) { - throw new JUnitException("Failed to load resource with name '" + binaryName + "'.", e); - } - } - - } - -} diff --git a/junit-platform-commons/src/main/java9/org/junit/platform/commons/util/PackageNameUtils.java b/junit-platform-commons/src/main/java9/org/junit/platform/commons/util/PackageNameUtils.java deleted file mode 100644 index 0cb6aec9e8d8..000000000000 --- a/junit-platform-commons/src/main/java9/org/junit/platform/commons/util/PackageNameUtils.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2015-2025 the original author or authors. - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License v2.0 which - * accompanies this distribution and is available at - * - * https://www.eclipse.org/legal/epl-v20.html - */ - -package org.junit.platform.commons.util; - -/** - * Collection of utilities for working with package names. - * - *

DISCLAIMER

- * - *

These utilities are intended solely for usage within the JUnit framework - * itself. Any usage by external parties is not supported. - * Use at your own risk! - * - * @since 1.11.3 - */ -class PackageNameUtils { - - static String getPackageName(Class clazz) { - return clazz.getPackageName(); - } - -} diff --git a/junit-platform-commons/src/main/java9/org/junit/platform/commons/util/ServiceLoaderUtils.java b/junit-platform-commons/src/main/java9/org/junit/platform/commons/util/ServiceLoaderUtils.java deleted file mode 100644 index db209116b615..000000000000 --- a/junit-platform-commons/src/main/java9/org/junit/platform/commons/util/ServiceLoaderUtils.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2015-2025 the original author or authors. - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License v2.0 which - * accompanies this distribution and is available at - * - * https://www.eclipse.org/legal/epl-v20.html - */ - -package org.junit.platform.commons.util; - -import java.util.ServiceLoader; -import java.util.function.Predicate; -import java.util.stream.Stream; - -import org.apiguardian.api.API; -import org.apiguardian.api.API.Status; - -/** - * Collection of utilities for working with {@link ServiceLoader}. - * - *

DISCLAIMER

- * - *

These utilities are intended solely for usage within the JUnit framework - * itself. Any usage by external parties is not supported. - * Use at your own risk! - * - * @since 1.11 - */ -@API(status = Status.INTERNAL, since = "1.11") -public class ServiceLoaderUtils { - - private ServiceLoaderUtils() { - /* no-op */ - } - - /** - * Filters the supplied service loader using the supplied predicate. - * - * @param the type of the service - * @param serviceLoader the service loader to be filtered - * @param providerPredicate the predicate to filter the loaded services - * @return a stream of loaded services that match the predicate - */ - public static Stream filter(ServiceLoader serviceLoader, - Predicate> providerPredicate) { - // @formatter:off - return serviceLoader - .stream() - .filter(provider -> providerPredicate.test(provider.type())) - .map(ServiceLoader.Provider::get); - // @formatter:on - } - -} diff --git a/junit-platform-console-standalone/junit-platform-console-standalone.gradle.kts b/junit-platform-console-standalone/junit-platform-console-standalone.gradle.kts index 99ed213d9837..968d99fbe1eb 100644 --- a/junit-platform-console-standalone/junit-platform-console-standalone.gradle.kts +++ b/junit-platform-console-standalone/junit-platform-console-standalone.gradle.kts @@ -21,9 +21,6 @@ dependencies { osgiVerification(libs.openTestReporting.tooling.spi) } -val jupiterVersion = rootProject.version -val vintageVersion: String by project - tasks { jar { manifest { @@ -76,8 +73,8 @@ tasks { "Implementation-Title" to project.name, // Generate test engine version information in single shared manifest file. // Pattern of key and value: `"Engine-Version-{YourTestEngine#getId()}": "47.11"` - "Engine-Version-junit-jupiter" to jupiterVersion, - "Engine-Version-junit-vintage" to vintageVersion, + "Engine-Version-junit-jupiter" to project.version, + "Engine-Version-junit-vintage" to project.version, // Version-aware binaries are already included - set Multi-Release flag here. // See https://openjdk.java.net/jeps/238 for details // Note: the "jar --update ... --release X" command does not work with the @@ -86,12 +83,4 @@ tasks { )) } } - - // This jar contains some Java 9 code - // (org.junit.platform.console.ConsoleLauncherToolProvider which implements - // java.util.spi.ToolProvider which is @since 9). - // So in order to resolve this, it can only run on Java 9 - osgiProperties { - property("-runee", "JavaSE-9") - } } diff --git a/junit-platform-console/junit-platform-console.gradle.kts b/junit-platform-console/junit-platform-console.gradle.kts index cd256959b629..586b30004004 100644 --- a/junit-platform-console/junit-platform-console.gradle.kts +++ b/junit-platform-console/junit-platform-console.gradle.kts @@ -3,7 +3,6 @@ import junitbuild.java.UpdateJarAction plugins { id("junitbuild.java-library-conventions") id("junitbuild.shadow-conventions") - id("junitbuild.java-multi-release-sources") } description = "JUnit Platform Console" @@ -33,22 +32,17 @@ tasks { )) } shadowJar { - val release17ClassesDir = sourceSets.mainRelease17.get().output.classesDirs.singleFile - inputs.dir(release17ClassesDir).withPathSensitivity(PathSensitivity.RELATIVE) exclude("META-INF/versions/9/module-info.class") relocate("picocli", "org.junit.platform.console.shadow.picocli") from(projectDir) { include("LICENSE-picocli.md") into("META-INF") } - from(sourceSets.mainRelease9.get().output.classesDirs) doLast(objects.newInstance(UpdateJarAction::class).apply { javaLauncher = project.javaToolchains.launcherFor(java.toolchain) args.addAll( "--file", archiveFile.get().asFile.absolutePath, "--main-class", "org.junit.platform.console.ConsoleLauncher", - "--release", "17", - "-C", release17ClassesDir.absolutePath, "." ) }) } @@ -60,19 +54,4 @@ tasks { attributes("Main-Class" to "org.junit.platform.console.ConsoleLauncher") } } - - // This jar contains some Java 9 code - // (org.junit.platform.console.ConsoleLauncherToolProvider which implements - // java.util.spi.ToolProvider which is @since 9). - // So in order to resolve this, it can only run on Java 9 - osgiProperties { - property("-runee", "JavaSE-9") - } -} - -eclipse { - classpath { - sourceSets -= project.sourceSets.mainRelease9.get() - sourceSets -= project.sourceSets.mainRelease17.get() - } } diff --git a/junit-platform-console/src/main/java9/org/junit/platform/console/ConsoleLauncherToolProvider.java b/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncherToolProvider.java similarity index 100% rename from junit-platform-console/src/main/java9/org/junit/platform/console/ConsoleLauncherToolProvider.java rename to junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncherToolProvider.java diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/ConsoleUtils.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/ConsoleUtils.java index 680e3381df6a..bd39bff687da 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/options/ConsoleUtils.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/ConsoleUtils.java @@ -12,6 +12,7 @@ import static org.apiguardian.api.API.Status.INTERNAL; +import java.io.Console; import java.nio.charset.Charset; import org.apiguardian.api.API; @@ -35,7 +36,8 @@ public class ConsoleUtils { * {@return the charset of the console} */ public static Charset charset() { - return Charset.defaultCharset(); + Console console = System.console(); + return console != null ? console.charset() : Charset.defaultCharset(); } } diff --git a/junit-platform-console/src/main/java17/org/junit/platform/console/options/ConsoleUtils.java b/junit-platform-console/src/main/java17/org/junit/platform/console/options/ConsoleUtils.java deleted file mode 100644 index 145ebed63fd4..000000000000 --- a/junit-platform-console/src/main/java17/org/junit/platform/console/options/ConsoleUtils.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2015-2025 the original author or authors. - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License v2.0 which - * accompanies this distribution and is available at - * - * https://www.eclipse.org/legal/epl-v20.html - */ - -package org.junit.platform.console.options; - -import static org.apiguardian.api.API.Status.INTERNAL; - -import java.io.Console; -import java.nio.charset.Charset; - -import org.apiguardian.api.API; - -/** - * Collection of utilities for working with {@code java.io.Console} - * and friends. - * - *

DISCLAIMER

- * - *

These utilities are intended solely for usage within the JUnit framework - * itself. Any usage by external parties is not supported. - * Use at your own risk! - * - * @since 1.9 - */ -@API(status = INTERNAL, since = "1.9") -public class ConsoleUtils { - - /** - * {@return the charset of the console} - */ - public static Charset charset() { - Console console = System.console(); - return console != null ? console.charset() : Charset.defaultCharset(); - } -} diff --git a/junit-platform-jfr/junit-platform-jfr.gradle.kts b/junit-platform-jfr/junit-platform-jfr.gradle.kts index 0f03e2b99f86..8d82379addad 100644 --- a/junit-platform-jfr/junit-platform-jfr.gradle.kts +++ b/junit-platform-jfr/junit-platform-jfr.gradle.kts @@ -20,17 +20,7 @@ dependencies { osgiVerification(projects.junitPlatformLauncher) } -javaLibrary { - // --release 8 does not support jdk.jfr even though it was backported - configureRelease = false -} - tasks { - compileJava { - javaCompiler = project.javaToolchains.compilerFor { - languageVersion = JavaLanguageVersion.of(8) - } - } compileModule { options.release = 11 } diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/ClasspathAlignmentChecker.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/ClasspathAlignmentChecker.java index 3b95f7153e6a..6f3fff9bed05 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/ClasspathAlignmentChecker.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/ClasspathAlignmentChecker.java @@ -69,9 +69,6 @@ static Optional check(LinkageError error, Function { String version = pkg.getImplementationVersion(); if (version != null) { - if (pkg.getName().startsWith("org.junit.platform") && version.contains(".")) { - version = platformToJupiterVersion(version); - } packagesByVersions.computeIfAbsent(version, __ -> new ArrayList<>()).add(pkg); } }); @@ -83,8 +80,7 @@ static Optional check(LinkageError error, Function check(LinkageError error, Function=${'$'}{versionmask;+;${'$'}{version_cleanup;$platformVersion}})))';\ + filter:='(&(org.junit.platform.launcher=junit-platform-launcher)(version>=${'$'}{version_cleanup;$version})(!(version>=${'$'}{versionmask;+;${'$'}{version_cleanup;$version}})))';\ effective:=active """) } diff --git a/jupiter-tests/src/test/kotlin/org/junit/jupiter/params/aggregator/DisplayNameTests.kt b/jupiter-tests/src/test/kotlin/org/junit/jupiter/params/aggregator/DisplayNameTests.kt index 6a1f91cbb19f..00d0b2e167a7 100644 --- a/jupiter-tests/src/test/kotlin/org/junit/jupiter/params/aggregator/DisplayNameTests.kt +++ b/jupiter-tests/src/test/kotlin/org/junit/jupiter/params/aggregator/DisplayNameTests.kt @@ -21,11 +21,11 @@ object DisplayNameTests { @JvmStatic fun data() = arrayOf( - arrayOf("A", 1), - arrayOf("B", 2), - arrayOf("C", 3), - arrayOf("", 4), // empty is okay - arrayOf(null, 5) // null was the problem + arrayOf("A", 1), + arrayOf("B", 2), + arrayOf("C", 3), + arrayOf("", 4), // empty is okay + arrayOf(null, 5) // null was the problem ) @ParameterizedTest diff --git a/platform-tests/platform-tests.gradle.kts b/platform-tests/platform-tests.gradle.kts index 3e63fe5fe14f..3d849832f844 100644 --- a/platform-tests/platform-tests.gradle.kts +++ b/platform-tests/platform-tests.gradle.kts @@ -132,7 +132,7 @@ tasks { dependsOn(testWoodstox) } named(processStarter.compileJavaTaskName).configure { - options.release = javaLibrary.testJavaVersion.majorVersion.toInt() + options.release = javaLibrary.testJavaVersion.map { it.majorVersion.toInt() } } named("checkstyle${processStarter.name.capitalized()}").configure { config = resources.text.fromFile(checkstyle.configDirectory.file("checkstyleMain.xml")) diff --git a/platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts b/platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts index fdb21be76b39..c6014827aada 100644 --- a/platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts +++ b/platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts @@ -217,12 +217,12 @@ val test by testing.suites.getting(JvmTestSuite::class) { develocity { testDistribution { - requirements.add("jdk=8") + requirements.add("jdk=17") this as TestDistributionConfigurationInternal preferredMaxDuration = Duration.ofMillis(500) } } - jvmArgumentProviders += JavaHomeDir(project, 8, develocity.testDistribution.enabled) + jvmArgumentProviders += JavaHomeDir(project, 17, develocity.testDistribution.enabled) jvmArgumentProviders += JavaHomeDir(project, 17, develocity.testDistribution.enabled) val gradleJavaVersion = JavaVersion.current().majorVersion.toInt() diff --git a/platform-tooling-support-tests/projects/graalvm-starter/build.gradle.kts b/platform-tooling-support-tests/projects/graalvm-starter/build.gradle.kts index 6203c65fdcac..8de91888e571 100644 --- a/platform-tooling-support-tests/projects/graalvm-starter/build.gradle.kts +++ b/platform-tooling-support-tests/projects/graalvm-starter/build.gradle.kts @@ -3,9 +3,7 @@ plugins { id("org.graalvm.buildtools.native") } -val jupiterVersion: String by project -val platformVersion: String by project -val vintageVersion: String by project +val junitVersion: String by project repositories { maven { url = uri(file(System.getProperty("maven.repo"))) } @@ -13,11 +11,11 @@ repositories { } dependencies { - testImplementation("org.junit.jupiter:junit-jupiter:$jupiterVersion") + testImplementation("org.junit.jupiter:junit-jupiter:$junitVersion") testImplementation("junit:junit:4.13.2") - testImplementation("org.junit.platform:junit-platform-suite:$platformVersion") - testRuntimeOnly("org.junit.vintage:junit-vintage-engine:$vintageVersion") - testRuntimeOnly("org.junit.platform:junit-platform-reporting:$platformVersion") + testImplementation("org.junit.platform:junit-platform-suite:$junitVersion") + testRuntimeOnly("org.junit.vintage:junit-vintage-engine:$junitVersion") + testRuntimeOnly("org.junit.platform:junit-platform-reporting:$junitVersion") } tasks.test { diff --git a/platform-tooling-support-tests/projects/gradle-kotlin-extensions/build.gradle.kts b/platform-tooling-support-tests/projects/gradle-kotlin-extensions/build.gradle.kts index 0fef24865e1f..2040dbfff8d3 100644 --- a/platform-tooling-support-tests/projects/gradle-kotlin-extensions/build.gradle.kts +++ b/platform-tooling-support-tests/projects/gradle-kotlin-extensions/build.gradle.kts @@ -1,4 +1,6 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_1 plugins { kotlin("jvm") version "2.1.20" @@ -9,26 +11,26 @@ repositories { mavenCentral() } -val jupiterVersion: String by project -val platformVersion: String by project +val junitVersion: String by project dependencies { - testImplementation(kotlin("stdlib-jdk8")) - testImplementation("org.junit.jupiter:junit-jupiter:$jupiterVersion") - testRuntimeOnly("org.junit.platform:junit-platform-launcher:$platformVersion") + testImplementation(kotlin("stdlib")) + testImplementation("org.junit.jupiter:junit-jupiter:$junitVersion") + testRuntimeOnly("org.junit.platform:junit-platform-launcher:$junitVersion") } java { toolchain { - languageVersion = JavaLanguageVersion.of(8) + languageVersion = JavaLanguageVersion.of(17) } } tasks.withType().configureEach { - kotlinOptions { - jvmTarget = "1.8" - apiVersion = "1.6" - languageVersion = "1.6" + compilerOptions { + jvmTarget = JVM_17 + apiVersion = KOTLIN_2_1 + languageVersion = KOTLIN_2_1 + freeCompilerArgs.addAll("-Xskip-prerelease-check") } } diff --git a/platform-tooling-support-tests/projects/gradle-kotlin-extensions/gradle.properties b/platform-tooling-support-tests/projects/gradle-kotlin-extensions/gradle.properties index 79b428ebc70c..bed2250e4577 100644 --- a/platform-tooling-support-tests/projects/gradle-kotlin-extensions/gradle.properties +++ b/platform-tooling-support-tests/projects/gradle-kotlin-extensions/gradle.properties @@ -1 +1 @@ -org.gradle.java.installations.fromEnv=JDK8 +org.gradle.java.installations.fromEnv=JDK17 diff --git a/platform-tooling-support-tests/projects/gradle-missing-engine/build.gradle.kts b/platform-tooling-support-tests/projects/gradle-missing-engine/build.gradle.kts index 50b4e7b2924b..0e7612cf3be1 100644 --- a/platform-tooling-support-tests/projects/gradle-missing-engine/build.gradle.kts +++ b/platform-tooling-support-tests/projects/gradle-missing-engine/build.gradle.kts @@ -2,8 +2,7 @@ plugins { java } -val jupiterVersion: String by project -val platformVersion: String by project +val junitVersion: String by project repositories { maven { url = uri(file(System.getProperty("maven.repo"))) } @@ -11,14 +10,14 @@ repositories { } dependencies { - testImplementation("org.junit.jupiter:junit-jupiter-api:$jupiterVersion") { + testImplementation("org.junit.jupiter:junit-jupiter-api:$junitVersion") { exclude(group = "org.junit.jupiter", module = "junit-jupiter-engine") } - testRuntimeOnly("org.junit.platform:junit-platform-launcher:$platformVersion")} + testRuntimeOnly("org.junit.platform:junit-platform-launcher:$junitVersion")} java { toolchain { - languageVersion = JavaLanguageVersion.of(8) + languageVersion = JavaLanguageVersion.of(17) } } diff --git a/platform-tooling-support-tests/projects/gradle-missing-engine/gradle.properties b/platform-tooling-support-tests/projects/gradle-missing-engine/gradle.properties index 79b428ebc70c..bed2250e4577 100644 --- a/platform-tooling-support-tests/projects/gradle-missing-engine/gradle.properties +++ b/platform-tooling-support-tests/projects/gradle-missing-engine/gradle.properties @@ -1 +1 @@ -org.gradle.java.installations.fromEnv=JDK8 +org.gradle.java.installations.fromEnv=JDK17 diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-api.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-api.expected.txt index 26719afdbe79..3819dc406164 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-api.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-api.expected.txt @@ -1,4 +1,4 @@ -org.junit.jupiter.api@${jupiterVersion} jar:file:.+/junit-jupiter-api-\d.+\.jar..module-info\.class +org.junit.jupiter.api@${version} jar:file:.+/junit-jupiter-api-\d.+\.jar..module-info\.class exports org.junit.jupiter.api exports org.junit.jupiter.api.condition exports org.junit.jupiter.api.extension diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-engine.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-engine.expected.txt index 5c637457863f..699fe7363234 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-engine.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-engine.expected.txt @@ -1,4 +1,4 @@ -org.junit.jupiter.engine@${jupiterVersion} jar:file:.+/junit-jupiter-engine-\d.+\.jar..module-info\.class +org.junit.jupiter.engine@${version} jar:file:.+/junit-jupiter-engine-\d.+\.jar..module-info\.class requires java.base mandated requires org.apiguardian.api static requires org.junit.jupiter.api diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-migrationsupport.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-migrationsupport.expected.txt index 747125710426..4012e4139344 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-migrationsupport.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-migrationsupport.expected.txt @@ -1,4 +1,4 @@ -org.junit.jupiter.migrationsupport@${jupiterVersion} jar:file:.+/junit-jupiter-migrationsupport-\d.+\.jar..module-info\.class +org.junit.jupiter.migrationsupport@${version} jar:file:.+/junit-jupiter-migrationsupport-\d.+\.jar..module-info\.class exports org.junit.jupiter.migrationsupport exports org.junit.jupiter.migrationsupport.conditions exports org.junit.jupiter.migrationsupport.rules diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-params.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-params.expected.txt index 05e8b8ac4675..c23606354350 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-params.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter-params.expected.txt @@ -1,4 +1,4 @@ -org.junit.jupiter.params@${jupiterVersion} jar:file:.+/junit-jupiter-params-\d.+\.jar..module-info\.class +org.junit.jupiter.params@${version} jar:file:.+/junit-jupiter-params-\d.+\.jar..module-info\.class exports org.junit.jupiter.params exports org.junit.jupiter.params.aggregator exports org.junit.jupiter.params.converter diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter.expected.txt index 768342398c7e..11da5f5567bf 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-jupiter.expected.txt @@ -1,4 +1,4 @@ -org.junit.jupiter@${jupiterVersion} jar:file:.+/junit-jupiter-\d.+\.jar..module-info\.class +org.junit.jupiter@${version} jar:file:.+/junit-jupiter-\d.+\.jar..module-info\.class requires java.base mandated requires org.junit.jupiter.api transitive requires org.junit.jupiter.engine transitive diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-commons.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-commons.expected.txt index e8104a7e3dd8..4e06393f529f 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-commons.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-commons.expected.txt @@ -1,4 +1,4 @@ -org.junit.platform.commons@${platformVersion} jar:file:.+/junit-platform-commons-\d.+\.jar..module-info\.class +org.junit.platform.commons@${version} jar:file:.+/junit-platform-commons-\d.+\.jar..module-info\.class exports org.junit.platform.commons exports org.junit.platform.commons.annotation exports org.junit.platform.commons.function diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-console.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-console.expected.txt index 4324e45eccfe..031b331cc0b3 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-console.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-console.expected.txt @@ -1,4 +1,4 @@ -org.junit.platform.console@${platformVersion} jar:file:.+/junit-platform-console-\d.+\.jar..module-info\.class +org.junit.platform.console@${version} jar:file:.+/junit-platform-console-\d.+\.jar..module-info\.class requires java.base mandated requires org.apiguardian.api static requires org.junit.platform.commons diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-engine.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-engine.expected.txt index 04812758a63f..2809c8a87fec 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-engine.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-engine.expected.txt @@ -1,4 +1,4 @@ -org.junit.platform.engine@${platformVersion} jar:file:.+/junit-platform-engine-\d.+\.jar..module-info\.class +org.junit.platform.engine@${version} jar:file:.+/junit-platform-engine-\d.+\.jar..module-info\.class exports org.junit.platform.engine exports org.junit.platform.engine.discovery exports org.junit.platform.engine.reporting diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-jfr.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-jfr.expected.txt index 10bec3decdaf..bc727ca43cf6 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-jfr.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-jfr.expected.txt @@ -1,4 +1,4 @@ -org.junit.platform.jfr@${platformVersion} jar:file:.+/junit-platform-jfr-\d.+\.jar..module-info\.class +org.junit.platform.jfr@${version} jar:file:.+/junit-platform-jfr-\d.+\.jar..module-info\.class requires java.base mandated requires jdk.jfr requires org.apiguardian.api static diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-launcher.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-launcher.expected.txt index 41bb2afac024..e8f16dfa1f46 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-launcher.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-launcher.expected.txt @@ -1,4 +1,4 @@ -org.junit.platform.launcher@${platformVersion} jar:file:.+/junit-platform-launcher-\d.+\.jar..module-info\.class +org.junit.platform.launcher@${version} jar:file:.+/junit-platform-launcher-\d.+\.jar..module-info\.class exports org.junit.platform.launcher exports org.junit.platform.launcher.core exports org.junit.platform.launcher.listeners diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-reporting.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-reporting.expected.txt index 2362fbb8152f..6bd9a8b227c3 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-reporting.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-reporting.expected.txt @@ -1,4 +1,4 @@ -org.junit.platform.reporting@${platformVersion} jar:file:.+/junit-platform-reporting-\d.+\.jar..module-info\.class +org.junit.platform.reporting@${version} jar:file:.+/junit-platform-reporting-\d.+\.jar..module-info\.class exports org.junit.platform.reporting.legacy exports org.junit.platform.reporting.legacy.xml exports org.junit.platform.reporting.open.xml diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-runner.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-runner.expected.txt index ee4ae1791204..ea26b6302bce 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-runner.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-runner.expected.txt @@ -1,4 +1,4 @@ -org.junit.platform.runner@${platformVersion} jar:file:.+/junit-platform-runner-\d.+\.jar..module-info\.class +org.junit.platform.runner@${version} jar:file:.+/junit-platform-runner-\d.+\.jar..module-info\.class exports org.junit.platform.runner requires java.base mandated requires junit transitive diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite-api.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite-api.expected.txt index 5e3da71afa28..77c942f97f87 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite-api.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite-api.expected.txt @@ -1,4 +1,4 @@ -org.junit.platform.suite.api@${platformVersion} jar:file:.+/junit-platform-suite-api-\d.+\.jar..module-info\.class +org.junit.platform.suite.api@${version} jar:file:.+/junit-platform-suite-api-\d.+\.jar..module-info\.class exports org.junit.platform.suite.api requires java.base mandated requires org.apiguardian.api static transitive diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite-commons.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite-commons.expected.txt index 493962b6b97d..e818b5d1973e 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite-commons.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite-commons.expected.txt @@ -1,4 +1,4 @@ -org.junit.platform.suite.commons@${platformVersion} jar:file:.+/junit-platform-suite-commons-\d.+\.jar..module-info\.class +org.junit.platform.suite.commons@${version} jar:file:.+/junit-platform-suite-commons-\d.+\.jar..module-info\.class requires java.base mandated requires org.apiguardian.api static transitive requires org.junit.platform.commons diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite-engine.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite-engine.expected.txt index 4a5694586dd4..cca1aba09043 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite-engine.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite-engine.expected.txt @@ -1,4 +1,4 @@ -org.junit.platform.suite.engine@${platformVersion} jar:file:.+/junit-platform-suite-engine-\d.+\.jar..module-info\.class +org.junit.platform.suite.engine@${version} jar:file:.+/junit-platform-suite-engine-\d.+\.jar..module-info\.class requires java.base mandated requires org.apiguardian.api static requires org.junit.platform.commons diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite.expected.txt index d6114f727332..83276251b80b 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-suite.expected.txt @@ -1,4 +1,4 @@ -org.junit.platform.suite@${platformVersion} jar:file:.+/junit-platform-suite-\d.+\.jar..module-info\.class +org.junit.platform.suite@${version} jar:file:.+/junit-platform-suite-\d.+\.jar..module-info\.class requires java.base mandated requires org.junit.platform.suite.api transitive requires org.junit.platform.suite.engine transitive diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-testkit.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-testkit.expected.txt index c530e1bf68f8..da43a9f5bd2c 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-testkit.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-platform-testkit.expected.txt @@ -1,4 +1,4 @@ -org.junit.platform.testkit@${platformVersion} jar:file:.+/junit-platform-testkit-\d.+\.jar..module-info\.class +org.junit.platform.testkit@${version} jar:file:.+/junit-platform-testkit-\d.+\.jar..module-info\.class exports org.junit.platform.testkit.engine requires java.base mandated requires org.apiguardian.api static transitive diff --git a/platform-tooling-support-tests/projects/jar-describe-module/junit-vintage-engine.expected.txt b/platform-tooling-support-tests/projects/jar-describe-module/junit-vintage-engine.expected.txt index 854b4981242a..f3b130c0aa8d 100644 --- a/platform-tooling-support-tests/projects/jar-describe-module/junit-vintage-engine.expected.txt +++ b/platform-tooling-support-tests/projects/jar-describe-module/junit-vintage-engine.expected.txt @@ -1,4 +1,4 @@ -org.junit.vintage.engine@${vintageVersion} jar:file:.+/junit-vintage-engine-\d.+\.jar..module-info\.class +org.junit.vintage.engine@${version} jar:file:.+/junit-vintage-engine-\d.+\.jar..module-info\.class requires java.base mandated requires junit requires org.apiguardian.api static diff --git a/platform-tooling-support-tests/projects/java-versions/pom.xml b/platform-tooling-support-tests/projects/java-versions/pom.xml deleted file mode 100644 index 664c9092e437..000000000000 --- a/platform-tooling-support-tests/projects/java-versions/pom.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - 4.0.0 - - platform.tooling.support.tests - java-versions - 1.0-SNAPSHOT - - - UTF-8 - - - - - org.junit.jupiter - junit-jupiter-engine - ${junit.jupiter.version} - test - - - org.junit.platform - junit-platform-commons - ${junit.platform.version} - test - - - - - - - - maven-compiler-plugin - 3.14.0 - - 1.8 - 1.8 - - - - maven-surefire-plugin - 3.5.3 - - - - - - - - local-temp - file://${maven.repo} - - true - ignore - - - true - ignore - - - - - diff --git a/platform-tooling-support-tests/projects/java-versions/src/test/java/JUnitPlatformCommonsTests.java b/platform-tooling-support-tests/projects/java-versions/src/test/java/JUnitPlatformCommonsTests.java deleted file mode 100644 index 7e7a888bdd6b..000000000000 --- a/platform-tooling-support-tests/projects/java-versions/src/test/java/JUnitPlatformCommonsTests.java +++ /dev/null @@ -1,37 +0,0 @@ - -/* - * Copyright 2015-2025 the original author or authors. - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License v2.0 which - * accompanies this distribution and is available at - * - * https://www.eclipse.org/legal/epl-v20.html - */ -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.DisabledOnJre; -import org.junit.jupiter.api.condition.EnabledOnJre; -import org.junit.jupiter.api.condition.JRE; -import org.junit.platform.commons.util.ModuleUtils; - -class JUnitPlatformCommonsTests { - - @Test - @EnabledOnJre(JRE.JAVA_8) - void onJava8() { - assertFalse(ModuleUtils.isJavaPlatformModuleSystemAvailable()); - assertFalse(ModuleUtils.getModuleName(Object.class).isPresent()); - } - - @Test - @DisabledOnJre(JRE.JAVA_8) - void onJava9OrHigher() { - assertTrue(ModuleUtils.isJavaPlatformModuleSystemAvailable()); - assertEquals("java.base", ModuleUtils.getModuleName(Object.class).orElseThrow(Error::new)); - } - -} diff --git a/platform-tooling-support-tests/projects/jupiter-starter/build.gradle.kts b/platform-tooling-support-tests/projects/jupiter-starter/build.gradle.kts index 74e76f07d3c1..2714c5c41b51 100644 --- a/platform-tooling-support-tests/projects/jupiter-starter/build.gradle.kts +++ b/platform-tooling-support-tests/projects/jupiter-starter/build.gradle.kts @@ -2,8 +2,7 @@ plugins { java } -val jupiterVersion: String by project -val platformVersion: String by project +val junitVersion: String by project repositories { maven { url = uri(file(System.getProperty("maven.repo"))) } @@ -11,8 +10,8 @@ repositories { } dependencies { - testImplementation("org.junit.jupiter:junit-jupiter:$jupiterVersion") - testRuntimeOnly("org.junit.platform:junit-platform-reporting:$platformVersion") + testImplementation("org.junit.jupiter:junit-jupiter:$junitVersion") + testRuntimeOnly("org.junit.platform:junit-platform-reporting:$junitVersion") } java { diff --git a/platform-tooling-support-tests/projects/jupiter-starter/gradle.properties b/platform-tooling-support-tests/projects/jupiter-starter/gradle.properties index 35b90dc7fdf0..bed2250e4577 100644 --- a/platform-tooling-support-tests/projects/jupiter-starter/gradle.properties +++ b/platform-tooling-support-tests/projects/jupiter-starter/gradle.properties @@ -1 +1 @@ -org.gradle.java.installations.fromEnv=JDK8,JDK17 +org.gradle.java.installations.fromEnv=JDK17 diff --git a/platform-tooling-support-tests/projects/jupiter-starter/pom.xml b/platform-tooling-support-tests/projects/jupiter-starter/pom.xml index 5fa4fdabaebb..823e264d76f8 100644 --- a/platform-tooling-support-tests/projects/jupiter-starter/pom.xml +++ b/platform-tooling-support-tests/projects/jupiter-starter/pom.xml @@ -9,9 +9,8 @@ UTF-8 - 1.8 - ${maven.compiler.source} - ${junit.platform.version} + 17 + ${junit.version} @@ -38,7 +37,7 @@ org.junit junit-bom - ${junit.bom.version} + ${junit.version} pom import diff --git a/platform-tooling-support-tests/projects/maven-surefire-compatibility/pom.xml b/platform-tooling-support-tests/projects/maven-surefire-compatibility/pom.xml index 47aba716ed6a..ffdfb47af1f6 100644 --- a/platform-tooling-support-tests/projects/maven-surefire-compatibility/pom.xml +++ b/platform-tooling-support-tests/projects/maven-surefire-compatibility/pom.xml @@ -9,8 +9,7 @@ UTF-8 - 1.8 - ${maven.compiler.source} + 17 @@ -26,7 +25,7 @@ org.junit junit-bom - ${junit.bom.version} + ${junit.version} pom import diff --git a/platform-tooling-support-tests/projects/multi-release-jar/pom.xml b/platform-tooling-support-tests/projects/multi-release-jar/pom.xml index b9e4b86ed82f..4794ece6f303 100644 --- a/platform-tooling-support-tests/projects/multi-release-jar/pom.xml +++ b/platform-tooling-support-tests/projects/multi-release-jar/pom.xml @@ -15,13 +15,13 @@ org.junit.jupiter junit-jupiter-engine - ${junit.jupiter.version} + ${junit.version} test org.junit.platform junit-platform-reporting - ${junit.platform.version} + ${junit.version} test diff --git a/platform-tooling-support-tests/projects/reflection-tests/build.gradle.kts b/platform-tooling-support-tests/projects/reflection-tests/build.gradle.kts index 0dea5aab80a1..38982a672139 100644 --- a/platform-tooling-support-tests/projects/reflection-tests/build.gradle.kts +++ b/platform-tooling-support-tests/projects/reflection-tests/build.gradle.kts @@ -2,8 +2,7 @@ plugins { java } -val jupiterVersion: String by project -val platformVersion: String by project +val junitVersion: String by project repositories { maven { url = uri(file(System.getProperty("maven.repo"))) } @@ -11,14 +10,14 @@ repositories { } dependencies { - testImplementation("org.junit.jupiter:junit-jupiter:$jupiterVersion") - testImplementation("org.junit.jupiter:junit-jupiter-engine:$jupiterVersion") - testRuntimeOnly("org.junit.platform:junit-platform-reporting:$platformVersion") + testImplementation("org.junit.jupiter:junit-jupiter:$junitVersion") + testImplementation("org.junit.jupiter:junit-jupiter-engine:$junitVersion") + testRuntimeOnly("org.junit.platform:junit-platform-reporting:$junitVersion") } java { toolchain { - languageVersion = JavaLanguageVersion.of(8) + languageVersion = JavaLanguageVersion.of(17) } } diff --git a/platform-tooling-support-tests/projects/reflection-tests/gradle.properties b/platform-tooling-support-tests/projects/reflection-tests/gradle.properties index 79b428ebc70c..bed2250e4577 100644 --- a/platform-tooling-support-tests/projects/reflection-tests/gradle.properties +++ b/platform-tooling-support-tests/projects/reflection-tests/gradle.properties @@ -1 +1 @@ -org.gradle.java.installations.fromEnv=JDK8 +org.gradle.java.installations.fromEnv=JDK17 diff --git a/platform-tooling-support-tests/projects/vintage/build.gradle.kts b/platform-tooling-support-tests/projects/vintage/build.gradle.kts index 37bab7448d5b..4e959fcb8d7c 100644 --- a/platform-tooling-support-tests/projects/vintage/build.gradle.kts +++ b/platform-tooling-support-tests/projects/vintage/build.gradle.kts @@ -9,24 +9,23 @@ repositories { mavenCentral() } -val platformVersion: String by project -val vintageVersion: String by project +val junitVersion: String by project dependencies { val junit4Version = System.getProperty("junit4Version", "4.12") testImplementation("junit:junit:$junit4Version") - testImplementation("org.junit.vintage:junit-vintage-engine:$vintageVersion") { + testImplementation("org.junit.vintage:junit-vintage-engine:$junitVersion") { exclude(group = "junit") because("we want to override it to test against different versions") } - testRuntimeOnly("org.junit.platform:junit-platform-launcher:$platformVersion") + testRuntimeOnly("org.junit.platform:junit-platform-launcher:$junitVersion") } java { toolchain { - languageVersion = JavaLanguageVersion.of(8) + languageVersion = JavaLanguageVersion.of(17) } } diff --git a/platform-tooling-support-tests/projects/vintage/gradle.properties b/platform-tooling-support-tests/projects/vintage/gradle.properties index 79b428ebc70c..bed2250e4577 100644 --- a/platform-tooling-support-tests/projects/vintage/gradle.properties +++ b/platform-tooling-support-tests/projects/vintage/gradle.properties @@ -1 +1 @@ -org.gradle.java.installations.fromEnv=JDK8 +org.gradle.java.installations.fromEnv=JDK17 diff --git a/platform-tooling-support-tests/projects/vintage/pom.xml b/platform-tooling-support-tests/projects/vintage/pom.xml index 74d0ef2dc367..e4219de31c9b 100644 --- a/platform-tooling-support-tests/projects/vintage/pom.xml +++ b/platform-tooling-support-tests/projects/vintage/pom.xml @@ -9,15 +9,14 @@ UTF-8 - 1.8 - ${maven.compiler.source} + 17 org.junit.vintage junit-vintage-engine - ${junit.vintage.version} + ${junit.version} test diff --git a/platform-tooling-support-tests/src/main/java/platform/tooling/support/Helper.java b/platform-tooling-support-tests/src/main/java/platform/tooling/support/Helper.java index 0841181a1903..e6df0bafa2fa 100644 --- a/platform-tooling-support-tests/src/main/java/platform/tooling/support/Helper.java +++ b/platform-tooling-support-tests/src/main/java/platform/tooling/support/Helper.java @@ -41,17 +41,8 @@ public class Helper { } } - public static String version(String module) { - if (module.startsWith("junit-jupiter")) { - return gradleProperties.getProperty("version"); - } - if (module.startsWith("junit-platform")) { - return gradleProperties.getProperty("platformVersion"); - } - if (module.startsWith("junit-vintage")) { - return gradleProperties.getProperty("vintageVersion"); - } - throw new AssertionError("Unknown module: " + module); + public static String version() { + return gradleProperties.getProperty("version"); } public static List loadModuleDirectoryNames() { diff --git a/platform-tooling-support-tests/src/main/java/platform/tooling/support/MavenRepo.java b/platform-tooling-support-tests/src/main/java/platform/tooling/support/MavenRepo.java index d5ebac39bc92..d7b3ea0cfaf4 100644 --- a/platform-tooling-support-tests/src/main/java/platform/tooling/support/MavenRepo.java +++ b/platform-tooling-support-tests/src/main/java/platform/tooling/support/MavenRepo.java @@ -47,7 +47,7 @@ private static Path artifact(String artifactId, Predicate fileNamePredic var parentDir = dir() // .resolve(groupId(artifactId).replace('.', File.separatorChar)) // .resolve(artifactId) // - .resolve(Helper.version(artifactId)); + .resolve(Helper.version()); try (var files = Files.list(parentDir)) { return files.filter( file -> fileNamePredicate.test(file.getFileName().toString())).findFirst().orElseThrow(); diff --git a/platform-tooling-support-tests/src/main/java/platform/tooling/support/ProcessStarters.java b/platform-tooling-support-tests/src/main/java/platform/tooling/support/ProcessStarters.java index e2519e89f958..94df6091b784 100644 --- a/platform-tooling-support-tests/src/main/java/platform/tooling/support/ProcessStarters.java +++ b/platform-tooling-support-tests/src/main/java/platform/tooling/support/ProcessStarters.java @@ -47,9 +47,7 @@ public static ProcessStarter gradlew() { return new ProcessStarter() // .executable(Path.of("..").resolve(windowsOrOtherExecutable("gradlew.bat", "gradlew")).toAbsolutePath()) // .putEnvironment("JAVA_HOME", getGradleJavaHome().orElseThrow(TestAbortedException::new)) // - .addArguments("-PjupiterVersion=" + Helper.version("junit-jupiter")) // - .addArguments("-PvintageVersion=" + Helper.version("junit-vintage")) // - .addArguments("-PplatformVersion=" + Helper.version("junit-platform")); + .addArguments("-PjunitVersion=" + Helper.version()); } public static ProcessStarter maven() { @@ -61,10 +59,7 @@ public static ProcessStarter maven(Path javaHome) { .executable(Path.of(System.getProperty("mavenDistribution")).resolve("bin").resolve( windowsOrOtherExecutable("mvn.cmd", "mvn")).toAbsolutePath()) // .putEnvironment("JAVA_HOME", javaHome) // - .addArguments("-Djunit.jupiter.version=" + Helper.version("junit-jupiter")) // - .addArguments("-Djunit.bom.version=" + Helper.version("junit-jupiter")) // - .addArguments("-Djunit.vintage.version=" + Helper.version("junit-vintage")) // - .addArguments("-Djunit.platform.version=" + Helper.version("junit-platform")); + .addArguments("-Djunit.version=" + Helper.version()); } private static String windowsOrOtherExecutable(String cmdOrExe, String other) { diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/HelperTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/HelperTests.java index 001e02c5bddc..594ab00b595a 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/HelperTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/HelperTests.java @@ -54,9 +54,7 @@ void loadModuleDirectoryNames() { @Test void version() { - assertNotNull(Helper.version("junit-jupiter")); - assertNotNull(Helper.version("junit-vintage")); - assertNotNull(Helper.version("junit-platform")); + assertNotNull(Helper.version()); } @Test @@ -65,7 +63,7 @@ void nonExistingJdkVersionYieldsAnEmptyOptional() { } @ParameterizedTest - @ValueSource(ints = 8) + @ValueSource(ints = 17) void checkJavaHome(int version) { var home = Helper.getJavaHome(version); assumeTrue(home.isPresent(), "No 'jdk' element found in Maven toolchain for: " + version); diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleKotlinExtensionsTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleKotlinExtensionsTests.java index 750f628ceeb2..1891b8225213 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleKotlinExtensionsTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleKotlinExtensionsTests.java @@ -36,7 +36,7 @@ void gradle_wrapper(@TempDir Path workspace, @FilePrefix("gradle") OutputFiles o .workingDir(copyToWorkspace(Projects.GRADLE_KOTLIN_EXTENSIONS, workspace)) // .addArguments("-Dmaven.repo=" + MavenRepo.dir()) // .addArguments("build", "--no-daemon", "--stacktrace", "--no-build-cache", "--warning-mode=fail") // - .putEnvironment("JDK8", Helper.getJavaHome(8).orElseThrow(TestAbortedException::new).toString()) // + .putEnvironment("JDK17", Helper.getJavaHome(17).orElseThrow(TestAbortedException::new).toString()) // .redirectOutput(outputFiles) // .startAndWait(); diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleMissingEngineTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleMissingEngineTests.java index e70d548761c6..846a41c6adf9 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleMissingEngineTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleMissingEngineTests.java @@ -37,7 +37,7 @@ void gradle_wrapper(@TempDir Path workspace, @FilePrefix("gradle") OutputFiles o .workingDir(copyToWorkspace(Projects.GRADLE_MISSING_ENGINE, workspace)) // .addArguments("-Dmaven.repo=" + MavenRepo.dir()) // .addArguments("build", "--no-daemon", "--stacktrace", "--no-build-cache", "--warning-mode=fail") // - .putEnvironment("JDK8", Helper.getJavaHome(8).orElseThrow(TestAbortedException::new).toString()) // + .putEnvironment("JDK17", Helper.getJavaHome(17).orElseThrow(TestAbortedException::new).toString()) // .redirectOutput(outputFiles).startAndWait(); assertEquals(1, result.exitCode()); diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleModuleFileTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleModuleFileTests.java index c79c2b4e54f4..ca5b03192965 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleModuleFileTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleModuleFileTests.java @@ -46,7 +46,7 @@ void jupiterAggregatorGradleModuleMetadataVariants() throws Exception { " \"attributes\": {", // " \"org.gradle.category\": \"library\",", // " \"org.gradle.dependency.bundling\": \"external\",", // - " \"org.gradle.jvm.version\": 8,", // + " \"org.gradle.jvm.version\": 17,", // " \"org.gradle.libraryelements\": \"jar\",", // " \"org.gradle.usage\": \"java-api\"", // " },", // @@ -88,7 +88,7 @@ void jupiterAggregatorGradleModuleMetadataVariants() throws Exception { " \"attributes\": {", // " \"org.gradle.category\": \"library\",", // " \"org.gradle.dependency.bundling\": \"external\",", // - " \"org.gradle.jvm.version\": 8,", // + " \"org.gradle.jvm.version\": 17,", // " \"org.gradle.libraryelements\": \"jar\",", // " \"org.gradle.usage\": \"java-runtime\"", // " },", // diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleStarterTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleStarterTests.java index 02b7a6c26861..62ad2b94cd6d 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleStarterTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GradleStarterTests.java @@ -24,8 +24,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; import org.junit.platform.tests.process.OutputFiles; import org.junit.platform.tests.process.ProcessResult; import org.opentest4j.TestAbortedException; @@ -49,12 +47,10 @@ void prepareWorkspace() throws Exception { copyToWorkspace(Projects.JUPITER_STARTER, workspace); } - @ParameterizedTest(name = "Java {0}") - @ValueSource(ints = { 8, 17 }) - void buildJupiterStarterProject(int javaVersion, @FilePrefix("gradle") OutputFiles outputFiles, Snapshot snapshot) - throws Exception { + @Test + void buildJupiterStarterProject(@FilePrefix("gradle") OutputFiles outputFiles, Snapshot snapshot) throws Exception { - var result = runGradle(outputFiles, javaVersion, "build"); + var result = runGradle(outputFiles, "build"); assertThat(result.stdOut()) // .contains( // @@ -64,7 +60,7 @@ void buildJupiterStarterProject(int javaVersion, @FilePrefix("gradle") OutputFil "CalculatorParameterizedClassTests > [2] i=2 > parameterizedTest(int)", // "CalculatorParameterizedClassTests > [2] i=2 > Inner > [1] 1 > regularTest() PASSED", // "CalculatorParameterizedClassTests > [2] i=2 > Inner > [2] 2 > regularTest() PASSED", // - "Using Java version: " + (javaVersion == 8 ? "1.8" : javaVersion), // + "Using Java version: 17", // "CalculatorTests > 1 + 1 = 2 PASSED", // "CalculatorTests > add(int, int, int) > 0 + 1 = 1 PASSED", // "CalculatorTests > add(int, int, int) > 1 + 2 = 3 PASSED", // @@ -79,7 +75,7 @@ void buildJupiterStarterProject(int javaVersion, @FilePrefix("gradle") OutputFil @Test void runOnlyOneMethodInClassTemplate(@FilePrefix("gradle") OutputFiles outputFiles) throws Exception { - var result = runGradle(outputFiles, 8, "test", "--tests", "CalculatorParameterized*.regular*"); + var result = runGradle(outputFiles, "test", "--tests", "CalculatorParameterized*.regular*"); assertThat(result.stdOut()) // .contains( // @@ -90,7 +86,7 @@ void runOnlyOneMethodInClassTemplate(@FilePrefix("gradle") OutputFiles outputFil ) // .doesNotContain("parameterizedTest(int)", "CalculatorTests"); - result = runGradle(outputFiles, 8, "test", "--tests", "*ParameterizedClassTests.parameterized*"); + result = runGradle(outputFiles, "test", "--tests", "*ParameterizedClassTests.parameterized*"); assertThat(result.stdOut()) // .contains( // @@ -100,16 +96,14 @@ void runOnlyOneMethodInClassTemplate(@FilePrefix("gradle") OutputFiles outputFil .doesNotContain("regularTest()", "CalculatorTests"); } - private ProcessResult runGradle(OutputFiles outputFiles, int javaVersion, String... extraArgs) - throws InterruptedException { + private ProcessResult runGradle(OutputFiles outputFiles, String... extraArgs) throws InterruptedException { var result = ProcessStarters.gradlew() // .workingDir(workspace) // .addArguments("-Dmaven.repo=" + MavenRepo.dir()) // - .addArguments("-Djava.toolchain.version=" + javaVersion) // + .addArguments("-Djava.toolchain.version=17") // .addArguments("--stacktrace", "--no-build-cache", "--warning-mode=fail") // - .addArguments(extraArgs) // - .putEnvironment("JDK8", Helper.getJavaHome(8).orElseThrow(TestAbortedException::new).toString()) // - .putEnvironment("JDK17", Helper.getJavaHome(17).orElseThrow(TestAbortedException::new).toString()) // + .addArguments(extraArgs).putEnvironment("JDK17", + Helper.getJavaHome(17).orElseThrow(TestAbortedException::new).toString()) // .redirectOutput(outputFiles) // .startAndWait(); diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/JarDescribeModuleTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/JarDescribeModuleTests.java index 4a03dcd5270f..94de63eef317 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/JarDescribeModuleTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/JarDescribeModuleTests.java @@ -65,9 +65,7 @@ void packageNamesStartWithNameOfTheModule(String module) { } private static String replaceVersionPlaceholders(String line) { - line = line.replace("${jupiterVersion}", Helper.version("junit-jupiter")); - line = line.replace("${vintageVersion}", Helper.version("junit-vintage")); - line = line.replace("${platformVersion}", Helper.version("junit-platform")); + line = line.replace("${version}", Helper.version()); return line; } diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/JavaVersionsTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/JavaVersionsTests.java deleted file mode 100644 index e2316b2520d6..000000000000 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/JavaVersionsTests.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2015-2025 the original author or authors. - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License v2.0 which - * accompanies this distribution and is available at - * - * https://www.eclipse.org/legal/epl-v20.html - */ - -package platform.tooling.support.tests; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assumptions.assumeTrue; -import static platform.tooling.support.ProcessStarters.currentJdkHome; -import static platform.tooling.support.tests.Projects.copyToWorkspace; - -import java.nio.file.Path; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.JRE; -import org.junit.jupiter.api.io.TempDir; -import org.junit.platform.tests.process.OutputFiles; - -import platform.tooling.support.Helper; -import platform.tooling.support.MavenRepo; -import platform.tooling.support.ProcessStarters; - -/** - * @since 1.4 - */ -class JavaVersionsTests { - - @ManagedResource - LocalMavenRepo localMavenRepo; - - @TempDir - Path workspace; - - @Test - void java_8(@FilePrefix("maven") OutputFiles outputFiles) throws Exception { - var java8Home = Helper.getJavaHome(8); - assumeTrue(java8Home.isPresent(), "Java 8 installation directory not found!"); - var actualLines = execute(java8Home.get(), outputFiles, Map.of()); - - assertTrue(actualLines.contains("[WARNING] Tests run: 2, Failures: 0, Errors: 0, Skipped: 1")); - } - - @Test - void java_default(@FilePrefix("maven") OutputFiles outputFiles) throws Exception { - var actualLines = execute(currentJdkHome(), outputFiles, MavenEnvVars.forJre(JRE.currentJre())); - - assertTrue(actualLines.contains("[WARNING] Tests run: 2, Failures: 0, Errors: 0, Skipped: 1")); - } - - List execute(Path javaHome, OutputFiles outputFiles, Map environmentVars) throws Exception { - var result = ProcessStarters.maven(javaHome) // - .workingDir(copyToWorkspace(Projects.JAVA_VERSIONS, workspace)) // - .putEnvironment(environmentVars) // - .addArguments(localMavenRepo.toCliArgument(), "-Dmaven.repo=" + MavenRepo.dir()) // - .addArguments("--update-snapshots", "--batch-mode", "verify") // - .startAndWait(); - - assertEquals(0, result.exitCode()); - assertEquals("", result.stdErr()); - return result.stdOutLines(); - } - -} diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/ManifestTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/ManifestTests.java index d215ca8e99c0..ac1ee44b6139 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/ManifestTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/ManifestTests.java @@ -39,7 +39,7 @@ class ManifestTests { @ParameterizedTest @MethodSource("platform.tooling.support.Helper#loadModuleDirectoryNames") void manifestEntriesAdhereToConventions(String module) throws Exception { - var version = Helper.version(module); + var version = Helper.version(); var jarFile = MavenRepo.jar(module).toFile(); try (var jar = new Jar(jarFile)) { var manifest = jar.getManifest(); @@ -56,10 +56,8 @@ void manifestEntriesAdhereToConventions(String module) throws Exception { assertValue(attributes, "Bundle-SymbolicName", module); assertValue(attributes, "Bundle-Version", MavenVersion.parseMavenString(version).getOSGiVersion().toString()); - switch (module) { - case "junit-platform-commons" -> assertValue(attributes, "Multi-Release", "true"); - case "junit-platform-console" -> assertValue(attributes, "Main-Class", - "org.junit.platform.console.ConsoleLauncher"); + if (module.equals("junit-platform-console")) { + assertValue(attributes, "Main-Class", "org.junit.platform.console.ConsoleLauncher"); } var domain = Domain.domain(manifest); domain.getExportPackage().forEach((pkg, attrs) -> { diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/MavenStarterTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/MavenStarterTests.java index 03eb57945fa2..1a998b2c96a2 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/MavenStarterTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/MavenStarterTests.java @@ -58,7 +58,7 @@ void verifyJupiterStarterProject(@FilePrefix("maven") OutputFiles outputFiles, S var result = runMaven(outputFiles, "verify"); assertThat(result.stdOutLines()).contains("[INFO] Tests run: 13, Failures: 0, Errors: 0, Skipped: 0"); - assertThat(result.stdOut()).contains("Using Java version: 1.8"); + assertThat(result.stdOut()).contains("Using Java version: 17"); var testResultsDir = workspace.resolve("target/surefire-reports"); verifyContainsExpectedStartedOpenTestReport(testResultsDir, snapshot); @@ -81,7 +81,7 @@ void runOnlyOneMethodInClassTemplate(@FilePrefix("maven") OutputFiles outputFile } private ProcessResult runMaven(OutputFiles outputFiles, String... extraArgs) throws InterruptedException { - var result = ProcessStarters.maven(Helper.getJavaHome(8).orElseThrow(TestAbortedException::new)) // + var result = ProcessStarters.maven(Helper.getJavaHome(17).orElseThrow(TestAbortedException::new)) // .workingDir(workspace) // .addArguments(localMavenRepo.toCliArgument(), "-Dmaven.repo=" + MavenRepo.dir()) // .addArguments("-Dsnapshot.repo.url=" + mavenRepoProxy.getBaseUri()) // diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/MavenSurefireCompatibilityTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/MavenSurefireCompatibilityTests.java index 5228ed35b8e7..f627406bb5a2 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/MavenSurefireCompatibilityTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/MavenSurefireCompatibilityTests.java @@ -44,7 +44,7 @@ class MavenSurefireCompatibilityTests { void testMavenSurefireCompatibilityProject(String surefireVersion, String extraArg, @TempDir Path workspace, @FilePrefix("maven") OutputFiles outputFiles) throws Exception { var extraArgs = extraArg == null ? new String[0] : new String[] { extraArg }; - var result = ProcessStarters.maven(Helper.getJavaHome(8).orElseThrow(TestAbortedException::new)) // + var result = ProcessStarters.maven(Helper.getJavaHome(17).orElseThrow(TestAbortedException::new)) // .workingDir(copyToWorkspace(Projects.MAVEN_SUREFIRE_COMPATIBILITY, workspace)) // .addArguments(localMavenRepo.toCliArgument(), "-Dmaven.repo=" + MavenRepo.dir()) // .addArguments("-Dsurefire.version=" + surefireVersion) // diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/ReflectionCompatibilityTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/ReflectionCompatibilityTests.java index 1eb8272082bb..86e2b2d96390 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/ReflectionCompatibilityTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/ReflectionCompatibilityTests.java @@ -37,12 +37,12 @@ void gradle_wrapper(@TempDir Path workspace, @FilePrefix("gradle") OutputFiles o .workingDir(copyToWorkspace(Projects.REFLECTION_TESTS, workspace)) // .addArguments("-Dmaven.repo=" + MavenRepo.dir()) // .addArguments("build", "--no-daemon", "--stacktrace", "--no-build-cache", "--warning-mode=fail") // - .putEnvironment("JDK8", Helper.getJavaHome(8).orElseThrow(TestAbortedException::new).toString()) // + .putEnvironment("JDK17", Helper.getJavaHome(17).orElseThrow(TestAbortedException::new).toString()) // .redirectOutput(outputFiles) // .startAndWait(); assertEquals(0, result.exitCode()); assertTrue(result.stdOut().lines().anyMatch(line -> line.contains("BUILD SUCCESSFUL"))); - assertThat(result.stdOut()).contains("Using Java version: 1.8"); + assertThat(result.stdOut()).contains("Using Java version: 17"); } } diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/StandaloneTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/StandaloneTests.java index 031fd0a039f6..32a5d95098ea 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/StandaloneTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/StandaloneTests.java @@ -88,14 +88,11 @@ void listAllObservableEngines(@FilePrefix("java") OutputFiles outputFiles) throw assertEquals(0, result.exitCode()); - var jupiterVersion = Helper.version("junit-jupiter-engine"); - var suiteVersion = Helper.version("junit-platform-suite-engine"); - var vintageVersion = Helper.version("junit-vintage-engine"); assertLinesMatch(""" - junit-jupiter (org.junit.jupiter:junit-jupiter-engine:%s) - junit-platform-suite (org.junit.platform:junit-platform-suite-engine:%s) - junit-vintage (org.junit.vintage:junit-vintage-engine:%s) - """.formatted(jupiterVersion, suiteVersion, vintageVersion).lines(), // + junit-jupiter (org.junit.jupiter:junit-jupiter-engine:%1$s) + junit-platform-suite (org.junit.platform:junit-platform-suite-engine:%1$s) + junit-vintage (org.junit.vintage:junit-vintage-engine:%1$s) + """.formatted(Helper.version()).lines(), // result.stdOut().lines()); } @@ -111,7 +108,7 @@ void printVersionViaJar(@FilePrefix("java") OutputFiles outputFiles) throws Exce assertEquals(0, result.exitCode()); - var version = Helper.version("junit-platform-console"); + var version = Helper.version(); assertLinesMatch(""" JUnit Platform Console Launcher %s JVM: .* @@ -143,7 +140,7 @@ void printVersionViaModule(@FilePrefix("java") OutputFiles outputFiles) throws E assertEquals(0, result.exitCode()); - var version = Helper.version("junit-platform-console"); + var version = Helper.version(); assertLinesMatch(""" JUnit Platform Console Launcher %s JVM: .* @@ -160,7 +157,7 @@ void compile(@FilePrefix("javac") OutputFiles javacOutputFiles, @FilePrefix("jar var result = ProcessStarters.javaCommand("javac") // .workingDir(workspace) // .addArguments("-Xlint:-options") // - .addArguments("--release", "8") // + .addArguments("--release", "17") // .addArguments("-proc:none") // .addArguments("-d", workspace.resolve("bin").toString()) // .addArguments("--class-path", MavenRepo.jar("junit-platform-console-standalone").toString()) // @@ -442,20 +439,18 @@ void execute(@FilePrefix("console-launcher") OutputFiles outputFiles) throws Exc } assertLinesMatch(expectedErrLines, actualErrLines); - var jupiterVersion = Helper.version("junit-jupiter-engine"); - var vintageVersion = Helper.version("junit-vintage-engine"); assertTrue(result.stdErr().contains("junit-jupiter" - + " (group ID: org.junit.jupiter, artifact ID: junit-jupiter-engine, version: " + jupiterVersion)); + + " (group ID: org.junit.jupiter, artifact ID: junit-jupiter-engine, version: " + Helper.version())); assertTrue(result.stdErr().contains("junit-vintage" - + " (group ID: org.junit.vintage, artifact ID: junit-vintage-engine, version: " + vintageVersion)); + + " (group ID: org.junit.vintage, artifact ID: junit-vintage-engine, version: " + Helper.version())); } @Test @Order(4) @Execution(SAME_THREAD) - void executeOnJava8(@FilePrefix("console-launcher") OutputFiles outputFiles) throws Exception { - var java8Home = Helper.getJavaHome(8).orElseThrow(TestAbortedException::new); - var result = ProcessStarters.java(java8Home) // + void executeOnJava17(@FilePrefix("console-launcher") OutputFiles outputFiles) throws Exception { + var javaHome = Helper.getJavaHome(17).orElseThrow(TestAbortedException::new); + var result = ProcessStarters.java(javaHome) // .workingDir(workspace) // .addArguments("-showversion") // .addArguments("-enableassertions") // @@ -473,25 +468,23 @@ void executeOnJava8(@FilePrefix("console-launcher") OutputFiles outputFiles) thr assertEquals(1, result.exitCode()); var expectedOutLines = Files.readAllLines(workspace.resolve("expected-out.txt")); - var expectedErrLines = getExpectedErrLinesOnJava8(workspace); + var expectedErrLines = getExpectedErrLinesOnJava17(workspace); assertLinesMatch(expectedOutLines, result.stdOutLines()); assertLinesMatch(expectedErrLines, result.stdErrLines()); - var jupiterVersion = Helper.version("junit-jupiter-engine"); - var vintageVersion = Helper.version("junit-vintage-engine"); assertTrue(result.stdErr().contains("junit-jupiter" - + " (group ID: org.junit.jupiter, artifact ID: junit-jupiter-engine, version: " + jupiterVersion)); + + " (group ID: org.junit.jupiter, artifact ID: junit-jupiter-engine, version: " + Helper.version())); assertTrue(result.stdErr().contains("junit-vintage" - + " (group ID: org.junit.vintage, artifact ID: junit-vintage-engine, version: " + vintageVersion)); + + " (group ID: org.junit.vintage, artifact ID: junit-vintage-engine, version: " + Helper.version())); } @Test @Order(5) @Execution(SAME_THREAD) // https://github.com/junit-team/junit5/issues/2600 - void executeOnJava8SelectPackage(@FilePrefix("console-launcher") OutputFiles outputFiles) throws Exception { - var java8Home = Helper.getJavaHome(8).orElseThrow(TestAbortedException::new); - var result = ProcessStarters.java(java8Home) // + void executeOnJava17SelectPackage(@FilePrefix("console-launcher") OutputFiles outputFiles) throws Exception { + var javaHome = Helper.getJavaHome(17).orElseThrow(TestAbortedException::new); + var result = ProcessStarters.java(javaHome) // .workingDir(workspace).addArguments("-showversion") // .addArguments("-enableassertions") // .addArguments("-Djava.util.logging.config.file=logging.properties") // @@ -508,19 +501,17 @@ void executeOnJava8SelectPackage(@FilePrefix("console-launcher") OutputFiles out assertEquals(1, result.exitCode()); var expectedOutLines = Files.readAllLines(workspace.resolve("expected-out.txt")); - var expectedErrLines = getExpectedErrLinesOnJava8(workspace); + var expectedErrLines = getExpectedErrLinesOnJava17(workspace); assertLinesMatch(expectedOutLines, result.stdOutLines()); assertLinesMatch(expectedErrLines, result.stdErrLines()); - var jupiterVersion = Helper.version("junit-jupiter-engine"); - var vintageVersion = Helper.version("junit-vintage-engine"); assertTrue(result.stdErr().contains("junit-jupiter" - + " (group ID: org.junit.jupiter, artifact ID: junit-jupiter-engine, version: " + jupiterVersion)); + + " (group ID: org.junit.jupiter, artifact ID: junit-jupiter-engine, version: " + Helper.version())); assertTrue(result.stdErr().contains("junit-vintage" - + " (group ID: org.junit.vintage, artifact ID: junit-vintage-engine, version: " + vintageVersion)); + + " (group ID: org.junit.vintage, artifact ID: junit-vintage-engine, version: " + Helper.version())); } - private static List getExpectedErrLinesOnJava8(Path workspace) throws IOException { + private static List getExpectedErrLinesOnJava17(Path workspace) throws IOException { var expectedErrLines = new ArrayList(); expectedErrLines.add(">> JAVA VERSION >>"); expectedErrLines.addAll(Files.readAllLines(workspace.resolve("expected-err.txt"))); diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/UnalignedClasspathTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/UnalignedClasspathTests.java index ab84f6f83392..372f1d2f5fee 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/UnalignedClasspathTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/UnalignedClasspathTests.java @@ -67,7 +67,7 @@ void verifyErrorMessageForUnalignedClasspath(JRE jre, Path javaHome, @TempDir Pa static Stream javaVersions() { return Stream.concat( // - Helper.getJavaHome(8).map(path -> Arguments.of(JRE.JAVA_8, path)).stream(), // + Helper.getJavaHome(17).map(path -> Arguments.of(JRE.JAVA_17, path)).stream(), // Stream.of(Arguments.of(JRE.currentJre(), currentJdkHome())) // ); } diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/VintageGradleIntegrationTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/VintageGradleIntegrationTests.java index 92d88ef4ab91..35c64f2b2be5 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/VintageGradleIntegrationTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/VintageGradleIntegrationTests.java @@ -59,7 +59,7 @@ void supportedVersions(String version, @FilePrefix("gradle") OutputFiles outputF private ProcessResult run(OutputFiles outputFiles, String version) throws Exception { return ProcessStarters.gradlew() // .workingDir(copyToWorkspace(Projects.VINTAGE, workspace)) // - .putEnvironment("JDK8", Helper.getJavaHome(8).orElseThrow(TestAbortedException::new).toString()) // + .putEnvironment("JDK17", Helper.getJavaHome(17).orElseThrow(TestAbortedException::new).toString()) // .addArguments("build", "--no-daemon", "--stacktrace", "--no-build-cache", "--warning-mode=fail") // .addArguments("-Dmaven.repo=" + MavenRepo.dir()) // .addArguments("-Djunit4Version=" + version) // diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/VintageMavenIntegrationTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/VintageMavenIntegrationTests.java index 4b2d909f28c6..ca5d9bc800a4 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/VintageMavenIntegrationTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/VintageMavenIntegrationTests.java @@ -62,7 +62,7 @@ void supportedVersions(String version, @FilePrefix("maven") OutputFiles outputFi } private ProcessResult run(OutputFiles outputFiles, String version) throws Exception { - return ProcessStarters.maven(Helper.getJavaHome(8).orElseThrow(TestAbortedException::new)) // + return ProcessStarters.maven(Helper.getJavaHome(17).orElseThrow(TestAbortedException::new)) // .workingDir(copyToWorkspace(Projects.VINTAGE, workspace)) // .addArguments("clean", "test", "--update-snapshots", "--batch-mode") // .addArguments(localMavenRepo.toCliArgument(), "-Dmaven.repo=" + MavenRepo.dir()) //