// 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<List> wait(Iterable<Future> futures,
 *                {bool eagerError: false, void cleanUp(successValue)})
 * If any of the futures in the list completes with an error, the resulting
 * future also completes with an error.
 * Otherwise the value of the returned future will be a list of all the values
 * that were produced.
 * @description Checks that the returned future is completed with error if
 * a single future in the list is completed with error.
 * @author iefremov
 */
import "dart:async";
import "../../../Utils/expect.dart";

main() {
  var completer1 = new Completer();
  var completer2 = new Completer();
  var completer3 = new Completer();
  var completer4 = new Completer();
  var completer5 = new Completer();

  var future1 = completer1.future;
  var future2 = completer2.future;
  var future3 = completer3.future;
  var future4 = completer4.future;
  var future5 = completer5.future;

  var f = Future.wait([future1, future2, future3, future4, future5]);

  asyncStart();
  f.then(
      (value) {
        Expect.fail("Returned future should complete with error");
        asyncEnd();
      },
      onError: (Object error) {
        Expect.equals(1, error);
        Expect.isTrue(completer1.isCompleted);
        Expect.isTrue(completer2.isCompleted);
        Expect.isTrue(completer3.isCompleted);
        Expect.isTrue(completer4.isCompleted);
        Expect.isTrue(completer5.isCompleted);
        asyncEnd();
      }
  );

  completer1.completeError(1);
  completer2.complete(2);
  completer3.complete(3);
  completer4.complete(4);
  completer5.complete(5);
}
