Skip to content

Commit 35019a6

Browse files
authored
Merge pull request scala#10757 from som-snytt/tweak/test-flags
Prefer scala-cli pragmas [ci: last-only]
2 parents 0d004ab + 53e1571 commit 35019a6

File tree

906 files changed

+1064
-1057
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

906 files changed

+1064
-1057
lines changed

src/partest/scala/tools/partest/nest/Runner.scala

Lines changed: 34 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ class Runner(val testInfo: TestInfo, val suiteRunner: AbstractRunner) {
118118
joinPaths(outDir :: testClassPath),
119119
"-J-Duser.language=en",
120120
"-J-Duser.country=US"
121-
) ++ (toolArgsFor(files)(ToolName.javac)
121+
) ++ (toolArgsFor(files)(ToolName.javacOpt)
122122
) ++ (files.map(_.getAbsolutePath)
123123
)
124124

@@ -367,14 +367,8 @@ class Runner(val testInfo: TestInfo, val suiteRunner: AbstractRunner) {
367367

368368
// no spaces in test file paths below root, because otherwise how to detect end of path string?
369369
val pathFinder = raw"""(?i)\Q${elided}${File.separator}\E([\${File.separator}\S]*)""".r
370-
def canonicalize: String => String = {
371-
val hiders = toolArgs(ToolName.hide).map(_.r)
372-
(s: String) => {
373-
val pathless = pathFinder.replaceAllIn(s, m => quoteReplacement(ellipsis + squashSlashes(m.group(1))))
374-
if (hiders.isEmpty) pathless
375-
else hiders.foldLeft(pathless)((s, r) => r.replaceAllIn(s, m => "***"))
376-
}
377-
}
370+
def canonicalize: String => String =
371+
s => pathFinder.replaceAllIn(s, m => quoteReplacement(ellipsis + squashSlashes(m.group(1))))
378372

379373
def masters = {
380374
val files = List(new File(parentFile, "filters"), new File(suiteRunner.pathSettings.srcDir.path, "filters"))
@@ -438,13 +432,13 @@ class Runner(val testInfo: TestInfo, val suiteRunner: AbstractRunner) {
438432
}
439433

440434
// all sources in a round may contribute flags via // scalac: -flags
441-
// under --realeasy, if a javaVersion isn't specified, require the minimum viable using -release 8
435+
// under --realeasy, if a jvm isn't specified, require the minimum viable using -release 8
442436
// to avoid accidentally committing a test that requires a later JVM.
443437
def flagsForCompilation(sources: List[File]): List[String] = {
444438
var perFile = toolArgsFor(sources)(ToolName.scalac)
445439
if (parentFile.getParentFile.getName == "macro-annot")
446440
perFile ::= "-Ymacro-annotations"
447-
if (realeasy && isJavaAtLeast(9) && !perFile.exists(releaseFlag.matches) && toolArgsFor(sources)(ToolName.javaVersion).isEmpty)
441+
if (realeasy && isJavaAtLeast(9) && !perFile.exists(releaseFlag.matches) && toolArgsFor(sources)(ToolName.jvm).isEmpty)
448442
perFile ::= "-release:8"
449443
perFile
450444
}
@@ -455,28 +449,24 @@ class Runner(val testInfo: TestInfo, val suiteRunner: AbstractRunner) {
455449

456450
// for each file, cache the args for each tool
457451
private val fileToolArgs = new mutable.HashMap[Path, Map[ToolName, List[String]]]
458-
private val optionsPattern = raw"\s*//>\s*using\s+(?:([^.]+)\.)?option(s)?\s+(.*)".r
452+
//private val optionsPattern = raw"\s*//>\s*using\s+(?:([^.]+)\.)?option(s)?\s+(.*)".r
453+
private val optionsPattern = raw"\s*//>\s*using\s+(${ToolName.alts})\s+(.*)".r
459454

460455
// Inspect given files for tool args in header line comments of the form `// tool: args`.
461456
// If the line comment starts `//>`, accept `using option` or `using options` pragmas
462457
// to define options to`scalac`. Or take `using test.options`, where test scope is used for test options.
463458
// (`test` scope is not used that way by scala-cli, where framework args are passed on command line.)
464459
// (One could imagine `using test.testOpt` for framework args.)
465460
// If `filter:`, return entire line as if quoted, else parse the args string as command line.
466-
// Currently, we look for scalac, javac, java, javaVersion, filter, hide, test.
461+
// Currently, we look for scalac, javac, java, jvm, filter, test.
467462
//
468463
def toolArgsFor(files: List[File])(tool: ToolName): List[String] = {
469464
def argsFor(f: File): List[String] = fileToolArgs.getOrElseUpdate(f.toPath, readToolArgs(f)).apply(tool)
470-
def readToolArgs(f: File): Map[ToolName, List[String]] = {
471-
val header = readHeaderFrom(f)
472-
val options = optionsFromHeader(header)
473-
if (options.isEmpty) oldStyle(header)
474-
else options
475-
}
465+
def readToolArgs(f: File): Map[ToolName, List[String]] = optionsFromHeader(readHeaderFrom(f))
476466
def optionsFromHeader(header: List[String]) = {
477467
import scala.sys.process.Parser.tokenize
478468
def matchLine(line: String): List[(ToolName, List[String])] = line match {
479-
case optionsPattern(scope, plural, rest) =>
469+
case optionsPattern(scope, rest) =>
480470
val named = Try {
481471
if (scope == null) ToolName.scalac
482472
else ToolName.named(scope)
@@ -486,30 +476,16 @@ class Runner(val testInfo: TestInfo, val suiteRunner: AbstractRunner) {
486476
suiteRunner.verbose(s"ignoring pragma with unknown scope '$scope': $line")
487477
Nil
488478
case Some(name) =>
489-
val settings =
490-
if (plural == null) List(rest.trim)
491-
else tokenize(rest).filter(_ != ",").map(_.stripSuffix(","))
479+
val settings = tokenize(rest).filter(_ != ",").map(_.stripSuffix(","))
492480
if (settings.isEmpty) Nil
493481
else (name, settings) :: Nil
494482
}
495483
case _ => Nil
496484
}
497-
header.flatMap(matchLine).toMap.withDefaultValue(List.empty[String])
498-
}
499-
def oldStyle(header: List[String]) =
500-
ToolName.values.toList
501-
.map(name => name -> fromHeader(name, header))
502-
.filterNot(_._2.isEmpty)
503-
.toMap[ToolName, List[String]]
504-
.withDefaultValue(List.empty[String])
505-
def fromHeader(name: ToolName, header: List[String]): List[String] = {
506-
import scala.sys.process.Parser.tokenize
507-
val namePattern = raw"\s*//\s*$name:\s*(.*)".r
508-
def matchLine(line: String): List[String] = line match {
509-
case namePattern(rest) => if (name == ToolName.filter) List(rest.trim) else tokenize(rest)
510-
case _ => Nil
511-
}
512485
header.flatMap(matchLine)
486+
.groupBy(_._1)
487+
.map { case (k, kvs) => (k, kvs.flatMap(_._2)) }
488+
.withDefaultValue(List.empty[String])
513489
}
514490
def readHeaderFrom(f: File): List[String] =
515491
Using.resource(Files.lines(f.toPath, codec.charSet))(_.limit(10).toArray()).toList.map(_.toString)
@@ -548,7 +524,7 @@ class Runner(val testInfo: TestInfo, val suiteRunner: AbstractRunner) {
548524
val Range = """(\d+)(?:(\+)|(?:-(\d+)))?""".r
549525
lazy val currentJavaVersion = javaSpecVersion.stripPrefix("1.").toInt
550526
val allFiles = sources(file)
551-
val skipStates = toolArgsFor(allFiles)(ToolName.javaVersion).flatMap {
527+
val skipStates = toolArgsFor(allFiles)(ToolName.jvm).flatMap {
552528
case v @ Range(from, plus, to) =>
553529
val ok =
554530
if (plus == null)
@@ -560,7 +536,7 @@ class Runner(val testInfo: TestInfo, val suiteRunner: AbstractRunner) {
560536
else if (ok) None
561537
else Some(genSkip(s"skipped on Java $javaSpecVersion, only running on $v"))
562538
case v =>
563-
Some(genFail(s"invalid javaVersion range in test comment: $v"))
539+
Some(genFail(s"invalid jvm range in test comment: $v"))
564540
}
565541
skipStates.headOption match {
566542
case Some(state) => List(SkipRound(List(file), state))
@@ -706,7 +682,7 @@ class Runner(val testInfo: TestInfo, val suiteRunner: AbstractRunner) {
706682
}
707683

708684
private def runRunTest(): TestState = {
709-
val javaopts = toolArgs(ToolName.java)
685+
val javaopts = toolArgs(ToolName.javaOpt)
710686
val execInProcess = PartestDefaults.execInProcess && javaopts.isEmpty && !Set("specialized", "instrumented").contains(testFile.getParentFile.getName)
711687
def exec() = if (execInProcess) execTestInProcess(outDir, logFile) else execTest(outDir, logFile, javaopts)
712688
def noexec() = genSkip("no-exec: tests compiled but not run")
@@ -818,17 +794,27 @@ final class TestTranscript {
818794
def toList = buf.toList
819795
}
820796

821-
// Tool names in test file header: scalac, javac, java, javaVersion, filter, hide, test.
797+
// Tool names in test file header: scalac, javacOpt, javaOpt, jvm, filter, test, retest.
822798
sealed trait ToolName
823799
object ToolName {
824800
case object scalac extends ToolName
825-
case object javac extends ToolName
826-
case object java extends ToolName
827-
case object javaVersion extends ToolName
801+
case object javacOpt extends ToolName
802+
case object javaOpt extends ToolName
803+
case object jvm extends ToolName
828804
case object test extends ToolName
829805
case object retest extends ToolName
830806
case object filter extends ToolName
831-
case object hide extends ToolName
832-
val values = Array(scalac, javac, java, javaVersion, test, retest, filter, hide)
833-
def named(s: String): ToolName = values.find(_.toString.equalsIgnoreCase(s)).getOrElse(throw new IllegalArgumentException(s))
807+
val values = Array(scalac, javacOpt, javaOpt, jvm, test, retest, filter)
808+
def named(s: String): ToolName = s match {
809+
case "options" => scalac
810+
case "test.options" => test
811+
case "retest.options" => retest
812+
case _ => values.find(_.toString == s).getOrElse(throw new IllegalArgumentException(s))
813+
}
814+
def option(toolName: ToolName): String = toolName match {
815+
case `scalac` => "options"
816+
case `test` | `retest` => s"$toolName.options"
817+
case _ => toolName.toString
818+
}
819+
val alts = values.map(option).mkString("|")
834820
}

test/async/jvm/anf.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.anf.AnfTransformSpec])
44

test/async/jvm/await0.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.await0.Await0Spec])
44

test/async/jvm/block0.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.block0.AsyncSpec])
44

test/async/jvm/block1.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.block1.Block1Spec])
44

test/async/jvm/completable-future.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import java.util.concurrent._
44
import scala.tools.partest.async.CompletableFutureAwait._

test/async/jvm/concurrent_AfterRefchecksIssue.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._, ExecutionContext.Implicits.global, scala.tools.testkit.async.Async._
44

test/async/jvm/concurrent_ArrayIndexOutOfBoundIssue.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import ExecutionContext.Implicits.global

test/async/jvm/concurrent_GenericTypeBoundaryIssue.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import Test.test
44

test/async/jvm/concurrent_MatchEndIssue.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import ExecutionContext.Implicits.global

test/async/jvm/concurrent_NegativeArraySizeException.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import ExecutionContext.Implicits.global

test/async/jvm/concurrent_NegativeArraySizeExceptionFine1.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import ExecutionContext.Implicits.global

test/async/jvm/concurrent_ReturnTupleIssue.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import ExecutionContext.Implicits.global

test/async/jvm/concurrent_fetch.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent.{Await, Future, duration}
44
import scala.concurrent.ExecutionContext.Implicits.global

test/async/jvm/concurrent_patternAlternative.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import ExecutionContext.Implicits.global

test/async/jvm/concurrent_patternAlternativeBothAnnotations.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import ExecutionContext.Implicits.global

test/async/jvm/concurrent_polymorphicMethod.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import ExecutionContext.Implicits.global

test/async/jvm/concurrent_shadowing.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import ExecutionContext.Implicits.global

test/async/jvm/concurrent_shadowing0.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import ExecutionContext.Implicits.global

test/async/jvm/concurrent_shadowing2.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import ExecutionContext.Implicits.global

test/async/jvm/concurrent_shadowingRefinedTypes.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import ExecutionContext.Implicits.global

test/async/jvm/concurrent_test0.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
/*
44
* Scala (https://www.scala-lang.org)

test/async/jvm/exceptions.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.exceptions.ExceptionsSpec])
44

test/async/jvm/futures.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync -deprecation
1+
//> using options -Xasync -deprecation
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.futures.FutureSpec])
44

test/async/jvm/hygiene.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.hygiene.HygieneSpec])
44

test/async/jvm/ifelse0.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.ifelse0.IfElseSpec])
44

test/async/jvm/ifelse0_while.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.ifelse0.WhileSpec])
44

test/async/jvm/ifelse1.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.ifelse1.IfElse1Spec])
44

test/async/jvm/ifelse2.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.ifelse2.IfElse2Spec])
44

test/async/jvm/ifelse3.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.ifelse3.IfElse3Spec])
44

test/async/jvm/ifelse4.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.ifelse4.IfElse4Spec])
44

test/async/jvm/lazyval.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.lazyval.LazyValSpec])
44

test/async/jvm/live.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.live.LiveVariablesSpec])
44

test/async/jvm/localclasses.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.neg.LocalClasses0Spec])
44

test/async/jvm/match0.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.match0.MatchSpec])
44

test/async/jvm/nesteddef.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.nesteddef.NestedDef])
44

test/async/jvm/noawait.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
object Test extends scala.tools.partest.JUnitTest(classOf[scala.async.run.noawait.NoAwaitSpec])
44

test/async/jvm/stackoverflow.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// scalac: -Xasync
1+
//> using options -Xasync
22

33
import scala.concurrent._
44
import scala.concurrent.duration._

0 commit comments

Comments
 (0)