diff options
author | Stefan Zeiger <szeiger@novocode.com> | 2011-11-22 18:44:00 +0000 |
---|---|---|
committer | Stefan Zeiger <szeiger@novocode.com> | 2011-11-22 18:44:00 +0000 |
commit | a17be60676ae8329672868872e33b65fa79cbe03 (patch) | |
tree | 40e6876b48a5138dfc77e105dc08a21bb62cdcdb /src/partest | |
parent | ac031789039d421186567cf3b9a484957e6e5f8e (diff) | |
download | scala-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')
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) |