d3904f5a54
Change-Id: I6ccbe1494165c2bda142ece13584c4738e3b43e6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/425347 Commit-Queue: Lasse Nielsen <lrn@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Auto-Submit: Bob Nystrom <rnystrom@google.com>
208 lines
5.1 KiB
Dart
208 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.
|
|
|
|
import 'dart:async';
|
|
|
|
import 'package:expect/async_helper.dart';
|
|
import 'package:expect/expect.dart';
|
|
|
|
/// 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, s"));
|
|
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();
|
|
});
|
|
});
|
|
}
|