// Copyright (c) 2015, 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. import "dart:async"; import "package:expect/expect.dart"; import "package:async_helper/async_helper.dart"; Stream foo1() async* { yield 1; var p = await new Future.value(10); yield p + 10; } Stream foo2() async* { int i = 0; while (true) { await (new Future.delayed(new Duration(milliseconds: 0), () {})); if (i > 10) return; yield i; i++; } } Stream foo3(p) async* { int i = 0; bool t = false; yield null; while (true) { i++; a: for (int i = 0; i < p; i++) { if (!t) { for (int j = 0; j < 3; j++) { yield -1; t = true; break a; } } await 4; yield i; } } } Completer finalized = new Completer(); Stream foo4() async* { int i = 0; try { while (true) { yield i; i++; } } finally { // Canceling the stream-subscription should run the finalizer. finalized.complete(true); } } test() async { Expect.listEquals([1, 20], await (foo1().toList())); Expect.listEquals([0, 1, 2, 3], await (foo2().take(4).toList())); Expect.listEquals( [null, -1, 0, 1, 2, 3, 0, 1, 2, 3], await (foo3(4).take(10).toList())); Expect.listEquals( [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], await (foo4().take(10).toList())); Expect.isTrue(await (finalized.future)); } main() { asyncStart(); test().then((_) { asyncEnd(); }); }