blob: a7d0412ca8e39f900b3eaa4652150c04f9e0e0c5 [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.
/// @assertion Stream<T> takeWhile(bool test(T element))
/// Forwards data events while test is successful.
/// The returned stream provides the same events as this stream as long as test
/// returns true for the event data.
/// The stream is done when either this stream is done, or when this stream first
/// provides a value that test doesn't accept.
/// @description Checks that if [test] throws an error, then the error is
/// emitted as an error event on the returned stream and it is considered as
/// [test] failure.
/// @author a.semenov@unipro.ru
library takeWhile_A01_t03;
import "dart:async";
import "../../../Utils/expect.dart";
void check<T>(Stream<T> s, bool test(T element),
Object expectedError, List<T> expected) {
AsyncExpect.events(expected, [expectedError], s.takeWhile(test));
}
void test(CreateStreamFunction create) {
AsyncExpect.data([], create([]).takeWhile((e) => throw "a"));
check(create([1, 2, 3]), (e) => throw "b", "b", []);
check<int>(
create([-1, -2, -3, 1, 2, 3]),
(element) {
if (element > 0) {
throw "c";
};
return true;
},
"c",
[-1, -2, -3]
);
}