// 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 If the getter lookup has failed, then a new instance im of the
 * predefined class Invocation is created, such that :
 * • im.isGetter evaluates to true.
 * • im.memberName evaluates to the symbol m.
 * • im.positionalArguments evaluates to an immutable/unmodifiable empty list.
 * • im.namedArguments evaluates to the an immutable/unmodifiable empty map.
 * Then the method noSuchMethod() is looked up in o and invoked with argument
 * im, and the result of this invocation is the result of evaluating i.
 * @description Checks that the result of invocation in case of failed getter
 * lookup is the result of invoking the appropriate noSuchMethod method.
 * @author msyabro, sgrekhov@unipro.ru
 */
import '../../../../Utils/expect.dart';

class A {
  noSuchMethod(Invocation im) {
    return "v";
  }
}

class B {
  noSuchMethod(Invocation im) {
    return true;
  }
}

class C {
  noSuchMethod(Invocation im) {
    return 1;
  }
}

class D {
  noSuchMethod(Invocation im) {
    return null;
  }
}

main()  {
  dynamic classWithGetter1 = new A();
  Expect.equals("v", classWithGetter1.v);

  dynamic classWithGetter2 = new B();
  Expect.equals(true, classWithGetter2.v);

  dynamic classWithGetter3 = new C();
  Expect.equals(1, classWithGetter3.v);

  dynamic classWithGetter4 = new D();
  Expect.equals(null, classWithGetter4.v);
}
