Skip to content

Commit c8e4ab9

Browse files
committed
Add support for running a main method from the test scope
1 parent 50c930c commit c8e4ab9

File tree

12 files changed

+162
-88
lines changed

12 files changed

+162
-88
lines changed

modules/build/src/main/scala/scala/build/Build.scala

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ trait Build {
3232
def scope: Scope
3333
def outputOpt: Option[os.Path]
3434
def success: Boolean
35+
def cancelled: Boolean
3536
def diagnostics: Option[Seq[(Either[String, os.Path], bsp4j.Diagnostic)]]
3637

3738
def successfulOpt: Option[Build.Successful]
@@ -54,6 +55,7 @@ object Build {
5455
logger: Logger
5556
) extends Build {
5657
def success: Boolean = true
58+
def cancelled: Boolean = false
5759
def successfulOpt: Some[this.type] = Some(this)
5860
def outputOpt: Some[os.Path] = Some(output)
5961
def dependencyClassPath: Seq[os.Path] = sources.resourceDirs ++ artifacts.classPath
@@ -215,9 +217,11 @@ object Build {
215217
project: Project,
216218
diagnostics: Option[Seq[(Either[String, os.Path], bsp4j.Diagnostic)]]
217219
) extends Build {
218-
def success: Boolean = false
219-
def successfulOpt: None.type = None
220-
def outputOpt: None.type = None
220+
def success: Boolean = false
221+
222+
override def cancelled: Boolean = false
223+
def successfulOpt: None.type = None
224+
def outputOpt: None.type = None
221225
}
222226

223227
final case class Cancelled(
@@ -227,6 +231,7 @@ object Build {
227231
reason: String
228232
) extends Build {
229233
def success: Boolean = false
234+
def cancelled: Boolean = true
230235
def successfulOpt: None.type = None
231236
def outputOpt: None.type = None
232237
def diagnostics: None.type = None

modules/cli/src/main/scala/scala/cli/commands/package0/Package.scala

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers {
697697
isFullOpt <- build.options.scalaJsOptions.fullOpt
698698
linkerConfig = build.options.scalaJsOptions.linkerConfig(logger)
699699
linkResult <- linkJs(
700-
build,
700+
Seq(build),
701701
destPath,
702702
mainClass,
703703
addTestInitializer = false,
@@ -947,7 +947,7 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers {
947947
}
948948

949949
def linkJs(
950-
build: Build.Successful,
950+
builds: Seq[Build.Successful],
951951
dest: os.Path,
952952
mainClassOpt: Option[String],
953953
addTestInitializer: Boolean,
@@ -957,19 +957,19 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers {
957957
logger: Logger,
958958
scratchDirOpt: Option[os.Path] = None
959959
): Either[BuildException, os.Path] = {
960-
val mainJar = Library.libraryJar(build)
961-
val classPath = mainJar +: build.artifacts.classPath
960+
val jars = builds.map(Library.libraryJar(_))
961+
val classPath = jars ++ builds.flatMap(_.artifacts.classPath)
962962
val input = ScalaJsLinker.LinkJSInput(
963-
options = build.options.notForBloopOptions.scalaJsLinkerOptions,
963+
options = builds.head.options.notForBloopOptions.scalaJsLinkerOptions,
964964
javaCommand =
965-
build.options.javaHome().value.javaCommand, // FIXME Allow users to use another JVM here?
965+
builds.head.options.javaHome().value.javaCommand, // FIXME Allow users to use another JVM here?
966966
classPath = classPath,
967967
mainClassOrNull = mainClassOpt.orNull,
968968
addTestInitializer = addTestInitializer,
969969
config = config,
970970
fullOpt = fullOpt,
971971
noOpt = noOpt,
972-
scalaJsVersion = build.options.scalaJsOptions.finalVersion
972+
scalaJsVersion = builds.head.options.scalaJsOptions.finalVersion
973973
)
974974

975975
val linkingDir = LinkingDir.getOrCreate(input, scratchDirOpt)
@@ -980,8 +980,8 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers {
980980
input,
981981
linkingDir,
982982
logger,
983-
build.options.finalCache,
984-
build.options.archiveCache
983+
builds.head.options.finalCache,
984+
builds.head.options.archiveCache
985985
)
986986
}
987987
val relMainJs = os.rel / "main.js"
@@ -1012,9 +1012,9 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers {
10121012
}
10131013
else {
10141014
os.copy(mainJs, dest, replaceExisting = true)
1015-
if (build.options.scalaJsOptions.emitSourceMaps && os.exists(sourceMapJs)) {
1015+
if (builds.head.options.scalaJsOptions.emitSourceMaps && os.exists(sourceMapJs)) {
10161016
val sourceMapDest =
1017-
build.options.scalaJsOptions.sourceMapsDest.getOrElse(os.Path(s"$dest.map"))
1017+
builds.head.options.scalaJsOptions.sourceMapsDest.getOrElse(os.Path(s"$dest.map"))
10181018
val updatedMainJs = ScalaJsLinker.updateSourceMappingURL(dest)
10191019
os.write.over(dest, updatedMainJs)
10201020
os.copy(sourceMapJs, sourceMapDest, replaceExisting = true)

0 commit comments

Comments
 (0)