blob: 95e04b3b28fd7dafea6d75213d33b65eda47ddc5 [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.fromFutures(Iterable<Future<T>> futures)
/// Create a stream from a group of futures.
///
/// The stream reports the results of the futures on the stream in the order in
/// which the futures complete.
///
/// @description Checks that the stream reports the results of the futures on the
/// stream in the order in which the futures complete. Check serial order.
/// @author ngl@unipro.ru
import "dart:async";
import "../../../Utils/expect.dart";
const N = 4;
List<Completer> completers = new List<Completer>.filled(N, new Completer());
List<Future> futures = new List<Future>.filled(N, new Future.value());
int num = 0;
main() {
for (int k = 0; k < N; k++) {
completers[k] = new Completer();
futures[k] = completers[k].future;
}
Stream s = new Stream.fromFutures(futures);
asyncStart();
s.listen(
(var event) {
Expect.equals(num++, event);
},
onError: (_) {
Expect.fail("onError called unexpectedly");
},
onDone: () {
Expect.equals(N, num, "onDone");
asyncEnd();
}
);
for (int k = 0; k < N; k++) {
completers[k].complete(k);
}
}