summaryrefslogtreecommitdiff
path: root/src/partest
diff options
context:
space:
mode:
authorJosh Suereth <joshua.suereth@gmail.com>2011-12-01 10:18:08 -0500
committerJosh Suereth <joshua.suereth@gmail.com>2011-12-01 10:18:08 -0500
commitd4e16acd28f1dec82c213403f78d0e33cca4a791 (patch)
treea9726339fa9b07936e827ef146218bc813c7f057 /src/partest
parent51f5831b0c0d14c28938a6f537b93f183217d942 (diff)
downloadscala-d4e16acd28f1dec82c213403f78d0e33cca4a791.tar.gz
scala-d4e16acd28f1dec82c213403f78d0e33cca4a791.tar.bz2
scala-d4e16acd28f1dec82c213403f78d0e33cca4a791.zip
Port of SBT 0.11.x build. Things appear to be working well.
Diffstat (limited to 'src/partest')
-rw-r--r--src/partest/scala/tools/partest/nest/SBTRunner.scala65
1 files changed, 57 insertions, 8 deletions
diff --git a/src/partest/scala/tools/partest/nest/SBTRunner.scala b/src/partest/scala/tools/partest/nest/SBTRunner.scala
index 299296b01d..ae54e51761 100644
--- a/src/partest/scala/tools/partest/nest/SBTRunner.scala
+++ b/src/partest/scala/tools/partest/nest/SBTRunner.scala
@@ -3,21 +3,21 @@ package nest
import java.io.File
import scala.tools.nsc.io.{ Directory }
+import scala.util.Properties.setProp
-class SBTRunner extends DirectRunner {
-
+object SBTRunner extends DirectRunner {
+
val fileManager = new FileManager {
var JAVACMD: String = "java"
var JAVAC_CMD: String = "javac"
var CLASSPATH: String = _
var LATEST_LIB: String = _
- val testRootPath: String = PathSettings.testRoot.path
- val testRootDir: Directory = PathSettings.testRoot
+ val testRootPath: String = "test"
+ val testRootDir: Directory = Directory(testRootPath)
}
-
+
def reflectiveRunTestsForFiles(kindFiles: Array[File], kind: String):java.util.HashMap[String,Int] = {
-
def convert(scalaM:scala.collection.immutable.Map[String,Int]):java.util.HashMap[String,Int] = {
val javaM = new java.util.HashMap[String,Int]()
for(elem <- scalaM) yield {javaM.put(elem._1,elem._2)}
@@ -25,11 +25,60 @@ class SBTRunner extends DirectRunner {
}
def failedOnlyIfRequired(files:List[File]):List[File]={
- if (fileManager.failed) files filter (x => fileManager.logFileExists(x, kind)) else files
+ if (fileManager.failed) files filter (x => fileManager.logFileExists(x, kind)) else files
}
+ convert(runTestsForFiles(failedOnlyIfRequired(kindFiles.toList), kind))
+ }
- convert(runTestsForFiles(failedOnlyIfRequired(kindFiles.toList), kind))
+ case class CommandLineOptions(classpath: Option[String] = None,
+ tests: Map[String, Array[File]] = Map(),
+ scalacOptions: Seq[String] = Seq(),
+ justFailedTests: Boolean = false)
+
+ def mainReflect(args: Array[String]): java.util.Map[String,Int] = {
+ setProp("partest.debug", "true")
+ setProperties()
+
+ val Argument = new scala.util.matching.Regex("-(.*)")
+ def parseArgs(args: Seq[String], data: CommandLineOptions): CommandLineOptions = args match {
+ case Seq("--failed", rest @ _*) => parseArgs(rest, data.copy(justFailedTests = true))
+ case Seq("-cp", cp, rest @ _*) => parseArgs(rest, data.copy(classpath=Some(cp)))
+ case Seq("-scalacoption", opt, rest @ _*) => parseArgs(rest, data.copy(scalacOptions= data.scalacOptions :+ opt))
+ case Seq(Argument(name), runFiles, rest @ _*) => parseArgs(rest, data.copy(tests=data.tests + (name -> runFiles.split(",").map(new File(_)))))
+ case Seq() => data
+ case x => sys.error("Unknown command line options: " + x)
+ }
+ val config = parseArgs(args, CommandLineOptions())
+ fileManager.SCALAC_OPTS = config.scalacOptions
+ fileManager.CLASSPATH = config.classpath getOrElse error("No classpath set")
+ // Find scala library jar file...
+ val lib: Option[String] = (fileManager.CLASSPATH split File.pathSeparator filter (_ matches ".*scala-library.*\\.jar")).headOption
+ fileManager.LATEST_LIB = lib getOrElse error("No scala-library found! Classpath = " + fileManager.CLASSPATH)
+ // TODO - Do something useful here!!!
+ fileManager.JAVAC_CMD = "javac"
+ fileManager.failed = config.justFailedTests
+ // TODO - Make this a flag?
+ //fileManager.updateCheck = true
+ // Now run and report...
+ val runs = config.tests.filterNot(_._2.isEmpty)
+ // This next bit uses java maps...
+ import collection.JavaConverters._
+ (for {
+ (testType, files) <- runs
+ (path, result) <- reflectiveRunTestsForFiles(files,testType).asScala
+ } yield (path, result)).seq asJava
+ }
+ def main(args: Array[String]): Unit = {
+ import collection.JavaConverters._
+ val failures = for {
+ (path, result) <- mainReflect(args).asScala
+ if result == 1 || result == 2
+ val resultName = (if(result == 1) " [FAILED]" else " [TIMEOUT]")
+ } yield path + resultName
+ // Re-list all failures so we can go figure out what went wrong.
+ failures foreach System.err.println
+ if(!failures.isEmpty) sys.exit(1)
}
}