// 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 static void throws(void f(), [_CheckExceptionFn check = null, String reason = null])
 * typedef bool _CheckExceptionFn(exception)
 * Calls the function [f] and verifies that it throws an exception.
 * The optional [check] function can provide additional validation that the
 * correct exception is being thrown.
 * @description Checks that if the tested method throws an exception, this
 * method fails only if the validating function is not null and returns false,
 * regardless of whether the specified reason is null or not.
 * @author rodionov
 */
import "../../../Utils/expect.dart";

typedef bool checkFn(exception);

void goodboy() {
  throw new Exception("");
}

main() {
  Expect.throws(goodboy);
  Expect.throws(goodboy, null, "");
  Expect.throws(goodboy, null, "not empty");

  Expect.throws(goodboy, (e) => true);
  Expect.throws(goodboy, (e) => true, "");
  Expect.throws(goodboy, (e) => true, "not empty");

  check(goodboy, (e) => false);
  check(goodboy, (e) => false, "");
  check(goodboy, (e) => false, "not empty");
}

void check(void f(), [checkFn? ch = null, String? reason = null]) {
  try {
    Expect.throws(f, ch, reason);
    throw new Exception("ExpectException expected");
  } on ExpectException catch(e) {
  }
}
