// 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.

// @dart = 2.9

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