// 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 then(dynamic onValue(T value), {Function onError})
/// If onError is provided, and this future completes with an error, the onError
/// callback is called with that error and its stack trace. The onError callback
/// must accept either one argument or two arguments. If onError accepts two
/// arguments, it is called with both the error and the stack trace, otherwise
/// it is called with just the error object.
/// @description Checks that onError callback with more than two parameters
/// causes runtime exception.
/// @author ilya

import "dart:async";
import "../../../Utils/expect.dart";

f() {
  Completer completer = new Completer();
  Future future = completer.future;

  future.then((x) {}, onError: (x, y, z) {});

  completer.completeError(1);
}

main() {
  asyncStart();
  runZoned(f, onError: (e) {
    asyncEnd();
  });
}
