/*
 * 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 A variable declaration of one of the forms
 * var v;, var v = e; , const v = e;, final v; or final v = e;
 * always induces an implicit getter function with signature
 *   get v
 * @description Checks that the returned type of this implicit getter is the 
 * same as the static field's type (dynamic), by making sure there're no 
 * static warnings when invoking non-existing methods on the value returned by 
 * these getters.
 * @static-clean
 * @author rodionov
 * @reviewer msyabro
 */
import "../../Utils/expect.dart";

class A {
  static var a;
  static var b = null;
  static final c = null;
  static const d = null;
}

main() {
  Expect.throws(() { A.a.nonexistent(); }, (e) => e is NoSuchMethodError);
  Expect.throws(() { A.b.nonexistent(); }, (e) => e is NoSuchMethodError);
  Expect.throws(() { A.c.nonexistent(); }, (e) => e is NoSuchMethodError);
  Expect.throws(() { A.d.nonexistent(); }, (e) => e is NoSuchMethodError);
}
