diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 938e5902e7..88c7402060 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -129,6 +129,31 @@ jobs: name: test-results-jvm-tests-3 path: test-report.xml + jvm-tests-4: + timeout-minutes: 120 + runs-on: "ubuntu-20.04" + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: true + - uses: VirtusLab/scala-cli-setup@5b1a6c5ca98b5642996812781f6ad9b2d5935f85 + with: + jvm: "temurin:17" + - name: JVM integration tests + run: ./mill -i integration.test.jvm + env: + SCALA_CLI_IT_GROUP: 4 + - name: Convert Mill test reports to JUnit XML format + if: success() || failure() + run: .github/scripts/generate-junit-reports.sc jvm-tests-4 'Scala CLI JVM Tests (4)' test-report.xml out/ + - name: Upload test report + uses: actions/upload-artifact@v3 + if: success() || failure() + with: + name: test-results-jvm-tests-4 + path: test-report.xml + generate-linux-launcher: timeout-minutes: 120 runs-on: "ubuntu-20.04" @@ -254,6 +279,39 @@ jobs: name: test-results-linux-tests-3 path: test-report.xml + native-linux-tests-4: + needs: generate-linux-launcher + timeout-minutes: 120 + runs-on: "ubuntu-20.04" + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: true + - uses: VirtusLab/scala-cli-setup@5b1a6c5ca98b5642996812781f6ad9b2d5935f85 + with: + jvm: "temurin:17" + - uses: actions/download-artifact@v3 + with: + name: linux-launchers + path: artifacts/ + - name: Native integration tests + run: ./mill -i nativeIntegrationTests + env: + UPDATE_GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SCALA_CLI_IT_FORCED_LAUNCHER_DIRECTORY: artifacts/ + SCALA_CLI_IT_GROUP: 4 + SCALA_CLI_SODIUM_JNI_ALLOW: false + - name: Convert Mill test reports to JUnit XML format + if: success() || failure() + run: .github/scripts/generate-junit-reports.sc linux-tests-4 'Scala CLI Linux Tests (4)' test-report.xml out/ + - name: Upload test report + uses: actions/upload-artifact@v3 + if: success() || failure() + with: + name: test-results-linux-tests-4 + path: test-report.xml + generate-linux-arm64-native-launcher: runs-on: "macOS-m1" if: github.event_name == 'push' @@ -402,6 +460,39 @@ jobs: name: test-results-macos-tests-3 path: test-report.xml + native-macos-tests-4: + needs: generate-macos-launcher + timeout-minutes: 120 + runs-on: "macOS-13" + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: true + - uses: VirtusLab/scala-cli-setup@5b1a6c5ca98b5642996812781f6ad9b2d5935f85 + with: + jvm: "temurin:17" + - uses: actions/download-artifact@v3 + with: + name: macos-launchers + path: artifacts/ + - name: Native integration tests + run: ./mill -i nativeIntegrationTests + env: + UPDATE_GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SCALA_CLI_IT_FORCED_LAUNCHER_DIRECTORY: artifacts/ + SCALA_CLI_IT_GROUP: 4 + SCALA_CLI_SODIUM_JNI_ALLOW: false + - name: Convert Mill test reports to JUnit XML format + if: success() || failure() + run: .github/scripts/generate-junit-reports.sc macos-tests-4 'Scala CLI MacOS Tests (4)' test-report.xml out/ + - name: Upload test report + uses: actions/upload-artifact@v3 + if: success() || failure() + with: + name: test-results-macos-tests-4 + path: test-report.xml + generate-macos-m1-launcher: timeout-minutes: 120 runs-on: "macOS-m1" @@ -619,6 +710,47 @@ jobs: name: test-results-windows-tests-3 path: test-report.xml + native-windows-tests-4: + needs: generate-windows-launcher + timeout-minutes: 120 + runs-on: "windows-2019" + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: true + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.10" + - uses: VirtusLab/scala-cli-setup@5b1a6c5ca98b5642996812781f6ad9b2d5935f85 + with: + jvm: "temurin:17" + - name: Get latest coursier launcher + run: .github/scripts/get-latest-cs.sh + shell: bash + - uses: actions/download-artifact@v3 + with: + name: windows-launchers + path: artifacts/ + - name: Native integration tests + run: ./mill -i nativeIntegrationTests + env: + COURSIER_JNI: force + UPDATE_GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SCALA_CLI_IT_FORCED_LAUNCHER_DIRECTORY: artifacts/ + SCALA_CLI_IT_GROUP: 4 + SCALA_CLI_SODIUM_JNI_ALLOW: false + - name: Convert Mill test reports to JUnit XML format + if: success() || failure() + run: scala-cli shebang .github/scripts/generate-junit-reports.sc windows-tests-4 'Scala CLI Windows Tests (4)' test-report.xml out/ + - name: Upload test report + uses: actions/upload-artifact@v3 + if: success() || failure() + with: + name: test-results-windows-tests-4 + path: test-report.xml + generate-mostly-static-launcher: timeout-minutes: 120 runs-on: ubuntu-20.04 @@ -755,6 +887,39 @@ jobs: name: test-results-native-mostly-static-tests-3 path: test-report.xml + native-mostly-static-tests-4: + needs: generate-mostly-static-launcher + timeout-minutes: 120 + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: true + - uses: VirtusLab/scala-cli-setup@5b1a6c5ca98b5642996812781f6ad9b2d5935f85 + with: + jvm: "temurin:17" + - uses: actions/download-artifact@v3 + with: + name: mostly-static-launchers + path: artifacts/ + - name: Native integration tests + run: ./mill -i integration.test.nativeMostlyStatic + env: + UPDATE_GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SCALA_CLI_IT_FORCED_LAUNCHER_DIRECTORY: artifacts/ + SCALA_CLI_IT_GROUP: 4 + SCALA_CLI_SODIUM_JNI_ALLOW: false + - name: Convert Mill test reports to JUnit XML format + if: success() || failure() + run: .github/scripts/generate-junit-reports.sc native-mostly-static-tests-4 'Scala CLI Native Mostly Static Tests (4)' test-report.xml out/ + - name: Upload test report + uses: actions/upload-artifact@v3 + if: success() || failure() + with: + name: test-results-native-mostly-static-tests-4 + path: test-report.xml + generate-static-launcher: timeout-minutes: 120 runs-on: ubuntu-20.04 @@ -895,6 +1060,41 @@ jobs: name: test-results-native-static-tests-3 path: test-report.xml + native-static-tests-4: + needs: generate-static-launcher + timeout-minutes: 120 + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: true + - uses: VirtusLab/scala-cli-setup@5b1a6c5ca98b5642996812781f6ad9b2d5935f85 + with: + jvm: "temurin:17" + - uses: actions/download-artifact@v3 + with: + name: static-launchers + path: artifacts/ + - name: Build docker image + run: .github/scripts/generate-docker-image.sh + - name: Native integration tests + run: ./mill -i integration.test.nativeStatic + env: + UPDATE_GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SCALA_CLI_IT_FORCED_LAUNCHER_DIRECTORY: artifacts/ + SCALA_CLI_IT_GROUP: 4 + SCALA_CLI_SODIUM_JNI_ALLOW: false + - name: Convert Mill test reports to JUnit XML format + if: success() || failure() + run: .github/scripts/generate-junit-reports.sc native-static-tests-4 'Scala CLI Native Static Tests (4)' test-report.xml out/ + - name: Upload test report + uses: actions/upload-artifact@v3 + if: success() || failure() + with: + name: test-results-native-static-tests-4 + path: test-report.xml + docs-tests: # for now, let's run those tests only on ubuntu runs-on: ubuntu-20.04 @@ -1039,7 +1239,7 @@ jobs: retention-days: 2 publish: - needs: [unit-tests, jvm-tests-1, jvm-tests-2, jvm-tests-3, format, checks, reference-doc] + needs: [unit-tests, jvm-tests-1, jvm-tests-2, jvm-tests-3, jvm-tests-4, format, checks, reference-doc] if: github.event_name == 'push' && github.repository == 'VirtusLab/scala-cli' runs-on: ubuntu-20.04 steps: @@ -1082,22 +1282,28 @@ jobs: - jvm-tests-1 - jvm-tests-2 - jvm-tests-3 + - jvm-tests-4 - native-linux-tests-1 - native-linux-tests-2 - native-linux-tests-3 + - native-linux-tests-4 - native-macos-tests-1 - native-macos-tests-2 - native-macos-tests-3 + - native-macos-tests-4 - native-macos-m1-tests - native-windows-tests-1 - native-windows-tests-2 - native-windows-tests-3 + - native-windows-tests-4 - native-mostly-static-tests-1 - native-mostly-static-tests-2 - native-mostly-static-tests-3 + - native-mostly-static-tests-4 - native-static-tests-1 - native-static-tests-2 - native-static-tests-3 + - native-static-tests-4 - vc-redist - format - checks diff --git a/build.sc b/build.sc index 7a1a174f94..e02ef23904 100644 --- a/build.sc +++ b/build.sc @@ -958,6 +958,7 @@ trait CliIntegration extends SbtModule with ScalaCliPublishModule with HasTests | def scala212 = "${Scala.scala212}" | def scala213 = "${Scala.scala213}" | def scalaSnapshot213 = "${TestDeps.scalaSnapshot213}" + | def scala3LtsPrefix = "${Scala.scala3LtsPrefix}" | def scala3Lts = "${Scala.scala3Lts}" | def scala3Next = "${Scala.scala3Next}" | def defaultScala = "${Scala.defaultUser}" diff --git a/modules/integration/src/test/scala/scala/cli/integration/BloopTests.scala b/modules/integration/src/test/scala/scala/cli/integration/BloopTests.scala index 6aa994764f..6fe6822b98 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/BloopTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/BloopTests.scala @@ -8,7 +8,6 @@ import scala.concurrent.duration.Duration import scala.util.Properties class BloopTests extends ScalaCliSuite { - def runScalaCli(args: String*): os.proc = os.proc(TestUtil.cli, args) private lazy val bloopDaemonDir = diff --git a/modules/integration/src/test/scala/scala/cli/integration/BspTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/BspTestDefinitions.scala index fbcbdcd5d6..70913ddc37 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/BspTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/BspTestDefinitions.scala @@ -22,9 +22,8 @@ import scala.jdk.CollectionConverters.* import scala.util.control.NonFatal import scala.util.{Failure, Properties, Success, Try} -abstract class BspTestDefinitions(val scalaVersionOpt: Option[String]) - extends ScalaCliSuite with TestScalaVersionArgs { - +abstract class BspTestDefinitions extends ScalaCliSuite with TestScalaVersionArgs { + _: TestScalaVersion => private lazy val extraOptions = scalaVersionArgs ++ TestUtil.extraOptions import BspTestDefinitions.* diff --git a/modules/integration/src/test/scala/scala/cli/integration/BspTests212.scala b/modules/integration/src/test/scala/scala/cli/integration/BspTests212.scala index debd1e1286..e0d26ea118 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/BspTests212.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/BspTests212.scala @@ -1,7 +1,3 @@ package scala.cli.integration -// format: off -class BspTests212 extends BspTestDefinitions( - scalaVersionOpt = Some(Constants.scala212) -) -// format: on +class BspTests212 extends BspTestDefinitions with Test212 diff --git a/modules/integration/src/test/scala/scala/cli/integration/BspTests213.scala b/modules/integration/src/test/scala/scala/cli/integration/BspTests213.scala index 537e28f069..2a1dafca20 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/BspTests213.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/BspTests213.scala @@ -1,7 +1,3 @@ package scala.cli.integration -// format: off -class BspTests213 extends BspTestDefinitions( - scalaVersionOpt = Some(Constants.scala213) -) -// format: on +class BspTests213 extends BspTestDefinitions with Test213 diff --git a/modules/integration/src/test/scala/scala/cli/integration/BspTests3Lts.scala b/modules/integration/src/test/scala/scala/cli/integration/BspTests3Lts.scala new file mode 100644 index 0000000000..4b09e92e5f --- /dev/null +++ b/modules/integration/src/test/scala/scala/cli/integration/BspTests3Lts.scala @@ -0,0 +1,3 @@ +package scala.cli.integration + +class BspTests3Lts extends BspTestDefinitions with Test3Lts diff --git a/modules/integration/src/test/scala/scala/cli/integration/BspTestsDefault.scala b/modules/integration/src/test/scala/scala/cli/integration/BspTestsDefault.scala index 4fe392859f..8d9d1a721c 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/BspTestsDefault.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/BspTestsDefault.scala @@ -1,3 +1,3 @@ package scala.cli.integration -class BspTestsDefault extends BspTestDefinitions(scalaVersionOpt = None) +class BspTestsDefault extends BspTestDefinitions with TestDefault diff --git a/modules/integration/src/test/scala/scala/cli/integration/CleanTests.scala b/modules/integration/src/test/scala/scala/cli/integration/CleanTests.scala index 5299ed4f80..b6d90d31b9 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/CleanTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/CleanTests.scala @@ -3,7 +3,6 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect class CleanTests extends ScalaCliSuite { - override def group: ScalaCliSuite.TestGroup = ScalaCliSuite.TestGroup.First test("simple") { diff --git a/modules/integration/src/test/scala/scala/cli/integration/CompileTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/CompileTestDefinitions.scala index ad6f1b119e..f393df0a46 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/CompileTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/CompileTestDefinitions.scala @@ -6,12 +6,11 @@ import java.io.File import scala.cli.integration.util.BloopUtil -abstract class CompileTestDefinitions(val scalaVersionOpt: Option[String]) +abstract class CompileTestDefinitions extends ScalaCliSuite with TestScalaVersionArgs with CompilerPluginTestDefinitions - with SemanticDbTestDefinitions { - + with SemanticDbTestDefinitions { _: TestScalaVersion => protected lazy val extraOptions: Seq[String] = scalaVersionArgs ++ TestUtil.extraOptions private lazy val bloopDaemonDir = BloopUtil.bloopDaemonDir { @@ -693,13 +692,9 @@ abstract class CompileTestDefinitions(val scalaVersionOpt: Option[String]) ) .call(cwd = root, check = false, mergeErrIntoOut = true) expect(res.exitCode == 1) - assertNoDiff( - res.out.text(), - """Error occurred during initialization of VM - |Too small maximum heap - |Compilation failed - |""".stripMargin - ) + val out = res.out.text() + expect(out.contains("Error occurred during initialization of VM")) + expect(out.contains("Too small maximum heap")) } } } diff --git a/modules/integration/src/test/scala/scala/cli/integration/CompileTests212.scala b/modules/integration/src/test/scala/scala/cli/integration/CompileTests212.scala index a91fc060ca..deb6fa22cf 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/CompileTests212.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/CompileTests212.scala @@ -1,11 +1,6 @@ package scala.cli.integration -// format: off -class CompileTests212 extends CompileTestDefinitions( - scalaVersionOpt = Some(Constants.scala212) -) { -// format: on - +class CompileTests212 extends CompileTestDefinitions with Test212 { val pluginInputs: TestInputs = TestInputs( os.rel / "Plugin.scala" -> // Copied from (https://github.com/typelevel/kind-projector/blob/00bf25cef1b7d01d61a3555cccb6cf38fe30e117/src/test/scala/polylambda.scala) diff --git a/modules/integration/src/test/scala/scala/cli/integration/CompileTests213.scala b/modules/integration/src/test/scala/scala/cli/integration/CompileTests213.scala index b626d7b920..5401e62eae 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/CompileTests213.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/CompileTests213.scala @@ -1,7 +1,3 @@ package scala.cli.integration -// format: off -class CompileTests213 extends CompileTestDefinitions( - scalaVersionOpt = Some(Constants.scala213) -) -// format: on +class CompileTests213 extends CompileTestDefinitions with Test213 diff --git a/modules/integration/src/test/scala/scala/cli/integration/CompileTests3Lts.scala b/modules/integration/src/test/scala/scala/cli/integration/CompileTests3Lts.scala new file mode 100644 index 0000000000..8b306062c2 --- /dev/null +++ b/modules/integration/src/test/scala/scala/cli/integration/CompileTests3Lts.scala @@ -0,0 +1,3 @@ +package scala.cli.integration + +class CompileTests3Lts extends CompileTestDefinitions with Test3Lts diff --git a/modules/integration/src/test/scala/scala/cli/integration/CompileTestsDefault.scala b/modules/integration/src/test/scala/scala/cli/integration/CompileTestsDefault.scala index d3ec57a5e8..85991c058e 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/CompileTestsDefault.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/CompileTestsDefault.scala @@ -4,7 +4,7 @@ import com.eed3si9n.expecty.Expecty.expect import java.io.File -class CompileTestsDefault extends CompileTestDefinitions(scalaVersionOpt = None) { +class CompileTestsDefault extends CompileTestDefinitions with TestDefault { test("render explain message") { val fileName = "Hello.scala" val inputs = TestInputs( diff --git a/modules/integration/src/test/scala/scala/cli/integration/CompleteTests.scala b/modules/integration/src/test/scala/scala/cli/integration/CompleteTests.scala index cd2190103b..42a6e4d2ca 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/CompleteTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/CompleteTests.scala @@ -5,7 +5,6 @@ import com.eed3si9n.expecty.Expecty.expect import scala.util.Properties class CompleteTests extends ScalaCliSuite { - test("simple") { TestInputs.empty.fromRoot { root => val res = os.proc(TestUtil.cli, "complete", shellFormat, "2", "com").call(cwd = root) diff --git a/modules/integration/src/test/scala/scala/cli/integration/ConfigTests.scala b/modules/integration/src/test/scala/scala/cli/integration/ConfigTests.scala index e9e39e28a9..327f161350 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ConfigTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ConfigTests.scala @@ -7,7 +7,6 @@ import java.io.File import scala.util.Properties class ConfigTests extends ScalaCliSuite { - override def group: ScalaCliSuite.TestGroup = ScalaCliSuite.TestGroup.First test("simple") { diff --git a/modules/integration/src/test/scala/scala/cli/integration/DefaultFileTests.scala b/modules/integration/src/test/scala/scala/cli/integration/DefaultFileTests.scala index 8d3e756b96..38e7a65a8d 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/DefaultFileTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/DefaultFileTests.scala @@ -3,7 +3,6 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect class DefaultFileTests extends ScalaCliSuite { - override def group: ScalaCliSuite.TestGroup = ScalaCliSuite.TestGroup.First test("Print .gitignore") { diff --git a/modules/integration/src/test/scala/scala/cli/integration/DependencyUpdateTests.scala b/modules/integration/src/test/scala/scala/cli/integration/DependencyUpdateTests.scala index c9c948dd86..08e4e46231 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/DependencyUpdateTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/DependencyUpdateTests.scala @@ -4,7 +4,6 @@ import com.eed3si9n.expecty.Expecty.expect import coursier.core.Version class DependencyUpdateTests extends ScalaCliSuite { - test("dependency update test") { val fileName = "Hello.scala" val message = "Hello World" diff --git a/modules/integration/src/test/scala/scala/cli/integration/DocTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/DocTestDefinitions.scala index f402f24672..adee675954 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/DocTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/DocTestDefinitions.scala @@ -2,9 +2,8 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect -abstract class DocTestDefinitions(val scalaVersionOpt: Option[String]) - extends ScalaCliSuite with TestScalaVersionArgs { - +abstract class DocTestDefinitions extends ScalaCliSuite with TestScalaVersionArgs { + _: TestScalaVersion => protected lazy val extraOptions: Seq[String] = scalaVersionArgs ++ TestUtil.extraOptions test("generate static scala doc") { diff --git a/modules/integration/src/test/scala/scala/cli/integration/DocTests212.scala b/modules/integration/src/test/scala/scala/cli/integration/DocTests212.scala index 6d6e4176d7..5984592eda 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/DocTests212.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/DocTests212.scala @@ -1,7 +1,3 @@ package scala.cli.integration -// format: off -class DocTests212 extends DocTestDefinitions( - scalaVersionOpt = Some(Constants.scala212) -) -// format: on +class DocTests212 extends DocTestDefinitions with Test212 diff --git a/modules/integration/src/test/scala/scala/cli/integration/DocTests213.scala b/modules/integration/src/test/scala/scala/cli/integration/DocTests213.scala index 3bbc8ca38f..e007c1a36e 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/DocTests213.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/DocTests213.scala @@ -1,7 +1,3 @@ package scala.cli.integration -// format: off -class DocTests213 extends DocTestDefinitions( - scalaVersionOpt = Some(Constants.scala212) -) -// format: on +class DocTests213 extends DocTestDefinitions with Test213 diff --git a/modules/integration/src/test/scala/scala/cli/integration/DocTests3Lts.scala b/modules/integration/src/test/scala/scala/cli/integration/DocTests3Lts.scala new file mode 100644 index 0000000000..6682acf7c6 --- /dev/null +++ b/modules/integration/src/test/scala/scala/cli/integration/DocTests3Lts.scala @@ -0,0 +1,3 @@ +package scala.cli.integration + +class DocTests3Lts extends DocTestDefinitions with Test3Lts diff --git a/modules/integration/src/test/scala/scala/cli/integration/DocTestsDefault.scala b/modules/integration/src/test/scala/scala/cli/integration/DocTestsDefault.scala index cf0392133d..12f7ad58c7 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/DocTestsDefault.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/DocTestsDefault.scala @@ -2,8 +2,7 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect -class DocTestsDefault extends DocTestDefinitions(scalaVersionOpt = None) { - +class DocTestsDefault extends DocTestDefinitions with TestDefault { test("javadoc") { val inputs = TestInputs( os.rel / "Foo.java" -> diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportJsonTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportJsonTestDefinitions.scala index e58190c407..8f45b36b70 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ExportJsonTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportJsonTestDefinitions.scala @@ -2,8 +2,8 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect -abstract class ExportJsonTestDefinitions(val scalaVersionOpt: Option[String]) - extends ScalaCliSuite with TestScalaVersionArgs { +abstract class ExportJsonTestDefinitions extends ScalaCliSuite with TestScalaVersionArgs { + _: TestScalaVersion => private def readJson(path: os.ReadablePath): String = readJson(os.read(path)) diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportJsonTestsDefault.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportJsonTestsDefault.scala index b8cc12b3dc..c4b35bbb64 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ExportJsonTestsDefault.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportJsonTestsDefault.scala @@ -1,3 +1,3 @@ package scala.cli.integration -class ExportJsonTestsDefault extends ExportJsonTestDefinitions(scalaVersionOpt = None) +class ExportJsonTestsDefault extends ExportJsonTestDefinitions with TestDefault diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportMillTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportMillTestDefinitions.scala index 53059907e9..3d4a05c656 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ExportMillTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportMillTestDefinitions.scala @@ -6,9 +6,9 @@ import java.nio.charset.Charset import scala.util.Properties -abstract class ExportMillTestDefinitions(override val scalaVersionOpt: Option[String]) - extends ScalaCliSuite with TestScalaVersionArgs with ExportCommonTestDefinitions { - +abstract class ExportMillTestDefinitions extends ScalaCliSuite + with TestScalaVersionArgs + with ExportCommonTestDefinitions { _: TestScalaVersion => protected def launcher: os.RelPath = if (Properties.isWin) os.rel / "mill.bat" else os.rel / "mill" diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportMillTests212.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportMillTests212.scala index 0614c91c83..aee2fadee4 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ExportMillTests212.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportMillTests212.scala @@ -1,4 +1,3 @@ package scala.cli.integration -class ExportMillTests212 - extends ExportMillTestDefinitions(scalaVersionOpt = Some(Constants.scala212)) +class ExportMillTests212 extends ExportMillTestDefinitions with Test212 diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportMillTests213.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportMillTests213.scala index f7cf667a3a..64e648710a 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ExportMillTests213.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportMillTests213.scala @@ -1,7 +1,6 @@ package scala.cli.integration -class ExportMillTests213 - extends ExportMillTestDefinitions(scalaVersionOpt = Some(Constants.scala213)) { +class ExportMillTests213 extends ExportMillTestDefinitions with Test213 { if (runExportTests) { test("scalac options") { simpleTest(ExportTestProjects.scalacOptionsScala2Test(actualScalaVersion)) diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportMillTests3Lts.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportMillTests3Lts.scala new file mode 100644 index 0000000000..075d70e624 --- /dev/null +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportMillTests3Lts.scala @@ -0,0 +1,3 @@ +package scala.cli.integration + +class ExportMillTests3Lts extends ExportMillTestDefinitions with Test3Lts diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportMillTestsDefault.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportMillTestsDefault.scala index 2e7cb58047..0d0d204f7e 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ExportMillTestsDefault.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportMillTestsDefault.scala @@ -1,3 +1,3 @@ package scala.cli.integration -class ExportMillTestsDefault extends ExportMillTestDefinitions(scalaVersionOpt = None) +class ExportMillTestsDefault extends ExportMillTestDefinitions with TestDefault diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTestDefinitions.scala index 2b074ca958..fab1992572 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTestDefinitions.scala @@ -1,8 +1,7 @@ package scala.cli.integration -abstract class ExportSbtTestDefinitions(override val scalaVersionOpt: Option[String]) - extends ScalaCliSuite with TestScalaVersionArgs with ExportCommonTestDefinitions { - +abstract class ExportSbtTestDefinitions extends ScalaCliSuite + with TestScalaVersionArgs with ExportCommonTestDefinitions { _: TestScalaVersion => private lazy val sbtLaunchJar = { val res = os.proc(TestUtil.cs, "fetch", "--intransitive", "org.scala-sbt:sbt-launch:1.5.5").call() diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTests212.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTests212.scala index 7b8b5224f1..b499b5147f 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTests212.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTests212.scala @@ -1,3 +1,3 @@ package scala.cli.integration -class ExportSbtTests212 extends ExportSbtTestDefinitions(scalaVersionOpt = Some(Constants.scala212)) +class ExportSbtTests212 extends ExportSbtTestDefinitions with Test212 diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTests213.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTests213.scala index 4af27b9719..9430c91486 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTests213.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTests213.scala @@ -1,7 +1,6 @@ package scala.cli.integration -class ExportSbtTests213 - extends ExportSbtTestDefinitions(scalaVersionOpt = Some(Constants.scala213)) { +class ExportSbtTests213 extends ExportSbtTestDefinitions with Test213 { if (runExportTests) { test("scalac options") { simpleTest(ExportTestProjects.scalacOptionsScala2Test(actualScalaVersion)) diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTests3Lts.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTests3Lts.scala new file mode 100644 index 0000000000..57c339f85b --- /dev/null +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTests3Lts.scala @@ -0,0 +1,3 @@ +package scala.cli.integration + +class ExportSbtTests3Lts extends ExportSbtTestDefinitions with Test3Lts diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTestsDefault.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTestsDefault.scala index 36128859db..5c9298d213 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTestsDefault.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportSbtTestsDefault.scala @@ -1,3 +1,3 @@ package scala.cli.integration -class ExportSbtTestsDefault extends ExportSbtTestDefinitions(scalaVersionOpt = None) +class ExportSbtTestsDefault extends ExportSbtTestDefinitions with TestDefault diff --git a/modules/integration/src/test/scala/scala/cli/integration/ExportTestProjects.scala b/modules/integration/src/test/scala/scala/cli/integration/ExportTestProjects.scala index df3275b7d7..0f9302c039 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ExportTestProjects.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ExportTestProjects.scala @@ -3,7 +3,6 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect object ExportTestProjects { - def jvmTest(scalaVersion: String): TestInputs = { val mainFile = diff --git a/modules/integration/src/test/scala/scala/cli/integration/FixTests.scala b/modules/integration/src/test/scala/scala/cli/integration/FixTests.scala index da46b77d47..23e1c494ed 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/FixTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/FixTests.scala @@ -3,7 +3,6 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect class FixTests extends ScalaCliSuite { - override def group: ScalaCliSuite.TestGroup = ScalaCliSuite.TestGroup.First val projectFileName = "project.scala" diff --git a/modules/integration/src/test/scala/scala/cli/integration/FmtTests.scala b/modules/integration/src/test/scala/scala/cli/integration/FmtTests.scala index a1663b7489..fe1c05ed57 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/FmtTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/FmtTests.scala @@ -5,7 +5,6 @@ import com.eed3si9n.expecty.Expecty.expect import scala.cli.integration.TestUtil.removeAnsiColors class FmtTests extends ScalaCliSuite { - override def group: ScalaCliSuite.TestGroup = ScalaCliSuite.TestGroup.First val confFileName = ".scalafmt.conf" diff --git a/modules/integration/src/test/scala/scala/cli/integration/GitHubTests.scala b/modules/integration/src/test/scala/scala/cli/integration/GitHubTests.scala index 1db7f57620..34f93f64da 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/GitHubTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/GitHubTests.scala @@ -14,7 +14,6 @@ import java.util.{Base64, Locale} import scala.util.Properties class GitHubTests extends ScalaCliSuite { - override def group: ScalaCliSuite.TestGroup = ScalaCliSuite.TestGroup.First def createSecretTest(): Unit = { diff --git a/modules/integration/src/test/scala/scala/cli/integration/HadoopTests.scala b/modules/integration/src/test/scala/scala/cli/integration/HadoopTests.scala index 88b62ae098..aab866cf82 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/HadoopTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/HadoopTests.scala @@ -3,7 +3,6 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect class HadoopTests extends munit.FunSuite { - protected lazy val extraOptions: Seq[String] = TestUtil.extraOptions test("simple map-reduce") { diff --git a/modules/integration/src/test/scala/scala/cli/integration/InstallHomeTests.scala b/modules/integration/src/test/scala/scala/cli/integration/InstallHomeTests.scala index 1c747c132f..3d5ab1a539 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/InstallHomeTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/InstallHomeTests.scala @@ -5,7 +5,6 @@ import com.eed3si9n.expecty.Expecty.expect import scala.util.Properties class InstallHomeTests extends ScalaCliSuite { - override def group: ScalaCliSuite.TestGroup = ScalaCliSuite.TestGroup.First val firstVersion = "0.0.1" @@ -27,11 +26,14 @@ class InstallHomeTests extends ScalaCliSuite { ) private def packageDummyScalaCli(root: os.Path, dummyScalaCliFileName: String, output: String) = { - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, "--power", "package", dummyScalaCliFileName, "-o", output + TestUtil.cli, + "--power", + "package", + dummyScalaCliFileName, + "-o", + output ) - // format: on os.proc(cmd).call( cwd = root, stdin = os.Inherit, @@ -45,15 +47,17 @@ class InstallHomeTests extends ScalaCliSuite { binDirPath: os.Path, force: Boolean ) = { - // format: off val cmdInstallVersion = Seq[os.Shellable]( - TestUtil.cli, "install-home", + TestUtil.cli, + "install-home", "--env", - "--scala-cli-binary-path", binVersion, - "--binary-name", dummyScalaCliBinName, - "--bin-dir", binDirPath - ) ++ (if(force) Seq[os.Shellable]("--force") else Seq.empty) - // format: on + "--scala-cli-binary-path", + binVersion, + "--binary-name", + dummyScalaCliBinName, + "--bin-dir", + binDirPath + ) ++ (if (force) Seq[os.Shellable]("--force") else Seq.empty) os.proc(cmdInstallVersion).call( cwd = root, stdin = os.Inherit, @@ -67,13 +71,14 @@ class InstallHomeTests extends ScalaCliSuite { force: Boolean, skipCache: Boolean ) = { - // format: off val cmdUninstall = Seq[os.Shellable]( - TestUtil.cli, "uninstall", - "--binary-name", dummyScalaCliBinName, - "--bin-dir", binDirPath + TestUtil.cli, + "uninstall", + "--binary-name", + dummyScalaCliBinName, + "--bin-dir", + binDirPath ) - // format: on val forceOpts = if (force) Seq("--force") else Seq.empty val skipCacheOpts = if (skipCache) Seq("--skip-cache") else Seq.empty os.proc(cmdUninstall, forceOpts, skipCacheOpts).call(cwd = root) diff --git a/modules/integration/src/test/scala/scala/cli/integration/JmhTests.scala b/modules/integration/src/test/scala/scala/cli/integration/JmhTests.scala index 98a041e9d3..df8d9a8555 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/JmhTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/JmhTests.scala @@ -5,7 +5,6 @@ import com.eed3si9n.expecty.Expecty.expect import java.nio.charset.Charset class JmhTests extends ScalaCliSuite { - override def group: ScalaCliSuite.TestGroup = ScalaCliSuite.TestGroup.First test("simple") { diff --git a/modules/integration/src/test/scala/scala/cli/integration/MetaCheck.scala b/modules/integration/src/test/scala/scala/cli/integration/MetaCheck.scala index c61879a5d1..0d3b579c9c 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/MetaCheck.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/MetaCheck.scala @@ -3,7 +3,6 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect class MetaCheck extends ScalaCliSuite { - override def group: ScalaCliSuite.TestGroup = ScalaCliSuite.TestGroup.First /* diff --git a/modules/integration/src/test/scala/scala/cli/integration/NativePackagerTests.scala b/modules/integration/src/test/scala/scala/cli/integration/NativePackagerTests.scala index 8d1e18e307..6cbbf44739 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/NativePackagerTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/NativePackagerTests.scala @@ -5,7 +5,6 @@ import com.eed3si9n.expecty.Expecty.expect import scala.util.Properties class NativePackagerTests extends ScalaCliSuite { - override def group: ScalaCliSuite.TestGroup = ScalaCliSuite.TestGroup.First val helloWorldFileName = "HelloWorldScalaCli.scala" @@ -31,14 +30,20 @@ class NativePackagerTests extends ScalaCliSuite { val appName = helloWorldFileName.stripSuffix(".scala").toLowerCase val pkgAppFile = s"$appName.pkg" - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, "--power", "package", TestUtil.extraOptions, helloWorldFileName, "--pkg", - "--output", pkgAppFile, - "--identifier", "scala-cli", - "--launcher-app", appName + TestUtil.cli, + "--power", + "package", + TestUtil.extraOptions, + helloWorldFileName, + "--pkg", + "--output", + pkgAppFile, + "--identifier", + "scala-cli", + "--launcher-app", + appName ) - // format: on os.proc(cmd).call( cwd = root, stdin = os.Inherit, @@ -69,14 +74,20 @@ class NativePackagerTests extends ScalaCliSuite { val appName = helloWorldFileName.stripSuffix(".scala").toLowerCase() val output = s"$appName.dmg" - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, "--power", "package", TestUtil.extraOptions, helloWorldFileName, "--dmg", - "--output", output, - "--identifier", "scala-cli", - "--launcher-app", appName + TestUtil.cli, + "--power", + "package", + TestUtil.extraOptions, + helloWorldFileName, + "--dmg", + "--output", + output, + "--identifier", + "scala-cli", + "--launcher-app", + appName ) - // format: on os.proc(cmd).call( cwd = root, stdin = os.Inherit, @@ -130,17 +141,26 @@ class NativePackagerTests extends ScalaCliSuite { val destDir = os.rel / "package" os.makeDir.all(root / destDir) - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, "--power", "package", TestUtil.extraOptions, helloWorldFileName, "--deb", - "--output", destDir / s"$appName.deb", - "--maintainer", "scala-cli-test", - "--description", "scala-cli-test", - "--launcher-app", appName, - "--priority", priority, - "--section", section, + TestUtil.cli, + "--power", + "package", + TestUtil.extraOptions, + helloWorldFileName, + "--deb", + "--output", + destDir / s"$appName.deb", + "--maintainer", + "scala-cli-test", + "--description", + "scala-cli-test", + "--launcher-app", + appName, + "--priority", + priority, + "--section", + section ) - // format: on os.proc(cmd).call( cwd = root, stdin = os.Inherit, @@ -196,16 +216,24 @@ class NativePackagerTests extends ScalaCliSuite { val appName = helloWorldFileName.stripSuffix(".scala").toLowerCase() - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, "--power", "package", TestUtil.extraOptions, helloWorldFileName, "--rpm", - "--output", s"$appName.rpm", - "--description", "scala-cli", - "--license", "ASL 2.0", - "--version", "1.0.0", - "--launcher-app", appName + TestUtil.cli, + "--power", + "package", + TestUtil.extraOptions, + helloWorldFileName, + "--rpm", + "--output", + s"$appName.rpm", + "--description", + "scala-cli", + "--license", + "ASL 2.0", + "--version", + "1.0.0", + "--launcher-app", + appName ) - // format: on os.proc(cmd).call( cwd = root, stdin = os.Inherit, @@ -225,17 +253,24 @@ class NativePackagerTests extends ScalaCliSuite { val appName = helloWorldFileName.stripSuffix(".scala").toLowerCase() - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, "--power", "package", helloWorldFileName, "--msi", - "--output", s"$appName.msi", - "--product-name", "scala-cli", - "--license-path", licencePath, - "--maintainer", "Scala-CLI", - "--launcher-app", appName, + TestUtil.cli, + "--power", + "package", + helloWorldFileName, + "--msi", + "--output", + s"$appName.msi", + "--product-name", + "scala-cli", + "--license-path", + licencePath, + "--maintainer", + "Scala-CLI", + "--launcher-app", + appName, "--suppress-validation" ) - // format: on os.proc(cmd).call( cwd = root, stdin = os.Inherit, @@ -254,16 +289,17 @@ class NativePackagerTests extends ScalaCliSuite { val imageRepository = appName.toLowerCase() val imageTag = "latest" - // format: off val cmd = Seq[os.Shellable]( TestUtil.cli, "--power", - "package", helloWorldFileName, + "package", + helloWorldFileName, "--docker", - "--docker-image-repository", imageRepository, - "--docker-image-tag", imageTag + "--docker-image-repository", + imageRepository, + "--docker-image-tag", + imageTag ) - // format: on os.proc(cmd) .call( @@ -291,15 +327,17 @@ class NativePackagerTests extends ScalaCliSuite { val imageRepository = appName.toLowerCase() val imageTag = "latest" - // format: off val cmd = Seq[os.Shellable]( TestUtil.cli, "--power", - "package", helloWorldFileName, + "package", + helloWorldFileName, "--js", "--docker", - "--docker-image-repository", imageRepository, - "--docker-image-tag", imageTag + "--docker-image-repository", + imageRepository, + "--docker-image-tag", + imageTag ) // format: on @@ -330,18 +368,20 @@ class NativePackagerTests extends ScalaCliSuite { val imageRepository = appName.toLowerCase() val imageTag = "latest" - // format: off val cmd = Seq[os.Shellable]( TestUtil.cli, "--power", - "package", helloWorldFileName, + "package", + helloWorldFileName, "--native", - "-S", "2.13.6", + "-S", + "2.13.6", "--docker", - "--docker-image-repository", imageRepository, - "--docker-image-tag", imageTag + "--docker-image-repository", + imageRepository, + "--docker-image-tag", + imageTag ) - // format: on os.proc(cmd) .call( diff --git a/modules/integration/src/test/scala/scala/cli/integration/PackageTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/PackageTestDefinitions.scala index 272aa611a7..4e7d05bd0d 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PackageTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PackageTestDefinitions.scala @@ -12,9 +12,8 @@ import scala.cli.integration.TestUtil.removeAnsiColors import scala.jdk.CollectionConverters.* import scala.util.{Properties, Using} -abstract class PackageTestDefinitions(val scalaVersionOpt: Option[String]) - extends ScalaCliSuite with TestScalaVersionArgs { - +abstract class PackageTestDefinitions extends ScalaCliSuite with TestScalaVersionArgs { + _: TestScalaVersion => private lazy val extraOptions = scalaVersionArgs ++ TestUtil.extraOptions def maybeUseBash(cmd: os.Shellable*)(cwd: os.Path = null): os.CommandResult = { @@ -1107,12 +1106,19 @@ abstract class PackageTestDefinitions(val scalaVersionOpt: Option[String]) val outputName = if (Properties.isWin) "hello.bat" else "hello" val launcher = root / outputName - // format: off val packageCmds = Seq[os.Shellable]( - TestUtil.cli, "--power", "package", "Hello.scala", - "-M", "Main", "--jar", fatJarPath, "-o", launcher, extraOptions + TestUtil.cli, + "--power", + "package", + "Hello.scala", + "-M", + "Main", + "--jar", + fatJarPath, + "-o", + launcher, + extraOptions ) - // format: on // bootstrap os.proc(packageCmds).call(cwd = root).out.trim() diff --git a/modules/integration/src/test/scala/scala/cli/integration/PackageTests212.scala b/modules/integration/src/test/scala/scala/cli/integration/PackageTests212.scala index c2cf613ea8..8e158fc47b 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PackageTests212.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PackageTests212.scala @@ -1,7 +1,3 @@ package scala.cli.integration -// format: off -class PackageTests212 extends PackageTestDefinitions( - scalaVersionOpt = Some(Constants.scala212) -) -// format: on +class PackageTests212 extends PackageTestDefinitions with Test212 diff --git a/modules/integration/src/test/scala/scala/cli/integration/PackageTests213.scala b/modules/integration/src/test/scala/scala/cli/integration/PackageTests213.scala index f23c59dcc9..aa5f42219e 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PackageTests213.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PackageTests213.scala @@ -1,7 +1,3 @@ package scala.cli.integration -// format: off -class PackageTests213 extends PackageTestDefinitions( - scalaVersionOpt = Some(Constants.scala213) -) -// format: on +class PackageTests213 extends PackageTestDefinitions with Test213 diff --git a/modules/integration/src/test/scala/scala/cli/integration/PackageTests3Lts.scala b/modules/integration/src/test/scala/scala/cli/integration/PackageTests3Lts.scala new file mode 100644 index 0000000000..6f68f525f2 --- /dev/null +++ b/modules/integration/src/test/scala/scala/cli/integration/PackageTests3Lts.scala @@ -0,0 +1,3 @@ +package scala.cli.integration + +class PackageTests3Lts extends PackageTestDefinitions with Test3Lts diff --git a/modules/integration/src/test/scala/scala/cli/integration/PackageTestsDefault.scala b/modules/integration/src/test/scala/scala/cli/integration/PackageTestsDefault.scala index 3bf34bfc17..e0d0c94de0 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PackageTestsDefault.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PackageTestsDefault.scala @@ -2,8 +2,7 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect -class PackageTestsDefault extends PackageTestDefinitions(scalaVersionOpt = None) { - +class PackageTestsDefault extends PackageTestDefinitions with TestDefault { test("reuse run native binary") { val inputs = TestInputs( os.rel / "Hello.scala" -> diff --git a/modules/integration/src/test/scala/scala/cli/integration/PgpTests.scala b/modules/integration/src/test/scala/scala/cli/integration/PgpTests.scala index 1347108142..786242fd46 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PgpTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PgpTests.scala @@ -5,7 +5,6 @@ import com.eed3si9n.expecty.Expecty.expect import java.io.File class PgpTests extends ScalaCliSuite { - private val pubKeyInputs = TestInputs( os.rel / "key.pub" -> """-----BEGIN PGP PUBLIC KEY BLOCK----- diff --git a/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTestDefinitions.scala index 7c79faa6ef..99db6ee4a6 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTestDefinitions.scala @@ -2,8 +2,8 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect -abstract class PublishLocalTestDefinitions(val scalaVersionOpt: Option[String]) - extends ScalaCliSuite with TestScalaVersionArgs { +abstract class PublishLocalTestDefinitions extends ScalaCliSuite with TestScalaVersionArgs { + _: TestScalaVersion => protected def extraOptions: Seq[String] = scalaVersionArgs ++ TestUtil.extraOptions ++ Seq("--suppress-experimental-feature-warning") diff --git a/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTests212.scala b/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTests212.scala index 9f85b20dfc..8b2c0273cc 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTests212.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTests212.scala @@ -1,4 +1,3 @@ package scala.cli.integration -class PublishLocalTests212 - extends PublishLocalTestDefinitions(scalaVersionOpt = Some(Constants.scala212)) +class PublishLocalTests212 extends PublishLocalTestDefinitions with Test212 diff --git a/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTests213.scala b/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTests213.scala index ae077c1663..163def9120 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTests213.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTests213.scala @@ -1,4 +1,3 @@ package scala.cli.integration -class PublishLocalTests213 - extends PublishLocalTestDefinitions(scalaVersionOpt = Some(Constants.scala213)) +class PublishLocalTests213 extends PublishLocalTestDefinitions with Test213 diff --git a/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTests3Lts.scala b/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTests3Lts.scala new file mode 100644 index 0000000000..08777b10d5 --- /dev/null +++ b/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTests3Lts.scala @@ -0,0 +1,3 @@ +package scala.cli.integration + +class PublishLocalTests3Lts extends PublishLocalTestDefinitions with Test3Lts diff --git a/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTestsDefault.scala b/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTestsDefault.scala index 01ee431854..03018b08eb 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTestsDefault.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PublishLocalTestsDefault.scala @@ -1,3 +1,3 @@ package scala.cli.integration -class PublishLocalTestsDefault extends PublishLocalTestDefinitions(scalaVersionOpt = None) +class PublishLocalTestsDefault extends PublishLocalTestDefinitions with TestDefault diff --git a/modules/integration/src/test/scala/scala/cli/integration/PublishSetupTests.scala b/modules/integration/src/test/scala/scala/cli/integration/PublishSetupTests.scala index 6cb4c73321..5e5f43599e 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PublishSetupTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PublishSetupTests.scala @@ -11,7 +11,6 @@ import scala.util.Properties import scala.util.matching.Regex class PublishSetupTests extends ScalaCliSuite { - private def ghUserName = "foo" private def projName = "project-name" private def devName = "Alex Test" diff --git a/modules/integration/src/test/scala/scala/cli/integration/PublishTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/PublishTestDefinitions.scala index b00e4f4e32..ad2892a091 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PublishTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PublishTestDefinitions.scala @@ -9,9 +9,8 @@ import java.util.zip.ZipFile import scala.jdk.CollectionConverters.* import scala.util.Properties -abstract class PublishTestDefinitions(val scalaVersionOpt: Option[String]) - extends ScalaCliSuite with TestScalaVersionArgs { - +abstract class PublishTestDefinitions extends ScalaCliSuite with TestScalaVersionArgs { + _: TestScalaVersion => protected def extraOptions: Seq[String] = scalaVersionArgs ++ TestUtil.extraOptions private object TestCase { @@ -83,13 +82,14 @@ abstract class PublishTestDefinitions(val scalaVersionOpt: Option[String]) os.Path(Paths.get(uri)) } - // format: off val signingOptions = Seq( - "--secret-key", s"file:$secretKey", - "--secret-key-password", "value:1234", - "--signer", "bc" + "--secret-key", + s"file:$secretKey", + "--secret-key-password", + "value:1234", + "--signer", + "bc" ) - // format: on TestCase.testInputs.fromRoot { root => os.proc( @@ -166,15 +166,16 @@ abstract class PublishTestDefinitions(val scalaVersionOpt: Option[String]) os.Path(Paths.get(uri)) } - // format: off val signingOptions = Seq( - "--secret-key", s"file:$secretKey", - "--secret-key-password", "value:1234", - "--signer", "bc", + "--secret-key", + s"file:$secretKey", + "--secret-key-password", + "value:1234", + "--signer", + "bc", "--force-signing-externally", "--force-jvm-signing-cli" ) - // format: on val java8Home = os.Path(os.proc(TestUtil.cs, "java-home", "--jvm", "zulu:8").call().out.trim(), os.pwd) @@ -387,12 +388,12 @@ abstract class PublishTestDefinitions(val scalaVersionOpt: Option[String]) } test("no secret key password") { - // format: off val signingOptions = Seq( - "--secret-key", s"file:key.skr", - "--signer", "bc" + "--secret-key", + s"file:key.skr", + "--signer", + "bc" ) - // format: on TestCase.testInputs.fromRoot { root => val confDir = root / "config" diff --git a/modules/integration/src/test/scala/scala/cli/integration/PublishTests212.scala b/modules/integration/src/test/scala/scala/cli/integration/PublishTests212.scala index 7d0e81911f..50dcfb46f3 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PublishTests212.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PublishTests212.scala @@ -1,7 +1,3 @@ package scala.cli.integration -// format: off -class PublishTests212 extends PublishTestDefinitions( - scalaVersionOpt = Some(Constants.scala212) -) -// format: on +class PublishTests212 extends PublishTestDefinitions with Test212 diff --git a/modules/integration/src/test/scala/scala/cli/integration/PublishTests213.scala b/modules/integration/src/test/scala/scala/cli/integration/PublishTests213.scala index 5ca501530b..71cb06149b 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PublishTests213.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PublishTests213.scala @@ -1,7 +1,3 @@ package scala.cli.integration -// format: off -class PublishTests213 extends PublishTestDefinitions( - scalaVersionOpt = Some(Constants.scala213) -) -// format: on +class PublishTests213 extends PublishTestDefinitions with Test213 diff --git a/modules/integration/src/test/scala/scala/cli/integration/PublishTests3Lts.scala b/modules/integration/src/test/scala/scala/cli/integration/PublishTests3Lts.scala new file mode 100644 index 0000000000..15abefaa70 --- /dev/null +++ b/modules/integration/src/test/scala/scala/cli/integration/PublishTests3Lts.scala @@ -0,0 +1,3 @@ +package scala.cli.integration + +class PublishTests3Lts extends PublishTestDefinitions with Test3Lts diff --git a/modules/integration/src/test/scala/scala/cli/integration/PublishTestsDefault.scala b/modules/integration/src/test/scala/scala/cli/integration/PublishTestsDefault.scala index c9bd662f53..f5bc075df6 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PublishTestsDefault.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PublishTestsDefault.scala @@ -2,7 +2,7 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect -class PublishTestsDefault extends PublishTestDefinitions(scalaVersionOpt = None) { +class PublishTestsDefault extends PublishTestDefinitions with TestDefault { test("Pure Java") { val testOrg = "test-org.foo" val testName = "foo" diff --git a/modules/integration/src/test/scala/scala/cli/integration/ReplTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/ReplTestDefinitions.scala index 7494a6db5e..3e04502426 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ReplTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ReplTestDefinitions.scala @@ -5,9 +5,8 @@ import com.eed3si9n.expecty.Expecty.expect import scala.cli.integration.TestUtil.removeAnsiColors import scala.util.Properties -abstract class ReplTestDefinitions(val scalaVersionOpt: Option[String]) - extends ScalaCliSuite with TestScalaVersionArgs { - +abstract class ReplTestDefinitions extends ScalaCliSuite with TestScalaVersionArgs { + _: TestScalaVersion => private lazy val extraOptions = scalaVersionArgs ++ TestUtil.extraOptions private val retrieveScalaVersionCode = if (actualScalaVersion.startsWith("2.")) diff --git a/modules/integration/src/test/scala/scala/cli/integration/ReplTests.scala b/modules/integration/src/test/scala/scala/cli/integration/ReplTests.scala index eeef6f38c1..cf06174639 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ReplTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ReplTests.scala @@ -3,7 +3,6 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect class ReplTests extends ScalaCliSuite { - test("calling repl with -Xshow-phases flag") { val cmd = Seq[os.Shellable]( TestUtil.cli, diff --git a/modules/integration/src/test/scala/scala/cli/integration/ReplTests212.scala b/modules/integration/src/test/scala/scala/cli/integration/ReplTests212.scala index 1755c7072c..ed5bd0f9ab 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ReplTests212.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ReplTests212.scala @@ -1,7 +1,3 @@ package scala.cli.integration -// format: off -class ReplTests212 extends ReplTestDefinitions( - scalaVersionOpt = Some(Constants.scala212) -) -// format: on +class ReplTests212 extends ReplTestDefinitions with Test212 diff --git a/modules/integration/src/test/scala/scala/cli/integration/ReplTests213.scala b/modules/integration/src/test/scala/scala/cli/integration/ReplTests213.scala index ec777b2bd4..e4de10e0fc 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ReplTests213.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ReplTests213.scala @@ -4,7 +4,7 @@ import com.eed3si9n.expecty.Expecty.expect import scala.util.Properties -class ReplTests213 extends ReplTestDefinitions(scalaVersionOpt = Some(Constants.scala213)) { +class ReplTests213 extends ReplTestDefinitions with Test213 { test("repl custom repositories work") { TestInputs.empty.fromRoot { root => os.proc( diff --git a/modules/integration/src/test/scala/scala/cli/integration/ReplTests3Lts.scala b/modules/integration/src/test/scala/scala/cli/integration/ReplTests3Lts.scala new file mode 100644 index 0000000000..a962387ef2 --- /dev/null +++ b/modules/integration/src/test/scala/scala/cli/integration/ReplTests3Lts.scala @@ -0,0 +1,3 @@ +package scala.cli.integration + +class ReplTests3Lts extends ReplTestDefinitions with Test3Lts diff --git a/modules/integration/src/test/scala/scala/cli/integration/ReplTestsDefault.scala b/modules/integration/src/test/scala/scala/cli/integration/ReplTestsDefault.scala index b4b7bcebcd..4adc424f6b 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ReplTestsDefault.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ReplTestsDefault.scala @@ -6,12 +6,7 @@ import java.io.File import scala.util.Properties -// format: off -class ReplTestsDefault extends ReplTestDefinitions( - scalaVersionOpt = None -) { - // format: on - +class ReplTestsDefault extends ReplTestDefinitions with TestDefault { test("as jar") { val inputs = TestInputs( os.rel / "CheckCp.scala" -> diff --git a/modules/integration/src/test/scala/scala/cli/integration/RunScalacCompatTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/RunScalacCompatTestDefinitions.scala index 79b7a322b7..753bd17355 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/RunScalacCompatTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/RunScalacCompatTestDefinitions.scala @@ -22,12 +22,12 @@ trait RunScalacCompatTestDefinitions { _: RunTestDefinitions => ) inputs.fromRoot { root => def run(warnAny: Boolean) = { - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, extraOptions, ".", + TestUtil.cli, + extraOptions, + ".", if (warnAny) Seq("-Xlint:infer-any") else Nil ) - // format: on os.proc(cmd).call( cwd = root, stderr = os.Pipe @@ -70,13 +70,14 @@ trait RunScalacCompatTestDefinitions { _: RunTestDefinitions => inputs.fromRoot { root => // FIXME We don't really use the run command here, in spite of being in RunTests… def classNames(inlineDelambdafy: Boolean): Seq[String] = { - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, "compile", extraOptions, - "--print-class-path", ".", + TestUtil.cli, + "compile", + extraOptions, + "--print-class-path", + ".", if (inlineDelambdafy) Seq("-Ydelambdafy:inline") else Nil ) - // format: on val res = os.proc(cmd).call(cwd = root) val cp = res.out.trim().split(File.pathSeparator).toVector.map(os.Path(_, os.pwd)) cp diff --git a/modules/integration/src/test/scala/scala/cli/integration/RunScriptTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/RunScriptTestDefinitions.scala index 682ee64d77..2864ebe491 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/RunScriptTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/RunScriptTestDefinitions.scala @@ -202,12 +202,14 @@ trait RunScriptTestDefinitions { _: RunTestDefinitions => |""".stripMargin ) inputs.fromRoot { root => - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, "run", extraOptions, ".", - "--java-prop", "scala.colored-stack-traces=false" + TestUtil.cli, + "run", + extraOptions, + ".", + "--java-prop", + "scala.colored-stack-traces=false" ) - // format: on val res = os.proc(cmd).call(cwd = root, check = false, mergeErrIntoOut = true) val output = res.out.lines() val exceptionLines = output.dropWhile(!_.startsWith("Exception in thread ")) @@ -311,10 +313,12 @@ trait RunScriptTestDefinitions { _: RunTestDefinitions => |""".stripMargin ) inputs.fromRoot { root => - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, "run", extraOptions, ".") - // format: on + TestUtil.cli, + "run", + extraOptions, + "." + ) val res = os.proc(cmd).call(cwd = root, check = false, mergeErrIntoOut = true) val output = res.out.lines() val exceptionLines: Vector[String] = output diff --git a/modules/integration/src/test/scala/scala/cli/integration/RunTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/RunTestDefinitions.scala index 076a03ba33..20167cedef 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/RunTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/RunTestDefinitions.scala @@ -12,7 +12,7 @@ import scala.io.Codec import scala.jdk.CollectionConverters.* import scala.util.Properties -abstract class RunTestDefinitions(val scalaVersionOpt: Option[String]) +abstract class RunTestDefinitions extends WithWarmUpScalaCliSuite with TestScalaVersionArgs with RunScriptTestDefinitions @@ -23,8 +23,7 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String]) with RunScalacCompatTestDefinitions with RunSnippetTestDefinitions with RunScalaPyTestDefinitions - with RunZipTestDefinitions { - + with RunZipTestDefinitions { _: TestScalaVersion => protected lazy val extraOptions: Seq[String] = scalaVersionArgs ++ TestUtil.extraOptions protected val emptyInputs: TestInputs = TestInputs(os.rel / ".placeholder" -> "") @@ -209,12 +208,14 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String]) |""".stripMargin ) inputs.fromRoot { root => - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, "run", extraOptions, ".", - "--java-prop", "scala.colored-stack-traces=false" + TestUtil.cli, + "run", + extraOptions, + ".", + "--java-prop", + "scala.colored-stack-traces=false" ) - // format: on val res = os.proc(cmd).call(cwd = root, check = false, mergeErrIntoOut = true) val output = res.out.lines() // FIXME We need to have the pretty-stacktraces stuff take scala.colored-stack-traces into account @@ -269,13 +270,14 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String]) } def compileTimeOnlyJars(): Unit = { - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cs, "fetch", - "--intransitive", "com.chuusai::shapeless:2.3.9", - "--scala", actualScalaVersion + TestUtil.cs, + "fetch", + "--intransitive", + "com.chuusai::shapeless:2.3.9", + "--scala", + actualScalaVersion ) - // format: on val shapelessJar = os.proc(cmd).call().out.trim() expect(os.isFile(os.Path(shapelessJar, os.pwd))) @@ -403,16 +405,19 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String]) os.write(root / "script.sh", script) os.perms.set(root / "script.sh", "rwxr-xr-x") val termOpt = if (System.console() == null) Nil else Seq("-t") - // format: off val cmd = Seq[os.Shellable]( - "docker", "run", "--rm", termOpt, - "-v", s"$root:/data", - "-w", "/data", + "docker", + "run", + "--rm", + termOpt, + "-v", + s"$root:/data", + "-w", + "/data", ciOpt, baseImage, "/data/script.sh" ) - // format: on val res = os.proc(cmd).call(cwd = root) System.err.println(res.out.text()) val output = os.read(root / "output").trim @@ -470,17 +475,20 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String]) os.remove(root / "Dockerfile") val termOpt = if (System.console() == null) Nil else Seq("-t") val rawOutput = new ByteArrayOutputStream - // format: off val cmd = Seq[os.Shellable]( - "docker", "run", "--rm", termOpt, - "-v", s"$root:/data", - "-w", "/data", + "docker", + "run", + "--rm", + termOpt, + "-v", + s"$root:/data", + "-w", + "/data", ciOpt, "scala-cli-distroless-it", extraOptions, fileName ) - // format: on os.proc(cmd).call( cwd = root, stdout = os.ProcessOutput { (b, len) => @@ -874,16 +882,19 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String]) os.write(root / "script.sh", script) os.perms.set(root / "script.sh", "rwxr-xr-x") val termOpt = if (System.console() == null) Nil else Seq("-t") - // format: off val cmd = Seq[os.Shellable]( - "docker", "run", "--rm", termOpt, - "-v", s"$root:/data", - "-w", "/data", + "docker", + "run", + "--rm", + termOpt, + "-v", + s"$root:/data", + "-w", + "/data", ciOpt, baseImage, "/data/script.sh" ) - // format: on os.proc(cmd).call(cwd = root, stdout = os.Inherit) val rootOutput = os.read(root / "output-root").trim expect(rootOutput == message) diff --git a/modules/integration/src/test/scala/scala/cli/integration/RunTests212.scala b/modules/integration/src/test/scala/scala/cli/integration/RunTests212.scala index 4af7b12d78..9062b1abae 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/RunTests212.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/RunTests212.scala @@ -2,12 +2,7 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect -// format: off -class RunTests212 extends RunTestDefinitions( - scalaVersionOpt = Some(Constants.scala212) -) { - // format: on - +class RunTests212 extends RunTestDefinitions with Test212 { test("Descriptive error message for unsupported native/script configurations") { val inputs = TestInputs(os.rel / "a.sc" -> "println(1)") val nativeVersion = "0.4.2" diff --git a/modules/integration/src/test/scala/scala/cli/integration/RunTests213.scala b/modules/integration/src/test/scala/scala/cli/integration/RunTests213.scala index 830d5e599e..8ae4f69dcf 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/RunTests213.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/RunTests213.scala @@ -2,11 +2,7 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect -// format: off -class RunTests213 extends RunTestDefinitions( - scalaVersionOpt = Some(Constants.scala213) -){ -// format: on +class RunTests213 extends RunTestDefinitions with Test213 { test("ensure typesafe PR validation snapshot Scala versions are supported") { TestInputs(os.rel / "sample.sc" -> "println(util.Properties.versionNumberString)").fromRoot { root => diff --git a/modules/integration/src/test/scala/scala/cli/integration/RunTests3Lts.scala b/modules/integration/src/test/scala/scala/cli/integration/RunTests3Lts.scala new file mode 100644 index 0000000000..b1c860a790 --- /dev/null +++ b/modules/integration/src/test/scala/scala/cli/integration/RunTests3Lts.scala @@ -0,0 +1,3 @@ +package scala.cli.integration + +class RunTests3Lts extends RunTestDefinitions with Test3Lts diff --git a/modules/integration/src/test/scala/scala/cli/integration/RunTestsDefault.scala b/modules/integration/src/test/scala/scala/cli/integration/RunTestsDefault.scala index eae40cdb36..ab4787ea08 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/RunTestsDefault.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/RunTestsDefault.scala @@ -6,8 +6,7 @@ import scala.concurrent.ExecutionContext import scala.concurrent.duration.Duration import scala.util.{Properties, Try} -class RunTestsDefault extends RunTestDefinitions(scalaVersionOpt = None) { - +class RunTestsDefault extends RunTestDefinitions with TestDefault { def archLinuxTest(): Unit = { val message = "Hello from Scala CLI on Arch Linux" val inputs = TestInputs( @@ -26,17 +25,21 @@ class RunTestsDefault extends RunTestDefinitions(scalaVersionOpt = None) { os.write(root / "script.sh", script) os.perms.set(root / "script.sh", "rwxr-xr-x") val termOpt = if (System.console() == null) Nil else Seq("-t") - // format: off val cmd = Seq[os.Shellable]( - "docker", "run", "--rm", termOpt, - "-e", "SCALA_CLI_VENDORED_ZIS=true", - "-v", s"$root:/data", - "-w", "/data", + "docker", + "run", + "--rm", + termOpt, + "-e", + "SCALA_CLI_VENDORED_ZIS=true", + "-v", + s"$root:/data", + "-w", + "/data", ciOpt, Constants.dockerArchLinuxImage, "/data/script.sh" ) - // format: on val res = os.proc(cmd).call(cwd = root) System.err.println(res.out.text()) val output = os.read(root / "output").trim diff --git a/modules/integration/src/test/scala/scala/cli/integration/ScalaCliSuite.scala b/modules/integration/src/test/scala/scala/cli/integration/ScalaCliSuite.scala index cd9ea3d1f7..ab143cf71b 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ScalaCliSuite.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ScalaCliSuite.scala @@ -1,7 +1,6 @@ package scala.cli.integration abstract class ScalaCliSuite extends munit.FunSuite { - val testStartEndLogger = new Fixture[Unit]("files") { def apply(): Unit = () @@ -35,5 +34,6 @@ object ScalaCliSuite { case object First extends TestGroup(1) case object Second extends TestGroup(2) case object Third extends TestGroup(3) + case object Fourth extends TestGroup(4) } } diff --git a/modules/integration/src/test/scala/scala/cli/integration/ScriptWrapperTests.scala b/modules/integration/src/test/scala/scala/cli/integration/ScriptWrapperTests.scala index dba345d3eb..33f76868d8 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/ScriptWrapperTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/ScriptWrapperTests.scala @@ -6,7 +6,6 @@ import scala.concurrent.ExecutionContext import scala.concurrent.duration.Duration class ScriptWrapperTests extends ScalaCliSuite { - def expectAppWrapper(wrapperName: String, path: os.Path) = { val generatedFileContent = os.read(path) assert( diff --git a/modules/integration/src/test/scala/scala/cli/integration/SharedRunTests.scala b/modules/integration/src/test/scala/scala/cli/integration/SharedRunTests.scala index 6551cc7823..6844a21879 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/SharedRunTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/SharedRunTests.scala @@ -3,7 +3,6 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect class SharedRunTests extends ScalaCliSuite { - val printScalaVersionInputs: TestInputs = TestInputs( os.rel / "print.sc" -> s"""println(scala.util.Properties.versionNumberString) diff --git a/modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala b/modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala index 1ad17a7f54..8ee12af011 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala @@ -6,7 +6,6 @@ import os.CommandResult import scala.util.Properties class SipScalaTests extends ScalaCliSuite { - implicit class StringEnrichment(s: String) { def containsExperimentalWarningOf(featureNameAndType: String): Boolean = s.contains(s"The $featureNameAndType is experimental") || diff --git a/modules/integration/src/test/scala/scala/cli/integration/SparkTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/SparkTestDefinitions.scala index 965e5acf38..c2a54484f7 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/SparkTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/SparkTestDefinitions.scala @@ -8,7 +8,6 @@ import java.util.Locale import scala.util.Properties object SparkTestDefinitions { - def lightweightSparkDistribVersionOpt: Option[String] = Option("0.0.5") final class Spark(val sparkVersion: String, val scalaVersion: String) { @@ -52,9 +51,8 @@ object SparkTestDefinitions { } -abstract class SparkTestDefinitions(val scalaVersionOpt: Option[String]) extends ScalaCliSuite - with TestScalaVersionArgs { - +abstract class SparkTestDefinitions extends ScalaCliSuite with TestScalaVersionArgs { + _: TestScalaVersion => import SparkTestDefinitions.* protected lazy val extraOptions: Seq[String] = scalaVersionArgs ++ TestUtil.extraOptions diff --git a/modules/integration/src/test/scala/scala/cli/integration/SparkTests212.scala b/modules/integration/src/test/scala/scala/cli/integration/SparkTests212.scala index 6369eeccd9..3b38af3b92 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/SparkTests212.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/SparkTests212.scala @@ -8,8 +8,7 @@ import java.util.Locale import scala.jdk.CollectionConverters._ import scala.util.Properties -class SparkTests212 extends SparkTestDefinitions(scalaVersionOpt = Some(Constants.scala212)) { - +class SparkTests212 extends SparkTestDefinitions with Test212 { import SparkTestDefinitions.* private val spark30 = new Spark( diff --git a/modules/integration/src/test/scala/scala/cli/integration/SparkTests213.scala b/modules/integration/src/test/scala/scala/cli/integration/SparkTests213.scala index 9e024dafcf..4416fe26b6 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/SparkTests213.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/SparkTests213.scala @@ -1,3 +1,3 @@ package scala.cli.integration -class SparkTests213 extends SparkTestDefinitions(scalaVersionOpt = Some(Constants.scala213)) +class SparkTests213 extends SparkTestDefinitions with Test213 diff --git a/modules/integration/src/test/scala/scala/cli/integration/StandaloneLauncherTests.scala b/modules/integration/src/test/scala/scala/cli/integration/StandaloneLauncherTests.scala index d9ff17115e..82e4920e6f 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/StandaloneLauncherTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/StandaloneLauncherTests.scala @@ -5,7 +5,6 @@ import com.eed3si9n.expecty.Expecty.expect import java.io.File class StandaloneLauncherTests extends ScalaCliSuite { - test(s"Standalone launcher should run with java 8") { // It should download Java 17 and use it to run itself val message = "Hello World" diff --git a/modules/integration/src/test/scala/scala/cli/integration/TestBspClient.scala b/modules/integration/src/test/scala/scala/cli/integration/TestBspClient.scala index a1dffa032c..0bd576b1a1 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/TestBspClient.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/TestBspClient.scala @@ -11,7 +11,6 @@ import scala.concurrent.{ExecutionContext, Future, Promise} import scala.util.{Failure, Success} class TestBspClient extends b.BuildClient { - private val lock = new Object private val messages0 = new mutable.ListBuffer[Object] private def addMessage(params: Object): Unit = diff --git a/modules/integration/src/test/scala/scala/cli/integration/TestNativeImageOnScala3.scala b/modules/integration/src/test/scala/scala/cli/integration/TestNativeImageOnScala3.scala index 940cbbf9ad..c8513e5fed 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/TestNativeImageOnScala3.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/TestNativeImageOnScala3.scala @@ -5,7 +5,6 @@ import com.eed3si9n.expecty.Expecty.expect import scala.util.Properties class TestNativeImageOnScala3 extends ScalaCliSuite { - override def group: ScalaCliSuite.TestGroup = ScalaCliSuite.TestGroup.First def runTest(args: String*)(expectedLines: String*)(code: String): Unit = { diff --git a/modules/integration/src/test/scala/scala/cli/integration/TestScalaVersionArgs.scala b/modules/integration/src/test/scala/scala/cli/integration/TestScalaVersionArgs.scala index 7e4c033a57..2c84006c08 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/TestScalaVersionArgs.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/TestScalaVersionArgs.scala @@ -1,19 +1,40 @@ package scala.cli.integration -trait TestScalaVersionArgs extends ScalaCliSuite { +import scala.annotation.unused +trait TestScalaVersionArgs extends ScalaCliSuite { _: TestScalaVersion => override def group: ScalaCliSuite.TestGroup = if (actualScalaVersion.startsWith("2.12.")) ScalaCliSuite.TestGroup.Third else if (actualScalaVersion.startsWith("2.13.")) ScalaCliSuite.TestGroup.Second + else if (actualScalaVersion.startsWith(Constants.scala3LtsPrefix)) + ScalaCliSuite.TestGroup.Fourth else ScalaCliSuite.TestGroup.First - def scalaVersionOpt: Option[String] - lazy val scalaVersionArgs: Seq[String] = scalaVersionOpt match { case None => Nil case Some(sv) => Seq("--scala", sv) } lazy val actualScalaVersion: String = scalaVersionOpt.getOrElse(Constants.defaultScala) +} +sealed trait TestScalaVersion { _: TestScalaVersionArgs => + def scalaVersionOpt: Option[String] +} +trait Test213 extends TestScalaVersion { _: TestScalaVersionArgs => + override lazy val scalaVersionOpt: Option[String] = Some(Constants.scala213) +} +trait Test212 extends TestScalaVersion { _: TestScalaVersionArgs => + override lazy val scalaVersionOpt: Option[String] = Some(Constants.scala212) +} +trait Test3Lts extends TestScalaVersion { _: TestScalaVersionArgs => + override lazy val scalaVersionOpt: Option[String] = Some(Constants.scala3Lts) +} +@unused // TestDefault should normally be mixed in instead +trait Test3Next extends TestScalaVersion { _: TestScalaVersionArgs => + override lazy val scalaVersionOpt: Option[String] = Some(Constants.scala3Next) +} +trait TestDefault extends TestScalaVersion { _: TestScalaVersionArgs => + // this effectively should make the launcher default to 3.next + override lazy val scalaVersionOpt: Option[String] = None } diff --git a/modules/integration/src/test/scala/scala/cli/integration/TestTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/TestTestDefinitions.scala index 8afb78cc0b..6df0a98aa5 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/TestTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/TestTestDefinitions.scala @@ -4,9 +4,8 @@ import com.eed3si9n.expecty.Expecty.expect import scala.annotation.tailrec -abstract class TestTestDefinitions(val scalaVersionOpt: Option[String]) - extends ScalaCliSuite with TestScalaVersionArgs { - +abstract class TestTestDefinitions extends ScalaCliSuite with TestScalaVersionArgs { + _: TestScalaVersion => protected val jvmOptions: Seq[String] = // seems munit requires this with Scala 3 if (actualScalaVersion.startsWith("3.")) Seq("--jvm", "11") @@ -566,12 +565,15 @@ abstract class TestTestDefinitions(val scalaVersionOpt: Option[String]) expect(baseOutput.contains("Hello from tests")) expect(!baseOutput.contains("Hello from CustomFramework")) - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, "test", extraOptions, platformArgs, ".", - "--test-framework", "custom.CustomFramework" + TestUtil.cli, + "test", + extraOptions, + platformArgs, + ".", + "--test-framework", + "custom.CustomFramework" ) - // format: on val res = os.proc(cmd).call(cwd = root) val output = res.out.text() expect(output.contains("Hello from tests")) diff --git a/modules/integration/src/test/scala/scala/cli/integration/TestTests212.scala b/modules/integration/src/test/scala/scala/cli/integration/TestTests212.scala index f02c0776a9..9243ce98ac 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/TestTests212.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/TestTests212.scala @@ -1,7 +1,3 @@ package scala.cli.integration -// format: off -class TestTests212 extends TestTestDefinitions( - scalaVersionOpt = Some(Constants.scala212) -) -// format: on +class TestTests212 extends TestTestDefinitions with Test212 diff --git a/modules/integration/src/test/scala/scala/cli/integration/TestTests213.scala b/modules/integration/src/test/scala/scala/cli/integration/TestTests213.scala index e17c7f2960..9c64e418b9 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/TestTests213.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/TestTests213.scala @@ -1,7 +1,3 @@ package scala.cli.integration -// format: off -class TestTests213 extends TestTestDefinitions( - scalaVersionOpt = Some(Constants.scala213) -) -// format: on +class TestTests213 extends TestTestDefinitions with Test213 diff --git a/modules/integration/src/test/scala/scala/cli/integration/TestTests3Lts.scala b/modules/integration/src/test/scala/scala/cli/integration/TestTests3Lts.scala new file mode 100644 index 0000000000..0cccc1f1c1 --- /dev/null +++ b/modules/integration/src/test/scala/scala/cli/integration/TestTests3Lts.scala @@ -0,0 +1,3 @@ +package scala.cli.integration + +class TestTests3Lts extends TestTestDefinitions with Test3Lts diff --git a/modules/integration/src/test/scala/scala/cli/integration/TestTestsDefault.scala b/modules/integration/src/test/scala/scala/cli/integration/TestTestsDefault.scala index a9ea688148..3e4c21d7dc 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/TestTestsDefault.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/TestTestsDefault.scala @@ -4,8 +4,7 @@ import com.eed3si9n.expecty.Expecty.expect import java.io.File -class TestTestsDefault extends TestTestDefinitions(scalaVersionOpt = None) { - +class TestTestsDefault extends TestTestDefinitions with TestDefault { test("Pure Java with Scala tests") { val inputs = TestInputs( os.rel / "Messages.java" -> diff --git a/modules/integration/src/test/scala/scala/cli/integration/TestUtil.scala b/modules/integration/src/test/scala/scala/cli/integration/TestUtil.scala index 9f7834e5c4..67fda2ec71 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/TestUtil.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/TestUtil.scala @@ -21,8 +21,9 @@ object TestUtil { val isM1: Boolean = sys.props.get("os.arch").contains("aarch64") val cliPath: String = sys.props("test.scala-cli.path") val debugPortOpt: Option[String] = sys.props.get("test.scala-cli.debug.port") - val detectCliPath = if (TestUtil.isNativeCli) TestUtil.cliPath else "scala-cli" + val detectCliPath: String = if (TestUtil.isNativeCli) TestUtil.cliPath else "scala-cli" val cli: Seq[String] = cliCommand(cliPath) + val ltsEqualsNext: Boolean = Constants.scala3Lts equals Constants.scala3Next def cliCommand(cliPath: String): Seq[String] = if (isNativeCli) @@ -40,12 +41,12 @@ object TestUtil { case _ => Seq("java", "-Xmx512m", "-Xms128m", "-jar", cliPath) } - // format: off val extraOptions: List[String] = List( - "--bloop-startup-timeout", "2min", - "--bloop-bsp-timeout", "1min" + "--bloop-startup-timeout", + "2min", + "--bloop-bsp-timeout", + "1min" ) - // format: on def fromPath(app: String): Option[String] = { diff --git a/modules/integration/src/test/scala/scala/cli/integration/UpdateTests.scala b/modules/integration/src/test/scala/scala/cli/integration/UpdateTests.scala index 7bacdd03bf..24fec67afa 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/UpdateTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/UpdateTests.scala @@ -5,7 +5,6 @@ import com.eed3si9n.expecty.Expecty.expect import scala.util.Properties class UpdateTests extends ScalaCliSuite { - val firstVersion = "0.0.1" val dummyScalaCliFirstName = "DummyScalaCli-1.scala" val dummyScalaCliBinName = "scala-cli-dummy-test" @@ -18,11 +17,14 @@ class UpdateTests extends ScalaCliSuite { ) private def packageDummyScalaCli(root: os.Path, dummyScalaCliFileName: String, output: String) = { - // format: off val cmd = Seq[os.Shellable]( - TestUtil.cli, "--power", "package", dummyScalaCliFileName, "-o", output + TestUtil.cli, + "--power", + "package", + dummyScalaCliFileName, + "-o", + output ) - // format: on os.proc(cmd).call( cwd = root, stdin = os.Inherit, @@ -35,16 +37,18 @@ class UpdateTests extends ScalaCliSuite { binVersion: String, binDirPath: os.Path ) = { - // format: off val cmdInstallVersion = Seq[os.Shellable]( - TestUtil.cli, "install-home", + TestUtil.cli, + "install-home", "--env", - "--scala-cli-binary-path", binVersion, - "--binary-name", dummyScalaCliBinName, - "--bin-dir", binDirPath, + "--scala-cli-binary-path", + binVersion, + "--binary-name", + dummyScalaCliBinName, + "--bin-dir", + binDirPath, "--force" ) - // format: on os.proc(cmdInstallVersion).call( cwd = root, stdin = os.Inherit, @@ -77,16 +81,16 @@ class UpdateTests extends ScalaCliSuite { if (System.getenv("UPDATE_GH_TOKEN") == null) Nil else Seq("--gh-token", "env:UPDATE_GH_TOKEN") // update to newest version - // format: off val cmdUpdate = Seq[os.Shellable]( TestUtil.cli, "update", - "--binary-name", dummyScalaCliBinName, - "--bin-dir", binDirPath, + "--binary-name", + dummyScalaCliBinName, + "--bin-dir", + binDirPath, "--force", tokenOptions ) - // format: on os.proc(cmdUpdate).call( cwd = root, stdin = os.Inherit, diff --git a/modules/integration/src/test/scala/scala/cli/integration/WithWarmUpScalaCliSuite.scala b/modules/integration/src/test/scala/scala/cli/integration/WithWarmUpScalaCliSuite.scala index 45ac7c0898..40bb45e910 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/WithWarmUpScalaCliSuite.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/WithWarmUpScalaCliSuite.scala @@ -3,7 +3,6 @@ package scala.cli.integration import com.eed3si9n.expecty.Expecty.expect abstract class WithWarmUpScalaCliSuite extends ScalaCliSuite { - def warmUpExtraTestOptions: Seq[String] // warm-up run that downloads compiler bridges