diff --git a/build.mill.scala b/build.mill.scala index 3d77168989..5a49dbf935 100644 --- a/build.mill.scala +++ b/build.mill.scala @@ -303,9 +303,9 @@ trait BuildMacros extends ScalaCliCrossSbtModule else super.compileIvyDeps() ++ Agg(Deps.scalaReflect(crossScalaVersion)) } - object test extends ScalaCliTests { + object test extends ScalaCliTests with ScalaCliScalafixModule { override def scalacOptions: T[Seq[String]] = Task { - super.scalacOptions() ++ asyncScalacOptions(scalaVersion()) + super.scalacOptions() ++ Seq("-deprecation") } def testNegativeCompilation(): Command[Unit] = Task.Command(exclusive = true) { @@ -669,7 +669,8 @@ trait Options extends ScalaCliCrossSbtModule with ScalaCliPublishModule with Has override def repositoriesTask: Task[Seq[Repository]] = Task.Anon(super.repositoriesTask() ++ deps.customRepositories) - object test extends ScalaCliTests { + object test extends ScalaCliTests with ScalaCliScalafixModule { + override def scalacOptions = super.scalacOptions() ++ Seq("-deprecation") // uncomment below to debug tests in attach mode on 5005 port // def forkArgs = Task { // super.forkArgs() ++ Seq("-agentlib:jdwp=transport=dt_socket,server=n,address=localhost:5005,suspend=y") @@ -716,8 +717,9 @@ trait Build extends ScalaCliCrossSbtModule override def repositoriesTask: Task[Seq[Repository]] = Task.Anon(super.repositoriesTask() ++ deps.customRepositories) - object test extends ScalaCliTests { - override def ivyDeps: T[Loose.Agg[Dep]] = super.ivyDeps() ++ Agg( + object test extends ScalaCliTests with ScalaCliScalafixModule { + override def scalacOptions: T[Seq[String]] = super.scalacOptions() ++ Seq("-deprecation") + override def ivyDeps: T[Loose.Agg[Dep]] = super.ivyDeps() ++ Agg( Deps.pprint, Deps.slf4jNop ) diff --git a/modules/build-macros/src/test/scala/scala/build/CPSTest.scala b/modules/build-macros/src/test/scala/scala/build/CPSTest.scala index 1f1a0e638c..58cb67772c 100644 --- a/modules/build-macros/src/test/scala/scala/build/CPSTest.scala +++ b/modules/build-macros/src/test/scala/scala/build/CPSTest.scala @@ -1,13 +1,13 @@ package scala.build -import EitherCps._ +import scala.build.EitherCps.* class CPSTest extends munit.FunSuite { val failed1: Either[Int, String] = Left(1) val ok: Either[Int, String] = Right("OK") - def checkResult(expected: Either[Int, String])(res: => Either[Int, String]) = + def checkResult(expected: Either[Int, String])(res: => Either[Int, String]): Unit = assertEquals(expected, res) test("Basic CPS test") { diff --git a/modules/build/src/test/scala/scala/build/options/publish/VcsParseTest.scala b/modules/build/src/test/scala/scala/build/options/publish/VcsParseTest.scala index d421b4b549..c9741c4c7b 100644 --- a/modules/build/src/test/scala/scala/build/options/publish/VcsParseTest.scala +++ b/modules/build/src/test/scala/scala/build/options/publish/VcsParseTest.scala @@ -3,8 +3,6 @@ package scala.build.options.publish import scala.build.Positioned import scala.build.errors.{BuildException, MalformedInputError} -import munit.Assertions.assertEquals - class VcsParseTest extends munit.FunSuite { test("valid GitHub") { val actual = Vcs.parse(Positioned.none("github:VirtusLab/scala-cli")) @@ -18,24 +16,33 @@ class VcsParseTest extends munit.FunSuite { } test("invalid GitHub: missing /") { - val actual = Vcs.parse(Positioned.none("github:scala-cli")) - val expected = + val actual: Either[BuildException, Vcs] = Vcs.parse(Positioned.none("github:scala-cli")) + val expected = Left(new MalformedInputError("github-vcs", "github:scala-cli", "github:org/project", Nil)) - - assert(actual.isInstanceOf[Left[BuildException, Vcs]]) + assert { + actual match { + case Left(_: BuildException) => true + case _ => sys.error("incorrect type") + } + } assertEquals(expected.toString, actual.toString) } test("invalid GitHub: too many /") { - val actual = Vcs.parse(Positioned.none("github:github.com/VirtusLab/scala-cli")) + val actual: Either[BuildException, Vcs] = + Vcs.parse(Positioned.none("github:github.com/VirtusLab/scala-cli")) val expected = Left(new MalformedInputError( "github-vcs", "github:github.com/VirtusLab/scala-cli", "github:org/project", Nil )) - - assert(actual.isInstanceOf[Left[BuildException, Vcs]]) + assert { + actual match { + case Left(_: BuildException) => true + case _ => sys.error("incorrect type") + } + } assertEquals(expected.toString, actual.toString) } @@ -53,7 +60,7 @@ class VcsParseTest extends munit.FunSuite { } test("invalid generic: missing |") { - val actual = Vcs.parse(Positioned.none( + val actual: Either[BuildException, Vcs] = Vcs.parse(Positioned.none( "https://github.com/VirtusLab/scala-cli|scm:git:github.com/VirtusLab/scala-cli.git" )) val expected = Left(new MalformedInputError( @@ -63,29 +70,44 @@ class VcsParseTest extends munit.FunSuite { Nil )) - assert(actual.isInstanceOf[Left[BuildException, Vcs]]) + assert { + actual match { + case Left(_: BuildException) => true + case _ => sys.error("incorrect type") + } + } assertEquals(expected.toString, actual.toString) } test("invalid generic: extra |") { - val actual = Vcs.parse(Positioned.none("a|b|c|d")) - val expected = + val actual: Either[BuildException, Vcs] = Vcs.parse(Positioned.none("a|b|c|d")) + val expected = Left(new MalformedInputError("vcs", "a|b|c|d", "url|connection|developer-connection", Nil)) - assert(actual.isInstanceOf[Left[BuildException, Vcs]]) + assert { + actual match { + case Left(_: BuildException) => true + case _ => sys.error("incorrect type") + } + } assertEquals(expected.toString, actual.toString) } test("invalid generic: gibberish") { - val actual = Vcs.parse(Positioned.none("sfrgt pagdhn")) - val expected = Left(new MalformedInputError( + val actual: Either[BuildException, Vcs] = Vcs.parse(Positioned.none("sfrgt pagdhn")) + val expected = Left(new MalformedInputError( "vcs", "sfrgt pagdhn", "url|connection|developer-connection", Nil )) - assert(actual.isInstanceOf[Left[BuildException, Vcs]]) + assert { + actual match { + case Left(_: BuildException) => true + case _ => sys.error("incorrect type") + } + } assertEquals(expected.toString, actual.toString) } } diff --git a/modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala b/modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala index 8587d32d54..9e4913399a 100644 --- a/modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala @@ -1,27 +1,25 @@ package scala.build.tests import com.eed3si9n.expecty.Expecty.expect +import coursier.version.Version -import scala.build.options.{BuildOptions, InternalOptions, SuppressWarningOptions} import scala.build.Ops.* -import scala.build.{BuildThreads, Directories, LocalRepo} -import scala.build.actionable.ActionablePreprocessor -import scala.build.actionable.ActionableDiagnostic.* import scala.build.Position.File -import coursier.core.Version - -import scala.build.errors.{BuildException, CompositeBuildException} +import scala.build.actionable.ActionableDiagnostic.* +import scala.build.actionable.ActionablePreprocessor +import scala.build.options.{BuildOptions, InternalOptions, SuppressWarningOptions} +import scala.build.{BuildThreads, Directories, LocalRepo} class ActionableDiagnosticTests extends TestUtil.ScalaCliBuildSuite { - val extraRepoTmpDir = os.temp.dir(prefix = "scala-cli-tests-actionable-diagnostic-") - val directories = Directories.under(extraRepoTmpDir) - val baseOptions = BuildOptions( + val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-actionable-diagnostic-") + val directories: Directories = Directories.under(extraRepoTmpDir) + val baseOptions = BuildOptions( internal = InternalOptions( localRepository = LocalRepo.localRepo(directories.localRepoDir, TestLogger()) ) ) - val buildThreads = BuildThreads.create() + val buildThreads: BuildThreads = BuildThreads.create() def path2url(p: os.Path): String = p.toIO.toURI.toURL.toString diff --git a/modules/build/src/test/scala/scala/build/tests/BspServerTests.scala b/modules/build/src/test/scala/scala/build/tests/BspServerTests.scala index 07612693ac..5a5244574d 100644 --- a/modules/build/src/test/scala/scala/build/tests/BspServerTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/BspServerTests.scala @@ -1,13 +1,10 @@ package scala.build.tests import com.eed3si9n.expecty.Expecty.expect -import coursier.cache.CacheLogger -import org.scalajs.logging.{NullLogger, Logger as ScalaJsLogger} import java.util.concurrent.TimeUnit + import scala.build.Ops.* -import scala.build.{Build, BuildThreads, Directories, GeneratedSource, LocalRepo} -import scala.build.options.{BuildOptions, InternalOptions, Scope} import scala.build.bsp.{ BspServer, ScalaScriptBuildServer, @@ -16,20 +13,20 @@ import scala.build.bsp.{ WrappedSourcesParams, WrappedSourcesResult } +import scala.build.options.{BuildOptions, InternalOptions, Scope} +import scala.build.{Build, BuildThreads, Directories, GeneratedSource, LocalRepo} import scala.collection.mutable.ArrayBuffer import scala.jdk.CollectionConverters.* -import scala.build.bsp.{WrappedSourcesItem, WrappedSourcesResult} -import scala.build.internal.ClassCodeWrapper class BspServerTests extends TestUtil.ScalaCliBuildSuite { - val extraRepoTmpDir = os.temp.dir(prefix = "scala-cli-tests-bsp-server-") - val directories = Directories.under(extraRepoTmpDir) - val baseOptions = BuildOptions( + val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-bsp-server-") + val directories: Directories = Directories.under(extraRepoTmpDir) + val baseOptions = BuildOptions( internal = InternalOptions( localRepository = LocalRepo.localRepo(directories.localRepoDir, TestLogger()) ) ) - val buildThreads = BuildThreads.create() + val buildThreads: BuildThreads = BuildThreads.create() def getScriptBuildServer( generatedSources: Seq[GeneratedSource], diff --git a/modules/build/src/test/scala/scala/build/tests/BuildOptionsTests.scala b/modules/build/src/test/scala/scala/build/tests/BuildOptionsTests.scala index 9c3ab79801..3599f07000 100644 --- a/modules/build/src/test/scala/scala/build/tests/BuildOptionsTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/BuildOptionsTests.scala @@ -1,44 +1,32 @@ package scala.build.tests import com.eed3si9n.expecty.Expecty.assert as expect -import coursier.{Repositories, Repository} +import coursier.Repositories import coursier.cache.FileCache -import coursier.core.Version import coursier.maven.MavenRepository +import coursier.version.Version import dependency.ScalaParameters import scala.build.Ops.* import scala.build.errors.{ InvalidBinaryScalaVersionError, NoValidScalaVersionFoundError, + ScalaVersionError, UnsupportedScalaVersionError } import scala.build.internal.Constants.* -import scala.build.internal.Regexes.scala2NightlyRegex -import scala.build.options.{ - BuildOptions, - BuildRequirements, - ClassPathOptions, - InternalOptions, - MaybeScalaVersion, - ScalaOptions, - ScalaVersionUtil, - ScalacOpt, - ShadowingSeq -} -import scala.build.{Build, BuildThreads, Directories, LocalRepo, Positioned, RepositoryUtils} +import scala.build.internal.Regexes.{scala2NightlyRegex, scala3LtsRegex} +import scala.build.options.* import scala.build.tests.util.BloopServer +import scala.build.{Build, BuildThreads, Directories, LocalRepo, Positioned, RepositoryUtils} import scala.concurrent.duration.DurationInt -import scala.build.internal.Regexes.scala3LtsRegex -import scala.build.errors.ScalaVersionError class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite { override def munitFlakyOK: Boolean = TestUtil.isCI - - val extraRepoTmpDir = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") - val directories = Directories.under(extraRepoTmpDir) - val buildThreads = BuildThreads.create() - val baseOptions = BuildOptions( + val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") + val directories: Directories = Directories.under(extraRepoTmpDir) + val buildThreads: BuildThreads = BuildThreads.create() + val baseOptions = BuildOptions( internal = InternalOptions( localRepository = LocalRepo.localRepo(directories.localRepoDir, TestLogger()), keepDiagnostics = true @@ -64,7 +52,7 @@ class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite { scalaVersion = Some(MaybeScalaVersion("3.nightly")) ) ) - val scalaParams = options.scalaParams.orThrow.getOrElse(???) + val scalaParams = options.scalaParams.orThrow.getOrElse(sys.error("should not happen")) assert( scalaParams.scalaVersion.startsWith("3") && scalaParams.scalaVersion.endsWith("-NIGHTLY"), "-S 3.nightly argument does not lead to scala3 nightly build option" @@ -76,7 +64,7 @@ class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite { scalaVersion = Some(MaybeScalaVersion("3.1.nightly")) ) ) - val scalaParams = options.scalaParams.orThrow.getOrElse(???) + val scalaParams = options.scalaParams.orThrow.getOrElse(sys.error("should not happen")) expect( scalaParams.scalaVersion.startsWith("3.1.") && scalaParams.scalaVersion.endsWith("-NIGHTLY"), "-S 3.1.nightly argument does not lead to scala 3.1. nightly build option" @@ -181,7 +169,7 @@ class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite { scalaVersion = Some(MaybeScalaVersion("3.1.2-RC1")) ) ) - val scalaParams = options.scalaParams.orThrow.getOrElse(???) + val scalaParams = options.scalaParams.orThrow.getOrElse(sys.error("should not happen")) assert( scalaParams.scalaVersion == "3.1.2-RC1", "-S 3.1.2-RC1 argument does not lead to 3.1.2-RC1 build option" @@ -224,7 +212,7 @@ class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite { scalaVersion = Some(MaybeScalaVersion("2.nightly")) ) ) - val scalaParams = options.scalaParams.orThrow.getOrElse(???) + val scalaParams = options.scalaParams.orThrow.getOrElse(sys.error("should not happen")) assert( scala2NightlyRegex.unapplySeq(scalaParams.scalaVersion).isDefined, "-S 2.nightly argument does not lead to scala2 nightly build option" @@ -237,7 +225,7 @@ class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite { scalaVersion = Some(MaybeScalaVersion("2.13.nightly")) ) ) - val scalaParams = options.scalaParams.orThrow.getOrElse(???) + val scalaParams = options.scalaParams.orThrow.getOrElse(sys.error("should not happen")) assert( scala2NightlyRegex.unapplySeq(scalaParams.scalaVersion).isDefined, "-S 2.13.nightly argument does not lead to scala2 nightly build option" @@ -250,7 +238,7 @@ class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite { scalaVersion = Some(MaybeScalaVersion("3.lts")) ) ) - val scalaParams = options.scalaParams.orThrow.getOrElse(???) + val scalaParams = options.scalaParams.orThrow.getOrElse(sys.error("should not happen")) assert( scala3LtsRegex.unapplySeq(scalaParams.scalaVersion).isDefined, "-S 3.lts argument does not lead to scala3 LTS" @@ -263,7 +251,7 @@ class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite { scalaVersion = Some(MaybeScalaVersion("2.12.nightly")) ) ) - val scalaParams = options.scalaParams.orThrow.getOrElse(???) + val scalaParams = options.scalaParams.orThrow.getOrElse(sys.error("should not happen")) assert( scala2NightlyRegex.unapplySeq(scalaParams.scalaVersion).isDefined, "-S 2.12.nightly argument does not lead to scala2 nightly build option" @@ -276,7 +264,7 @@ class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite { scalaVersion = Some(MaybeScalaVersion("2.13.9-bin-4505094")) ) ) - val scalaParams = options.scalaParams.orThrow.getOrElse(???) + val scalaParams = options.scalaParams.orThrow.getOrElse(sys.error("should not happen")) assert( scalaParams.scalaVersion == "2.13.9-bin-4505094", "-S 2.13.9-bin-4505094 argument does not lead to 2.13.9-bin-4505094 scala version in build option" @@ -292,7 +280,7 @@ class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite { ) } - val expectedScalaVersions = Seq( + val expectedScalaVersions: Seq[(Option[String], String)] = Seq( None -> defaultScalaVersion, Some("2.13.2") -> "2.13.2", Some("3.0.1") -> "3.0.1", @@ -311,7 +299,7 @@ class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite { cache = Some(FileCache().withTtl(0.seconds)) ) ) - val scalaParams = options.scalaParams.orThrow.getOrElse(???) + val scalaParams = options.scalaParams.orThrow.getOrElse(sys.error("should not happen")) val expectedScalaParams = ScalaParameters(expectedScalaVersion) @@ -375,7 +363,7 @@ class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite { testDescription = s"-S $prefix should choose the $expectedVersionDescription version ($expectedVersion), not necessarily the latest stable ($latestMatchingVersion) $launcherDefaultVersionDescription" } test(testDescription) { - val scalaParams = options.scalaParams.orThrow.getOrElse(???) + val scalaParams = options.scalaParams.orThrow.getOrElse(sys.error("should not happen")) val expectedScalaParams = ScalaParameters(expectedVersion) diff --git a/modules/build/src/test/scala/scala/build/tests/BuildProjectTests.scala b/modules/build/src/test/scala/scala/build/tests/BuildProjectTests.scala index 6a481dfaa7..6657cc5938 100644 --- a/modules/build/src/test/scala/scala/build/tests/BuildProjectTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/BuildProjectTests.scala @@ -3,66 +3,54 @@ package scala.build.tests import bloop.rifle.BloopRifleLogger import com.eed3si9n.expecty.Expecty.expect import coursier.cache.CacheLogger -import org.scalajs.logging.{NullLogger, Logger as ScalaJsLogger} +import org.scalajs.logging.{Logger as ScalaJsLogger, NullLogger} import java.io.PrintStream + import scala.build.Ops.* -import scala.build.errors.{BuildException, Diagnostic, Severity} +import scala.build.errors.{BuildException, Diagnostic} import scala.build.input.Inputs import scala.build.internals.FeatureType -import scala.build.options.{ - BuildOptions, - InternalOptions, - JavaOptions, - ScalaOptions, - ScalacOpt, - Scope, - ShadowingSeq -} -import scala.build.{Build, LocalRepo, Logger, Position, Positioned, Sources} +import scala.build.options.{BuildOptions, InternalOptions, Scope} +import scala.build.{Build, LocalRepo, Logger, Sources} class BuildProjectTests extends TestUtil.ScalaCliBuildSuite { class LoggerMock extends Logger { - - var diagnostics: List[Diagnostic] = Nil - - override def error(message: String): Unit = ??? - - override def message(message: => String): Unit = ??? - - override def log(s: => String): Unit = ??? - - override def log(s: => String, debug: => String): Unit = ??? - - override def debug(s: => String): Unit = {} - - override def log(diagnostics: Seq[Diagnostic]): Unit = { + var diagnostics: List[Diagnostic] = Nil + override def error(message: String): Unit = sys.error(message) + override def message(message: => String): Unit = System.err.println(message) + override def log(s: => String): Unit = System.err.println(s) + override def log(s: => String, debug: => String): Unit = System.err.println(s) + override def debug(s: => String): Unit = System.err.println(s) + override def log(diagnostics: Seq[Diagnostic]): Unit = { this.diagnostics = this.diagnostics ++ diagnostics } - - override def log(ex: BuildException): Unit = {} - override def debug(ex: BuildException): Unit = {} - - override def exit(ex: BuildException): Nothing = ??? - - override def coursierLogger(message: String): CacheLogger = CacheLogger.nop - - override def bloopRifleLogger: BloopRifleLogger = BloopRifleLogger.nop - override def scalaJsLogger: ScalaJsLogger = NullLogger - + override def log(ex: BuildException): Unit = { + ex.printStackTrace() + System.err.println(ex.message) + } + override def debug(ex: BuildException): Unit = { + ex.printStackTrace() + System.err.println(ex.message) + } + override def exit(ex: BuildException): Nothing = { + ex.printStackTrace() + System.err.println(ex.message) + sys.exit(1) + } + override def coursierLogger(message: String): CacheLogger = CacheLogger.nop + override def bloopRifleLogger: BloopRifleLogger = BloopRifleLogger.nop + override def scalaJsLogger: ScalaJsLogger = NullLogger override def scalaNativeTestLogger: scala.scalanative.build.Logger = scala.scalanative.build.Logger.nullLogger - override def scalaNativeCliInternalLoggerOptions: List[String] = List() - - override def compilerOutputStream: PrintStream = ??? - - override def verbosity = ??? - - override def experimentalWarning(featureName: String, featureType: FeatureType): Unit = ??? - override def flushExperimentalWarnings: Unit = ??? + override def compilerOutputStream: PrintStream = System.out + override def verbosity: Int = 0 + override def experimentalWarning(featureName: String, featureType: FeatureType): Unit = + System.err.println(s"experimental: $featureName") + override def flushExperimentalWarnings: Unit = () } test("workspace for bsp") { diff --git a/modules/build/src/test/scala/scala/build/tests/BuildTests.scala b/modules/build/src/test/scala/scala/build/tests/BuildTests.scala index 6a732fdece..867f93f3d8 100644 --- a/modules/build/src/test/scala/scala/build/tests/BuildTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/BuildTests.scala @@ -1,47 +1,38 @@ package scala.build.tests import bloop.config.Config.LinkerMode +import bloop.rifle.BloopRifleConfig import ch.epfl.scala.bsp4j import com.eed3si9n.expecty.Expecty.expect import com.google.gson.Gson -import coursier.cache.ArtifactError import dependency.parser.DependencyParser import java.io.IOException + import scala.build.Ops.* import scala.build.errors.{ DependencyFormatError, InvalidBinaryScalaVersionError, ScalaNativeCompatibilityError } -import scala.build.options.{ - BuildOptions, - InternalOptions, - JavaOpt, - MaybeScalaVersion, - ScalaJsMode, - ScalacOpt, - ScriptOptions, - ShadowingSeq -} +import scala.build.options.* import scala.build.tastylib.TastyData import scala.build.tests.TestUtil.* import scala.build.tests.util.BloopServer import scala.build.{Build, BuildThreads, Directories, LocalRepo, Positioned} +import scala.jdk.CollectionConverters.* import scala.meta.internal.semanticdb.TextDocuments import scala.util.Properties -import scala.jdk.CollectionConverters.* abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { private def hasDiagnostics = server - val buildThreads = BuildThreads.create() - def bloopConfigOpt = - if (server) Some(BloopServer.bloopConfig) - else None + val buildThreads: BuildThreads = BuildThreads.create() + def bloopConfigOpt: Option[BloopRifleConfig] = + if server then Some(BloopServer.bloopConfig) else None - val extraRepoTmpDir = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") - val directories = Directories.under(extraRepoTmpDir) + val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") + val directories: Directories = Directories.under(extraRepoTmpDir) override def afterAll(): Unit = { TestInputs.tryRemoveAll(extraRepoTmpDir) @@ -55,8 +46,8 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { ) ) - def sv2 = Constants.defaultScala213Version - val defaultOptions = baseOptions.copy( + def sv2: String = Constants.defaultScala213Version + val defaultOptions: BuildOptions = baseOptions.copy( scalaOptions = baseOptions.scalaOptions.copy( scalaVersion = Some(MaybeScalaVersion(sv2)), scalaBinaryVersion = None @@ -64,8 +55,8 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { scriptOptions = ScriptOptions(Some(true)) ) - def sv3 = Constants.defaultScalaVersion - val defaultScala3Options = defaultOptions.copy( + def sv3: String = Constants.defaultScalaVersion + val defaultScala3Options: BuildOptions = defaultOptions.copy( scalaOptions = defaultOptions.scalaOptions.copy( scalaVersion = Some(MaybeScalaVersion(sv3)), scalaBinaryVersion = None @@ -118,7 +109,7 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { "simple$package.class", "simple$package.tasty" ) - maybeBuild.orThrow.assertNoDiagnostics + maybeBuild.orThrow.assertNoDiagnostics() } } @@ -142,7 +133,7 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { "other$package.class", "other$package.tasty" ) - maybeBuild.orThrow.assertNoDiagnostics + maybeBuild.orThrow.assertNoDiagnostics() } } @@ -193,7 +184,7 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { "simple.class", "META-INF/semanticdb/simple.sc.semanticdb" ) - maybeBuild.orThrow.assertNoDiagnostics + maybeBuild.orThrow.assertNoDiagnostics() val outputDir = build.outputOpt.getOrElse(sys.error("no build output???")) val semDb = os.read.bytes(outputDir / "META-INF" / "semanticdb" / "simple.sc.semanticdb") @@ -247,7 +238,7 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { "simple$package.tasty", "META-INF/semanticdb/simple.sc.semanticdb" ) - maybeBuild.orThrow.assertNoDiagnostics + maybeBuild.orThrow.assertNoDiagnostics() val outputDir = build.outputOpt.getOrElse(sys.error("no build output???")) val tastyData = TastyData.read(os.read.bytes(outputDir / "simple$_.tasty")).orThrow val names = tastyData.names.simpleNames @@ -272,7 +263,7 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { "simple.class", "simple.sjsir" ) - maybeBuild.orThrow.assertNoDiagnostics + maybeBuild.orThrow.assertNoDiagnostics() } } @@ -293,7 +284,7 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { "simple.class", "simple.nir" ) - maybeBuild.orThrow.assertNoDiagnostics + maybeBuild.orThrow.assertNoDiagnostics() } } if (!Properties.isWin) @@ -316,7 +307,7 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { "simple$.class", "simple$delayedInit$body.class" ) - maybeBuild.orThrow.assertNoDiagnostics + maybeBuild.orThrow.assertNoDiagnostics() } } @@ -345,7 +336,7 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { "simple2$delayedInit$body.class", "simple2.class" ) - maybeBuild.orThrow.assertNoDiagnostics + maybeBuild.orThrow.assertNoDiagnostics() } } @@ -656,7 +647,7 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { val buildOptions = defaultOptions.copy( scalaOptions = defaultOptions.scalaOptions.copy( scalacOptions = ShadowingSeq.from( - cliScalacOptions.map(ScalacOpt(_)).map(Positioned.commandLine(_)) + cliScalacOptions.map(ScalacOpt(_)).map(Positioned.commandLine) ) ) ) @@ -687,7 +678,7 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { val buildOptions = defaultOptions.copy( javaOptions = defaultOptions.javaOptions.copy( javaOpts = ShadowingSeq.from( - cliJavaOptions.map(JavaOpt(_)).map(Positioned.commandLine(_)) + cliJavaOptions.map(JavaOpt(_)).map(Positioned.commandLine) ) ) ) @@ -966,7 +957,8 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite { |""".stripMargin } - val testInputs = TestInputs(mainInput +: additionalInputs: _*) + val allInputs = mainInput +: additionalInputs + val testInputs = TestInputs(allInputs*) testInputs.withBuild(options, buildThreads, bloopConfigOpt) { (_, _, maybeBuild) => expect(maybeBuild.exists(_.success)) diff --git a/modules/build/src/test/scala/scala/build/tests/DirectiveTests.scala b/modules/build/src/test/scala/scala/build/tests/DirectiveTests.scala index 28c4d7bcc5..c9d233f834 100644 --- a/modules/build/src/test/scala/scala/build/tests/DirectiveTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/DirectiveTests.scala @@ -1,9 +1,15 @@ package scala.build.tests +import bloop.rifle.BloopRifleConfig import com.eed3si9n.expecty.Expecty.expect -import java.io.IOException -import scala.build.{Build, BuildThreads, Directories, LocalRepo, Position, Positioned} +import scala.build.Ops.EitherThrowOps +import scala.build.errors.{ + CompositeBuildException, + DependencyFormatError, + FetchingDependenciesError, + ToolkitDirectiveMissingVersionError +} import scala.build.options.{ BuildOptions, InternalOptions, @@ -13,24 +19,13 @@ import scala.build.options.{ Scope } import scala.build.tests.util.BloopServer -import build.Ops.EitherThrowOps -import dependency.AnyDependency - -import scala.build.errors.{ - CompositeBuildException, - DependencyFormatError, - FetchingDependenciesError, - ToolkitDirectiveMissingVersionError -} +import scala.build.{Build, BuildThreads, Directories, LocalRepo, Position, Positioned} class DirectiveTests extends TestUtil.ScalaCliBuildSuite { - - val buildThreads = BuildThreads.create() - - def bloopConfigOpt = Some(BloopServer.bloopConfig) - - val extraRepoTmpDir = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") - val directories = Directories.under(extraRepoTmpDir) + val buildThreads: BuildThreads = BuildThreads.create() + def bloopConfigOpt: Option[BloopRifleConfig] = Some(BloopServer.bloopConfig) + val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") + val directories: Directories = Directories.under(extraRepoTmpDir) override def afterAll(): Unit = { TestInputs.tryRemoveAll(extraRepoTmpDir) @@ -109,17 +104,17 @@ class DirectiveTests extends TestUtil.ScalaCliBuildSuite { ) testInputs.withBuilds(baseOptions, buildThreads, bloopConfigOpt) { (_, _, maybeBuilds) => - val expectedVersion = "latest.release" - val builds = maybeBuilds.orThrow - val Some(mainBuild) = builds.get(Scope.Main) - val Some(toolkitDep) = - mainBuild.options.classPathOptions.extraDependencies.toSeq.headOption.map(_.value) + val expectedVersion = "latest.release" + val builds = maybeBuilds.orThrow + val mainBuild = builds.get(Scope.Main).get + val toolkitDep = + mainBuild.options.classPathOptions.extraDependencies.toSeq.headOption.map(_.value).get expect(toolkitDep.organization == Constants.toolkitOrganization) expect(toolkitDep.name == Constants.toolkitName) expect(toolkitDep.version == expectedVersion) - val Some(testBuild) = builds.get(Scope.Test) - val Some(toolkitTestDep) = - testBuild.options.classPathOptions.extraDependencies.toSeq.headOption.map(_.value) + val testBuild = builds.get(Scope.Test).get + val toolkitTestDep = + testBuild.options.classPathOptions.extraDependencies.toSeq.headOption.map(_.value).get expect(toolkitTestDep.organization == Constants.toolkitOrganization) expect(toolkitTestDep.name == Constants.toolkitTestName) expect(toolkitTestDep.version == expectedVersion) @@ -138,6 +133,7 @@ class DirectiveTests extends TestUtil.ScalaCliBuildSuite { maybeBuilds match case Left(ToolkitDirectiveMissingVersionError(_, errorKey)) => expect(errorKey == toolkitDirectiveKey) + case _ => sys.error("should not happen") } } for (scope <- Scope.all) { @@ -350,10 +346,10 @@ class DirectiveTests extends TestUtil.ScalaCliBuildSuite { os.rel / dummySourcesJar -> "dummy-sources" ).withBuild(baseOptions, buildThreads, bloopConfigOpt) { (root, _, maybeBuild) => - val build = maybeBuild.orThrow - val Some(jar) = build.options.classPathOptions.extraClassPath.headOption + val build = maybeBuild.orThrow + val jar = build.options.classPathOptions.extraClassPath.head expect(jar == root / dummyJar) - val Some(sourceJar) = build.options.classPathOptions.extraSourceJars.headOption + val sourceJar = build.options.classPathOptions.extraSourceJars.head expect(sourceJar == root / dummySourcesJar) } } @@ -466,7 +462,10 @@ class DirectiveTests extends TestUtil.ScalaCliBuildSuite { errors match { case error: CompositeBuildException => expect(error.exceptions.length == 2) - expect(error.exceptions.forall(_.isInstanceOf[FetchingDependenciesError])) + expect(error.exceptions.forall { + case _: FetchingDependenciesError => true + case _ => false + }) expect(error.exceptions.forall(_.positions.length == 1)) { @@ -516,7 +515,7 @@ class DirectiveTests extends TestUtil.ScalaCliBuildSuite { |""".stripMargin ) testInputs.withBuild(Scala322Options, buildThreads, bloopConfigOpt, scope = Scope.Test) { - (root, _, maybeBuild) => expect(maybeBuild.exists(_.success)) + (_, _, maybeBuild) => expect(maybeBuild.exists(_.success)) } } } diff --git a/modules/build/src/test/scala/scala/build/tests/DistinctByTests.scala b/modules/build/src/test/scala/scala/build/tests/DistinctByTests.scala index 38077462de..385aa9fca4 100644 --- a/modules/build/src/test/scala/scala/build/tests/DistinctByTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/DistinctByTests.scala @@ -1,17 +1,15 @@ package scala.build.tests import com.eed3si9n.expecty.Expecty.expect - -import scala.build.CollectionOps.distinctBy class DistinctByTests extends TestUtil.ScalaCliBuildSuite { case class Message(a: String, b: Int) - val distinctData = Seq( + val distinctData: Seq[Message] = Seq( Message(a = "1", b = 4), Message(a = "2", b = 3), Message(a = "3", b = 2), Message(a = "4", b = 1) ) - val repeatingData = Seq( + val repeatingData: Seq[Message] = Seq( Message(a = "1", b = 4), Message(a = "1", b = 44), Message(a = "2", b = 3), diff --git a/modules/build/src/test/scala/scala/build/tests/ExcludeTests.scala b/modules/build/src/test/scala/scala/build/tests/ExcludeTests.scala index a3c1a0a2ea..87a8db9a30 100644 --- a/modules/build/src/test/scala/scala/build/tests/ExcludeTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/ExcludeTests.scala @@ -6,17 +6,16 @@ import coursier.cache.{ArchiveCache, ArtifactError, Cache} import coursier.util.{Artifact, EitherT, Task} import java.io.File + import scala.build.Ops.* -import scala.build.Sources -import scala.build.CrossSources import scala.build.errors.ExcludeDefinitionError import scala.build.input.ScalaCliInvokeData import scala.build.options.{BuildOptions, Scope, SuppressWarningOptions} import scala.build.preprocessing.Preprocessor +import scala.build.{CrossSources, Sources} import scala.concurrent.ExecutionContext class ExcludeTests extends TestUtil.ScalaCliBuildSuite { - val preprocessors: Seq[Preprocessor] = Sources.defaultPreprocessors( archiveCache = ArchiveCache().withCache( new Cache[Task] { diff --git a/modules/build/src/test/scala/scala/build/tests/InputsTests.scala b/modules/build/src/test/scala/scala/build/tests/InputsTests.scala index a2f7fcc7bf..5cf10bdd3e 100644 --- a/modules/build/src/test/scala/scala/build/tests/InputsTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/InputsTests.scala @@ -3,7 +3,7 @@ package scala.build.tests import bloop.rifle.BloopRifleConfig import com.eed3si9n.expecty.Expecty.expect -import scala.build.Build +import scala.build.input.ElementsUtils.* import scala.build.input.{ Inputs, ScalaCliInvokeData, @@ -11,11 +11,10 @@ import scala.build.input.{ VirtualScalaFile, VirtualScript } -import scala.build.input.ElementsUtils.* -import scala.build.options.{BuildOptions, InternalOptions, MaybeScalaVersion} -import scala.build.tests.util.BloopServer -import scala.build.{BuildThreads, Directories, LocalRepo} import scala.build.internal.Constants +import scala.build.options.{BuildOptions, InternalOptions} +import scala.build.tests.util.BloopServer +import scala.build.{Build, BuildThreads, Directories, LocalRepo} class InputsTests extends TestUtil.ScalaCliBuildSuite { val buildThreads: BuildThreads = BuildThreads.create() @@ -145,7 +144,7 @@ class InputsTests extends TestUtil.ScalaCliBuildSuite { val elements = Inputs.validateArgs( urls, root, - download = url => Right(Array.emptyByteArray), + download = _ => Right(Array.emptyByteArray), stdinOpt = None, acceptFds = true, enableMarkdown = true diff --git a/modules/build/src/test/scala/scala/build/tests/OfflineTests.scala b/modules/build/src/test/scala/scala/build/tests/OfflineTests.scala index d3b205d9b1..8aafc497bc 100644 --- a/modules/build/src/test/scala/scala/build/tests/OfflineTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/OfflineTests.scala @@ -1,36 +1,15 @@ package scala.build.tests +import coursier.cache.FileCache -import com.eed3si9n.expecty.Expecty.expect -import coursier.cache.{CacheLogger, FileCache} -import org.scalajs.logging.{NullLogger, Logger as ScalaJsLogger} - -import java.util.concurrent.TimeUnit -import scala.build.Ops.* -import scala.build.bsp.{ - BspServer, - ScalaScriptBuildServer, - WrappedSourceItem, - WrappedSourcesItem, - WrappedSourcesParams, - WrappedSourcesResult -} -import scala.build.errors.{ - InvalidBinaryScalaVersionError, - NoValidScalaVersionFoundError, - ScalaVersionError, - UnsupportedScalaVersionError -} -import scala.build.internal.ClassCodeWrapper -import scala.build.options.{BuildOptions, InternalOptions, Scope} +import scala.build.errors.ScalaVersionError +import scala.build.options.{BuildOptions, InternalOptions} import scala.build.tests.Constants -import scala.build.{Build, BuildThreads, Directories, GeneratedSource, LocalRepo} -import scala.collection.mutable.ArrayBuffer -import scala.jdk.CollectionConverters.* +import scala.build.{BuildThreads, Directories} class OfflineTests extends TestUtil.ScalaCliBuildSuite { - val extraRepoTmpDir = os.temp.dir(prefix = "scala-cli-tests-offline-") - val directories = Directories.under(extraRepoTmpDir) - val baseOptions = BuildOptions( + val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-offline-") + val directories: Directories = Directories.under(extraRepoTmpDir) + val baseOptions: BuildOptions = BuildOptions( internal = InternalOptions( cache = Some(FileCache() .withLocation(directories.cacheDir.toString) @@ -38,7 +17,7 @@ class OfflineTests extends TestUtil.ScalaCliBuildSuite { ) ) - val buildThreads = BuildThreads.create() + val buildThreads: BuildThreads = BuildThreads.create() for ( defaultVersion <- Seq( @@ -58,7 +37,7 @@ class OfflineTests extends TestUtil.ScalaCliBuildSuite { ) testInputs.withBuild(baseOptions, buildThreads, None) { - (root, _, maybeBuild) => + (_, _, maybeBuild) => maybeBuild match { case Left(e: ScalaVersionError) => munit.Assertions.fail( diff --git a/modules/build/src/test/scala/scala/build/tests/PackagingUsingDirectiveTests.scala b/modules/build/src/test/scala/scala/build/tests/PackagingUsingDirectiveTests.scala index 3072a1791e..9b0656cebf 100644 --- a/modules/build/src/test/scala/scala/build/tests/PackagingUsingDirectiveTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/PackagingUsingDirectiveTests.scala @@ -1,5 +1,6 @@ package scala.build.tests +import bloop.rifle.BloopRifleConfig import com.eed3si9n.expecty.Expecty.expect import scala.build.options.{BuildOptions, InternalOptions, PackageType} @@ -7,12 +8,11 @@ import scala.build.tests.util.BloopServer import scala.build.{BuildThreads, Directories, LocalRepo} class PackagingUsingDirectiveTests extends TestUtil.ScalaCliBuildSuite { + val buildThreads: BuildThreads = BuildThreads.create() + def bloopConfig: Option[BloopRifleConfig] = Some(BloopServer.bloopConfig) - val buildThreads = BuildThreads.create() - def bloopConfig = Some(BloopServer.bloopConfig) - - val extraRepoTmpDir = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") - val directories = Directories.under(extraRepoTmpDir) + val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") + val directories: Directories = Directories.under(extraRepoTmpDir) val buildOptions = BuildOptions( internal = InternalOptions( diff --git a/modules/build/src/test/scala/scala/build/tests/PreprocessingTests.scala b/modules/build/src/test/scala/scala/build/tests/PreprocessingTests.scala index f3089c964f..bcc4ca5864 100644 --- a/modules/build/src/test/scala/scala/build/tests/PreprocessingTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/PreprocessingTests.scala @@ -1,13 +1,12 @@ package scala.build.tests -import scala.build.preprocessing.{MarkdownPreprocessor, ScalaPreprocessor, ScriptPreprocessor} import com.eed3si9n.expecty.Expecty.expect -import scala.build.input.{Inputs, MarkdownFile, ScalaCliInvokeData, Script, SourceScalaFile} +import scala.build.input.{MarkdownFile, ScalaCliInvokeData, Script, SourceScalaFile} import scala.build.options.SuppressWarningOptions +import scala.build.preprocessing.{MarkdownPreprocessor, ScalaPreprocessor, ScriptPreprocessor} class PreprocessingTests extends TestUtil.ScalaCliBuildSuite { - test("Report error if scala file not exists") { val logger = TestLogger() val scalaFile = SourceScalaFile(os.temp.dir(), os.SubPath("NotExists.scala")) diff --git a/modules/build/src/test/scala/scala/build/tests/ReplArtifactsTests.scala b/modules/build/src/test/scala/scala/build/tests/ReplArtifactsTests.scala index 806fadea86..ba7bf8407e 100644 --- a/modules/build/src/test/scala/scala/build/tests/ReplArtifactsTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/ReplArtifactsTests.scala @@ -4,12 +4,11 @@ import com.eed3si9n.expecty.Expecty.expect import coursier.cache.FileCache import dependency.ScalaParameters -import scala.build.{Directories, Logger, ReplArtifacts} +import scala.build.{Logger, ReplArtifacts} class ReplArtifactsTests extends TestUtil.ScalaCliBuildSuite { - def scalaPyTest(version: String, usesFormerOrg: Boolean = false): Unit = - TestInputs.withTmpDir("replartifactstests") { root => + TestInputs.withTmpDir("replartifactstests") { _ => val artifacts = ReplArtifacts.ammonite( scalaParams = ScalaParameters("2.13.8"), ammoniteVersion = "2.5.4", diff --git a/modules/build/src/test/scala/scala/build/tests/ScalaNativeUsingDirectiveTests.scala b/modules/build/src/test/scala/scala/build/tests/ScalaNativeUsingDirectiveTests.scala index 3fab0b285f..63eb9289ae 100644 --- a/modules/build/src/test/scala/scala/build/tests/ScalaNativeUsingDirectiveTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/ScalaNativeUsingDirectiveTests.scala @@ -1,5 +1,6 @@ package scala.build.tests +import bloop.rifle.BloopRifleConfig import com.eed3si9n.expecty.Expecty.expect import scala.build.errors.UsingDirectiveValueNumError @@ -8,12 +9,11 @@ import scala.build.tests.util.BloopServer import scala.build.{BuildThreads, Directories, LocalRepo} class ScalaNativeUsingDirectiveTests extends TestUtil.ScalaCliBuildSuite { + val buildThreads: BuildThreads = BuildThreads.create() + def bloopConfig: Option[BloopRifleConfig] = Some(BloopServer.bloopConfig) - val buildThreads = BuildThreads.create() - def bloopConfig = Some(BloopServer.bloopConfig) - - val extraRepoTmpDir = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") - val directories = Directories.under(extraRepoTmpDir) + val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") + val directories: Directories = Directories.under(extraRepoTmpDir) val buildOptions = BuildOptions( internal = InternalOptions( @@ -142,7 +142,7 @@ class ScalaNativeUsingDirectiveTests extends TestUtil.ScalaCliBuildSuite { inputs.withLoadedBuild(buildOptions, buildThreads, bloopConfig) { (_, _, maybeBuild) => assert( - maybeBuild.options.scalaNativeOptions.compileOptions(0) == "compileOption1" + maybeBuild.options.scalaNativeOptions.compileOptions.head == "compileOption1" ) assert( maybeBuild.options.scalaNativeOptions.compileOptions(1) == "compileOption2" @@ -215,7 +215,7 @@ class ScalaNativeUsingDirectiveTests extends TestUtil.ScalaCliBuildSuite { ) inputs.withLoadedBuild(buildOptions, buildThreads, bloopConfig) { (_, _, maybeBuild) => assert( - maybeBuild.options.scalaNativeOptions.linkingOptions(0) == "linkingOption1" + maybeBuild.options.scalaNativeOptions.linkingOptions.head == "linkingOption1" ) assert( maybeBuild.options.scalaNativeOptions.linkingOptions(1) == "linkingOption2" diff --git a/modules/build/src/test/scala/scala/build/tests/ScalaPreprocessorTests.scala b/modules/build/src/test/scala/scala/build/tests/ScalaPreprocessorTests.scala index ece48de5f0..bceabb8e28 100644 --- a/modules/build/src/test/scala/scala/build/tests/ScalaPreprocessorTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/ScalaPreprocessorTests.scala @@ -4,7 +4,7 @@ import com.eed3si9n.expecty.Expecty.expect import scala.build.input.{ScalaCliInvokeData, Script, SourceScalaFile} import scala.build.options.SuppressWarningOptions -import scala.build.preprocessing.{PreprocessedSource, ScalaPreprocessor, ScriptPreprocessor} +import scala.build.preprocessing.{ScalaPreprocessor, ScriptPreprocessor} class ScalaPreprocessorTests extends TestUtil.ScalaCliBuildSuite { @@ -21,15 +21,15 @@ class ScalaPreprocessorTests extends TestUtil.ScalaCliBuildSuite { | println(os.pwd) | } |}""".stripMargin).fromRoot { root => - val scalaFile = SourceScalaFile(root, os.sub / "Main.scala") - val Some(Right(result)) = ScalaPreprocessor.preprocess( + val scalaFile = SourceScalaFile(root, os.sub / "Main.scala") + val result = ScalaPreprocessor.preprocess( scalaFile, logger = TestLogger(), allowRestrictedFeatures = true, suppressWarningOptions = SuppressWarningOptions() - )(using ScalaCliInvokeData.dummy) + )(using ScalaCliInvokeData.dummy).get.getOrElse(sys.error("preprocessing failed")) expect(result.nonEmpty) - val Some(directivesPositions) = result.head.directivesPositions + val directivesPositions = result.head.directivesPositions.get expect(directivesPositions.startPos == 0 -> 0) expect(directivesPositions.endPos == 3 -> lastUsingLine.length) } @@ -43,21 +43,21 @@ class ScalaPreprocessorTests extends TestUtil.ScalaCliBuildSuite { |$depLine |println(os.pwd) |""".stripMargin).fromRoot { root => - val scalaFile = Script(root, os.sub / "sample.sc", None) - val Some(Right(result)) = ScriptPreprocessor.preprocess( + val scalaFile = Script(root, os.sub / "sample.sc", None) + val result = ScriptPreprocessor.preprocess( scalaFile, logger = TestLogger(), allowRestrictedFeatures = false, suppressWarningOptions = SuppressWarningOptions() - )(using ScalaCliInvokeData.dummy) + )(using ScalaCliInvokeData.dummy).get.getOrElse(sys.error("preprocessing failed")) expect(result.nonEmpty) - val Some(directivesPositions) = result.head.directivesPositions + val directivesPositions = result.head.directivesPositions.get expect(directivesPositions.startPos == 0 -> 0) expect(directivesPositions.endPos == 2 -> depLine.length) } } - val lastUsingLines = Seq( + val lastUsingLines: Seq[(String, String)] = Seq( "//> using dep com.lihaoyi::os-lib::0.8.1 com.lihaoyi::os-lib::0.8.1" -> "string literal", "//> using scala 2.13.7" -> "numerical string", "//> using objectWrapper true" -> "boolean literal", @@ -76,15 +76,15 @@ class ScalaPreprocessorTests extends TestUtil.ScalaCliBuildSuite { | println(os.pwd) | } |}""".stripMargin).fromRoot { root => - val scalaFile = SourceScalaFile(root, os.sub / "Main.scala") - val Some(Right(result)) = ScalaPreprocessor.preprocess( + val scalaFile = SourceScalaFile(root, os.sub / "Main.scala") + val result = ScalaPreprocessor.preprocess( scalaFile, logger = TestLogger(), allowRestrictedFeatures = true, suppressWarningOptions = SuppressWarningOptions() - )(using ScalaCliInvokeData.dummy) + )(using ScalaCliInvokeData.dummy).get.getOrElse(sys.error("preprocessing failed")) expect(result.nonEmpty) - val Some(directivesPositions) = result.head.directivesPositions + val directivesPositions = result.head.directivesPositions.get expect(directivesPositions.startPos == 0 -> 0) expect(directivesPositions.endPos == 3 -> lastUsingLine.length) } diff --git a/modules/build/src/test/scala/scala/build/tests/ScriptWrapperTests.scala b/modules/build/src/test/scala/scala/build/tests/ScriptWrapperTests.scala index 13e5ae054c..5076d89532 100644 --- a/modules/build/src/test/scala/scala/build/tests/ScriptWrapperTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/ScriptWrapperTests.scala @@ -1,18 +1,15 @@ package scala.build.tests +import bloop.rifle.BloopRifleConfig import com.eed3si9n.expecty.Expecty.expect -import java.io.IOException import scala.build.Ops.EitherThrowOps -import scala.build.errors.ToolkitDirectiveMissingVersionError import scala.build.options.{ BuildOptions, InternalOptions, MaybeScalaVersion, Platform, ScalaOptions, - ScalacOpt, - Scope, ScriptOptions } import scala.build.tests.util.BloopServer @@ -20,7 +17,7 @@ import scala.build.{Build, BuildThreads, Directories, LocalRepo, Position, Posit class ScriptWrapperTests extends TestUtil.ScalaCliBuildSuite { - def expectAppWrapper(wrapperName: String, path: os.Path) = { + def expectAppWrapper(wrapperName: String, path: os.Path): Unit = { val generatedFileContent = os.read(path) assert( generatedFileContent.contains(s"object $wrapperName extends App {"), @@ -33,7 +30,7 @@ class ScriptWrapperTests extends TestUtil.ScalaCliBuildSuite { ) } - def expectObjectWrapper(wrapperName: String, path: os.Path) = { + def expectObjectWrapper(wrapperName: String, path: os.Path): Unit = { val generatedFileContent = os.read(path) assert( generatedFileContent.contains(s"object $wrapperName {"), @@ -46,7 +43,7 @@ class ScriptWrapperTests extends TestUtil.ScalaCliBuildSuite { ) } - def expectClassWrapper(wrapperName: String, path: os.Path) = { + def expectClassWrapper(wrapperName: String, path: os.Path): Unit = { val generatedFileContent = os.read(path) assert( generatedFileContent.contains(s"final class $wrapperName$$_"), @@ -59,12 +56,11 @@ class ScriptWrapperTests extends TestUtil.ScalaCliBuildSuite { ) } - val buildThreads = BuildThreads.create() + val buildThreads: BuildThreads = BuildThreads.create() + def bloopConfigOpt: Option[BloopRifleConfig] = Some(BloopServer.bloopConfig) - def bloopConfigOpt = Some(BloopServer.bloopConfig) - - val extraRepoTmpDir = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") - val directories = Directories.under(extraRepoTmpDir) + val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") + val directories: Directories = Directories.under(extraRepoTmpDir) override def afterAll(): Unit = { TestInputs.tryRemoveAll(extraRepoTmpDir) @@ -152,7 +148,7 @@ class ScriptWrapperTests extends TestUtil.ScalaCliBuildSuite { test( s"object wrapper forced with ${if (useDirectives) directive else optionName}" ) { - inputs.withBuild(options orElse baseOptions, buildThreads, bloopConfigOpt) { + inputs.withBuild(options.orElse(baseOptions), buildThreads, bloopConfigOpt) { (root, _, maybeBuild) => expect(maybeBuild.orThrow.success) val projectDir = os.list(root / ".scala-build").filter( @@ -195,7 +191,7 @@ class ScriptWrapperTests extends TestUtil.ScalaCliBuildSuite { test( s"App object wrapper forced with ${if (useDirectives) directive else optionName}" ) { - inputs.withBuild(options orElse baseOptions, buildThreads, bloopConfigOpt) { + inputs.withBuild(options.orElse(baseOptions), buildThreads, bloopConfigOpt) { (root, _, maybeBuild) => expect(maybeBuild.orThrow.success) val projectDir = os.list(root / ".scala-build").filter( diff --git a/modules/build/src/test/scala/scala/build/tests/SourceGeneratorTests.scala b/modules/build/src/test/scala/scala/build/tests/SourceGeneratorTests.scala index b39e8e07b8..98e57a75b4 100644 --- a/modules/build/src/test/scala/scala/build/tests/SourceGeneratorTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/SourceGeneratorTests.scala @@ -2,22 +2,11 @@ package scala.build.tests import com.eed3si9n.expecty.Expecty.expect -import java.io.IOException import scala.Console.println import scala.build.Ops.EitherThrowOps -import scala.build.errors.ToolkitDirectiveMissingVersionError -import scala.build.options.{ - BuildOptions, - InternalOptions, - MaybeScalaVersion, - Platform, - ScalaOptions, - ScalacOpt, - Scope, - ScriptOptions -} +import scala.build.options.{BuildOptions, InternalOptions, Scope} import scala.build.tests.util.BloopServer -import scala.build.{Build, BuildThreads, Directories, LocalRepo, Position, Positioned} +import scala.build.{Build, BuildThreads, Directories, LocalRepo, Position} class SourceGeneratorTests extends TestUtil.ScalaCliBuildSuite { diff --git a/modules/build/src/test/scala/scala/build/tests/SourcesTests.scala b/modules/build/src/test/scala/scala/build/tests/SourcesTests.scala index 56b114d8cd..5968ac4014 100644 --- a/modules/build/src/test/scala/scala/build/tests/SourcesTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/SourcesTests.scala @@ -1,32 +1,37 @@ package scala.build.tests import com.eed3si9n.expecty.Expecty.expect -import coursier.cache.{ArchiveCache, Cache} -import coursier.util.{Artifact, Task} +import coursier.cache.Cache.Fetch +import coursier.cache.{ArchiveCache, ArtifactError, Cache} +import coursier.util.{Artifact, EitherT, Task} import dependency.* +import java.io.File import java.nio.charset.StandardCharsets + import scala.build.Ops.* -import scala.build.{CrossSources, Position, Sources} import scala.build.errors.{UsingDirectiveValueNumError, UsingDirectiveWrongValueTypeError} import scala.build.input.ScalaCliInvokeData -import scala.build.options.{BuildOptions, Scope, SuppressWarningOptions} import scala.build.internal.ScalaJsLinkerConfig +import scala.build.options.{BuildOptions, Scope, SuppressWarningOptions} +import scala.build.preprocessing.Preprocessor +import scala.build.{CrossSources, Position, Sources} +import scala.concurrent.ExecutionContext class SourcesTests extends TestUtil.ScalaCliBuildSuite { - - def scalaVersion = "2.13.5" - def scalaParams = ScalaParameters(scalaVersion) - def scalaBinaryVersion = scalaParams.scalaBinaryVersion + def scalaVersion: String = "2.13.5" + def scalaParams: ScalaParameters = ScalaParameters(scalaVersion) + def scalaBinaryVersion: String = scalaParams.scalaBinaryVersion given ScalaCliInvokeData = ScalaCliInvokeData.dummy - val preprocessors = Sources.defaultPreprocessors( + val preprocessors: Seq[Preprocessor] = Sources.defaultPreprocessors( ArchiveCache().withCache( new Cache[Task] { - def fetch = _ => sys.error("shouldn't be used") - def file(artifact: Artifact) = sys.error("shouldn't be used") - def ec = sys.error("shouldn't be used") + def fetch: Fetch[Task] = _ => sys.error("shouldn't be used") + def file(artifact: Artifact): EitherT[Task, ArtifactError, File] = + sys.error("shouldn't be used") + def ec: ExecutionContext = sys.error("shouldn't be used") } ), None, @@ -73,7 +78,7 @@ class SourcesTests extends TestUtil.ScalaCliBuildSuite { ) .orThrow - val obtainedDeps = sources.buildOptions.classPathOptions.extraDependencies.toSeq.toSeq.map( + val obtainedDeps = sources.buildOptions.classPathOptions.extraDependencies.toSeq.map( _.value ) @@ -121,7 +126,7 @@ class SourcesTests extends TestUtil.ScalaCliBuildSuite { sources.buildOptions.classPathOptions.extraDependencies.toSeq.map(_.value) == expectedDeps ) expect(sources.paths.isEmpty) - expect(sources.inMemory.length == 0) + expect(sources.inMemory.isEmpty) } } @@ -154,7 +159,7 @@ class SourcesTests extends TestUtil.ScalaCliBuildSuite { expect(sources.paths.length == 1) expect(sources.inMemory.length == 1) - expect(sources.inMemory(0).generatedRelPath.last == "AmmDummy.scala") + expect(sources.inMemory.head.generatedRelPath.last == "AmmDummy.scala") } } @@ -194,7 +199,7 @@ class SourcesTests extends TestUtil.ScalaCliBuildSuite { sources.buildOptions.classPathOptions.extraDependencies.toSeq.map(_.value) == expectedDeps ) expect(sources.paths.isEmpty) - expect(sources.inMemory.length == 0) + expect(sources.inMemory.isEmpty) } } @@ -604,22 +609,22 @@ class SourcesTests extends TestUtil.ScalaCliBuildSuite { val jsOptions = sources.buildOptions.scalaJsOptions val jsConfig = jsOptions.linkerConfig(TestLogger()) expect( - jsOptions.version == Some("1.8.0"), + jsOptions.version.contains("1.8.0"), jsOptions.mode.nameOpt.contains("mode"), - jsOptions.moduleKindStr == Some("commonjs"), - jsOptions.checkIr == Some(true), - jsOptions.emitSourceMaps == true, - jsOptions.dom == Some(true), - jsOptions.noOpt == Some(true) + jsOptions.moduleKindStr.contains("commonjs"), + jsOptions.checkIr.contains(true), + jsOptions.emitSourceMaps, + jsOptions.dom.contains(true), + jsOptions.noOpt.contains(true) ) expect( jsConfig.moduleKind == ScalaJsLinkerConfig.ModuleKind.CommonJSModule, - jsConfig.checkIR == true, - jsConfig.sourceMap == true, - jsConfig.jsHeader == Some("#!/usr/bin/env node\n"), - jsConfig.esFeatures.allowBigIntsForLongs == true, - jsConfig.esFeatures.avoidClasses == false, - jsConfig.esFeatures.avoidLetsAndConsts == false, + jsConfig.checkIR, + jsConfig.sourceMap, + jsConfig.jsHeader.contains("#!/usr/bin/env node\n"), + jsConfig.esFeatures.allowBigIntsForLongs, + !jsConfig.esFeatures.avoidClasses, + !jsConfig.esFeatures.avoidLetsAndConsts, jsConfig.esFeatures.esVersion == "ES2017", jsConfig.moduleSplitStyle == ScalaJsLinkerConfig.ModuleSplitStyle.SmallestModules ) @@ -699,8 +704,9 @@ class SourcesTests extends TestUtil.ScalaCliBuildSuite { SuppressWarningOptions() ) assert(crossSourcesResult.isRight) - val Right(CrossSources(onDiskSources, _, _, _, _, _)) = + val CrossSources(onDiskSources, _, _, _, _, _) = crossSourcesResult.map(_._1) + .getOrElse(sys.error("should not happen")) val onDiskPaths = onDiskSources.map(_.value._1.last) expect(onDiskPaths == inputArgs) } diff --git a/modules/build/src/test/scala/scala/build/tests/TestInputs.scala b/modules/build/src/test/scala/scala/build/tests/TestInputs.scala index fa75db19d5..d6b34a6df2 100644 --- a/modules/build/src/test/scala/scala/build/tests/TestInputs.scala +++ b/modules/build/src/test/scala/scala/build/tests/TestInputs.scala @@ -3,14 +3,14 @@ package scala.build.tests import bloop.rifle.BloopRifleConfig import java.nio.charset.StandardCharsets -import scala.build.{Build, BuildThreads, Builds, Directories} + import scala.build.compiler.{BloopCompilerMaker, SimpleScalaCompilerMaker} import scala.build.errors.BuildException -import scala.build.input.{Inputs, ScalaCliInvokeData, SubCommand} -import scala.build.internal.Util +import scala.build.input.{Inputs, ScalaCliInvokeData} import scala.build.options.{BuildOptions, Scope} -import scala.util.control.NonFatal +import scala.build.{Build, BuildThreads, Builds} import scala.util.Try +import scala.util.control.NonFatal final case class TestInputs( files: Seq[(os.RelPath, String)], @@ -79,7 +79,7 @@ final case class TestInputs( buildThreads: BuildThreads, // actually only used when bloopConfigOpt is non-empty bloopConfigOpt: Option[BloopRifleConfig], fromDirectory: Boolean = false - )(f: (os.Path, Inputs, Builds) => T) = + )(f: (os.Path, Inputs, Builds) => T): T = withBuilds(options, buildThreads, bloopConfigOpt, fromDirectory)((p, i, builds) => builds match { case Left(e) => throw e @@ -174,7 +174,7 @@ object TestInputs { Runtime.getRuntime.addShutdownHook( new Thread("remove-dir-windows") { setDaemon(true) - override def run() = + override def run(): Unit = try os.remove.all(f) catch { case NonFatal(e) => diff --git a/modules/build/src/test/scala/scala/build/tests/TestLogger.scala b/modules/build/src/test/scala/scala/build/tests/TestLogger.scala index 52d2a5cce4..35de6eed7e 100644 --- a/modules/build/src/test/scala/scala/build/tests/TestLogger.scala +++ b/modules/build/src/test/scala/scala/build/tests/TestLogger.scala @@ -3,16 +3,16 @@ package scala.build.tests import bloop.rifle.BloopRifleLogger import coursier.cache.CacheLogger import coursier.cache.loggers.{FallbackRefreshDisplay, RefreshLogger} -import org.scalajs.logging.{NullLogger, Logger as ScalaJsLogger} +import org.scalajs.logging.{Logger as ScalaJsLogger, NullLogger} + +import java.io.PrintStream -import scala.build.errors.BuildException import scala.build.Logger -import scala.scalanative.build as sn -import scala.build.errors.Diagnostic +import scala.build.errors.{BuildException, Diagnostic} import scala.build.internals.FeatureType +import scala.scalanative.build as sn case class TestLogger(info: Boolean = true, debug: Boolean = false) extends Logger { - override def log(diagnostics: Seq[Diagnostic]): Unit = { diagnostics.foreach { d => System.err.println(d.positions.map(_.render()).mkString("/") ++ ": " ++ d.message) @@ -76,16 +76,12 @@ case class TestLogger(info: Boolean = true, debug: Boolean = false) extends Logg sn.Logger.nullLogger def scalaNativeCliInternalLoggerOptions: List[String] = List() - def bloopBspStderr = None - def bloopBspStdout = None - def bloopCliInheritStdout = false - def bloopCliInheritStderr = false - def compilerOutputStream = System.err + def compilerOutputStream: PrintStream = System.err - def verbosity = - if (debug) 2 - else if (info) 0 + def verbosity: Int = + if debug then 2 + else if info then 0 else -1 override def experimentalWarning(featureName: String, featureType: FeatureType): Unit = diff --git a/modules/build/src/test/scala/scala/build/tests/TestUtil.scala b/modules/build/src/test/scala/scala/build/tests/TestUtil.scala index 44ad514328..130c80f643 100644 --- a/modules/build/src/test/scala/scala/build/tests/TestUtil.scala +++ b/modules/build/src/test/scala/scala/build/tests/TestUtil.scala @@ -1,14 +1,15 @@ package scala.build.tests -import scala.build.{Build, Positioned} -import scala.build.options.{BuildOptions, Platform} +import munit.AnyFixture import munit.Assertions.assertEquals import java.util.concurrent.TimeUnit + +import scala.build.options.{BuildOptions, Platform} +import scala.build.{Build, Positioned} import scala.concurrent.duration.FiniteDuration object TestUtil { - abstract class ScalaCliBuildSuite extends munit.FunSuite { extension (munitContext: BeforeEach | AfterEach) { def locationAbsolutePath: os.Path = @@ -19,8 +20,8 @@ object TestUtil { }).location.path } } - override def munitTimeout = new FiniteDuration(120, TimeUnit.SECONDS) - val testStartEndLogger = new Fixture[Unit]("files") { + override def munitTimeout = new FiniteDuration(120, TimeUnit.SECONDS) + val testStartEndLogger: Fixture[Unit] = new Fixture[Unit]("files") { def apply(): Unit = () override def beforeEach(context: BeforeEach): Unit = { @@ -37,10 +38,10 @@ object TestUtil { ) } } - override def munitFixtures = List(testStartEndLogger) + override def munitFixtures: Seq[AnyFixture[?]] = List(testStartEndLogger) } - val isCI = System.getenv("CI") != null + val isCI: Boolean = System.getenv("CI") != null implicit class TestBuildOps(private val build: Build) extends AnyVal { private def successfulBuild: Build.Successful = @@ -62,18 +63,18 @@ object TestUtil { ) } - def assertNoDiagnostics = assertEquals(build.diagnostics.toSeq.flatten, Nil) + def assertNoDiagnostics(): Unit = assertEquals(build.diagnostics.toSeq.flatten, Nil) } implicit class TestBuildOptionsOps(private val options: BuildOptions) extends AnyVal { - def enableJs = + def enableJs: BuildOptions = options.copy( scalaOptions = options.scalaOptions.copy( platform = Some(Positioned.none(Platform.JS)) ) ) - def enableNative = + def enableNative: BuildOptions = options.copy( scalaOptions = options.scalaOptions.copy( platform = Some(Positioned.none(Platform.Native)) @@ -98,5 +99,5 @@ object TestUtil { case s => s"$s" } - lazy val cs = Constants.cs + lazy val cs: String = Constants.cs } diff --git a/modules/build/src/test/scala/scala/build/tests/markdown/MarkdownCodeBlockTests.scala b/modules/build/src/test/scala/scala/build/tests/markdown/MarkdownCodeBlockTests.scala index ef8bbe41fa..8f6b9003d6 100644 --- a/modules/build/src/test/scala/scala/build/tests/markdown/MarkdownCodeBlockTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/markdown/MarkdownCodeBlockTests.scala @@ -5,7 +5,6 @@ import com.eed3si9n.expecty.Expecty.expect import scala.build.Position import scala.build.errors.{BuildException, MarkdownUnclosedBackticksError} import scala.build.internal.markdown.MarkdownCodeBlock -import scala.build.preprocessing.MarkdownCodeBlockProcessor import scala.build.tests.TestUtil import scala.build.tests.markdown.MarkdownTestUtil.* @@ -43,8 +42,11 @@ class MarkdownCodeBlockTests extends TestUtil.ScalaCliBuildSuite { startLine = 3, endLine = 3 ) - val path = os.sub / "Example.md" - val Right(Seq(actualResult)) = MarkdownCodeBlock.findCodeBlocks(path, markdown) + val path = os.sub / "Example.md" + val actualResult = + MarkdownCodeBlock.findCodeBlocks(path, markdown) + .getOrElse(sys.error("failed while finding code blocks")) + .head expect(actualResult == expectedResult) } @@ -65,9 +67,11 @@ class MarkdownCodeBlockTests extends TestUtil.ScalaCliBuildSuite { startLine = 3, endLine = 4 ) - val path = os.sub / "Example.md" - val Right(Seq(actualResult: MarkdownCodeBlock)) = + val path = os.sub / "Example.md" + val actualResult: MarkdownCodeBlock = MarkdownCodeBlock.findCodeBlocks(path, markdown) + .getOrElse(sys.error("failed while finding code blocks")) + .head showDiffs(actualResult, expectedResult) expect(actualResult == expectedResult) } @@ -89,9 +93,11 @@ class MarkdownCodeBlockTests extends TestUtil.ScalaCliBuildSuite { startLine = 3, endLine = 4 ) - val path = os.sub / "Example.md" - val Right(Seq(actualResult: MarkdownCodeBlock)) = + val path = os.sub / "Example.md" + val actualResult: MarkdownCodeBlock = MarkdownCodeBlock.findCodeBlocks(path, markdown) + .getOrElse(sys.error("failed while finding code blocks")) + .head showDiffs(actualResult, expectedResult) expect(actualResult == expectedResult) } @@ -114,8 +120,11 @@ class MarkdownCodeBlockTests extends TestUtil.ScalaCliBuildSuite { startLine = 3, endLine = 5 ) - val path = os.sub / "Example.md" - val Right(Seq(actualResult)) = MarkdownCodeBlock.findCodeBlocks(path, markdown) + val path = os.sub / "Example.md" + val actualResult = + MarkdownCodeBlock.findCodeBlocks(path, markdown) + .getOrElse(sys.error("failed while finding code blocks")) + .head expect(actualResult == expectedResult) } @@ -139,9 +148,11 @@ class MarkdownCodeBlockTests extends TestUtil.ScalaCliBuildSuite { startLine = 3, endLine = 6 ) - val path = os.sub / "Example.md" - val Right(Seq(actualResult: MarkdownCodeBlock)) = + val path = os.sub / "Example.md" + val actualResult: MarkdownCodeBlock = MarkdownCodeBlock.findCodeBlocks(path, markdown) + .getOrElse(sys.error("failed while finding code blocks")) + .head showDiffs(actualResult, expectedResult) expect(actualResult == expectedResult) } @@ -166,8 +177,11 @@ class MarkdownCodeBlockTests extends TestUtil.ScalaCliBuildSuite { startLine = 3, endLine = 6 ) - val path = os.sub / "Example.md" - val Right(Seq(actualResult)) = MarkdownCodeBlock.findCodeBlocks(path, markdown) + val path = os.sub / "Example.md" + val actualResult = + MarkdownCodeBlock.findCodeBlocks(path, markdown) + .getOrElse(sys.error("failed while finding code blocks")) + .head expect(actualResult == expectedResult) } @@ -196,9 +210,11 @@ class MarkdownCodeBlockTests extends TestUtil.ScalaCliBuildSuite { val path = os.pwd / subPath val expectedPosition = Position.File(Right(path), 2 -> 0, 2 -> 3) val expectedError = MarkdownUnclosedBackticksError("```", Seq(expectedPosition)) - val Left(result) = MarkdownCodeBlock.findCodeBlocks(subPath, markdown) - expect(result.message == expectedError.message) - expect(result.positions == expectedError.positions) + val actualException = + MarkdownCodeBlock.findCodeBlocks(subPath, markdown) + .left.getOrElse(sys.error("failed while finding code blocks")) + expect(actualException.message == expectedError.message) + expect(actualException.positions == expectedError.positions) } test("recovery from an unclosed code block error works correctly") { @@ -224,8 +240,10 @@ class MarkdownCodeBlockTests extends TestUtil.ScalaCliBuildSuite { maybeError = Some(be) None } - val Right(Seq(actualResult)) = + val actualResult = MarkdownCodeBlock.findCodeBlocks(subPath, markdown, maybeRecoverOnError = recoveryFunction) + .getOrElse(sys.error("failed while finding code blocks")) + .head val expectedResult = MarkdownCodeBlock( info = PlainScalaInfo, @@ -234,10 +252,10 @@ class MarkdownCodeBlockTests extends TestUtil.ScalaCliBuildSuite { endLine = 2 ) expect(actualResult == expectedResult) - val path = os.pwd / subPath - val expectedPosition = Position.File(Right(path), 7 -> 0, 7 -> 4) - val expectedError = MarkdownUnclosedBackticksError("````", Seq(expectedPosition)) - val Some(actualError) = maybeError + val path = os.pwd / subPath + val expectedPosition = Position.File(Right(path), 7 -> 0, 7 -> 4) + val expectedError = MarkdownUnclosedBackticksError("````", Seq(expectedPosition)) + val actualError = maybeError.get expect(actualError.positions == expectedError.positions) expect(actualError.message == expectedError.message) } diff --git a/modules/build/src/test/scala/scala/build/tests/markdown/MarkdownCodeWrapperTests.scala b/modules/build/src/test/scala/scala/build/tests/markdown/MarkdownCodeWrapperTests.scala index e178266bb1..89477fb530 100644 --- a/modules/build/src/test/scala/scala/build/tests/markdown/MarkdownCodeWrapperTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/markdown/MarkdownCodeWrapperTests.scala @@ -1,19 +1,13 @@ package scala.build.tests.markdown -import scala.build.internal.markdown.{MarkdownCodeBlock, MarkdownCodeWrapper} import com.eed3si9n.expecty.Expecty.expect -import scala.build.Position -import scala.build.errors.{BuildException, MarkdownUnclosedBackticksError} import scala.build.internal.AmmUtil -import scala.build.preprocessing.directives.StrictDirective -import scala.build.preprocessing.{ - ExtractedDirectives, - PreprocessedMarkdown, - PreprocessedMarkdownCodeBlocks -} +import scala.build.internal.markdown.{MarkdownCodeBlock, MarkdownCodeWrapper} +import scala.build.preprocessing.{PreprocessedMarkdown, PreprocessedMarkdownCodeBlocks} import scala.build.tests.TestUtil import scala.build.tests.markdown.MarkdownTestUtil.* +import scala.language.reflectiveCalls class MarkdownCodeWrapperTests extends TestUtil.ScalaCliBuildSuite { @@ -206,17 +200,13 @@ class MarkdownCodeWrapperTests extends TestUtil.ScalaCliBuildSuite { def showDiffs(result: CodeWrapper, expect: String): Unit = { val actual: String = result match { - case (Some(s), None, None) => - s.code - case (None, Some(s), None) => - s.code - case (None, None, Some(s)) => - s.code - case _ => - result.toString + case (Some(s), None, None) => s.code + case (None, Some(s), None) => s.code + case (None, None, Some(s)) => s.code + case _ => result.toString } - if actual.toString != expect.toString then + if actual != expect then for (((a, b), i) <- (actual zip expect).zipWithIndex) if (a != b) { val aa = TestUtil.c2s(a) diff --git a/modules/build/src/test/scala/scala/build/tests/markdown/MarkdownTestUtil.scala b/modules/build/src/test/scala/scala/build/tests/markdown/MarkdownTestUtil.scala index 83f1ec991b..cb93232090 100644 --- a/modules/build/src/test/scala/scala/build/tests/markdown/MarkdownTestUtil.scala +++ b/modules/build/src/test/scala/scala/build/tests/markdown/MarkdownTestUtil.scala @@ -1,8 +1,8 @@ package scala.build.tests.markdown object MarkdownTestUtil { - val PlainScalaInfo = Seq("scala") - val RawScalaInfo = Seq("scala", "raw") - val TestScalaInfo = Seq("scala", "test") - val ResetScalaInfo = Seq("scala", "reset") + val PlainScalaInfo: Seq[String] = Seq("scala") + val RawScalaInfo: Seq[String] = Seq("scala", "raw") + val TestScalaInfo: Seq[String] = Seq("scala", "test") + val ResetScalaInfo: Seq[String] = Seq("scala", "reset") } diff --git a/modules/cli/src/test/scala/cli/commands/tests/ReplOptionsTests.scala b/modules/cli/src/test/scala/cli/commands/tests/ReplOptionsTests.scala index 58fd1f6971..db4e4d17ba 100644 --- a/modules/cli/src/test/scala/cli/commands/tests/ReplOptionsTests.scala +++ b/modules/cli/src/test/scala/cli/commands/tests/ReplOptionsTests.scala @@ -7,7 +7,6 @@ import scala.cli.commands.repl.{Repl, ReplOptions, SharedReplOptions} import scala.cli.commands.shared.{SharedOptions, SharedPythonOptions} class ReplOptionsTests extends munit.FunSuite { - test("ScalaPy version") { val ver = "X.Y.Z" val replOptions = ReplOptions( @@ -32,5 +31,4 @@ class ReplOptionsTests extends munit.FunSuite { val buildOptions = Repl.buildOptions0(replOptions, maxVersion, maxLtsVersion) expect(buildOptions.scalaOptions.scalaVersion.flatMap(_.versionOpt).contains(maxVersion)) } - } diff --git a/modules/cli/src/test/scala/cli/commands/tests/RunOptionsTests.scala b/modules/cli/src/test/scala/cli/commands/tests/RunOptionsTests.scala index dbcaa92e07..6aaa38a03b 100644 --- a/modules/cli/src/test/scala/cli/commands/tests/RunOptionsTests.scala +++ b/modules/cli/src/test/scala/cli/commands/tests/RunOptionsTests.scala @@ -6,7 +6,6 @@ import scala.cli.commands.run.{Run, RunOptions} import scala.cli.commands.shared.{SharedOptions, SharedPythonOptions} class RunOptionsTests extends munit.FunSuite { - test("ScalaPy version") { val ver = "X.Y.Z" val runOptions = RunOptions( @@ -51,5 +50,4 @@ class RunOptionsTests extends munit.FunSuite { expect(toolkitDep.name == "toolkit") expect(toolkitDep.version == "latest.release") } - } diff --git a/modules/cli/src/test/scala/cli/tests/ArgSplitterTest.scala b/modules/cli/src/test/scala/cli/tests/ArgSplitterTest.scala index 0160d8800b..5085ef08c2 100644 --- a/modules/cli/src/test/scala/cli/tests/ArgSplitterTest.scala +++ b/modules/cli/src/test/scala/cli/tests/ArgSplitterTest.scala @@ -12,5 +12,4 @@ class ArgSplitterTest extends TestUtil.ScalaCliSuite { val input = args.map(_.mkString(" ", " ", "")).mkString(" ", "\n", "") assertEquals(ArgSplitter.splitToArgs(input), args.flatten) } - } diff --git a/modules/cli/src/test/scala/cli/tests/LauncherCliTest.scala b/modules/cli/src/test/scala/cli/tests/LauncherCliTest.scala index 73345b862f..abb0d41435 100644 --- a/modules/cli/src/test/scala/cli/tests/LauncherCliTest.scala +++ b/modules/cli/src/test/scala/cli/tests/LauncherCliTest.scala @@ -8,7 +8,6 @@ import scala.cli.commands.shared.CoursierOptions import scala.cli.launcher.LauncherCli class LauncherCliTest extends TestUtil.ScalaCliSuite { - test("resolve nightly version".flaky) { val logger = TestLogger() val cache = CoursierOptions().coursierCache(logger.coursierLogger("")) @@ -19,7 +18,7 @@ class LauncherCliTest extends TestUtil.ScalaCliSuite { expect(nightlyCliVersion.endsWith("-SNAPSHOT")) } - val expectedScalaCliVersions = Seq( + val expectedScalaCliVersions: Seq[(String, String)] = Seq( "0.1.2" -> Constants.defaultScala212Version, "0.1.1+43-g15666b67-SNAPSHOT" -> Constants.defaultScala212Version, "0.1.3" -> Constants.defaultScala213Version, @@ -29,8 +28,6 @@ class LauncherCliTest extends TestUtil.ScalaCliSuite { for ((cliVersion, expectedScalaVersion) <- expectedScalaCliVersions) test(s"use expected scala version for Scala CLI launcher: $cliVersion") { val scalaVersion = LauncherCli.scalaCliScalaVersion(cliVersion) - expect(scalaVersion == expectedScalaVersion) } - } diff --git a/modules/cli/src/test/scala/cli/tests/OptionsCheck.scala b/modules/cli/src/test/scala/cli/tests/OptionsCheck.scala index 4306a88e95..9510c1a6b5 100644 --- a/modules/cli/src/test/scala/cli/tests/OptionsCheck.scala +++ b/modules/cli/src/test/scala/cli/tests/OptionsCheck.scala @@ -6,10 +6,7 @@ import scala.cli.ScalaCliCommands import scala.cli.commands.shared.HasGlobalOptions class OptionsCheck extends TestUtil.ScalaCliSuite { - for ( - command <- - new ScalaCliCommands("scala-cli", "scala-cli", "Scala CLI").commands - ) + for (command <- new ScalaCliCommands("scala-cli", "scala-cli", "Scala CLI").commands) test(s"No duplicated options in ${command.names.head.mkString(" ")}") { command.ensureNoDuplicates() } diff --git a/modules/cli/src/test/scala/cli/tests/PackageTests.scala b/modules/cli/src/test/scala/cli/tests/PackageTests.scala index 013dd23c8a..50f61ca4f5 100644 --- a/modules/cli/src/test/scala/cli/tests/PackageTests.scala +++ b/modules/cli/src/test/scala/cli/tests/PackageTests.scala @@ -1,5 +1,6 @@ package cli.tests +import bloop.rifle.BloopRifleConfig import com.eed3si9n.expecty.Expecty.expect import java.nio.file.FileSystems @@ -13,11 +14,11 @@ import scala.cli.commands.package0.Package import scala.cli.packaging.Library class PackageTests extends TestUtil.ScalaCliSuite { - val buildThreads = BuildThreads.create() - def bloopConfig = BloopServer.bloopConfig + val buildThreads: BuildThreads = BuildThreads.create() + def bloopConfig: BloopRifleConfig = BloopServer.bloopConfig - val extraRepoTmpDir = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") - val directories = Directories.under(extraRepoTmpDir) + val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-") + val directories: Directories = Directories.under(extraRepoTmpDir) val defaultOptions = BuildOptions( internal = InternalOptions( @@ -92,5 +93,4 @@ class PackageTests extends TestUtil.ScalaCliSuite { expect(packageType == PackageType.Native.Application) } } - } diff --git a/modules/cli/src/test/scala/cli/tests/TestUtil.scala b/modules/cli/src/test/scala/cli/tests/TestUtil.scala index 711653e8a4..0fbf8a8b91 100644 --- a/modules/cli/src/test/scala/cli/tests/TestUtil.scala +++ b/modules/cli/src/test/scala/cli/tests/TestUtil.scala @@ -2,6 +2,7 @@ package cli.tests import coursier.cache.{ArtifactError, FileCache} import coursier.util.{Artifact, Task} +import munit.AnyFixture import java.io.File import java.util.concurrent.TimeUnit @@ -23,7 +24,7 @@ object TestUtil { override def munitTimeout = new FiniteDuration(120, TimeUnit.SECONDS) - val testStartEndLogger = new Fixture[Unit]("files") { + val testStartEndLogger: Fixture[Unit] = new Fixture[Unit]("files") { def apply(): Unit = () override def beforeEach(context: BeforeEach): Unit = { @@ -41,7 +42,7 @@ object TestUtil { } } - override def munitFixtures = List(testStartEndLogger) + override def munitFixtures: Seq[AnyFixture[?]] = List(testStartEndLogger) } def downloadFile(url: String): Either[ArtifactError, Array[Byte]] = { diff --git a/modules/options/src/test/scala/scala/build/options/ConfigMonoidTest.scala b/modules/options/src/test/scala/scala/build/options/ConfigMonoidTest.scala index e32581f772..25ddd17a8e 100644 --- a/modules/options/src/test/scala/scala/build/options/ConfigMonoidTest.scala +++ b/modules/options/src/test/scala/scala/build/options/ConfigMonoidTest.scala @@ -7,7 +7,6 @@ case class Inner( ) object Inner { - import ConfigMonoid.* implicit def monoid: ConfigMonoid[Inner] = ConfigMonoid.derive } @@ -52,6 +51,5 @@ class ConfigMonoidTest extends munit.FunSuite { assertEquals(Outer.monoid.orElse(outer1, outer2).name, Some("o1")) assertEquals(Outer.monoid.orElse(outer2, outer1).name, Some("o2")) - } }