summaryrefslogtreecommitdiff
path: root/src/partest
diff options
context:
space:
mode:
Diffstat (limited to 'src/partest')
-rw-r--r--src/partest/scala/tools/partest/TestKinds.scala3
-rw-r--r--src/partest/scala/tools/partest/nest/ConsoleRunner.scala68
-rw-r--r--src/partest/scala/tools/partest/nest/ConsoleRunnerSpec.scala54
-rw-r--r--src/partest/scala/tools/partest/nest/NestUI.scala30
-rw-r--r--src/partest/scala/tools/partest/nest/ReflectiveRunner.scala7
-rw-r--r--src/partest/scala/tools/partest/nest/Runner.scala11
6 files changed, 95 insertions, 78 deletions
diff --git a/src/partest/scala/tools/partest/TestKinds.scala b/src/partest/scala/tools/partest/TestKinds.scala
index ec682690ca..b4e8afd0d2 100644
--- a/src/partest/scala/tools/partest/TestKinds.scala
+++ b/src/partest/scala/tools/partest/TestKinds.scala
@@ -4,8 +4,7 @@ package partest
import nest.PathSettings.srcDir
object TestKinds {
- val standardKinds = "pos neg run jvm res buildmanager scalacheck scalap specialized instrumented presentation ant" split "\\s+" toList
- val standardArgs = standardKinds map ("--" + _)
+ val standardKinds = ("pos neg run jvm res scalacheck scalap specialized instrumented presentation ant" split "\\s+").toList
def denotesTestFile(p: Path) = p.isFile && p.hasExtension("scala", "res", "xml")
def denotesTestDir(p: Path) = kindOf(p) match {
diff --git a/src/partest/scala/tools/partest/nest/ConsoleRunner.scala b/src/partest/scala/tools/partest/nest/ConsoleRunner.scala
index 33bf836a7b..332131ca3a 100644
--- a/src/partest/scala/tools/partest/nest/ConsoleRunner.scala
+++ b/src/partest/scala/tools/partest/nest/ConsoleRunner.scala
@@ -9,13 +9,15 @@ package nest
import utils.Properties._
import scala.tools.nsc.Properties.{ versionMsg, setProp }
-import scala.tools.nsc.util.CommandLine
import scala.collection.{ mutable, immutable }
import PathSettings.srcDir
import TestKinds._
import scala.reflect.internal.util.Collections.distinctBy
+import scala.tools.cmd.{ CommandLine, CommandLineParser, Instance }
-class ConsoleRunner extends DirectRunner {
+class ConsoleRunner(argstr: String) extends {
+ val parsed = ConsoleRunnerSpec.creator(CommandLineParser tokenize argstr)
+} with DirectRunner with ConsoleRunnerSpec with Instance {
import NestUI._
import NestUI.color._
@@ -86,27 +88,15 @@ class ConsoleRunner extends DirectRunner {
}
}
- private val unaryArgs = List(
- "--pack", "--all",
- "--terse", "--verbose", "--show-diff", "--show-log", "--self-test",
- "--failed", "--update-check", "--version", "--ansi", "--debug", "--help"
- ) ::: standardArgs
-
- private val binaryArgs = List(
- "--grep", "--srcpath", "--buildpath", "--classpath", "--timeout"
- )
-
- def main(argstr: String) {
- val parsed = (new CommandLine(argstr)) withUnaryArgs unaryArgs withBinaryArgs binaryArgs
-
- if (parsed isSet "--debug") NestUI.setDebug()
- if (parsed isSet "--verbose") NestUI.setVerbose()
- if (parsed isSet "--terse") NestUI.setTerse()
- if (parsed isSet "--show-diff") NestUI.setDiffOnFail()
+ def run(): Unit = {
+ if (optDebug) NestUI.setDebug()
+ if (optVerbose) NestUI.setVerbose()
+ if (optTerse) NestUI.setTerse()
+ if (optShowDiff) NestUI.setDiffOnFail()
// Early return on no args, version, or invalid args
- if (parsed isSet "--version") return echo(versionMsg)
- if ((argstr == "") || (parsed isSet "--help")) return NestUI.usage()
+ if (optVersion) return echo(versionMsg)
+ if ((argstr == "") || optHelp) return NestUI.usage()
val (individualTests, invalid) = parsed.residualArgs map (p => Path(p)) partition denotesTestPath
if (invalid.nonEmpty) {
@@ -116,27 +106,26 @@ class ConsoleRunner extends DirectRunner {
echoWarning(s"Discarding ${invalid.size} invalid test paths")
}
- parsed get "--srcpath" foreach (x => setProp("partest.srcdir", x))
- parsed get "--timeout" foreach (x => setProp("partest.timeout", x))
+ optSourcePath foreach (x => setProp("partest.srcdir", x))
+ optTimeout foreach (x => setProp("partest.timeout", x))
fileManager =
- if (parsed isSet "--buildpath") new ConsoleFileManager(parsed("--buildpath"))
- else if (parsed isSet "--classpath") new ConsoleFileManager(parsed("--classpath"), true)
- else if (parsed isSet "--pack") new ConsoleFileManager("build/pack")
+ if (optBuildPath.isDefined) new ConsoleFileManager(optBuildPath.get)
+ else if (optClassPath.isDefined) new ConsoleFileManager(optClassPath.get, true)
+ else if (optPack) new ConsoleFileManager("build/pack")
else new ConsoleFileManager // auto detection, see ConsoleFileManager.findLatest
- fileManager.updateCheck = parsed isSet "--update-check"
- fileManager.failed = parsed isSet "--failed"
+ fileManager.updateCheck = optUpdateCheck
+ fileManager.failed = optFailed
val partestTests = (
- if (parsed isSet "--self-test") TestKinds.testsForPartest
+ if (optSelfTest) TestKinds.testsForPartest
else Nil
)
- val grepExpr = parsed get "--grep" getOrElse ""
+ val grepExpr = optGrep getOrElse ""
// If --grep is given we suck in every file it matches.
- var grepMessage = ""
val greppedTests = if (grepExpr == "") Nil else {
val paths = grepFor(grepExpr)
if (paths.isEmpty)
@@ -145,14 +134,14 @@ class ConsoleRunner extends DirectRunner {
paths.sortBy(_.toString)
}
- val isRerun = parsed isSet "--failed"
+ val isRerun = optFailed
val rerunTests = if (isRerun) TestKinds.failedTests else Nil
def miscTests = partestTests ++ individualTests ++ greppedTests ++ rerunTests
- val givenKinds = standardArgs filter parsed.isSet
+ val givenKinds = standardKinds filter parsed.isSet
val kinds = (
- if (parsed isSet "--all") standardKinds
- else if (givenKinds.nonEmpty) givenKinds map (_ stripPrefix "--")
+ if (optAll) standardKinds
+ else if (givenKinds.nonEmpty) givenKinds
else if (invalid.isEmpty && miscTests.isEmpty && !isRerun) standardKinds // If no kinds, --grep, or individual tests were given, assume --all
else Nil
)
@@ -223,4 +212,13 @@ class ConsoleRunner extends DirectRunner {
issueSummaryReport()
System exit ( if (isSuccess) 0 else 1 )
}
+
+ run()
}
+
+object ConsoleRunner {
+ def main(args: Array[String]): Unit = {
+ new ConsoleRunner(args mkString " ")
+ }
+}
+
diff --git a/src/partest/scala/tools/partest/nest/ConsoleRunnerSpec.scala b/src/partest/scala/tools/partest/nest/ConsoleRunnerSpec.scala
new file mode 100644
index 0000000000..f9143013e9
--- /dev/null
+++ b/src/partest/scala/tools/partest/nest/ConsoleRunnerSpec.scala
@@ -0,0 +1,54 @@
+package scala.tools.partest.nest
+
+import language.postfixOps
+
+import scala.tools.cmd.{ CommandLine, Interpolation, Meta, Reference, Spec }
+
+trait ConsoleRunnerSpec extends Spec with Meta.StdOpts with Interpolation {
+ def referenceSpec = ConsoleRunnerSpec
+ def programInfo = Spec.Info(
+ "console-runner",
+ "Usage: NestRunner [options] [test test ...]",
+ "scala.tools.partest.nest.ConsoleRunner")
+
+ heading("Test categories:")
+ val optAll = "all" / "run all tests" --?
+ val optPos = "pos" / "run compilation tests (success)" --?
+ val optNeg = "neg" / "run compilation tests (failure)" --?
+ val optRun = "run" / "run interpreter and backend tests" --?
+ val optJvm = "jvm" / "run JVM backend tests" --?
+ val optRes = "res" / "run resident compiler tests" --?
+ val optAnt = "ant" / "run Ant tests" --?
+ val optScalap = "scalap" / "run scalap tests" --?
+ val optSpecialized = "specialized" / "run specialization tests" --?
+ val optScalacheck = "scalacheck" / "run ScalaCheck tests" --?
+ val optInstrumented = "instrumented" / "run instrumented tests" --?
+ val optPresentation = "presentation" / "run presentation compiler tests" --?
+
+ heading("Test runner options:")
+ val optFailed = "failed" / "run only those tests that failed during the last run" --?
+ val optTimeout = "timeout" / "aborts the test suite after the given amount of time" --|
+ val optPack = "pack" / "pick compiler/reflect/library in build/pack, and run all tests" --?
+ val optGrep = "grep" / "run all tests whose source file contains the expression given to grep" --|
+ val optUpdateCheck = "update-check" / "instead of failing tests with output change, update checkfile (use with care!)" --?
+ val optBuildPath = "buildpath" / "set (relative) path to build jars (ex.: --buildpath build/pack)" --|
+ val optClassPath = "classpath" / "set (absolute) path to build classes" --|
+ val optSourcePath = "srcpath" / "set (relative) path to test source files (ex.: --srcpath pending)" --|
+
+ heading("Test output options:")
+ val optShowDiff = "show-diff" / "show diffs for failed tests" --?
+ val optVerbose = "verbose" / "show verbose progress information" --?
+ val optTerse = "terse" / "show terse progress information" --?
+ val optDebug = "debug" / "enable debugging output" --?
+
+ heading("Other options:")
+ val optVersion = "version" / "show Scala version and exit" --?
+ val optSelfTest = "self-test" / "run tests for partest itself" --?
+ val optHelp = "help" / "show this page and exit" --?
+
+}
+
+object ConsoleRunnerSpec extends ConsoleRunnerSpec with Reference {
+ type ThisCommandLine = CommandLine
+ def creator(args: List[String]): ThisCommandLine = new CommandLine(ConsoleRunnerSpec, args)
+}
diff --git a/src/partest/scala/tools/partest/nest/NestUI.scala b/src/partest/scala/tools/partest/nest/NestUI.scala
index 564270e531..5148115905 100644
--- a/src/partest/scala/tools/partest/nest/NestUI.scala
+++ b/src/partest/scala/tools/partest/nest/NestUI.scala
@@ -144,34 +144,8 @@ object NestUI {
}
def usage() {
- println("Usage: NestRunner [options] [test test ...]")
- println
- println(" Test categories:")
- println(" --all run all tests")
- println(" --pos run compilation tests (success)")
- println(" --neg run compilation tests (failure)")
- println(" --run run interpreter and backend tests")
- println(" --jvm run JVM backend tests")
- println(" --res run resident compiler tests")
- println(" --scalacheck run ScalaCheck tests")
- println(" --instrumented run instrumented tests")
- println(" --presentation run presentation compiler tests")
- println
- println(" Other options:")
- println(" --pack pick compiler/reflect/library in build/pack, and run all tests")
- println(" --grep <expr> run all tests whose source file contains <expr>")
- println(" --failed run only those tests that failed during the last run")
- println(" --update-check instead of failing tests with output change, update checkfile. (Use with care!)")
- println(" --verbose show progress information")
- println(" --buildpath set (relative) path to build jars")
- println(" ex.: --buildpath build/pack")
- println(" --classpath set (absolute) path to build classes")
- println(" --srcpath set (relative) path to test source files")
- println(" ex.: --srcpath pending")
- println(" --debug enable debugging output")
- println
- println(utils.Properties.versionString)
- println("maintained by Philipp Haller (EPFL)")
+ println(ConsoleRunnerSpec.programInfo.usage)
+ println(ConsoleRunnerSpec.helpMsg)
sys.exit(1)
}
diff --git a/src/partest/scala/tools/partest/nest/ReflectiveRunner.scala b/src/partest/scala/tools/partest/nest/ReflectiveRunner.scala
index 734affa153..3c77a03f1e 100644
--- a/src/partest/scala/tools/partest/nest/ReflectiveRunner.scala
+++ b/src/partest/scala/tools/partest/nest/ReflectiveRunner.scala
@@ -85,10 +85,9 @@ class ReflectiveRunner {
try {
val sepRunnerClass = sepLoader loadClass sepRunnerClassName
- val sepRunner = sepRunnerClass.newInstance()
- val sepMainMethod = sepRunnerClass.getMethod("main", Array(classOf[String]): _*)
- val cargs: Array[AnyRef] = Array(args)
- sepMainMethod.invoke(sepRunner, cargs: _*)
+ val sepMainMethod = sepRunnerClass.getMethod("main", classOf[Array[String]])
+ val cargs: Array[AnyRef] = Array(Array(args))
+ sepMainMethod.invoke(null, cargs: _*)
}
catch {
case cnfe: ClassNotFoundException =>
diff --git a/src/partest/scala/tools/partest/nest/Runner.scala b/src/partest/scala/tools/partest/nest/Runner.scala
index a53698eb77..d7d87bdcf5 100644
--- a/src/partest/scala/tools/partest/nest/Runner.scala
+++ b/src/partest/scala/tools/partest/nest/Runner.scala
@@ -772,15 +772,8 @@ trait DirectRunner {
import PartestDefaults.{ numThreads, waitTime }
- Thread.setDefaultUncaughtExceptionHandler(
- new Thread.UncaughtExceptionHandler {
- def uncaughtException(thread: Thread, t: Throwable) {
- val t1 = Exceptional unwrap t
- System.err.println(s"Uncaught exception on thread $thread: $t1")
- t1.printStackTrace()
- }
- }
- )
+ setUncaughtHandler
+
def runTestsForFiles(kindFiles: List[File], kind: String): List[TestState] = {
NestUI.resetTestNumber(kindFiles.size)