mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 04:16:51 +00:00
b101a7d002
Change-Id: Ib33169c3e0ffc870915c189404074a1dea472546 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196548 Reviewed-by: Bob Nystrom <rnystrom@google.com> Commit-Queue: Leaf Petersen <leafp@google.com>
199 lines
5.1 KiB
Dart
199 lines
5.1 KiB
Dart
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
// @dart = 2.9
|
|
|
|
import 'package:async_helper/async_helper.dart';
|
|
import "package:expect/expect.dart";
|
|
import 'dart:async';
|
|
|
|
/// StreamController in nested runZoned. Trivial.
|
|
test1() {
|
|
var events = [];
|
|
var done = new Completer();
|
|
runZonedGuarded(() {
|
|
runZonedGuarded(() {
|
|
var c = new StreamController();
|
|
c.stream.listen((x) => events.add("stream: $x"),
|
|
onError: (x) => events.add("stream: error $x"),
|
|
onDone: done.complete);
|
|
c.add(1);
|
|
c.addError(2);
|
|
c.close();
|
|
}, (e, s) => events.add("rza: error $e"));
|
|
}, (e, s) => events.add("rzb: error $e"));
|
|
return [
|
|
done.future,
|
|
() {
|
|
Expect.listEquals(["stream: 1", "stream: error 2"], events);
|
|
}
|
|
];
|
|
}
|
|
|
|
/// Adding errors to the stream controller from an outside zone.
|
|
test2() {
|
|
var events = [];
|
|
var done = new Completer();
|
|
runZonedGuarded(() {
|
|
var c;
|
|
runZonedGuarded(() {
|
|
c = new StreamController();
|
|
c.stream.listen((x) => events.add("stream: $x"),
|
|
onError: (x) => events.add("stream: error $x"),
|
|
onDone: done.complete);
|
|
}, (e, s) => events.add("rza: error $e"));
|
|
c.add(1);
|
|
c.addError(2);
|
|
c.close();
|
|
}, (e, s) => events.add("rzb: error $e"));
|
|
return [
|
|
done.future,
|
|
() {
|
|
Expect.listEquals(["stream: 1", "stream: error 2"], events);
|
|
}
|
|
];
|
|
}
|
|
|
|
/// Adding errors to the stream controller from a more nested zone.
|
|
test3() {
|
|
var events = [];
|
|
var done = new Completer();
|
|
runZonedGuarded(() {
|
|
var c = new StreamController();
|
|
c.stream.listen((x) => events.add("stream: $x"),
|
|
onError: (x) => events.add("stream: error $x"), onDone: done.complete);
|
|
runZonedGuarded(() {
|
|
c.add(1);
|
|
c.addError(2);
|
|
c.close();
|
|
}, (e, s) => events.add("rza: error $e"));
|
|
}, (e, s) => events.add("rzb: error $e"));
|
|
return [
|
|
done.future,
|
|
() {
|
|
Expect.listEquals(["stream: 1", "stream: error 2"], events);
|
|
}
|
|
];
|
|
}
|
|
|
|
/// Feeding a stream from a different zone into another controller.
|
|
test4() {
|
|
var events = [];
|
|
var done = new Completer();
|
|
runZonedGuarded(() {
|
|
var c = new StreamController();
|
|
c.stream.listen((x) => events.add("stream: $x"),
|
|
onError: (x) => events.add("stream: error $x"), onDone: done.complete);
|
|
runZonedGuarded(() {
|
|
var c2 = new StreamController();
|
|
c.addStream(c2.stream).whenComplete(c.close);
|
|
c2.add(1);
|
|
c2.addError(2);
|
|
c2.close();
|
|
}, (e, s) => events.add("rza: error $e"));
|
|
}, (e, s) => events.add("rzb: error $e"));
|
|
return [
|
|
done.future,
|
|
() {
|
|
Expect.listEquals(["stream: 1", "stream: error 2"], events);
|
|
}
|
|
];
|
|
}
|
|
|
|
/// Feeding a stream from a different zone into another controller.
|
|
/// This time nesting is reversed wrt test4.
|
|
test5() {
|
|
var events = [];
|
|
var done = new Completer();
|
|
runZonedGuarded(() {
|
|
var c;
|
|
runZonedGuarded(() {
|
|
c = new StreamController();
|
|
c.stream.listen((x) => events.add("stream: $x"),
|
|
onError: (x) => events.add("stream: error $x"),
|
|
onDone: done.complete);
|
|
}, (e, s) => events.add("rza: error $e"));
|
|
var c2 = new StreamController();
|
|
c.addStream(c2.stream).whenComplete(c.close);
|
|
c2.add(1);
|
|
c2.addError(2);
|
|
c2.close();
|
|
}, (e, s) => events.add("rzb: error $e"));
|
|
return [
|
|
done.future,
|
|
() {
|
|
Expect.listEquals(["stream: 1", "stream: error 2"], events);
|
|
}
|
|
];
|
|
}
|
|
|
|
test6() {
|
|
var events = [];
|
|
var done = new Completer();
|
|
var c;
|
|
runZonedGuarded(() {
|
|
c = new StreamController();
|
|
c.stream.listen((x) => events.add("stream: $x"),
|
|
onError: (x) => events.add("stream: error $x"), onDone: done.complete);
|
|
}, (e, s) => events.add("rza: error $e"));
|
|
runZonedGuarded(() {
|
|
var c2 = new StreamController();
|
|
c.addStream(c2.stream).whenComplete(c.close);
|
|
c2.add(1);
|
|
c2.addError(2);
|
|
c2.close();
|
|
}, (e, s) => events.add("rzb: error $e"));
|
|
return [
|
|
done.future,
|
|
() {
|
|
Expect.listEquals(["stream: 1", "stream: error 2"], events);
|
|
}
|
|
];
|
|
}
|
|
|
|
/// Adding errors to the stream controller from a parallel zone.
|
|
test7() {
|
|
var events = [];
|
|
var done = new Completer();
|
|
var c;
|
|
runZonedGuarded(() {
|
|
c = new StreamController();
|
|
c.stream.listen((x) => events.add("stream: $x"),
|
|
onError: (x) => events.add("stream: error $x"), onDone: done.complete);
|
|
}, (e, s) => events.add("rza: error $e"));
|
|
runZonedGuarded(() {
|
|
c.add(1);
|
|
c.addError(2);
|
|
c.close();
|
|
}, (e, s) => events.add("rzb: error $e"));
|
|
return [
|
|
done.future,
|
|
() {
|
|
Expect.listEquals(["stream: 1", "stream: error 2"], events);
|
|
}
|
|
];
|
|
}
|
|
|
|
main() {
|
|
asyncStart();
|
|
|
|
var tests = [
|
|
test1(),
|
|
test2(),
|
|
test3(),
|
|
test4(),
|
|
test5(),
|
|
test6(),
|
|
test7(),
|
|
];
|
|
|
|
Future.wait(tests.map((l) => l.first as Future)).then((_) {
|
|
// Give time to complete all pending actions.
|
|
Timer.run(() {
|
|
tests.forEach((l) => (l.last)());
|
|
asyncEnd();
|
|
});
|
|
});
|
|
}
|