add setting to pass command line opts to scripted launcher

This commit is contained in:
mmcbride 2012-01-20 14:16:23 -08:00 committed by Mark Harrah
parent b5c4e5290e
commit 28674af0d2
3 changed files with 17 additions and 15 deletions

View File

@ -22,6 +22,7 @@ object ScriptedPlugin extends Plugin {
val scriptedClasspath = TaskKey[PathFinder]("scripted-classpath") val scriptedClasspath = TaskKey[PathFinder]("scripted-classpath")
val scriptedTests = TaskKey[AnyRef]("scripted-tests") val scriptedTests = TaskKey[AnyRef]("scripted-tests")
val scriptedRun = TaskKey[Method]("scripted-run") val scriptedRun = TaskKey[Method]("scripted-run")
val scriptedLaunchOpts = SettingKey[Seq[String]]("scripted-launch-opts", "options to pass to jvm launching scripted tasks")
val scriptedDependencies = TaskKey[Unit]("scripted-dependencies") val scriptedDependencies = TaskKey[Unit]("scripted-dependencies")
val scripted = InputKey[Unit]("scripted") val scripted = InputKey[Unit]("scripted")
@ -33,13 +34,13 @@ object ScriptedPlugin extends Plugin {
def scriptedRunTask: Initialize[Task[Method]] = (scriptedTests) map { def scriptedRunTask: Initialize[Task[Method]] = (scriptedTests) map {
(m) => (m) =>
m.getClass.getMethod("run", classOf[File], classOf[Boolean], classOf[String], classOf[String], classOf[String], classOf[Array[String]], classOf[File]) m.getClass.getMethod("run", classOf[File], classOf[Boolean], classOf[String], classOf[String], classOf[String], classOf[Array[String]], classOf[File], classOf[Seq[String]])
} }
def scriptedTask: Initialize[InputTask[Unit]] = InputTask(_ => complete.Parsers.spaceDelimited("<arg>")) { result => def scriptedTask: Initialize[InputTask[Unit]] = InputTask(_ => complete.Parsers.spaceDelimited("<arg>")) { result =>
(scriptedDependencies, scriptedTests, scriptedRun, sbtTestDirectory, scriptedBufferLog, scriptedSbt, scriptedScalas, sbtLauncher, result) map { (scriptedDependencies, scriptedTests, scriptedRun, sbtTestDirectory, scriptedBufferLog, scriptedSbt, scriptedScalas, sbtLauncher, scriptedLaunchOpts, result) map {
(deps, m, r, testdir, bufferlog, version, scriptedScalas, launcher, args) => (deps, m, r, testdir, bufferlog, version, scriptedScalas, launcher, launchOpts, args) =>
try { r.invoke(m, testdir, bufferlog: java.lang.Boolean, version.toString, scriptedScalas.build, scriptedScalas.versions, args.toArray, launcher) } try { r.invoke(m, testdir, bufferlog: java.lang.Boolean, version.toString, scriptedScalas.build, scriptedScalas.versions, args.toArray, launcher, launchOpts) }
catch { case e: java.lang.reflect.InvocationTargetException => throw e.getCause } catch { case e: java.lang.reflect.InvocationTargetException => throw e.getCause }
} }
} }
@ -56,6 +57,7 @@ object ScriptedPlugin extends Plugin {
scriptedTests <<= scriptedTestsTask, scriptedTests <<= scriptedTestsTask,
scriptedRun <<= scriptedRunTask, scriptedRun <<= scriptedRunTask,
scriptedDependencies <<= (compile in Test, publishLocal) map { (analysis, pub) => Unit }, scriptedDependencies <<= (compile in Test, publishLocal) map { (analysis, pub) => Unit },
scriptedLaunchOpts := Seq(),
scripted <<= scriptedTask scripted <<= scriptedTask
) )
} }

View File

