Skip to content

Commit

Permalink
Merge branch 'cheeseng-feature-macrotask-executor'
Browse files Browse the repository at this point in the history
  • Loading branch information
cheeseng committed Sep 27, 2023
2 parents 8f767ec + 5523f29 commit edda9c5
Show file tree
Hide file tree
Showing 61 changed files with 581 additions and 100 deletions.
4 changes: 1 addition & 3 deletions js/core/src/main/scala/org/scalatest/tools/TaskRunner.scala
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ import scala.concurrent.Promise
import scala.concurrent.Future
import scala.concurrent.Await
import scala.util.Success
import scala.scalajs.concurrent.JSExecutionContext

import scala.compat.Platform
import scala.concurrent.duration.Duration
Expand Down Expand Up @@ -61,10 +60,9 @@ final class TaskRunner(task: TaskDef,
def taskDef(): TaskDef = task

def execute(eventHandler: EventHandler, loggers: Array[Logger], continuation: (Array[Task]) => Unit): Unit = {
implicit val execCtx = JSExecutionContext.queue
import org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits._
val future = executionFuture(eventHandler, loggers)
future.recover { case t =>
println("GOT TO THIS RECOVER CALL")
loggers.foreach(_.trace(t))
}.onComplete{ _ =>
continuation(Array.empty)
Expand Down
3 changes: 2 additions & 1 deletion jvm/core/src/main/scala/org/scalatest/AsyncTestSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -213,12 +213,13 @@ import enablers.Futuristic
*/
trait AsyncTestSuite extends Suite with RecoverMethods with CompleteLastly { thisAsyncTestSuite =>

private final val serialExecutionContext: ExecutionContext = new concurrent.SerialExecutionContext

/**
* An implicit execution context used by async styles to transform <code>Future[Assertion]</code> values
* returned by tests into <code>FutureOutcome</code> values, and can be used within the async tests themselves,
* for example, when mapping assertions onto futures.
*/
private final val serialExecutionContext: ExecutionContext = new concurrent.SerialExecutionContext
implicit def executionContext: ExecutionContext = serialExecutionContext

private def anAsyncExceptionThatShouldCauseAnAbort(ex: Throwable): Boolean =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1048,11 +1048,27 @@ class AsyncFeatureSpecLikeSpec extends funspec.AnyFunSpec {
}

it("should allow other execution context to be used") {

//SCALATESTJS,NATIVE-ONLY var changeMe = false

//SCALATESTJS,NATIVE-ONLY object CustomTestExecutionContext extends scala.concurrent.ExecutionContextExecutor {
//SCALATESTJS,NATIVE-ONLY override def execute(runnable: Runnable): Unit = {
//SCALATESTJS,NATIVE-ONLY changeMe = true
//SCALATESTJS,NATIVE-ONLY try {
//SCALATESTJS,NATIVE-ONLY runnable.run()
//SCALATESTJS,NATIVE-ONLY } catch {
//SCALATESTJS,NATIVE-ONLY case t: Throwable => reportFailure(t)
//SCALATESTJS,NATIVE-ONLY }
//SCALATESTJS,NATIVE-ONLY }
//SCALATESTJS,NATIVE-ONLY def reportFailure(t: Throwable): Unit =
//SCALATESTJS,NATIVE-ONLY t.printStackTrace()
//SCALATESTJS,NATIVE-ONLY }

class TestSpec extends AsyncFeatureSpecLike {
// SKIP-SCALATESTJS,NATIVE-START
override implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global
override implicit val executionContext: ExecutionContext = scala.concurrent.ExecutionContext.Implicits.global
// SKIP-SCALATESTJS,NATIVE-END
// SCALATESTJS-ONLY override implicit val executionContext = scala.scalajs.concurrent.JSExecutionContext.runNow
//SCALATESTJS,NATIVE-ONLY override implicit val executionContext: ExecutionContext = CustomTestExecutionContext
val a = 1
Feature("feature 1") {
Scenario("scenario A") {
Expand Down Expand Up @@ -1081,6 +1097,7 @@ class AsyncFeatureSpecLikeSpec extends funspec.AnyFunSpec {
assert(reporter.scopeClosedEventsReceived.length == 3)
assert(reporter.testStartingEventsReceived.length == 3)
assert(reporter.testSucceededEventsReceived.length == 3)
//SCALATESTJS,NATIVE-ONLY assert(changeMe)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ import org.scalatest.Succeeded

class FixtureAsyncFeatureSpecLikeSpec2 extends funspec.AsyncFunSpec {

//SCALATESTJS-ONLY override implicit val executionContext: ExecutionContext = org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global

describe("AsyncFeatureSpecLike") {

// ParallelTestExecution not working yet.
Expand Down Expand Up @@ -859,7 +861,7 @@ class FixtureAsyncFeatureSpecLikeSpec2 extends funspec.AsyncFunSpec {
// SKIP-SCALATESTJS,NATIVE-START
override implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global
// SKIP-SCALATESTJS,NATIVE-END
// SCALATESTJS-ONLY override implicit val executionContext = scala.scalajs.concurrent.JSExecutionContext.runNow
//SCALATESTJS-ONLY override implicit val executionContext: ExecutionContext = org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global
val a = 1
Feature("feature 1") {
Scenario("scenario A") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -877,11 +877,25 @@ class FixtureAsyncFeatureSpecSpec extends funspec.AnyFunSpec {
}

it("should allow other execution context to be used") {
//SCALATESTJS,NATIVE-ONLY var changeMe = false

//SCALATESTJS,NATIVE-ONLY object CustomTestExecutionContext extends scala.concurrent.ExecutionContextExecutor {
//SCALATESTJS,NATIVE-ONLY override def execute(runnable: Runnable): Unit = {
//SCALATESTJS,NATIVE-ONLY changeMe = true
//SCALATESTJS,NATIVE-ONLY try {
//SCALATESTJS,NATIVE-ONLY runnable.run()
//SCALATESTJS,NATIVE-ONLY } catch {
//SCALATESTJS,NATIVE-ONLY case t: Throwable => reportFailure(t)
//SCALATESTJS,NATIVE-ONLY }
//SCALATESTJS,NATIVE-ONLY }
//SCALATESTJS,NATIVE-ONLY def reportFailure(t: Throwable): Unit =
//SCALATESTJS,NATIVE-ONLY t.printStackTrace()
//SCALATESTJS,NATIVE-ONLY }
class TestSpec extends AsyncFeatureSpecLike {
// SKIP-SCALATESTJS,NATIVE-START
override implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global
override implicit val executionContext: ExecutionContext = scala.concurrent.ExecutionContext.Implicits.global
// SKIP-SCALATESTJS,NATIVE-END
// SCALATESTJS-ONLY override implicit val executionContext = scala.scalajs.concurrent.JSExecutionContext.runNow
//SCALATESTJS,NATIVE-ONLY override implicit val executionContext: ExecutionContext = CustomTestExecutionContext
val a = 1
Feature("feature 1") {
Scenario("scenario A") {
Expand Down Expand Up @@ -910,6 +924,7 @@ class FixtureAsyncFeatureSpecSpec extends funspec.AnyFunSpec {
assert(reporter.scopeClosedEventsReceived.length == 3)
assert(reporter.testStartingEventsReceived.length == 3)
assert(reporter.testSucceededEventsReceived.length == 3)
//SCALATESTJS,NATIVE-ONLY assert(changeMe)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ import org.scalatest.Succeeded

class FixtureAsyncFeatureSpecSpec2 extends funspec.AsyncFunSpec {

//SCALATESTJS-ONLY override implicit val executionContext: ExecutionContext = org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global

describe("AsyncFeatureSpec") {

// ParallelTestExecution not working yet.
Expand Down Expand Up @@ -856,7 +858,7 @@ class FixtureAsyncFeatureSpecSpec2 extends funspec.AsyncFunSpec {
// SKIP-SCALATESTJS,NATIVE-START
override implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global
// SKIP-SCALATESTJS,NATIVE-END
// SCALATESTJS-ONLY override implicit val executionContext = scala.scalajs.concurrent.JSExecutionContext.runNow
//SCALATESTJS-ONLY override implicit val executionContext: ExecutionContext = org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global
val a = 1
Feature("feature 1") {
Scenario("scenario A") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -958,11 +958,25 @@ class DeprecatedAsyncFeatureSpecLikeSpec extends scalatest.funspec.AnyFunSpec {
}

it("should allow other execution context to be used") {
//SCALATESTJS,NATIVE-ONLY var changeMe = false

//SCALATESTJS,NATIVE-ONLY object CustomTestExecutionContext extends scala.concurrent.ExecutionContextExecutor {
//SCALATESTJS,NATIVE-ONLY override def execute(runnable: Runnable): Unit = {
//SCALATESTJS,NATIVE-ONLY changeMe = true
//SCALATESTJS,NATIVE-ONLY try {
//SCALATESTJS,NATIVE-ONLY runnable.run()
//SCALATESTJS,NATIVE-ONLY } catch {
//SCALATESTJS,NATIVE-ONLY case t: Throwable => reportFailure(t)
//SCALATESTJS,NATIVE-ONLY }
//SCALATESTJS,NATIVE-ONLY }
//SCALATESTJS,NATIVE-ONLY def reportFailure(t: Throwable): Unit =
//SCALATESTJS,NATIVE-ONLY t.printStackTrace()
//SCALATESTJS,NATIVE-ONLY }
class TestSpec extends featurespec.FixtureAsyncFeatureSpecLike {
// SKIP-SCALATESTJS,NATIVE-START
override implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global
override implicit val executionContext: ExecutionContext = scala.concurrent.ExecutionContext.Implicits.global
// SKIP-SCALATESTJS,NATIVE-END
// SCALATESTJS-ONLY override implicit val executionContext = scala.scalajs.concurrent.JSExecutionContext.runNow
//SCALATESTJS,NATIVE-ONLY override implicit val executionContext: ExecutionContext = CustomTestExecutionContext

type FixtureParam = String
def withFixture(test: OneArgAsyncTest): FutureOutcome =
Expand Down Expand Up @@ -996,6 +1010,7 @@ class DeprecatedAsyncFeatureSpecLikeSpec extends scalatest.funspec.AnyFunSpec {
assert(reporter.scopeClosedEventsReceived.length == 3)
assert(reporter.testStartingEventsReceived.length == 3)
assert(reporter.testSucceededEventsReceived.length == 3)
//SCALATESTJS,NATIVE-ONLY assert(changeMe)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ import org.scalatest

class DeprecatedAsyncFeatureSpecLikeSpec2 extends scalatest.funspec.AsyncFunSpec {

//SCALATESTJS-ONLY override implicit val executionContext: ExecutionContext = org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global

describe("AsyncFeatureSpecLike") {

it("can be used for tests that return Future under parallel async test execution") {
Expand Down Expand Up @@ -945,7 +947,7 @@ class DeprecatedAsyncFeatureSpecLikeSpec2 extends scalatest.funspec.AsyncFunSpec
// SKIP-SCALATESTJS,NATIVE-START
override implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global
// SKIP-SCALATESTJS,NATIVE-END
// SCALATESTJS-ONLY override implicit val executionContext = scala.scalajs.concurrent.JSExecutionContext.runNow
//SCALATESTJS-ONLY override implicit val executionContext: ExecutionContext = org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global

type FixtureParam = String
def withFixture(test: OneArgAsyncTest): FutureOutcome =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -958,11 +958,25 @@ class DeprecatedAsyncFeatureSpecSpec extends scalatest.funspec.AnyFunSpec {
}

it("should allow other execution context to be used") {
//SCALATESTJS,NATIVE-ONLY var changeMe = false

//SCALATESTJS,NATIVE-ONLY object CustomTestExecutionContext extends scala.concurrent.ExecutionContextExecutor {
//SCALATESTJS,NATIVE-ONLY override def execute(runnable: Runnable): Unit = {
//SCALATESTJS,NATIVE-ONLY changeMe = true
//SCALATESTJS,NATIVE-ONLY try {
//SCALATESTJS,NATIVE-ONLY runnable.run()
//SCALATESTJS,NATIVE-ONLY } catch {
//SCALATESTJS,NATIVE-ONLY case t: Throwable => reportFailure(t)
//SCALATESTJS,NATIVE-ONLY }
//SCALATESTJS,NATIVE-ONLY }
//SCALATESTJS,NATIVE-ONLY def reportFailure(t: Throwable): Unit =
//SCALATESTJS,NATIVE-ONLY t.printStackTrace()
//SCALATESTJS,NATIVE-ONLY }
class TestSpec extends featurespec.FixtureAsyncFeatureSpec {
// SKIP-SCALATESTJS,NATIVE-START
override implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global
override implicit val executionContext: ExecutionContext = scala.concurrent.ExecutionContext.Implicits.global
// SKIP-SCALATESTJS,NATIVE-END
// SCALATESTJS-ONLY override implicit val executionContext = scala.scalajs.concurrent.JSExecutionContext.runNow
//SCALATESTJS,NATIVE-ONLY override implicit val executionContext: ExecutionContext = CustomTestExecutionContext

type FixtureParam = String
def withFixture(test: OneArgAsyncTest): FutureOutcome =
Expand Down Expand Up @@ -996,6 +1010,7 @@ class DeprecatedAsyncFeatureSpecSpec extends scalatest.funspec.AnyFunSpec {
assert(reporter.scopeClosedEventsReceived.length == 3)
assert(reporter.testStartingEventsReceived.length == 3)
assert(reporter.testSucceededEventsReceived.length == 3)
//SCALATESTJS,NATIVE-ONLY assert(changeMe)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -952,7 +952,7 @@ class DeprecatedAsyncFeatureSpecSpec2 extends scalatest.funspec.AsyncFunSpec {
// SKIP-SCALATESTJS,NATIVE-START
override implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global
// SKIP-SCALATESTJS,NATIVE-END
// SCALATESTJS-ONLY override implicit val executionContext = scala.scalajs.concurrent.JSExecutionContext.runNow
// SCALATESTJS-ONLY override implicit val executionContext: ExecutionContext = org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global

type FixtureParam = String
def withFixture(test: OneArgAsyncTest): FutureOutcome =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -958,11 +958,25 @@ class FixtureAsyncFeatureSpecLikeSpec extends scalatest.funspec.AnyFunSpec {
}

it("should allow other execution context to be used") {
//SCALATESTJS,NATIVE-ONLY var changeMe = false

//SCALATESTJS,NATIVE-ONLY object CustomTestExecutionContext extends scala.concurrent.ExecutionContextExecutor {
//SCALATESTJS,NATIVE-ONLY override def execute(runnable: Runnable): Unit = {
//SCALATESTJS,NATIVE-ONLY changeMe = true
//SCALATESTJS,NATIVE-ONLY try {
//SCALATESTJS,NATIVE-ONLY runnable.run()
//SCALATESTJS,NATIVE-ONLY } catch {
//SCALATESTJS,NATIVE-ONLY case t: Throwable => reportFailure(t)
//SCALATESTJS,NATIVE-ONLY }
//SCALATESTJS,NATIVE-ONLY }
//SCALATESTJS,NATIVE-ONLY def reportFailure(t: Throwable): Unit =
//SCALATESTJS,NATIVE-ONLY t.printStackTrace()
//SCALATESTJS,NATIVE-ONLY }
class TestSpec extends featurespec.FixtureAsyncFeatureSpecLike {
// SKIP-SCALATESTJS,NATIVE-START
override implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global
override implicit val executionContext: ExecutionContext = scala.concurrent.ExecutionContext.Implicits.global
// SKIP-SCALATESTJS,NATIVE-END
// SCALATESTJS-ONLY override implicit val executionContext = scala.scalajs.concurrent.JSExecutionContext.runNow
//SCALATESTJS,NATIVE-ONLY override implicit val executionContext: ExecutionContext = CustomTestExecutionContext

type FixtureParam = String
def withFixture(test: OneArgAsyncTest): FutureOutcome =
Expand Down Expand Up @@ -996,6 +1010,7 @@ class FixtureAsyncFeatureSpecLikeSpec extends scalatest.funspec.AnyFunSpec {
assert(reporter.scopeClosedEventsReceived.length == 3)
assert(reporter.testStartingEventsReceived.length == 3)
assert(reporter.testSucceededEventsReceived.length == 3)
//SCALATESTJS,NATIVE-ONLY assert(changeMe)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ import org.scalatest.featurespec

class AsyncFeatureSpecLikeSpec2 extends scalatest.funspec.AsyncFunSpec {

//SCALATESTJS-ONLY override implicit val executionContext: ExecutionContext = org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global

describe("AsyncFeatureSpecLike") {

it("can be used for tests that return Future under parallel async test execution") {
Expand Down Expand Up @@ -946,7 +948,7 @@ class AsyncFeatureSpecLikeSpec2 extends scalatest.funspec.AsyncFunSpec {
// SKIP-SCALATESTJS,NATIVE-START
override implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global
// SKIP-SCALATESTJS,NATIVE-END
// SCALATESTJS-ONLY override implicit val executionContext = scala.scalajs.concurrent.JSExecutionContext.runNow
//SCALATESTJS-ONLY override implicit val executionContext: ExecutionContext = org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global

type FixtureParam = String
def withFixture(test: OneArgAsyncTest): FutureOutcome =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -958,11 +958,25 @@ class AsyncFeatureSpecSpec extends scalatest.funspec.AnyFunSpec {
}

it("should allow other execution context to be used") {
//SCALATESTJS,NATIVE-ONLY var changeMe = false

//SCALATESTJS,NATIVE-ONLY object CustomTestExecutionContext extends scala.concurrent.ExecutionContextExecutor {
//SCALATESTJS,NATIVE-ONLY override def execute(runnable: Runnable): Unit = {
//SCALATESTJS,NATIVE-ONLY changeMe = true
//SCALATESTJS,NATIVE-ONLY try {
//SCALATESTJS,NATIVE-ONLY runnable.run()
//SCALATESTJS,NATIVE-ONLY } catch {
//SCALATESTJS,NATIVE-ONLY case t: Throwable => reportFailure(t)
//SCALATESTJS,NATIVE-ONLY }
//SCALATESTJS,NATIVE-ONLY }
//SCALATESTJS,NATIVE-ONLY def reportFailure(t: Throwable): Unit =
//SCALATESTJS,NATIVE-ONLY t.printStackTrace()
//SCALATESTJS,NATIVE-ONLY }
class TestSpec extends featurespec.FixtureAsyncFeatureSpec {
// SKIP-SCALATESTJS,NATIVE-START
override implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global
override implicit val executionContext: ExecutionContext = scala.concurrent.ExecutionContext.Implicits.global
// SKIP-SCALATESTJS,NATIVE-END
// SCALATESTJS-ONLY override implicit val executionContext = scala.scalajs.concurrent.JSExecutionContext.runNow
//SCALATESTJS,NATIVE-ONLY override implicit val executionContext: ExecutionContext = CustomTestExecutionContext

type FixtureParam = String
def withFixture(test: OneArgAsyncTest): FutureOutcome =
Expand Down Expand Up @@ -996,6 +1010,7 @@ class AsyncFeatureSpecSpec extends scalatest.funspec.AnyFunSpec {
assert(reporter.scopeClosedEventsReceived.length == 3)
assert(reporter.testStartingEventsReceived.length == 3)
assert(reporter.testSucceededEventsReceived.length == 3)
//SCALATESTJS,NATIVE-ONLY assert(changeMe)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ import org.scalatest.featurespec

class AsyncFeatureSpecSpec2 extends scalatest.funspec.AsyncFunSpec {

//SCALATESTJS-ONLY override implicit val executionContext = org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global

describe("AsyncFeatureSpec") {

it("can be used for tests that return Future under parallel async test execution") {
Expand Down Expand Up @@ -952,7 +954,7 @@ class AsyncFeatureSpecSpec2 extends scalatest.funspec.AsyncFunSpec {
// SKIP-SCALATESTJS,NATIVE-START
override implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global
// SKIP-SCALATESTJS,NATIVE-END
// SCALATESTJS-ONLY override implicit val executionContext = scala.scalajs.concurrent.JSExecutionContext.runNow
//SCALATESTJS-ONLY override implicit val executionContext = org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global

type FixtureParam = String
def withFixture(test: OneArgAsyncTest): FutureOutcome =
Expand Down

0 comments on commit edda9c5

Please sign in to comment.