summaryrefslogtreecommitdiff
path: root/src/partest
diff options
context:
space:
mode:
authorStefan Zeiger <szeiger@novocode.com>2011-11-22 18:44:00 +0000
committerStefan Zeiger <szeiger@novocode.com>2011-11-22 18:44:00 +0000
commita17be60676ae8329672868872e33b65fa79cbe03 (patch)
tree40e6876b48a5138dfc77e105dc08a21bb62cdcdb /src/partest
parentac031789039d421186567cf3b9a484957e6e5f8e (diff)
downloadscala-a17be60676ae8329672868872e33b65fa79cbe03.tar.gz
scala-a17be60676ae8329672868872e33b65fa79cbe03.tar.bz2
scala-a17be60676ae8329672868872e33b65fa79cbe03.zip
Make partest work with spaces in the path (from...
Make partest work with spaces in the path (from batch script and ant task). - The 'partest' ant task gets a new 'compilerargs' element for scalac - options (like in scalacfork and javac). Fixed argument list handling - in partest task. Further improvements to argument list handling for - all ant tasks. Fixed argument list handling in DirectTest (used by - partest shell scripts) Fixed path handling in several test cases. Closes SI-622. Review by phaller.
Diffstat (limited to 'src/partest')
-rw-r--r--src/partest/scala/tools/partest/DirectTest.scala16
-rw-r--r--src/partest/scala/tools/partest/PartestTask.scala21
-rw-r--r--src/partest/scala/tools/partest/nest/CompileManager.scala4
-rw-r--r--src/partest/scala/tools/partest/nest/ConsoleFileManager.scala2
-rw-r--r--src/partest/scala/tools/partest/nest/FileManager.scala2
-rw-r--r--src/partest/scala/tools/partest/nest/Worker.scala12
6 files changed, 35 insertions, 22 deletions
diff --git a/src/partest/scala/tools/partest/DirectTest.scala b/src/partest/scala/tools/partest/DirectTest.scala
index 6c210f1ac1..be8cac9147 100644
--- a/src/partest/scala/tools/partest/DirectTest.scala
+++ b/src/partest/scala/tools/partest/DirectTest.scala
@@ -7,7 +7,7 @@ package scala.tools.partest
import scala.tools.nsc._
import io.Directory
-import util.BatchSourceFile
+import util.{BatchSourceFile, CommandLineParser}
/** A class for testing code which is embedded as a string.
* It allows for more complete control over settings, compiler
@@ -24,20 +24,20 @@ abstract class DirectTest extends App {
def testOutput = io.Directory(sys.props("partest.output"))
// override to add additional settings with strings
- def extraSettings = ""
+ def extraSettings: String = ""
// a default Settings object
- def settings: Settings = newSettings(extraSettings)
+ def settings: Settings = newSettings(CommandLineParser tokenize extraSettings)
// a custom Settings object
- def newSettings(argString: String) = {
+ def newSettings(args: List[String]) = {
val s = new Settings
- val args = argString + " " + debugSettings
- log("newSettings: args = '" + args + "'")
- s processArgumentString args
+ val allArgs = args ++ (CommandLineParser tokenize debugSettings)
+ log("newSettings: allArgs = " + allArgs)
+ s processArguments (allArgs, true)
s
}
// compile the code, optionally first adding to the settings
def compile(args: String*) = {
- val settings = newSettings(extraSettings +: args mkString " ")
+ val settings = newSettings((CommandLineParser tokenize extraSettings) ++ args.toList)
val global = new Global(settings)
new global.Run compileSources List(new BatchSourceFile("<partest>", code))
!global.reporter.hasErrors
diff --git a/src/partest/scala/tools/partest/PartestTask.scala b/src/partest/scala/tools/partest/PartestTask.scala
index 76b736c904..588f87449d 100644
--- a/src/partest/scala/tools/partest/PartestTask.scala
+++ b/src/partest/scala/tools/partest/PartestTask.scala
@@ -23,6 +23,7 @@ import java.lang.reflect.Method
import org.apache.tools.ant.Task
import org.apache.tools.ant.types.{Path, Reference, FileSet}
+import org.apache.tools.ant.types.Commandline.Argument
class PartestTask extends Task with CompilationPathProperty {
@@ -115,8 +116,15 @@ class PartestTask extends Task with CompilationPathProperty {
javaccmd = Some(input)
}
- def setScalacOpts(opts: String) {
- scalacOpts = Some(opts)
+ def setScalacOpts(input: String) {
+ val s = input.split(' ').map { s => val a = new Argument; a.setValue(s); a }
+ scalacArgs = Some(scalacArgs.getOrElse(Seq()) ++ s)
+ }
+
+ def createCompilerArg(): Argument = {
+ val a = new Argument
+ scalacArgs = Some(scalacArgs.getOrElse(Seq()) :+ a)
+ a
}
def setTimeout(delay: String) {
@@ -151,7 +159,7 @@ class PartestTask extends Task with CompilationPathProperty {
private var specializedFiles: Option[FileSet] = None
private var presentationFiles: Option[FileSet] = None
private var errorOnFailed: Boolean = false
- private var scalacOpts: Option[String] = None
+ private var scalacArgs: Option[Seq[Argument]] = None
private var timeout: Option[String] = None
private var jUnitReportDir: Option[File] = None
private var debug = false
@@ -236,6 +244,11 @@ class PartestTask extends Task with CompilationPathProperty {
}
} getOrElse sys.error("Provided classpath does not contain a Scala library.")
+ def scalacArgsFlat: Option[Seq[String]] = scalacArgs map (_ flatMap { a =>
+ val parts = a.getParts
+ if(parts eq null) Seq[String]() else parts.toSeq
+ })
+
val antRunner = new scala.tools.partest.nest.AntRunner
val antFileManager = antRunner.fileManager
@@ -247,7 +260,7 @@ class PartestTask extends Task with CompilationPathProperty {
javacmd foreach (x => antFileManager.JAVACMD = x.getAbsolutePath)
javaccmd foreach (x => antFileManager.JAVAC_CMD = x.getAbsolutePath)
- scalacOpts foreach (antFileManager.SCALAC_OPTS = _)
+ scalacArgsFlat foreach (antFileManager.SCALAC_OPTS = _)
timeout foreach (antFileManager.timeout = _)
type TFSet = (Array[File], String, String)
diff --git a/src/partest/scala/tools/partest/nest/CompileManager.scala b/src/partest/scala/tools/partest/nest/CompileManager.scala
index 1b7e5cfff6..24eafaf456 100644
--- a/src/partest/scala/tools/partest/nest/CompileManager.scala
+++ b/src/partest/scala/tools/partest/nest/CompileManager.scala
@@ -77,8 +77,8 @@ class DirectCompiler(val fileManager: FileManager) extends SimpleCompiler {
// check whether there is a ".flags" file
val flagsFileName = "%s.flags" format (basename(log.getName) dropRight 4) // 4 is "-run" or similar
val argString = (io.File(log).parent / flagsFileName) ifFile (x => updatePluginPath(x.slurp())) getOrElse ""
- val allOpts = fileManager.SCALAC_OPTS+" "+argString
- val args = (allOpts split "\\s").toList
+ val allOpts = fileManager.SCALAC_OPTS.toList ::: argString.split(' ').toList.filter(_.length > 0)
+ val args = allOpts.toList
NestUI.verbose("scalac options: "+allOpts)
diff --git a/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala b/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala
index e2e4ba648e..b9b371d6cb 100644
--- a/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala
+++ b/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala
@@ -44,7 +44,7 @@ class ConsoleFileManager extends FileManager {
def this(buildPath: String, rawClasses: Boolean, moreOpts: String) = {
this(buildPath, rawClasses)
- SCALAC_OPTS = SCALAC_OPTS+" "+moreOpts
+ SCALAC_OPTS = SCALAC_OPTS ++ moreOpts.split(' ').toSeq.filter(_.length > 0)
}
lazy val srcDir = PathSettings.srcDir
diff --git a/src/partest/scala/tools/partest/nest/FileManager.scala b/src/partest/scala/tools/partest/nest/FileManager.scala
index a39aa27f32..780f7a35e5 100644
--- a/src/partest/scala/tools/partest/nest/FileManager.scala
+++ b/src/partest/scala/tools/partest/nest/FileManager.scala
@@ -66,7 +66,7 @@ trait FileManager extends FileUtil {
var showLog = false
var failed = false
- var SCALAC_OPTS = PartestDefaults.scalacOpts
+ var SCALAC_OPTS = PartestDefaults.scalacOpts.split(' ').toSeq
var JAVA_OPTS = PartestDefaults.javaOpts
var timeout = PartestDefaults.timeout
// how can 15 minutes not be enough? What are you doing, run/lisp.scala?
diff --git a/src/partest/scala/tools/partest/nest/Worker.scala b/src/partest/scala/tools/partest/nest/Worker.scala
index 4cc1c87c82..fb1546798a 100644
--- a/src/partest/scala/tools/partest/nest/Worker.scala
+++ b/src/partest/scala/tools/partest/nest/Worker.scala
@@ -328,7 +328,8 @@ class Worker(val fileManager: FileManager, params: TestRunParams) extends Actor
"-Dpartest.testname="+fileBase,
"-Djavacmd="+javaCmd,
"-Djavaccmd="+javacCmd,
- "-Duser.language=en -Duser.country=US"
+ "-Duser.language=en",
+ "-Duser.country=US"
) ++ extras
val classpath = if (classpathPrefix != "") join(classpathPrefix, CLASSPATH) else CLASSPATH
@@ -742,11 +743,10 @@ class Worker(val fileManager: FileManager, params: TestRunParams) extends Actor
val sourcepath = sourcedir.getAbsolutePath+File.separator
NestUI.verbose("sourcepath: "+sourcepath)
- val argString =
- "-d "+outDir.getAbsoluteFile.getPath+
- " -Xresident"+
- " -sourcepath "+sourcepath
- val argList = argString split ' ' toList
+ val argList = List(
+ "-d", outDir.getAbsoluteFile.getPath,
+ "-Xresident",
+ "-sourcepath", sourcepath)
// configure input/output files
val logOut = new FileOutputStream(logFile)