@ -10,9 +10,9 @@ package test
import Logger._ import Logger._
final class SbtHandler(directory: File, launcher: File, log: Logger, server: IPC.Server) extends StatementHandler final class SbtHandler(directory: File, launcher: File, log: Logger, server: IPC.Server, launchOpts: Seq[String] = Seq()) extends StatementHandler
{ {
def this(directory: File, launcher: File, log: xsbti.Logger, server: IPC.Server) = this(directory, launcher, log: Logger, server) def this(directory: File, launcher: File, log: xsbti.Logger, server: IPC.Server, launchOpts: Seq[String]) = this(directory, launcher, log: Logger, server, launchOpts)
type State = Process type State = Process
def initialState = newRemote def initialState = newRemote
def apply(command: String, arguments: List[String], p: Process): Process = def apply(command: String, arguments: List[String], p: Process): Process =
@ -38,7 +38,7 @@ final class SbtHandler(directory: File, launcher: File, log: Logger, server: IPC
{ {
val launcherJar = launcher.getAbsolutePath val launcherJar = launcher.getAbsolutePath
val globalBase = "-Dsbt.global.base=" + (new File(directory, "global")).getAbsolutePath val globalBase = "-Dsbt.global.base=" + (new File(directory, "global")).getAbsolutePath
val args = "java" :: globalBase :: "-jar" :: launcherJar :: ( "<" + server.port) :: Nil val args = "java" :: (launchOpts.toList ++ (globalBase :: "-jar" :: launcherJar :: ( "<" + server.port) :: Nil))
val io = BasicIO(log, false).withInput(_.close()) val io = BasicIO(log, false).withInput(_.close())
val p = Process(args, directory) run( io ) val p = Process(args, directory) run( io )
Spawn { p.exitValue(); server.close() } Spawn { p.exitValue(); server.close() }

View File

@ -12,7 +12,7 @@ import xsbt.IPC
import xsbt.test.{CommentHandler, FileCommands, ScriptRunner, TestScriptParser} import xsbt.test.{CommentHandler, FileCommands, ScriptRunner, TestScriptParser}
import IO.wrapNull import IO.wrapNull
final class ScriptedTests(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String, launcher: File) final class ScriptedTests(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String, launcher: File, launchOpts: Seq[String])
{ {
private val testResources = new Resources(resourceBaseDirectory) private val testResources = new Resources(resourceBaseDirectory)
@ -46,7 +46,7 @@ final class ScriptedTests(resourceBaseDirectory: File, bufferLog: Boolean, sbtVe
def createParser() = def createParser() =
{ {
val fileHandler = new FileCommands(testDirectory) val fileHandler = new FileCommands(testDirectory)
val sbtHandler = new SbtHandler(testDirectory, launcher, buffered, server) val sbtHandler = new SbtHandler(testDirectory, launcher, buffered, server, launchOpts)
new TestScriptParser(Map('$' -> fileHandler, '>' -> sbtHandler, '#' -> CommentHandler)) new TestScriptParser(Map('$' -> fileHandler, '>' -> sbtHandler, '#' -> CommentHandler))
} }
def runTest() = def runTest() =
@ -92,14 +92,14 @@ object ScriptedTests
val bootProperties = new File(args(5)) val bootProperties = new File(args(5))
val tests = args.drop(6) val tests = args.drop(6)
val logger = ConsoleLogger() val logger = ConsoleLogger()
run(directory, buffer, sbtVersion, defScalaVersion, buildScalaVersions, tests, logger, bootProperties) run(directory, buffer, sbtVersion, defScalaVersion, buildScalaVersions, tests, logger, bootProperties, Seq())
} }
def run(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String, tests: Array[String], bootProperties: File): Unit = def run(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String, tests: Array[String], bootProperties: File, launchOpts: Seq[String]): Unit =
run(resourceBaseDirectory, bufferLog, sbtVersion, defScalaVersion, buildScalaVersions, tests, ConsoleLogger(), bootProperties)//new FullLogger(Logger.xlog2Log(log))) run(resourceBaseDirectory, bufferLog, sbtVersion, defScalaVersion, buildScalaVersions, tests, ConsoleLogger(), bootProperties, launchOpts)//new FullLogger(Logger.xlog2Log(log)))
def run(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String, tests: Array[String], logger: AbstractLogger, bootProperties: File) def run(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String, tests: Array[String], logger: AbstractLogger, bootProperties: File, launchOpts: Seq[String])
{ {
val runner = new ScriptedTests(resourceBaseDirectory, bufferLog, sbtVersion, defScalaVersion, buildScalaVersions, bootProperties) val runner = new ScriptedTests(resourceBaseDirectory, bufferLog, sbtVersion, defScalaVersion, buildScalaVersions, bootProperties, launchOpts)
for( ScriptedTest(group, name) <- get(tests, resourceBaseDirectory, logger) ) for( ScriptedTest(group, name) <- get(tests, resourceBaseDirectory, logger) )
runner.scriptedTest(group, name, logger) runner.scriptedTest(group, name, logger)
} }
@ -171,4 +171,4 @@ object CompatibilityLevel extends Enumeration
case Minimal27 => "2.7.7" case Minimal27 => "2.7.7"
case Minimal28 => "2.8.1" case Minimal28 => "2.8.1"
} }
} }