diff options
author | Nikolay Tatarinov <5min4eq.unity@gmail.com> | 2018-02-22 11:18:45 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-22 11:18:45 +0300 |
commit | 2cbc8d403715bc909325c9323ef58ffb47b22e1f (patch) | |
tree | 3cebde274f4f31a643e6d9c9d728b01d83649130 /scalaworker | |
parent | 107ba88754673e08b030b9ba1c8f4e6f1eefd13d (diff) | |
download | mill-2cbc8d403715bc909325c9323ef58ffb47b22e1f.tar.gz mill-2cbc8d403715bc909325c9323ef58ffb47b22e1f.tar.bz2 mill-2cbc8d403715bc909325c9323ef58ffb47b22e1f.zip |
support multiple test frameworks (#148)
support multiple test frameworks
Diffstat (limited to 'scalaworker')
-rw-r--r-- | scalaworker/src/mill/scalaworker/ScalaWorker.scala | 60 |
1 files changed, 33 insertions, 27 deletions
diff --git a/scalaworker/src/mill/scalaworker/ScalaWorker.scala b/scalaworker/src/mill/scalaworker/ScalaWorker.scala index 7929d7c0..a98d327b 100644 --- a/scalaworker/src/mill/scalaworker/ScalaWorker.scala +++ b/scalaworker/src/mill/scalaworker/ScalaWorker.scala @@ -37,7 +37,7 @@ object ScalaWorker{ def main(args: Array[String]): Unit = { try{ val result = new ScalaWorker(null, null).runTests( - frameworkInstance = TestRunner.framework(args(0)), + frameworkInstances = TestRunner.frameworks(args(0).split(" ")), entireClasspath = Agg.from(args(1).split(" ").map(Path(_))), testClassfilePath = Agg.from(args(2).split(" ").map(Path(_))), args = args(3) match{ case "" => Nil case x => x.split(" ").toList } @@ -240,46 +240,51 @@ class ScalaWorker(ctx0: mill.util.Ctx, }catch{case e: CompileFailed => mill.eval.Result.Failure(e.toString)} } - def runTests(frameworkInstance: ClassLoader => sbt.testing.Framework, + def runTests(frameworkInstances: ClassLoader => Seq[sbt.testing.Framework], entireClasspath: Agg[Path], testClassfilePath: Agg[Path], args: Seq[String]) (implicit ctx: mill.util.Ctx.Log): (String, Seq[Result]) = { Jvm.inprocess(entireClasspath, classLoaderOverrideSbtTesting = true, cl => { - val framework = frameworkInstance(cl) + val frameworks = frameworkInstances(cl) - val testClasses = discoverTests(cl, framework, testClassfilePath) + val events = mutable.Buffer.empty[Event] - val runner = framework.runner(args.toArray, args.toArray, cl) + val doneMessages = frameworks.map { framework => + val runner = framework.runner(args.toArray, args.toArray, cl) - val tasks = runner.tasks( - for ((cls, fingerprint) <- testClasses.toArray) - yield new TaskDef(cls.getName.stripSuffix("$"), fingerprint, true, Array(new SuiteSelector)) - ) - val events = mutable.Buffer.empty[Event] - for (t <- tasks) { - t.execute( - new EventHandler { - def handle(event: Event) = events.append(event) - }, - Array( - new Logger { - def debug(msg: String) = ctx.log.info(msg) + val testClasses = discoverTests(cl, framework, testClassfilePath) + + val tasks = runner.tasks( + for ((cls, fingerprint) <- testClasses.toArray) + yield new TaskDef(cls.getName.stripSuffix("$"), fingerprint, true, Array(new SuiteSelector)) + ) - def error(msg: String) = ctx.log.error(msg) + for (t <- tasks) { + t.execute( + new EventHandler { + def handle(event: Event) = events.append(event) + }, + Array( + new Logger { + def debug(msg: String) = ctx.log.info(msg) - def ansiCodesSupported() = true + def error(msg: String) = ctx.log.error(msg) - def warn(msg: String) = ctx.log.info(msg) + def ansiCodesSupported() = true - def trace(t: Throwable) = t.printStackTrace(ctx.log.outputStream) + def warn(msg: String) = ctx.log.info(msg) - def info(msg: String) = ctx.log.info(msg) - }) - ) + def trace(t: Throwable) = t.printStackTrace(ctx.log.outputStream) + + def info(msg: String) = ctx.log.info(msg) + }) + ) + } + runner.done() } - val doneMsg = runner.done() + val results = for(e <- events) yield { val ex = if (e.throwable().isDefined) Some(e.throwable().get) else None Result( @@ -298,7 +303,8 @@ class ScalaWorker(ctx0: mill.util.Ctx, ex.map(_.getStackTrace) ) } - (doneMsg, results) + + (doneMessages.mkString("\n"), results) }) } |