/*
 * 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 Future forEach(Iterable input, dynamic f(element))
 *    Perform an async operation for each element of the iterable, in turn.
 *    Runs f for each element in input in order, moving to the next element
 * only when the Future returned by f completes.
 * @description Checks that Future returned by [f] is completed before next
 * element is processed
 * @author a.semenov@unipro.ru
 */
import "dart:async";
import "../../../Utils/expect.dart";

void check(List input) {
  List log = [];

  dynamic f(element) {
    log.add("start");
    try {
      log.add(element);
      return new Future.value(null);
    } finally {
      log.add("finish");
    }
  }

  asyncStart();
  List expected = input.expand((e)=>["start", e, "finish"]).toList();
  Future.forEach(input, f).then((_) {
    Expect.listEquals(expected, log);
    asyncEnd();
  });
}

main() {
  check([0, 1, 2, 3, 4]);
  check(["a", "b", "c", "d"]);
  check([]);
  check([0, null, "a", 3.14, true, false]);
}
