// Copyright (c) 2013, 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.

// @dart = 2.9

library dynamic_type_helper;

import 'package:expect/expect.dart';

/// Checks that a dynamic type error is thrown when [f] is executed
/// and [expectTypeError] is `true`.
void testDynamicTypeError(bool expectTypeError, f(), [String message]) {
  if (expectTypeError) {
    checkDynamicTypeError(f, message);
  } else {
    checkNoDynamicTypeError(f, message);
  }
}

/// Checks that a dynamic type error is thrown when f is executed.
void checkDynamicTypeError(f(), [String message]) {
  message = message != null ? ': $message' : '';
  try {
    f();
    Expect.fail('Missing type error$message.');
  } on TypeError catch (e) {}
}

/// Checks that no dynamic type error is thrown when [f] is executed.
void checkNoDynamicTypeError(f(), [String message]) {
  message = message != null ? ': $message' : '';
  try {
    f();
  } on TypeError catch (e) {
    Expect.fail('Unexpected type error$message.');
  }
}
