// 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 all
/// of the futures in the list are 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: (error) {
        Expect.isTrue([1, 2, 3, 4, 5].contains(error), "error: $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.completeError(2);
  completer3.completeError(3);
  completer4.completeError(4);
  completer5.completeError(5);
}
