diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-03-18 14:32:17 -0700 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-03-18 14:32:17 -0700 |
commit | fdd924eaeb2e31a3772733765eeb5882eec0f593 (patch) | |
tree | c1397d173b7f994e17a40ca814fc29f4594a9d30 | |
parent | 3715c7bfb88de8daa86cd663d22057ec776cedcc (diff) | |
download | mill-fdd924eaeb2e31a3772733765eeb5882eec0f593.tar.gz mill-fdd924eaeb2e31a3772733765eeb5882eec0f593.tar.bz2 mill-fdd924eaeb2e31a3772733765eeb5882eec0f593.zip |
properly pass arguments to forked tests in a way that doesn't botch whitespaces
-rw-r--r-- | core/src/mill/util/AggWrapper.scala | 2 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/ScalaModule.scala | 16 | ||||
-rw-r--r-- | scalaworker/src/mill/scalaworker/ScalaWorker.scala | 25 |
3 files changed, 27 insertions, 16 deletions
diff --git a/core/src/mill/util/AggWrapper.scala b/core/src/mill/util/AggWrapper.scala index c2994a9a..eefe6224 100644 --- a/core/src/mill/util/AggWrapper.scala +++ b/core/src/mill/util/AggWrapper.scala @@ -24,6 +24,7 @@ sealed class AggWrapper(strictUniqueness: Boolean){ def reverse: Agg[V] def zip[T](other: Agg[T]): Agg[(V, T)] def ++[T >: V](other: TraversableOnce[T]): Agg[T] + def length: Int } object Agg{ @@ -88,6 +89,7 @@ sealed class AggWrapper(strictUniqueness: Boolean){ def zip[T](other: Agg[T]) = Agg.from(items.zip(other.items)) def ++[T >: V](other: TraversableOnce[T]) = Agg.from(items ++ other) + def length: Int = set0.size // Members declared in scala.collection.GenTraversableOnce def isTraversableAgain: Boolean = items.isTraversableAgain diff --git a/scalalib/src/mill/scalalib/ScalaModule.scala b/scalalib/src/mill/scalalib/ScalaModule.scala index c06fb8f3..e5a20e7e 100644 --- a/scalalib/src/mill/scalalib/ScalaModule.scala +++ b/scalalib/src/mill/scalalib/ScalaModule.scala @@ -375,14 +375,14 @@ trait TestModule extends ScalaModule with TaskModule { classPath = scalaWorker.classpath(), jvmArgs = forkArgs(), envArgs = forkEnv(), - mainArgs = Seq( - testFrameworks().mkString(" "), - runClasspath().map(_.path).mkString(" "), - Seq(compile().classes.path).mkString(" "), - args.mkString(" "), - outputPath.toString, - T.ctx().log.colored.toString - ), + mainArgs = + Seq(testFrameworks().length.toString) ++ + testFrameworks() ++ + Seq(runClasspath().length.toString) ++ + runClasspath().map(_.path.toString) ++ + Seq(args.length.toString) ++ + args ++ + Seq(outputPath.toString, T.ctx().log.colored.toString, compile().classes.path.toString), workingDir = forkWorkingDir ) diff --git a/scalaworker/src/mill/scalaworker/ScalaWorker.scala b/scalaworker/src/mill/scalaworker/ScalaWorker.scala index ca20ccf1..58f93f01 100644 --- a/scalaworker/src/mill/scalaworker/ScalaWorker.scala +++ b/scalaworker/src/mill/scalaworker/ScalaWorker.scala @@ -36,15 +36,25 @@ object ScalaWorker{ def main(args: Array[String]): Unit = { try{ - val (frameworks, classpath, testCp, arguments, outputPath, colored) = args match { - case Array(fs, cp, tcp, op, c) => (fs, cp, tcp, "", op, c) - case Array(fs, cp, tcp, as, op, c) => (fs, cp, tcp, as, op, c) + var i = 0 + def readArray() = { + val count = args(i).toInt + val slice = args.slice(i + 1, i + count + 1) + i = i + count + 1 + slice } + val frameworks = readArray() + val classpath = readArray() + val arguments = readArray() + val outputPath = args(i + 0) + val colored = args(i + 1) + val testCp = args(i + 2) + val result = new ScalaWorker(null, null).runTests( - frameworkInstances = TestRunner.frameworks(frameworks.split(" ")), - entireClasspath = Agg.from(classpath.split(" ").map(Path(_))), - testClassfilePath = Agg.from(testCp.split(" ").map(Path(_))), - args = arguments match{ case "" => Nil case x => x.split(" ").toList } + frameworkInstances = TestRunner.frameworks(frameworks), + entireClasspath = Agg.from(classpath.map(Path(_))), + testClassfilePath = Agg(Path(testCp)), + args = arguments )(new PrintLogger( colored == "true", if(colored == "true") Colors.Default @@ -251,7 +261,6 @@ class ScalaWorker(ctx0: mill.util.Ctx, testClassfilePath: Agg[Path], args: Seq[String]) (implicit ctx: mill.util.Ctx.Log): (String, Seq[Result]) = { - Jvm.inprocess(entireClasspath, classLoaderOverrideSbtTesting = true, cl => { val frameworks = frameworkInstances(cl) |