From 1e1dee093f035ef8c457aea216d82425c30d3273 Mon Sep 17 00:00:00 2001 From: Lukas Petrovicky Date: Wed, 16 Sep 2026 09:57:54 +0200 Subject: [PATCH 1/5] ci: standardize JDK usage Ground rules: - Latest LTS is tested fully - Every other supported LTS (currently only 21) is tested on one platform only - Latest release (currently 27) is tested as much as possible Other principles: - Disable fail-fast where we're not limited by cost; we want to see results from all JDKs, even if some fail. - Fix concurrency groups so that jobs don't self-cancel. --- .github/workflows/downstream_build.yml | 10 +++++++--- .github/workflows/pull_request.yml | 8 +++++--- .github/workflows/pull_request_quickstarts.yml | 10 +++++++--- .github/workflows/pull_request_secure.yml | 14 ++++++++++---- 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/.github/workflows/downstream_build.yml b/.github/workflows/downstream_build.yml index 0646b47e50..59e6d3cdb8 100644 --- a/.github/workflows/downstream_build.yml +++ b/.github/workflows/downstream_build.yml @@ -32,8 +32,12 @@ jobs: permissions: contents: read concurrency: - group: downstream-${{ inputs.repository }}-${{ github.event_name }}-${{ inputs.head_ref }} + group: downstream-${{ inputs.repository }}-${{ github.event_name }}-${{ inputs.head_ref }}-${{ matrix.java-version }} cancel-in-progress: true + strategy: + fail-fast: false # A broken JDK must not cancel the others. + matrix: + java-version: [ 25, 27 ] # Current LTS and latest JDK; replace 27 on each JDK release. timeout-minutes: 120 steps: # Clone timefold-solver @@ -89,10 +93,10 @@ jobs: path: ./${{ inputs.repository }} fetch-depth: 0 - - name: Setup Temurin 25 and Maven + - name: Setup Temurin and Maven uses: actions/setup-java@v6.0.1 with: - java-version: '25' + java-version: ${{ matrix.java-version }} distribution: 'temurin' cache: 'maven' diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 0435b5cb90..c7da865757 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -26,10 +26,11 @@ jobs: permissions: contents: read strategy: + fail-fast: false # A broken JDK must not cancel the others. matrix: os: [ ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest ] - java-version: [ 25 ] # Latest LTS if not Ubuntu - include: + java-version: [ 25, 27 ] # Current LTS and latest JDK; replace 27 on each JDK release. + include: # Compile target and minimum runtime; Linux only. - os: ubuntu-latest java-version: 21 - os: ubuntu-24.04-arm @@ -85,10 +86,11 @@ jobs: permissions: contents: read strategy: + fail-fast: false # A broken JDK must not cancel the others. matrix: os: [ ubuntu-latest, ubuntu-24.04-arm ] # Windows doesn't work, Mac is not a deploy OS. module: ["spring-integration", "quarkus-integration"] - java-version: [ 25 ] # We only test Quarkus with the latest native image. + java-version: [ 25, 27 ] # Current LTS and latest JDK; replace 27 on each JDK release. timeout-minutes: 120 steps: - uses: actions/checkout@v7 diff --git a/.github/workflows/pull_request_quickstarts.yml b/.github/workflows/pull_request_quickstarts.yml index b5c93c4c80..31464a9310 100644 --- a/.github/workflows/pull_request_quickstarts.yml +++ b/.github/workflows/pull_request_quickstarts.yml @@ -27,8 +27,12 @@ jobs: permissions: contents: read concurrency: - group: downstream-quickstarts-${{ github.event_name }}-${{ github.head_ref }} + group: downstream-quickstarts-${{ github.event_name }}-${{ github.head_ref }}-${{ matrix.java-version }} cancel-in-progress: true + strategy: + fail-fast: false # A broken JDK must not cancel the others. + matrix: + java-version: [ 25, 27 ] # Current LTS and latest JDK; replace 27 on each JDK release. timeout-minutes: 120 steps: # Clone timefold-solver @@ -60,10 +64,10 @@ jobs: fetch-depth: 0 # Otherwise merge will fail on account of not having history. # Build and test - - name: Setup Temurin 25 and Maven + - name: Setup Temurin and Maven uses: actions/setup-java@v6.0.1 with: - java-version: '25' + java-version: ${{ matrix.java-version }} distribution: 'temurin' cache: 'maven' - name: Quickly build timefold-solver diff --git a/.github/workflows/pull_request_secure.yml b/.github/workflows/pull_request_secure.yml index 82752d7b74..fe5e16cd41 100644 --- a/.github/workflows/pull_request_secure.yml +++ b/.github/workflows/pull_request_secure.yml @@ -70,8 +70,13 @@ jobs: permissions: contents: read concurrency: - group: downstream-enterprise-${{ github.event_name }}-${{ github.head_ref }} + group: downstream-enterprise-${{ github.event_name }}-${{ github.head_ref }}-${{ matrix.java-version }} cancel-in-progress: true + strategy: + fail-fast: false # A broken JDK must not cancel the others. + matrix: + # Compile target, current LTS and latest JDK; replace 27 on each JDK release. + java-version: [ 21, 25, 27 ] timeout-minutes: 120 steps: # Clone timefold-solver @@ -107,10 +112,10 @@ jobs: fetch-depth: 0 # Otherwise merge will fail on account of not having history. # Build and test - - name: Setup Temurin 21 and Maven + - name: Setup Temurin and Maven uses: actions/setup-java@v6.0.1 with: - java-version: '21' + java-version: ${{ matrix.java-version }} distribution: 'temurin' cache: 'maven' - name: Quickly build timefold-solver @@ -140,10 +145,11 @@ jobs: permissions: contents: read strategy: + fail-fast: false # A broken JDK must not cancel the others. matrix: os: [ ubuntu-latest, ubuntu-24.04-arm ] # Windows doesn't work, Mac is not a deploy OS. module: [ "spring-boot", "quarkus" ] - java-version: [ 25 ] # We only test Quarkus with the latest native image. + java-version: [ 25, 27 ] # Current LTS and latest JDK; replace 27 on each JDK release. timeout-minutes: 120 steps: # Clone timefold-solver From f12c0a3ecb398f42f3ef33b0ad1a5311b20a023a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Petrovick=C3=BD?= Date: Fri, 25 Sep 2026 19:09:38 +0200 Subject: [PATCH 2/5] Change Java version to LTS in workflow Updated Java version in pull request workflow to LTS only. --- .github/workflows/pull_request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index c7da865757..b356a9efcb 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -90,7 +90,7 @@ jobs: matrix: os: [ ubuntu-latest, ubuntu-24.04-arm ] # Windows doesn't work, Mac is not a deploy OS. module: ["spring-integration", "quarkus-integration"] - java-version: [ 25, 27 ] # Current LTS and latest JDK; replace 27 on each JDK release. + java-version: [ 25 ] # GraalVM only available for LTS. timeout-minutes: 120 steps: - uses: actions/checkout@v7 From 21d44ce070c089fedebd595b36a38352e520105e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Petrovick=C3=BD?= Date: Fri, 25 Sep 2026 19:13:40 +0200 Subject: [PATCH 3/5] Modify Java version in CI workflow Update Java version to only include LTS for GraalVM compatibility. Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .github/workflows/pull_request_secure.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull_request_secure.yml b/.github/workflows/pull_request_secure.yml index fe5e16cd41..049bb96f1c 100644 --- a/.github/workflows/pull_request_secure.yml +++ b/.github/workflows/pull_request_secure.yml @@ -149,7 +149,7 @@ jobs: matrix: os: [ ubuntu-latest, ubuntu-24.04-arm ] # Windows doesn't work, Mac is not a deploy OS. module: [ "spring-boot", "quarkus" ] - java-version: [ 25, 27 ] # Current LTS and latest JDK; replace 27 on each JDK release. + java-version: [ 25 ] # GraalVM only available for LTS. timeout-minutes: 120 steps: # Clone timefold-solver From f34855015836357aab419eabd11b67002bdf08c1 Mon Sep 17 00:00:00 2001 From: Lukas Petrovicky Date: Fri, 25 Sep 2026 20:00:23 +0200 Subject: [PATCH 4/5] Scale-independent comparison --- .../stream/collector/bi/InnerBiConstraintCollectorsTest.java | 2 +- .../collector/quad/InnerQuadConstraintCollectorsTest.java | 2 +- .../stream/collector/tri/InnerTriConstraintCollectorsTest.java | 2 +- .../stream/collector/uni/InnerUniConstraintCollectorsTest.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/bi/InnerBiConstraintCollectorsTest.java b/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/bi/InnerBiConstraintCollectorsTest.java index 8491c76e38..6d1385a139 100644 --- a/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/bi/InnerBiConstraintCollectorsTest.java +++ b/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/bi/InnerBiConstraintCollectorsTest.java @@ -1590,7 +1590,7 @@ private static void assertUnfairness( LoadBalance actualResult = collector.finisher().apply((Container_) container); assertThat(actualResult.unfairness()) .as("Collector (" + collector + ") did not produce expected result.") - .isEqualTo(expectedValue); + .isEqualByComparingTo(expectedValue); // Scale-safe comparison. } } diff --git a/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/quad/InnerQuadConstraintCollectorsTest.java b/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/quad/InnerQuadConstraintCollectorsTest.java index fb58931e9c..34ed37d76f 100644 --- a/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/quad/InnerQuadConstraintCollectorsTest.java +++ b/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/quad/InnerQuadConstraintCollectorsTest.java @@ -1636,7 +1636,7 @@ private static void assertUnfairness( LoadBalance actualResult = collector.finisher().apply((Container_) container); assertThat(actualResult.unfairness()) .as("Collector (" + collector + ") did not produce expected result.") - .isEqualTo(expectedValue); + .isEqualByComparingTo(expectedValue); // Scale-safe comparison. } } diff --git a/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/tri/InnerTriConstraintCollectorsTest.java b/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/tri/InnerTriConstraintCollectorsTest.java index 907f6e187d..c17f3d6850 100644 --- a/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/tri/InnerTriConstraintCollectorsTest.java +++ b/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/tri/InnerTriConstraintCollectorsTest.java @@ -1593,7 +1593,7 @@ private static void assertUnfairness( LoadBalance actualResult = collector.finisher().apply((Container_) container); assertThat(actualResult.unfairness()) .as("Collector (" + collector + ") did not produce expected result.") - .isEqualTo(expectedValue); + .isEqualByComparingTo(expectedValue); // Scale-safe comparison. } } diff --git a/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/uni/InnerUniConstraintCollectorsTest.java b/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/uni/InnerUniConstraintCollectorsTest.java index 1325ceb481..e36fb05561 100644 --- a/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/uni/InnerUniConstraintCollectorsTest.java +++ b/core/src/test/java/ai/timefold/solver/core/impl/score/stream/collector/uni/InnerUniConstraintCollectorsTest.java @@ -1049,7 +1049,7 @@ private static void assertUnfairness( LoadBalance actualResult = collector.finisher().apply((Container_) container); assertThat(actualResult.unfairness()) .as("Collector (" + collector + ") did not produce expected result.") - .isEqualTo(expectedValue); + .isEqualByComparingTo(expectedValue); // Scale-safe comparison. } @Test From 7823d0afce868e4bd6cc6e8a417dee9765a2bdf7 Mon Sep 17 00:00:00 2001 From: Lukas Petrovicky Date: Wed, 30 Sep 2026 12:57:55 +0200 Subject: [PATCH 5/5] disable tests on 26+27 --- .../framework-version-warning.adoc | 5 +---- .../migration-jdk-warning.adoc | 1 + .../upgrade-from-v1.adoc | 2 ++ .../upgrade-to-latest.adoc | 2 ++ tools/migration/pom.xml | 1 + .../solver/migration/AbstractRecipeTest.java | 19 +++++++++++++++++++ .../migration/ChangeVersionRecipeTest.java | 6 +----- .../NeighborhoodsMigrationRecipeTest.java | 7 ++----- .../migration/v1/AsConstraintRecipeTest.java | 8 +++----- .../migration/v1/ConstraintRefRecipeTest.java | 8 +++----- .../migration/v1/NullableRecipeTest.java | 8 +++----- .../v1/RemoveConstraintPackageRecipeTest.java | 8 +++----- .../migration/v1/ScoreGettersRecipeTest.java | 8 +++----- .../v1/ScoreManagerMethodsRecipeTest.java | 8 +++----- .../SingleConstraintAssertionRecipeTest.java | 8 +++----- ...nManagerRecommendAssignmentRecipeTest.java | 8 +++----- .../v1/SolverManagerBuilderRecipeTest.java | 8 +++----- .../v1/SortingMigrationRecipeTest.java | 8 +++----- ...nstraintArgRemovalMigrationRecipeTest.java | 8 +++----- ...ConstraintMetadataMigrationRecipeTest.java | 8 +++----- ...alMethodChangeNameMigrationRecipeTest.java | 8 +++----- ...odDeleteInvocationMigrationRecipeTest.java | 8 +++----- ...neralPackageRenameMigrationRecipeTest.java | 7 ++----- .../GeneralTypeChangeMigrationRecipeTest.java | 7 ++----- ...nAnnotationCleanupMigrationRecipeTest.java | 8 +++----- .../ProblemIdDeletionMigrationRecipeTest.java | 8 +++----- ...deSolutionDeletionMigrationRecipeTest.java | 8 +++----- .../v2/TestingAPIsMigrationRecipeTest.java | 7 ++----- 28 files changed, 86 insertions(+), 114 deletions(-) create mode 100644 docs/src/modules/ROOT/pages/upgrading-timefold-solver/migration-jdk-warning.adoc create mode 100644 tools/migration/src/test/java/ai/timefold/solver/migration/AbstractRecipeTest.java diff --git a/docs/src/modules/ROOT/pages/upgrading-timefold-solver/framework-version-warning.adoc b/docs/src/modules/ROOT/pages/upgrading-timefold-solver/framework-version-warning.adoc index 8d2358255f..26ced52261 100644 --- a/docs/src/modules/ROOT/pages/upgrading-timefold-solver/framework-version-warning.adoc +++ b/docs/src/modules/ROOT/pages/upgrading-timefold-solver/framework-version-warning.adoc @@ -1,5 +1,2 @@ -[NOTE] -==== -Our automatic migrations will not change the version of your frameworks. +NOTE: Our automatic migrations will not change the version of your frameworks. If you run into compatibility issues, please consult the integration guides for xref:running-timefold-solver/library/spring-boot.adoc#integrationWithSpringBoot[Spring] or xref:running-timefold-solver/library/quarkus.adoc#integrationWithQuarkus[Quarkus]. -==== \ No newline at end of file diff --git a/docs/src/modules/ROOT/pages/upgrading-timefold-solver/migration-jdk-warning.adoc b/docs/src/modules/ROOT/pages/upgrading-timefold-solver/migration-jdk-warning.adoc new file mode 100644 index 0000000000..bd8b653d60 --- /dev/null +++ b/docs/src/modules/ROOT/pages/upgrading-timefold-solver/migration-jdk-warning.adoc @@ -0,0 +1 @@ +NOTE: The migration tool only works on JDK 25 or earlier, because OpenRewrite only supports LTS versions of Java. diff --git a/docs/src/modules/ROOT/pages/upgrading-timefold-solver/upgrade-from-v1.adoc b/docs/src/modules/ROOT/pages/upgrading-timefold-solver/upgrade-from-v1.adoc index e9cea86b3c..85b062695a 100644 --- a/docs/src/modules/ROOT/pages/upgrading-timefold-solver/upgrade-from-v1.adoc +++ b/docs/src/modules/ROOT/pages/upgrading-timefold-solver/upgrade-from-v1.adoc @@ -52,6 +52,8 @@ curl https://raw.githubusercontent.com/TimefoldAI/timefold-solver/refs/tags/v{ti include::framework-version-warning.adoc[leveloffset=+1] +include::migration-jdk-warning.adoc[] + Having done that, you can check the local changes and commit them. For the time being, Kotlin users need to follow the upgrade recipe and apply the steps manually. diff --git a/docs/src/modules/ROOT/pages/upgrading-timefold-solver/upgrade-to-latest.adoc b/docs/src/modules/ROOT/pages/upgrading-timefold-solver/upgrade-to-latest.adoc index ac38b83daf..df8600ea69 100644 --- a/docs/src/modules/ROOT/pages/upgrading-timefold-solver/upgrade-to-latest.adoc +++ b/docs/src/modules/ROOT/pages/upgrading-timefold-solver/upgrade-to-latest.adoc @@ -55,6 +55,8 @@ curl https://raw.githubusercontent.com/TimefoldAI/timefold-solver/refs/tags/v{ti include::framework-version-warning.adoc[leveloffset=+1] +include::migration-jdk-warning.adoc[] + Having done that, you can check the local changes and commit them. For the time being, Kotlin users need to follow the upgrade recipe and apply the steps manually. diff --git a/tools/migration/pom.xml b/tools/migration/pom.xml index cd360d0464..c56c1800b6 100644 --- a/tools/migration/pom.xml +++ b/tools/migration/pom.xml @@ -16,6 +16,7 @@ Upgrade your code with a single command. This migration replaces all your calls to deleted/deprecated methods of Timefold with their proper alternatives. + Only runs on JDK 25 or older, on account of OpenRewrite only supporting LTS Java versions. https://solver.timefold.ai diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/AbstractRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/AbstractRecipeTest.java new file mode 100644 index 0000000000..aa035fbedd --- /dev/null +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/AbstractRecipeTest.java @@ -0,0 +1,19 @@ +package ai.timefold.solver.migration; + +import static org.junit.jupiter.api.Assumptions.assumeTrue; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.parallel.Execution; +import org.junit.jupiter.api.parallel.ExecutionMode; +import org.openrewrite.test.RewriteTest; + +@Execution(ExecutionMode.CONCURRENT) +public abstract class AbstractRecipeTest implements RewriteTest { + + @BeforeAll + static void skipOnUnsupportedJdk() { + // OpenRewrite supports only LTS JDKs. + assumeTrue(Runtime.version().feature() <= 25, "OpenRewrite does not support JDK > 25."); + } + +} diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/ChangeVersionRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/ChangeVersionRecipeTest.java index d679cddfd1..afd1adb4b9 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/ChangeVersionRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/ChangeVersionRecipeTest.java @@ -3,13 +3,9 @@ import static org.openrewrite.maven.Assertions.pomXml; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; -@Execution(ExecutionMode.CONCURRENT) -class ChangeVersionRecipeTest implements RewriteTest { +class ChangeVersionRecipeTest extends AbstractRecipeTest { private final ChangeVersionRecipe recipe = new ChangeVersionRecipe(); diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/preview/NeighborhoodsMigrationRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/preview/NeighborhoodsMigrationRecipeTest.java index 264e551ccc..5ef9e57a8d 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/preview/NeighborhoodsMigrationRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/preview/NeighborhoodsMigrationRecipeTest.java @@ -4,18 +4,15 @@ import java.util.List; +import ai.timefold.solver.migration.AbstractRecipeTest; import ai.timefold.solver.migration.NoWildCardImportStyle; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class NeighborhoodsMigrationRecipeTest implements RewriteTest { +class NeighborhoodsMigrationRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/AsConstraintRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/AsConstraintRecipeTest.java index cff1be984a..1394524e6a 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/AsConstraintRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/AsConstraintRecipeTest.java @@ -2,16 +2,14 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class AsConstraintRecipeTest implements RewriteTest { +class AsConstraintRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/ConstraintRefRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/ConstraintRefRecipeTest.java index c26582a72d..53e80a5658 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/ConstraintRefRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/ConstraintRefRecipeTest.java @@ -2,16 +2,14 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class ConstraintRefRecipeTest implements RewriteTest { +class ConstraintRefRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/NullableRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/NullableRecipeTest.java index 9500dedba7..9064f0c55a 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/NullableRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/NullableRecipeTest.java @@ -2,16 +2,14 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class NullableRecipeTest implements RewriteTest { +class NullableRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/RemoveConstraintPackageRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/RemoveConstraintPackageRecipeTest.java index d743b6b1bd..301c2da09a 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/RemoveConstraintPackageRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/RemoveConstraintPackageRecipeTest.java @@ -2,16 +2,14 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class RemoveConstraintPackageRecipeTest implements RewriteTest { +class RemoveConstraintPackageRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/ScoreGettersRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/ScoreGettersRecipeTest.java index a5c9a0f0b0..e0859aa78f 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/ScoreGettersRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/ScoreGettersRecipeTest.java @@ -2,16 +2,14 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class ScoreGettersRecipeTest implements RewriteTest { +class ScoreGettersRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/ScoreManagerMethodsRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/ScoreManagerMethodsRecipeTest.java index e58ed3b1a1..a07a3e2fa4 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/ScoreManagerMethodsRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/ScoreManagerMethodsRecipeTest.java @@ -2,16 +2,14 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class ScoreManagerMethodsRecipeTest implements RewriteTest { +class ScoreManagerMethodsRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SingleConstraintAssertionRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SingleConstraintAssertionRecipeTest.java index 27f1756ae5..c6f90ddbea 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SingleConstraintAssertionRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SingleConstraintAssertionRecipeTest.java @@ -2,16 +2,14 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class SingleConstraintAssertionRecipeTest implements RewriteTest { +class SingleConstraintAssertionRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SolutionManagerRecommendAssignmentRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SolutionManagerRecommendAssignmentRecipeTest.java index 747b34917f..b67a3df989 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SolutionManagerRecommendAssignmentRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SolutionManagerRecommendAssignmentRecipeTest.java @@ -2,16 +2,14 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class SolutionManagerRecommendAssignmentRecipeTest implements RewriteTest { +class SolutionManagerRecommendAssignmentRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SolverManagerBuilderRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SolverManagerBuilderRecipeTest.java index 686180f4e9..8b434e8e46 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SolverManagerBuilderRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SolverManagerBuilderRecipeTest.java @@ -2,16 +2,14 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class SolverManagerBuilderRecipeTest implements RewriteTest { +class SolverManagerBuilderRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SortingMigrationRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SortingMigrationRecipeTest.java index 88998cec81..2110b0f1f6 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SortingMigrationRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v1/SortingMigrationRecipeTest.java @@ -2,16 +2,14 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.java.search.FindMissingTypes; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; -@Execution(ExecutionMode.CONCURRENT) -class SortingMigrationRecipeTest implements RewriteTest { +class SortingMigrationRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/ConstraintArgRemovalMigrationRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/ConstraintArgRemovalMigrationRecipeTest.java index 63bb71b45a..75f525dc50 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/ConstraintArgRemovalMigrationRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/ConstraintArgRemovalMigrationRecipeTest.java @@ -2,15 +2,13 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; -@Execution(ExecutionMode.CONCURRENT) -class ConstraintArgRemovalMigrationRecipeTest implements RewriteTest { +class ConstraintArgRemovalMigrationRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/ConstraintMetadataMigrationRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/ConstraintMetadataMigrationRecipeTest.java index f454147eb9..7d67e63f2b 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/ConstraintMetadataMigrationRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/ConstraintMetadataMigrationRecipeTest.java @@ -2,15 +2,13 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; -@Execution(ExecutionMode.CONCURRENT) -class ConstraintMetadataMigrationRecipeTest implements RewriteTest { +class ConstraintMetadataMigrationRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralMethodChangeNameMigrationRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralMethodChangeNameMigrationRecipeTest.java index 6511f4c8d9..da639a0297 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralMethodChangeNameMigrationRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralMethodChangeNameMigrationRecipeTest.java @@ -2,16 +2,14 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class GeneralMethodChangeNameMigrationRecipeTest implements RewriteTest { +class GeneralMethodChangeNameMigrationRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralMethodDeleteInvocationMigrationRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralMethodDeleteInvocationMigrationRecipeTest.java index 93f9f58c2d..e7e2621eda 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralMethodDeleteInvocationMigrationRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralMethodDeleteInvocationMigrationRecipeTest.java @@ -2,15 +2,13 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; -@Execution(ExecutionMode.CONCURRENT) -class GeneralMethodDeleteInvocationMigrationRecipeTest implements RewriteTest { +class GeneralMethodDeleteInvocationMigrationRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralPackageRenameMigrationRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralPackageRenameMigrationRecipeTest.java index f377d1388b..d88441674e 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralPackageRenameMigrationRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralPackageRenameMigrationRecipeTest.java @@ -4,18 +4,15 @@ import java.util.List; +import ai.timefold.solver.migration.AbstractRecipeTest; import ai.timefold.solver.migration.NoWildCardImportStyle; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class GeneralPackageRenameMigrationRecipeTest implements RewriteTest { +class GeneralPackageRenameMigrationRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralTypeChangeMigrationRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralTypeChangeMigrationRecipeTest.java index 371d4b1e4e..b3a61cd06c 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralTypeChangeMigrationRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralTypeChangeMigrationRecipeTest.java @@ -4,18 +4,15 @@ import java.util.List; +import ai.timefold.solver.migration.AbstractRecipeTest; import ai.timefold.solver.migration.NoWildCardImportStyle; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class GeneralTypeChangeMigrationRecipeTest implements RewriteTest { +class GeneralTypeChangeMigrationRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/PlanningSolutionAnnotationCleanupMigrationRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/PlanningSolutionAnnotationCleanupMigrationRecipeTest.java index 09bd29c8c3..b1b961b8b1 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/PlanningSolutionAnnotationCleanupMigrationRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/PlanningSolutionAnnotationCleanupMigrationRecipeTest.java @@ -2,15 +2,13 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; -@Execution(ExecutionMode.CONCURRENT) -class PlanningSolutionAnnotationCleanupMigrationRecipeTest implements RewriteTest { +class PlanningSolutionAnnotationCleanupMigrationRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/ProblemIdDeletionMigrationRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/ProblemIdDeletionMigrationRecipeTest.java index c6c02ad6a8..62144c80c0 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/ProblemIdDeletionMigrationRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/ProblemIdDeletionMigrationRecipeTest.java @@ -2,15 +2,13 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; -@Execution(ExecutionMode.CONCURRENT) -class ProblemIdDeletionMigrationRecipeTest implements RewriteTest { +class ProblemIdDeletionMigrationRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/SolverConfigOverrideSolutionDeletionMigrationRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/SolverConfigOverrideSolutionDeletionMigrationRecipeTest.java index 38dab74a61..bcf8f7d709 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/SolverConfigOverrideSolutionDeletionMigrationRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/SolverConfigOverrideSolutionDeletionMigrationRecipeTest.java @@ -2,15 +2,13 @@ import static org.openrewrite.java.Assertions.java; +import ai.timefold.solver.migration.AbstractRecipeTest; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; -@Execution(ExecutionMode.CONCURRENT) -class SolverConfigOverrideSolutionDeletionMigrationRecipeTest implements RewriteTest { +class SolverConfigOverrideSolutionDeletionMigrationRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) { diff --git a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/TestingAPIsMigrationRecipeTest.java b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/TestingAPIsMigrationRecipeTest.java index c5abc2671c..173509af3d 100644 --- a/tools/migration/src/test/java/ai/timefold/solver/migration/v2/TestingAPIsMigrationRecipeTest.java +++ b/tools/migration/src/test/java/ai/timefold/solver/migration/v2/TestingAPIsMigrationRecipeTest.java @@ -4,18 +4,15 @@ import java.util.List; +import ai.timefold.solver.migration.AbstractRecipeTest; import ai.timefold.solver.migration.NoWildCardImportStyle; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; import org.openrewrite.test.TypeValidation; -@Execution(ExecutionMode.CONCURRENT) -class TestingAPIsMigrationRecipeTest implements RewriteTest { +class TestingAPIsMigrationRecipeTest extends AbstractRecipeTest { @Override public void defaults(RecipeSpec spec) {