/*
 * 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 An external function is a function whose body is provided
 * separately from its declaration. An external function may be a top-level
 * function, a method, a getter, a setter or a non-redirecting constructor.
 * External functions are introduced via the built-in identifier external
 * followed by the function signature.
 * An external function is connected to its body by an implementation specific
 * mechanism. Attempting to invoke an external function that has not been
 * connected to its body will raise a NoSuchMethodError or some subclass
 * thereof.
 * @description Checks that invoking an external function that is not connected
 * to its body indeed results in a NoSuchMethodError or its subclass being
 * thrown.
 * @Issue 42182
 * @author rodionov
 */
import '../../../Utils/expect.dart';

external f();
external g([var x]);
external h({var x});

main() {
  Expect.throws(() { f(); }, (e) => e is NoSuchMethodError);
  Expect.throws(() { g(); }, (e) => e is NoSuchMethodError);
  Expect.throws(() { h(); }, (e) => e is NoSuchMethodError);
}
