diff --git a/core/src/main/scala/org/scalajs/macrotaskexecutor/MacrotaskExecutor.scala b/core/src/main/scala/org/scalajs/macrotaskexecutor/MacrotaskExecutor.scala index 33ac1b4..02f18ad 100644 --- a/core/src/main/scala/org/scalajs/macrotaskexecutor/MacrotaskExecutor.scala +++ b/core/src/main/scala/org/scalajs/macrotaskexecutor/MacrotaskExecutor.scala @@ -134,6 +134,20 @@ object MacrotaskExecutor extends ExecutionContextExecutor { channel.port2.postMessage(handle) () } + } else if ( + js.typeOf( + js.Dynamic.global.navigator + ) != Undefined && js.Dynamic.global.navigator.userAgent + .asInstanceOf[js.UndefOr[String]] + .exists(_.contains("jsdom")) + ) { + val setImmediate = + js.Dynamic.global.Node.constructor("return setImmediate")() + + { k => + setImmediate(k) + () + } } else { // we don't try to look for process.nextTick since scalajs doesn't support old node // we're also not going to bother fast-pathing for IE6; just fall through diff --git a/core/src/test/scala/org/scalajs/macrotaskexecutor/MacrotaskExecutorSuite.scala b/core/src/test/scala/org/scalajs/macrotaskexecutor/MacrotaskExecutorSuite.scala index 883dd61..328f25b 100644 --- a/core/src/test/scala/org/scalajs/macrotaskexecutor/MacrotaskExecutorSuite.scala +++ b/core/src/test/scala/org/scalajs/macrotaskexecutor/MacrotaskExecutorSuite.scala @@ -32,15 +32,15 @@ class MacrotaskExecutorSuite extends FunSuite { else Future.unit.flatMap(_ => loop(n - 1)).map(_ + 1) - // val start = System.currentTimeMillis() - // val MinimumClamp = 10000 * 2 * 4 // HTML5 specifies a 4ms clamp (https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeout#Minimum.2F_maximum_delay_and_timeout_nesting) + val start = System.currentTimeMillis() + val MinimumClamp = 10000 * 2 * 4 // HTML5 specifies a 4ms clamp (https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeout#Minimum.2F_maximum_delay_and_timeout_nesting) loop(10000) flatMap { res => Future { - // val end = System.currentTimeMillis() + val end = System.currentTimeMillis() assert(res == 10000) - // assert((end - start).toDouble / MinimumClamp < 0.25) // we should beat the clamping by at least 4x even on slow environments + assert((end - start).toDouble / MinimumClamp < 0.25) // we should beat the clamping by at least 4x even on slow environments } } }