summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/partest/scala/tools/partest/PartestTask.scala44
-rw-r--r--src/partest/scala/tools/partest/nest/ConsoleFileManager.scala51
-rw-r--r--src/partest/scala/tools/partest/nest/ConsoleRunner.scala84
3 files changed, 69 insertions, 110 deletions
diff --git a/src/partest/scala/tools/partest/PartestTask.scala b/src/partest/scala/tools/partest/PartestTask.scala
index 79fed51898..757a53813d 100644
--- a/src/partest/scala/tools/partest/PartestTask.scala
+++ b/src/partest/scala/tools/partest/PartestTask.scala
@@ -13,6 +13,8 @@ package partest
import scala.actors.Actor._
import scala.util.Properties.setProp
+import scala.tools.nsc.io
+import io.{ Directory }
import nsc.Settings
import nsc.util.ClassPath
import util.PathResolver
@@ -140,30 +142,26 @@ class PartestTask extends Task {
private var jUnitReportDir: Option[File] = None
private var debug = false
- private def getFiles(fileSet: Option[FileSet]): Array[File] =
- if (fileSet.isEmpty) Array()
- else {
- val files = fileSet.get
- files.getDirectoryScanner(getProject).getIncludedFiles.map(
- fs => new File(files.getDir(getProject), fs)
- ).filter(file => !file.getCanonicalPath().endsWith(".log"))
- }
+ def fileSetToDir(fs: FileSet) = Directory(fs getDir getProject)
+ def fileSetToArray(fs: FileSet): Array[io.Path] = {
+ val root = fileSetToDir(fs)
+ (fs getDirectoryScanner getProject).getIncludedFiles map (root / _)
+ }
- private def getFilesAndDirs(fileSet: Option[FileSet]): Array[File] =
- if (!fileSet.isEmpty) {
- val files = fileSet.get
- val fileTests = getFiles(fileSet)
- val dir = files.getDir(getProject)
- val dirTests = dir.listFiles(new java.io.FileFilter {
- def accept(file: File) =
- file.isDirectory &&
- (!file.getName().equals(".svn")) &&
- (!file.getName().endsWith(".obj"))
- })
- (dirTests ++ fileTests).toArray
- }
- else
- Array()
+ private def getFiles(fileSet: Option[FileSet]): Array[File] = fileSet match {
+ case None => Array()
+ case Some(fs) => fileSetToArray(fs) filterNot (_ hasExtension "log") map (_.jfile)
+ }
+
+ private def getFilesAndDirs(fileSet: Option[FileSet]): Array[File] = fileSet match {
+ case None => Array()
+ case Some(fs) =>
+ val fileTests = getFiles(Some(fs))
+ val dirTests: Iterator[io.Path] = fileSetToDir(fs).dirs filterNot (x => (x hasExtension "svn") || (x hasExtension "obj"))
+ val dirResult = dirTests.toList.toArray map (_.jfile)
+
+ dirResult ++ fileTests
+ }
private def getPosFiles = getFilesAndDirs(posFiles)
private def getNegFiles = getFilesAndDirs(negFiles)
diff --git a/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala b/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala
index 617ef642de..3277db2ba7 100644
--- a/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala
+++ b/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala
@@ -177,43 +177,20 @@ class ConsoleFileManager extends FileManager {
// initialize above fields
findLatest()
- var testFiles: List[File] = List()
-
- def getFiles(kind: String, doCheck: Boolean, filter: Option[(String, Boolean)]): List[File] = {
-
- val dir = new File(srcDir, kind)
- NestUI.verbose("look in "+dir+" for tests")
- val files = if (dir.isDirectory) {
- if (!testFiles.isEmpty) {
- val dirpath = dir.getAbsolutePath
- testFiles filter { _.getParentFile.getAbsolutePath == dirpath }
- } else if (doCheck) filter match {
- case Some((ending, enableDirs)) =>
- val filter = new FilenameFilter {
- def accept(dir: File, name: String) =
- name.endsWith(ending) ||
- (enableDirs && (name != ".svn") && (!name.endsWith(".obj")) &&
- (new File(dir, name)).isDirectory)
- }
- dir.listFiles(filter).toList
- case None =>
- val filter = new FilenameFilter {
- def accept(dir: File, name: String) = name != ".svn"
- }
- dir.listFiles(filter).toList
- } else // skip
- Nil
- } else {
- NestUI.failure("Directory \"" + dir.getPath + "\" not found")
- Nil
- }
- if (failed)
- files filter { logFileExists(_, kind) }
- else
- files
- }
+ var testFiles: List[io.Path] = Nil
+
+ def getFiles(kind: String, cond: Path => Boolean): List[File] = {
+ def ignoreDir(p: Path) = List("svn", "obj") exists (p hasExtension _)
- def getFiles(kind: String, doCheck: Boolean): List[File] =
- getFiles(kind, doCheck, Some((".scala", true)))
+ val dir = Directory(srcDir / kind)
+ if (dir.isDirectory) NestUI.verbose("look in %s for tests" format dir)
+ else NestUI.failure("Directory '%s' not found" format dir)
+
+ val files =
+ if (testFiles.nonEmpty) testFiles filter (_.parent isSame dir)
+ else dir.list filterNot ignoreDir filter cond toList
+
+ ( if (failed) files filter (x => logFileExists(x, kind)) else files ) map (_.jfile)
+ }
}
diff --git a/src/partest/scala/tools/partest/nest/ConsoleRunner.scala b/src/partest/scala/tools/partest/nest/ConsoleRunner.scala
index 467aa7dc60..3701985e1a 100644
--- a/src/partest/scala/tools/partest/nest/ConsoleRunner.scala
+++ b/src/partest/scala/tools/partest/nest/ConsoleRunner.scala
@@ -19,38 +19,35 @@ import scala.tools.nsc.interpreter.returning
import io.{ Path }
class ConsoleRunner extends DirectRunner {
+ import PathSettings.srcDir
- case class TestSet(loc: String,
- filter: Option[(String, Boolean)],
- kind: String,
- msg: String)
+ case class TestSet(kind: String, filter: Path => Boolean, msg: String)
val testSets = {
- val fileFilter = Some((".scala", true))
+ val pathFilter: Path => Boolean = _ hasExtension "scala"
+
List(
- TestSet("pos", fileFilter, "pos",
- "Testing compiler (on files whose compilation should succeed)"),
- TestSet("neg", fileFilter, "neg",
- "Testing compiler (on files whose compilation should fail)"),
- TestSet("run", fileFilter, "run", "Testing JVM backend"),
- TestSet("jvm", fileFilter, "jvm", "Testing JVM backend"),
- TestSet("res", Some((".res", false)), "res",
- "Testing resident compiler"),
- TestSet("buildmanager", Some((".nothing", true)), "buildmanager", "Testing Build Manager"),
- TestSet("shootout", fileFilter, "shootout", "Testing shootout tests"),
- TestSet("script", fileFilter, "script", "Testing script tests"),
- TestSet("scalacheck", fileFilter, "scalacheck", "Testing ScalaCheck tests"),
- TestSet("scalap", fileFilter, "scalap", "Run scalap decompiler tests"))
+ TestSet("pos", pathFilter, "Testing compiler (on files whose compilation should succeed)"),
+ TestSet("neg", pathFilter, "Testing compiler (on files whose compilation should fail)"),
+ TestSet("run", pathFilter, "Testing JVM backend"),
+ TestSet("jvm", pathFilter, "Testing JVM backend"),
+ TestSet("res", x => x.isFile && (x hasExtension "res"), "Testing resident compiler"),
+ TestSet("buildmanager", _.isDirectory, "Testing Build Manager"),
+ TestSet("shootout", pathFilter, "Testing shootout tests"),
+ TestSet("script", pathFilter, "Testing script tests"),
+ TestSet("scalacheck", pathFilter, "Testing ScalaCheck tests"),
+ TestSet("scalap", pathFilter, "Run scalap decompiler tests")
+ )
}
var fileManager: ConsoleFileManager = _
private var testFiles: List[File] = List()
private val errors = PartestDefaults.errorCount
+ private val testSetKinds = testSets map (_.kind)
+ private val testSetArgs = testSets map ("--" + _.kind)
+ private val testSetArgMap = testSetArgs zip testSets toMap
- private val testSetKinds = testSets map (_.kind)
- private val testSetArgMap = testSets map (x => ("--" + x.loc) -> x) toMap
- private val testSetArgs = testSets map ("--" + _.loc)
def denotesTestSet(arg: String) = testSetArgs contains arg
def denotesTestFile(arg: String) = (arg endsWith ".scala") || (arg endsWith ".res")
def denotesTestDir(arg: String) = Path(arg).isDirectory
@@ -85,7 +82,7 @@ class ConsoleRunner extends DirectRunner {
else new ConsoleFileManager // auto detection, see ConsoleFileManager.findLatest
def argNarrowsTests(x: String) = denotesTestSet(x) || denotesTestFile(x) || denotesTestDir(x)
- val enabledTestSets = {
+ val enabledTestSets: List[TestSet] = {
val enabledArgs = testSetArgs filter parsed.isSet
if (args.isEmpty && (enabledArgs.isEmpty || (parsed isSet "--all"))) testSets
@@ -121,7 +118,7 @@ class ConsoleRunner extends DirectRunner {
val vmName = "%s (build %s, %s)".format(javaVmName, javaVmVersion, javaVmInfo)
val vmOpts = fileManager.JAVA_OPTS
- NestUI.verbose("enabled test sets: " + (enabledTestSets map (_.loc) mkString " "))
+ NestUI.verbose("enabled test sets: " + (enabledTestSets map (_.kind) mkString " "))
List(
"Scala compiler classes in: " + dir,
@@ -130,7 +127,8 @@ class ConsoleRunner extends DirectRunner {
"Java binaries in: " + vmBin,
"Java runtime is: " + vmName,
"Java options are: " + vmOpts,
- "Source directory is: " + fileManager.srcDir.path
+ "Source directory is: " + srcDir,
+ ""
) foreach (x => NestUI outline (x + "\n"))
val start = System.currentTimeMillis
@@ -160,9 +158,9 @@ class ConsoleRunner extends DirectRunner {
}
def runTests(testSet: TestSet): (Int, Int) = {
- val TestSet(loc, filter, kind, msg) = testSet
+ val TestSet(kind, filter, msg) = testSet
- fileManager.getFiles(loc, true, filter) match {
+ fileManager.getFiles(kind, filter) match {
case Nil => NestUI.verbose("test dir empty\n") ; (0, 0)
case files =>
NestUI.verbose("test files: "+files)
@@ -175,34 +173,20 @@ class ConsoleRunner extends DirectRunner {
* @return (success count, failure count)
*/
def testCheckAll(enabledSets: List[TestSet]): (Int, Int) = {
- def runTestsFiles = if (!testFiles.isEmpty) {
- def kindOf(f: File) = {
- val srcDirSegments = PathSettings.srcDir.segments
- val segments = Path(f).normalize.segments
- lazy val kind = (segments drop srcDirSegments.size).head
-
- if ((segments startsWith srcDirSegments) && (testSetKinds contains kind)) kind
- else {
- NestUI.failure("invalid test file: "+f.getPath+"\n")
- Predef.exit(1)
- }
- }
+ def kindOf(f: File) = (srcDir relativize Path(f).normalize).segments.head
- val fstKind = kindOf(testFiles.head)
- NestUI.verbose("all test files expected to have kind "+fstKind)
- if (!testFiles.forall(kindOf(_) equals fstKind)) {
- NestUI.failure("test files have different kinds\n")
- Predef.exit(1)
- } else {
+ val (valid, invalid) = testFiles partition (x => testSetKinds contains kindOf(x))
+ invalid foreach (x => NestUI.failure("Invalid test file '%s', skipping.\n" format x))
+
+ val runTestsFileLists =
+ for ((kind, files) <- valid groupBy kindOf toList) yield {
NestUI.outline("\nTesting individual files\n")
- resultsToStatistics(runTestsForFiles(testFiles, fstKind))
+ resultsToStatistics(runTestsForFiles(files, kind))
}
- } else (0, 0)
- NestUI.verbose("run sets: "+enabledSets)
+ NestUI.verbose("Run sets: "+enabledSets)
+ val results = runTestsFileLists ::: (enabledSets map runTests)
- val results = List(runTestsFiles) ::: (enabledSets map runTests)
- results reduceLeft { (p: (Int, Int), q: (Int, Int)) =>
- (p._1+q._1, p._2+q._2) }
+ (results map (_._1) sum, results map (_._2) sum)
}
}