// 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);
}
