blob: e7f9f376d13fcef27aa65b0930ec36402b37dc90 [file] [log] [blame]
// Copyright (c) 2016, 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.periodic(Duration period,
/// [T computation(int computationCount)])
/// Creates a stream that repeatedly emits events at period intervals.
/// If computation is omitted the event values will all be null.
/// @description Checks Stream interface methods (error processing)
/// @author a.semenov@unipro.ru
import "dart:async";
import "allTests_A02.lib.dart" as all;
Stream<T> create<T>(
Iterable<T> data, {bool isError(T x)?, required T defaultValue}) {
int count = data.length;
Iterator<T> iterator = data.iterator;
return new Stream<T>.periodic(
new Duration(milliseconds: 10),
(_) {
count--;
if (iterator.moveNext()) {
T x = iterator.current;
if (isError != null && isError(x) && count >= 0) {
throw x!;
}
return x;
}
return defaultValue;
}
).takeWhile((_) => count >= 0);
}
main() {
all.test(create);
}