| Index: tests/lib/async/catch_errors27_test.dart
|
| diff --git a/tests/lib/async/catch_errors27_test.dart b/tests/lib/async/catch_errors27_test.dart
|
| index 9a8ab8b734357ecb1e078218d8aaecebd39017cf..bfa2bf8f21787599e786898effbcff0a79dae7e1 100644
|
| --- a/tests/lib/async/catch_errors27_test.dart
|
| +++ b/tests/lib/async/catch_errors27_test.dart
|
| @@ -14,36 +14,42 @@ main() {
|
| var events = [];
|
| StreamController controller;
|
| Stream stream;
|
| - // Test that the first listen on a `asBroadcastStream` determines the
|
| - // zone the subscription lives in. The inner listen happens first, and
|
| - // the outer listener must not see the error since it would cross a
|
| - // zone boundary. It is therefore given to the inner `catchErrors`.
|
| + // Test that streams live in the zone they have been listened too.
|
| + // It doesn't matter how many zone-boundaries the stream traverses. What
|
| + // counts is the zone where `listen` was invoked.
|
| catchErrors(() {
|
| catchErrors(() {
|
| controller = new StreamController();
|
| +
|
| + // Assignment to "global" `stream`.
|
| stream = controller.stream
|
| .map((x) {
|
| events.add("map $x");
|
| return x + 100;
|
| })
|
| .asBroadcastStream();
|
| +
|
| + // Consume stream in the nested zone.
|
| stream
|
| .transform(new StreamTransformer.fromHandlers(
|
| handleError: (e, st, sink) { sink.add("error $e"); }))
|
| .listen((x) { events.add("stream $x"); });
|
| +
|
| + // Feed the controller in the nested zone.
|
| scheduleMicrotask(() {
|
| controller.add(1);
|
| - // Errors are not allowed to traverse boundaries, but in this case the
|
| - // first listener of the broadcast stream is in the same error-zone. So
|
| - // this should work.
|
| controller.addError(2);
|
| controller.close();
|
| + new Future.error("done");
|
| });
|
| +
|
| }).listen((x) {
|
| - events.add(x);
|
| - if (x == 2) done.complete(true);
|
| + events.add("listen: $x");
|
| + if (x == "done") done.complete(true);
|
| })
|
| .asFuture().then((_) { Expect.fail("Unexpected callback"); });
|
| +
|
| + // Listen to stream in outer zone.
|
| stream.listen((x) { events.add("stream2 $x"); });
|
| }).listen((x) { events.add("outer: $x"); },
|
| onDone: () { Expect.fail("Unexpected callback"); });
|
| @@ -52,10 +58,11 @@ main() {
|
| // Give handlers time to run.
|
| Timer.run(() {
|
| Expect.listEquals(["map 1",
|
| - "stream 101",
|
| - "stream2 101",
|
| - "stream error 2",
|
| - 2, // Caught by the inner `catchErrors`.
|
| + "stream 101",
|
| + "stream2 101",
|
| + "stream error 2",
|
| + "listen: done",
|
| + "outer: 2",
|
| ],
|
| events);
|
| asyncEnd();
|
|
|