Skip to content

Commit a46ed82

Browse files
committed
Remove System.exit / __ScalaJSEnv.exitFunction
This has been added way back in the days (scala-js/scala-js#958) as a poor man's way to support asynchronous testing. Since then, testing has substantially matured. Notably a JSEnv is not required anymore to be able to terminate automatically. Therefore, there is no need anymore to support exiting in a platform agnostic manner. Or if there is a need or such a thing, it should be put in an external library with JS-style dynamic platform detection. Unfortunately this makes the JSEnv test suite slightly more complicated again (and basically reverts 6746cf3a20d2497bbc6c520666a47f7ec1cd28dd).
1 parent b4a627f commit a46ed82

File tree

5 files changed

+25
-34
lines changed

5 files changed

+25
-34
lines changed

js-envs-test-kit/src/main/scala/org/scalajs/jsenv/test/ComTests.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
package org.scalajs.jsenv.test
1414

15-
import org.junit.{Before, Test}
15+
import org.junit.{Before, Test, AssumptionViolatedException}
1616
import org.junit.Assume._
1717

1818
import org.scalajs.jsenv._
@@ -48,10 +48,11 @@ private[test] class ComTests(config: JSEnvSuiteConfig) {
4848

4949
@Test
5050
def jsExitsOnMessageTest: Unit = {
51-
assumeTrue(config.supportsExit)
51+
val exitStat = config.exitJSStatement.getOrElse(
52+
throw new AssumptionViolatedException("JSEnv needs exitJSStatement"))
5253

53-
kit.withComRun("""
54-
scalajsCom.init(function(msg) { __ScalaJSEnv.exitFunction(0); });
54+
kit.withComRun(s"""
55+
scalajsCom.init(function(msg) { $exitStat });
5556
for (var i = 0; i < 10; ++i)
5657
scalajsCom.send("msg: " + i);
5758
""") { run =>

js-envs-test-kit/src/main/scala/org/scalajs/jsenv/test/JSEnvSuiteConfig.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,44 +38,44 @@ import scala.concurrent.duration._
3838
*/
3939
final class JSEnvSuiteConfig private (
4040
val jsEnv: JSEnv,
41-
val supportsExit: Boolean,
4241
val supportsCom: Boolean,
4342
val supportsTimeout: Boolean,
43+
val exitJSStatement: Option[String],
4444
val awaitTimeout: FiniteDuration,
4545
val description: String
4646
) {
4747
private def this(jsEnv: JSEnv) = this(
4848
jsEnv = jsEnv,
49-
supportsExit = true,
5049
supportsCom = true,
5150
supportsTimeout = true,
51+
exitJSStatement = None,
5252
awaitTimeout = 1.minute,
5353
description = jsEnv.name
5454
)
5555

56-
def withSupportsExit(supportsExit: Boolean): JSEnvSuiteConfig =
57-
copy(supportsExit = supportsExit)
58-
5956
def withSupportsCom(supportsCom: Boolean): JSEnvSuiteConfig =
6057
copy(supportsCom = supportsCom)
6158

6259
def withSupportsTimeout(supportsTimeout: Boolean): JSEnvSuiteConfig =
6360
copy(supportsTimeout = supportsTimeout)
6461

62+
def withExitJSStatement(code: String): JSEnvSuiteConfig =
63+
copy(exitJSStatement = Some(code))
64+
6565
def withAwaitTimeout(awaitTimeout: FiniteDuration): JSEnvSuiteConfig =
6666
copy(awaitTimeout = awaitTimeout)
6767

6868
def withDescription(description: String): JSEnvSuiteConfig =
6969
copy(description = description)
7070

7171
private def copy(
72-
supportsExit: Boolean = supportsExit,
7372
supportsCom: Boolean = supportsCom,
7473
supportsTimeout: Boolean = supportsTimeout,
74+
exitJSStatement: Option[String] = exitJSStatement,
7575
awaitTimeout: FiniteDuration = awaitTimeout,
7676
description: String = description) = {
77-
new JSEnvSuiteConfig(jsEnv, supportsExit, supportsCom,
78-
supportsTimeout, awaitTimeout, description)
77+
new JSEnvSuiteConfig(jsEnv, supportsCom, supportsTimeout,
78+
exitJSStatement, awaitTimeout, description)
7979
}
8080
}
8181

js-envs-test-kit/src/main/scala/org/scalajs/jsenv/test/RunTests.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
package org.scalajs.jsenv.test
1414

1515
import org.junit.Assume._
16-
import org.junit.{Test, Before}
16+
import org.junit.{Test, Before, AssumptionViolatedException}
1717

1818
import org.scalajs.io.VirtualBinaryFile
1919
import org.scalajs.jsenv._
@@ -88,9 +88,10 @@ private[test] class RunTests(config: JSEnvSuiteConfig, withCom: Boolean) {
8888

8989
@Test
9090
def jsExitsTest: Unit = {
91-
assumeTrue(config.supportsExit)
91+
val exitStat = config.exitJSStatement.getOrElse(
92+
throw new AssumptionViolatedException("JSEnv needs exitJSStatement"))
9293

93-
withRun("__ScalaJSEnv.exitFunction(0);") {
94+
withRun(exitStat) {
9495
_.succeeds()
9596
}
9697
}

nodejs-env/src/main/scala/org/scalajs/jsenv/nodejs/NodeJSEnv.scala

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,10 @@ final class NodeJSEnv(config: NodeJSEnv.Config) extends JSEnv {
6767
NodeJSEnv.write(initFiles, input))
6868
}
6969

70-
private def initFiles: List[VirtualBinaryFile] = {
71-
val base = List(NodeJSEnv.runtimeEnv)
72-
73-
config.sourceMap match {
74-
case SourceMap.Disable => base
75-
case SourceMap.EnableIfAvailable => installSourceMapIfAvailable :: base
76-
case SourceMap.Enable => installSourceMap :: base
77-
}
70+
private def initFiles: List[VirtualBinaryFile] = config.sourceMap match {
71+
case SourceMap.Disable => Nil
72+
case SourceMap.EnableIfAvailable => installSourceMapIfAvailable :: Nil
73+
case SourceMap.Enable => installSourceMap :: Nil
7874
}
7975

8076
private def inputFiles(input: Input) = input match {
@@ -105,16 +101,6 @@ object NodeJSEnv {
105101
"require('source-map-support').install();")
106102
}
107103

108-
private lazy val runtimeEnv = {
109-
MemVirtualBinaryFile.fromStringUTF8("scalaJSEnvInfo.js",
110-
"""
111-
|__ScalaJSEnv = {
112-
| exitFunction: function(status) { process.exit(status); }
113-
|};
114-
""".stripMargin
115-
)
116-
}
117-
118104
private def write(initFiles: List[VirtualBinaryFile], input: Input)(
119105
out: OutputStream): Unit = {
120106
val p = new PrintStream(out, false, "UTF8")

nodejs-env/src/test/scala/org/scalajs/jsenv/nodejs/NodeJSSuite.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@ import org.scalajs.jsenv.test._
1717
import org.junit.runner.RunWith
1818

1919
@RunWith(classOf[JSEnvSuiteRunner])
20-
class NodeJSSuite extends JSEnvSuite(JSEnvSuiteConfig(new NodeJSEnv))
20+
class NodeJSSuite extends JSEnvSuite(
21+
JSEnvSuiteConfig(new NodeJSEnv)
22+
.withExitJSStatement("process.exit(0);")
23+
)

0 commit comments

Comments
 (0)