diff options
4 files changed, 28 insertions, 16 deletions
diff --git a/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala b/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala index 57fbf65a..5f7bd38b 100644 --- a/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala +++ b/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala @@ -38,7 +38,7 @@ class ScalaJSBridge extends mill.scalajslib.ScalaJSBridge { def getFramework(config: NodeJSConfig, frameworkName: String, - linkedFile: File): sbt.testing.Framework = { + linkedFile: File): (() => Unit, sbt.testing.Framework) = { val env = nodeJSEnv(config).loadLibs( Seq(ResolvedJSDependency.minimal(new FileVirtualJSFile(linkedFile))) ) @@ -47,11 +47,14 @@ class ScalaJSBridge extends mill.scalajslib.ScalaJSBridge { val adapter = new TestAdapter(env, tconfig) - adapter - .loadFrameworks(List(List(frameworkName))) - .flatten - .headOption - .getOrElse(throw new RuntimeException("Failed to get framework")) + ( + () => adapter.close(), + adapter + .loadFrameworks(List(List(frameworkName))) + .flatten + .headOption + .getOrElse(throw new RuntimeException("Failed to get framework")) + ) } def nodeJSEnv(config: NodeJSConfig): NodeJSEnv = { diff --git a/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala b/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala index d7ed26eb..53986f1b 100644 --- a/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala +++ b/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala @@ -37,18 +37,21 @@ class ScalaJSBridge extends mill.scalajslib.ScalaJSBridge { def getFramework(config: NodeJSConfig, frameworkName: String, - linkedFile: File): sbt.testing.Framework = { + linkedFile: File): (() => Unit, sbt.testing.Framework) = { val env = nodeJSEnv(config) val tconfig = TestAdapter.Config().withLogger(new ScalaConsoleLogger) val adapter = new TestAdapter(env, Seq(FileVirtualJSFile(linkedFile)), tconfig) - adapter - .loadFrameworks(List(List(frameworkName))) - .flatten - .headOption - .getOrElse(throw new RuntimeException("Failed to get framework")) + ( + () => adapter.close(), + adapter + .loadFrameworks(List(List(frameworkName))) + .flatten + .headOption + .getOrElse(throw new RuntimeException("Failed to get framework")) + ) } def nodeJSEnv(config: NodeJSConfig): NodeJSEnv = { diff --git a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala index e5952291..20e6542c 100644 --- a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala +++ b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala @@ -57,7 +57,7 @@ class ScalaJSWorker { def getFramework(toolsClasspath: Agg[Path], config: NodeJSConfig, frameworkName: String, - linkedFile: File): sbt.testing.Framework = { + linkedFile: File): (() => Unit, sbt.testing.Framework) = { bridge(toolsClasspath).getFramework(config, frameworkName, linkedFile) } @@ -74,7 +74,7 @@ trait ScalaJSBridge { def getFramework(config: NodeJSConfig, frameworkName: String, - linkedFile: File): sbt.testing.Framework + linkedFile: File): (() => Unit, sbt.testing.Framework) } diff --git a/scalajslib/src/mill/scalajslib/ScalaJSModule.scala b/scalajslib/src/mill/scalajslib/ScalaJSModule.scala index 4f932e1e..948b13df 100644 --- a/scalajslib/src/mill/scalajslib/ScalaJSModule.scala +++ b/scalajslib/src/mill/scalajslib/ScalaJSModule.scala @@ -184,7 +184,7 @@ trait TestScalaJSModule extends ScalaJSModule with TestModule { override def testLocal(args: String*) = T.command { test(args:_*) } override def test(args: String*) = T.command { - val framework = mill.scalajslib.ScalaJSBridge.scalaJSBridge().getFramework( + val (close, framework) = mill.scalajslib.ScalaJSBridge.scalaJSBridge().getFramework( toolsClasspath().map(_.path), nodeJSConfig(), testFrameworks().head, @@ -199,7 +199,13 @@ trait TestScalaJSModule extends ScalaJSModule with TestModule { Agg(compile().classes.path), args ) - TestModule.handleResults(doneMsg, results) + val res = TestModule.handleResults(doneMsg, results) + // Hack to try and let the Node.js subprocess finish streaming it's stdout + // to the JVM. Without this, the stdout can still be streaming when `close()` + // is called, and some of the output is dropped onto the floor. + Thread.sleep(100) + close() + res } } |