| Index: test/backend/invoker_test.dart
|
| diff --git a/test/backend/invoker_test.dart b/test/backend/invoker_test.dart
|
| index 1cc014db837dcbe6687644ad2be140d141539621..38cda5c54261d12e3fb54e974b9322a3a65e1d93 100644
|
| --- a/test/backend/invoker_test.dart
|
| +++ b/test/backend/invoker_test.dart
|
| @@ -56,48 +56,14 @@ void main() {
|
| expect(invoker.liveTest, equals(liveTest));
|
| expect(status, equals(Status.complete));
|
| });
|
| -
|
| - test("returns the current invoker in a tearDown body", () async {
|
| - var invoker;
|
| - var liveTest = _localTest(() {}, tearDown: () {
|
| - invoker = Invoker.current;
|
| - }).load(suite);
|
| - liveTest.onError.listen(expectAsync((_) {}, count: 0));
|
| -
|
| - await liveTest.run();
|
| - expect(invoker.liveTest, equals(liveTest));
|
| - });
|
| -
|
| - test("returns the current invoker in a tearDown body after the test "
|
| - "completes", () async {
|
| - var status;
|
| - var completer = new Completer();
|
| - var liveTest = _localTest(() {}, tearDown: () {
|
| - // Use [new Future] in particular to wait longer than a microtask for
|
| - // the test to complete.
|
| - new Future(() {
|
| - status = Invoker.current.liveTest.state.status;
|
| - completer.complete(Invoker.current);
|
| - });
|
| - }).load(suite);
|
| - liveTest.onError.listen(expectAsync((_) {}, count: 0));
|
| -
|
| - expect(liveTest.run(), completes);
|
| - var invoker = await completer.future;
|
| - expect(invoker.liveTest, equals(liveTest));
|
| - expect(status, equals(Status.complete));
|
| - });
|
| });
|
|
|
| group("in a successful test,", () {
|
| test("the state changes from pending to running to complete", () async {
|
| var stateInTest;
|
| - var stateInTearDown;
|
| var liveTest;
|
| liveTest = _localTest(() {
|
| stateInTest = liveTest.state;
|
| - }, tearDown: () {
|
| - stateInTearDown = liveTest.state;
|
| }).load(suite);
|
| liveTest.onError.listen(expectAsync((_) {}, count: 0));
|
|
|
| @@ -114,9 +80,6 @@ void main() {
|
| expect(stateInTest.status, equals(Status.running));
|
| expect(stateInTest.result, equals(Result.success));
|
|
|
| - expect(stateInTearDown.status, equals(Status.running));
|
| - expect(stateInTearDown.result, equals(Result.success));
|
| -
|
| expect(liveTest.state.status, equals(Status.complete));
|
| expect(liveTest.state.result, equals(Result.success));
|
| });
|
| @@ -139,18 +102,14 @@ void main() {
|
| return liveTest.run();
|
| });
|
|
|
| - test("onComplete completes once the test body and tearDown are done", () {
|
| + test("onComplete completes once the test body is done", () {
|
| var testRun = false;
|
| - var tearDownRun = false;
|
| var liveTest = _localTest(() {
|
| testRun = true;
|
| - }, tearDown: () {
|
| - tearDownRun = true;
|
| }).load(suite);
|
|
|
| expect(liveTest.onComplete.then((_) {
|
| expect(testRun, isTrue);
|
| - expect(tearDownRun, isTrue);
|
| }), completes);
|
|
|
| return liveTest.run();
|
| @@ -273,22 +232,6 @@ void main() {
|
|
|
| return liveTest.run();
|
| });
|
| -
|
| - test("tearDown is run after an asynchronous failure", () async {
|
| - var stateDuringTearDown;
|
| - var liveTest;
|
| - liveTest = _localTest(() {
|
| - Invoker.current.addOutstandingCallback();
|
| - new Future(() => throw new TestFailure("oh no"));
|
| - }, tearDown: () {
|
| - stateDuringTearDown = liveTest.state;
|
| - }).load(suite);
|
| -
|
| - expectSingleFailure(liveTest);
|
| - await liveTest.run();
|
| - expect(stateDuringTearDown,
|
| - equals(const State(Status.complete, Result.failure)));
|
| - });
|
| });
|
|
|
| group("in a test with errors,", () {
|
| @@ -407,70 +350,6 @@ void main() {
|
|
|
| return liveTest.run();
|
| });
|
| -
|
| - test("tearDown is run after an asynchronous error", () async {
|
| - var stateDuringTearDown;
|
| - var liveTest;
|
| - liveTest = _localTest(() {
|
| - Invoker.current.addOutstandingCallback();
|
| - new Future(() => throw "oh no");
|
| - }, tearDown: () {
|
| - stateDuringTearDown = liveTest.state;
|
| - }).load(suite);
|
| -
|
| - expectSingleError(liveTest);
|
| - await liveTest.run();
|
| - expect(stateDuringTearDown,
|
| - equals(const State(Status.complete, Result.error)));
|
| - });
|
| -
|
| - test("an asynchronous error in tearDown causes the test to error", () {
|
| - var liveTest = _localTest(() {}, tearDown: () {
|
| - Invoker.current.addOutstandingCallback();
|
| - new Future(() => throw "oh no");
|
| - }).load(suite);
|
| -
|
| - expectSingleError(liveTest);
|
| - return liveTest.run();
|
| - });
|
| -
|
| - test("an error reported in the test body after tearDown begins running "
|
| - "doesn't stop tearDown", () async {
|
| - var tearDownComplete = false;;
|
| - var completer = new Completer();
|
| -
|
| - var liveTest;
|
| - liveTest = _localTest(() {
|
| - completer.future.then((_) => throw "not again");
|
| - throw "oh no";
|
| - }, tearDown: () {
|
| - completer.complete();
|
| -
|
| - // Pump the event queue so that we will run the following code after the
|
| - // test body has thrown a second error.
|
| - Invoker.current.addOutstandingCallback();
|
| - pumpEventQueue().then((_) {
|
| - Invoker.current.removeOutstandingCallback();
|
| - tearDownComplete = true;
|
| - });
|
| - }).load(suite);
|
| -
|
| - expectStates(liveTest, [
|
| - const State(Status.running, Result.success),
|
| - const State(Status.complete, Result.error)
|
| - ]);
|
| -
|
| - expectErrors(liveTest, [
|
| - (error) {
|
| - expect(lastState.status, equals(Status.complete));
|
| - expect(error, equals("oh no"));
|
| - },
|
| - (error) => expect(error, equals("not again"))
|
| - ]);
|
| -
|
| - await liveTest.run();
|
| - expect(tearDownComplete, isTrue);
|
| - });
|
| });
|
|
|
| test("a test doesn't complete until there are no outstanding callbacks",
|
| @@ -493,75 +372,6 @@ void main() {
|
| expect(outstandingCallbackRemoved, isTrue);
|
| });
|
|
|
| - test("a test's tearDown isn't run until there are no outstanding callbacks",
|
| - () async {
|
| - var outstandingCallbackRemoved = false;
|
| - var outstandingCallbackRemovedBeforeTeardown = false;
|
| - var liveTest = _localTest(() {
|
| - Invoker.current.addOutstandingCallback();
|
| - pumpEventQueue().then((_) {
|
| - outstandingCallbackRemoved = true;
|
| - Invoker.current.removeOutstandingCallback();
|
| - });
|
| - }, tearDown: () {
|
| - outstandingCallbackRemovedBeforeTeardown = outstandingCallbackRemoved;
|
| - }).load(suite);
|
| -
|
| - liveTest.onError.listen(expectAsync((_) {}, count: 0));
|
| -
|
| - await liveTest.run();
|
| - expect(outstandingCallbackRemovedBeforeTeardown, isTrue);
|
| - });
|
| -
|
| - test("a test's tearDown doesn't complete until there are no outstanding "
|
| - "callbacks", () async {
|
| - var outstandingCallbackRemoved = false;
|
| - var liveTest = _localTest(() {}, tearDown: () {
|
| - Invoker.current.addOutstandingCallback();
|
| -
|
| - // Pump the event queue to make sure the test isn't coincidentally
|
| - // completing after the outstanding callback is removed.
|
| - pumpEventQueue().then((_) {
|
| - outstandingCallbackRemoved = true;
|
| - Invoker.current.removeOutstandingCallback();
|
| - });
|
| - }).load(suite);
|
| -
|
| - liveTest.onError.listen(expectAsync((_) {}, count: 0));
|
| -
|
| - await liveTest.run();
|
| - expect(outstandingCallbackRemoved, isTrue);
|
| - });
|
| -
|
| - test("a test body's outstanding callbacks can't complete its tearDown",
|
| - () async {
|
| - var outstandingCallbackRemoved = false;
|
| - var completer = new Completer();
|
| - var liveTest = _localTest(() {
|
| - // Once the tearDown runs, remove an outstanding callback to see if it
|
| - // causes the tearDown to complete.
|
| - completer.future.then((_) {
|
| - Invoker.current.removeOutstandingCallback();
|
| - });
|
| - }, tearDown: () {
|
| - Invoker.current.addOutstandingCallback();
|
| -
|
| - // This will cause the test BODY to remove an outstanding callback, which
|
| - // shouldn't cause the test to complete.
|
| - completer.complete();
|
| -
|
| - pumpEventQueue().then((_) {
|
| - outstandingCallbackRemoved = true;
|
| - Invoker.current.removeOutstandingCallback();
|
| - });
|
| - }).load(suite);
|
| -
|
| - liveTest.onError.listen(expectAsync((_) {}, count: 0));
|
| -
|
| - await liveTest.run();
|
| - expect(outstandingCallbackRemoved, isTrue);
|
| - });
|
| -
|
| test("a test's prints are captured and reported", () {
|
| expect(() {
|
| var liveTest = _localTest(() {
|
| @@ -691,10 +501,31 @@ void main() {
|
|
|
| expect(innerFunctionCompleted, isFalse);
|
| });
|
| +
|
| + test("forwards errors to the enclosing test but doesn't remove its "
|
| + "outstanding callbacks", () async {
|
| + var liveTest = _localTest(() async {
|
| + Invoker.current.addOutstandingCallback();
|
| + await Invoker.current.waitForOutstandingCallbacks(() {
|
| + throw 'oh no';
|
| + });
|
| + }).load(suite);
|
| +
|
| + expectStates(liveTest, [
|
| + const State(Status.running, Result.success),
|
| + const State(Status.complete, Result.error)
|
| + ]);
|
| +
|
| + var isComplete = false;
|
| + liveTest.run().then((_) => isComplete = true);
|
| + await pumpEventQueue();
|
| + expect(liveTest.state.status, equals(Status.complete));
|
| + expect(isComplete, isFalse);
|
| + });
|
| });
|
| }
|
|
|
| -LocalTest _localTest(body(), {tearDown(), Metadata metadata}) {
|
| +LocalTest _localTest(body(), {Metadata metadata}) {
|
| if (metadata == null) metadata = new Metadata();
|
| - return new LocalTest("test", metadata, body, tearDown: tearDown);
|
| + return new LocalTest("test", metadata, body);
|
| }
|
|
|