blob: b482a7c1418262ef8893af0f9299717e9f03c486 [file] [log] [blame]
// Copyright (c) 2011, 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
/// @assertion Future addStream(Stream<T> source, {bool cancelOnError: true})
/// If cancelOnError is true, only the first error on source is forwarded to
/// the controller's stream, and the addStream ends after this.
/// If cancelOnError is false, all errors are forwarded and only a done event
/// will end the addStream.
///
/// @description Checks that if cancelOnError is true, addStream ends after the
/// first error. Also checks that default value of cancelOnError is true.
/// @author ilya
import "dart:async";
import "../../../Utils/expect.dart";
void listen(Stream stream, List expectedData, List expectedErrors) {
List actualData = [];
List actualErrors = [];
asyncStart();
stream.listen(
(x) {
actualData.add(x);
},
onError: (x) {
actualErrors.add(x);
},
onDone: () {
Expect.listEquals(expectedData, actualData);
Expect.listEquals(expectedErrors, actualErrors);
asyncEnd();
}
);
}
// new stream, negative data become errors
Stream toDataErrorStream(Stream stream) => stream.map((x) => x < 0 ? throw x : x);
main() {
StreamController c = new StreamController();
List iterable = [1, 2, 3, -1, -2, -3, 4, 5, 6];
Stream s1 = toDataErrorStream(new Stream.fromIterable(iterable));
Stream s2 = toDataErrorStream(new Stream.fromIterable(iterable));
listen(c.stream, [1, 2, 3, 4, 5, 6, 1, 2, 3], [-1, -2, -3, -1]);
asyncStart();
c.addStream(s1).then((_) {
c.addStream(s2, cancelOnError:true).then((_) {
c.close();
asyncEnd();
});
});
}