| // 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. |
| |
| /// @assertion Let u be the stream associated with the immediately enclosing |
| /// asynchronous for loop or generator function, if any. If another event Eu |
| /// of u occurs before execution of s is complete, handling of Eu must wait |
| /// until s is complete. |
| /// |
| /// @description Check that all iterations of inner loop are complete before |
| /// outer loop proceed with its new event. |
| /// @author a.semenov@unipro.ru |
| |
| import 'dart:async'; |
| import '../../../../Utils/expect.dart'; |
| |
| |
| Future test1() async { |
| List log = []; |
| StreamController<String> streamController = new StreamController<String>(); |
| streamController.add('a'); |
| await for (String s in streamController.stream) { |
| log.add(s); |
| await for (int k in new Stream.fromIterable([1, 2])) { |
| log.add(s + k.toString()); |
| if (log.length <= 4) { |
| streamController.add(k.toString()); |
| } else if (!streamController.isClosed) { |
| streamController.close(); |
| } |
| } |
| } |
| Expect.listEquals(['a', 'a1', 'a2', '1', '11', '12', '2', '21', '22'], log); |
| } |
| |
| |
| Future test2() async { |
| List log = []; |
| StreamController<String> streamController = new StreamController<String>(); |
| streamController.add('a'); |
| await for (String s in streamController.stream) { |
| log.add(s); |
| await for (int k in new Stream.fromIterable([1, 2])) { |
| log.add(s + k.toString()); |
| if (log.length <= 3) { |
| streamController.add(k.toString()); |
| } else if (!streamController.isClosed) { |
| streamController.close(); |
| } |
| await new Future.delayed(new Duration(microseconds: 100)); |
| } |
| } |
| Expect.listEquals(['a', 'a1', 'a2', '1', '11', '12', '2', '21', '22'], log); |
| } |
| |
| main() { |
| asyncStart(); |
| Future.wait([test1(), test2()]).then((v) => asyncEnd()); |
| } |