blob: 1cd7ed5ac83a3a2e9c019305e057c291f5431e8b [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 only first elements that passed the test are returned.
/// @author kaigorodov
import "dart:async";
import "../../../Utils/expect.dart";
import "IsolateStream.dart" as IsolateStream;
/** index - first position in the stream where test() returns false
*/
void check(List data, bool test(var element), int index) {
Stream s = IsolateStream.fromIterable(data);
Stream t = s.takeWhile(test);
asyncStart();
int seen = -1;
t.listen((value) {
seen++;
Expect.isTrue(test(value), "test($value)");
Expect.isTrue(seen < index, "seen=$seen, index=$index");
Expect.equals(data[seen], value);
}, onDone: () {
Expect.equals(index, seen + 1);
if (index < data.length) {
Expect.isFalse(test(data[index]));
}
asyncEnd();
});
}
main() {
check([], (element) => true, 0);
check([-1, -2, -3, 1, 2, 3 - 1, -2, -3], (element) => element < 0, 3);
check([1, 2, 3], (element) => true, 3);
check([1, 2, 3, 1], (element) => element == 1, 1);
check([1, 2, 3], (element) => false, 0);
}