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 283576ab..80f84c3d 100644 --- a/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala +++ b/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala @@ -46,7 +46,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))) ) @@ -55,11 +55,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 711ef200..796fe212 100644 --- a/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala +++ b/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala @@ -45,18 +45,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 322a6ca4..507d8af7 100644 --- a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala +++ b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala @@ -65,7 +65,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) } @@ -83,7 +83,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 dd955bc7..92c071c2 100644 --- a/scalajslib/src/mill/scalajslib/ScalaJSModule.scala +++ b/scalajslib/src/mill/scalajslib/ScalaJSModule.scala @@ -191,7 +191,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, @@ -206,7 +206,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 } } |