summaryrefslogtreecommitdiff
path: root/scalaworker
diff options
context:
space:
mode:
authorNikolay Tatarinov <5min4eq.unity@gmail.com>2018-02-22 11:18:45 +0300
committerGitHub <noreply@github.com>2018-02-22 11:18:45 +0300
commit2cbc8d403715bc909325c9323ef58ffb47b22e1f (patch)
tree3cebde274f4f31a643e6d9c9d728b01d83649130 /scalaworker
parent107ba88754673e08b030b9ba1c8f4e6f1eefd13d (diff)
downloadmill-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.scala60
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)
})
}