diff --git a/.github/workflows/downstream_build.yml b/.github/workflows/downstream_build.yml index 0646b47e508..59e6d3cdb8d 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 0435b5cb908..b356a9efcb3 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 ] # GraalVM only available for LTS. 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 b5c93c4c801..31464a93104 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 82752d7b74e..049bb96f1cf 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 ] # GraalVM only available for LTS. timeout-minutes: 120 steps: # Clone timefold-solver 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 8491c76e388..6d1385a1397 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 fb58931e9c3..34ed37d76f7 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 907f6e187d8..c17f3d68500 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 1325ceb4816..e36fb055617 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 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 8d2358255fd..26ced522613 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 00000000000..bd8b653d60d --- /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 e9cea86b3c7..85b062695a5 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 ac38b83daff..df8600ea693 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 cd360d04642..c56c1800b62 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 00000000000..aa035fbedd5 --- /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 d679cddfd1d..afd1adb4b9f 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 264e551ccce..5ef9e57a8dc 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 cff1be984aa..1394524e6ad 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 c26582a72de..53e80a56581 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 9500dedba70..9064f0c55a1 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 d743b6b1bd4..301c2da09ae 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 a5c9a0f0b0c..e0859aa78f1 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 e58ed3b1a10..a07a3e2fa4c 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 27f1756ae56..c6f90ddbea8 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 747b34917ff..b67a3df9890 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 686180f4e97..8b434e8e46a 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 88998cec812..2110b0f1f6c 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 63bb71b45a1..75f525dc508 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 f454147eb95..7d67e63f2be 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 6511f4c8d9e..da639a0297f 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 93f9f58c2d1..e7e2621eda6 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 f377d1388b7..d88441674ea 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 371d4b1e4e9..b3a61cd06c7 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 09bd29c8c31..b1b961b8b1e 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 c6c02ad6a8e..62144c80c0e 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 38dab74a619..bcf8f7d709c 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 c5abc2671c3..173509af3d6 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) {