// 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 Evaluation of an identifier expression e of the form id proceeds
/// as follows:
/// Let d be the innermost declaration in the enclosing lexical scope whose name
/// is id or id=. If no such declaration exists in the lexical scope, let d be
/// the declaration of the inherited member named id if it exists.
/// ...
/// • Otherwise, if e occurs inside a top level or static function (be it
///   function, method, getter, or setter) or variable initializer, evaluation
///   of e causes a NoSuchMethod to be thrown.
/// @description Checks that NoSuchMethodError is thrown if undeclared
/// identifier is used in a static context.
/// @author kaigorodov

import '../../../Utils/expect.dart';

dynamic o = '';

x1() => o.undeclared;       // in a body of library function
get x2 => o.undeclared;     // in a body of library getter
set x3 (_) => o.undeclared; // in a body of library setter
var x4 = o.undeclared;      // in an initializer of a library variable

class C {
  static x1() => o.undeclared;       // in a body of class static function
  static get x2 => o.undeclared;     // in a body of class static getter
  static set x3 (_) => o.undeclared; // in a body of class static setter
  static var x4 = o.undeclared;      // in an initializer of a class static variable
}

main() {
  Expect.throws(() => x1(), (e) => e is NoSuchMethodError);
  Expect.throws(() => x2, (e) => e is NoSuchMethodError);
  Expect.throws(() => x3 = 1, (e) => e is NoSuchMethodError);
  Expect.throws(() => x4, (e) => e is NoSuchMethodError);

  Expect.throws(() => C.x1(), (e) => e is NoSuchMethodError);
  Expect.throws(() => C.x2, (e) => e is NoSuchMethodError);
  Expect.throws(() => C.x3 = 1, (e) => e is NoSuchMethodError);
  Expect.throws(() => C.x4, (e) => e is NoSuchMethodError);
}
