// 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 function expression invocation i has the form
 * ef(a1, ..., an, xn+1: an+1, ..., xn+k: an+k), where ef is an expression.
 * . . .
 * If ef is a property extraction expression, then i is is not a function
 * expression invocation and is instead recognized as an ordinary method
 * invocation.
 * @description Checks that a.b(x) is parsed as a method invocation of method
 * b() on object a, not as an invocation of getter b on a followed by a
 * function call.
 * @author kaigorodov
 */
import '../../../../Utils/expect.dart';

class TestException {}

class A {
  noSuchMethod(Invocation im) {
    // member name and number of args are different for an unresolved getter
    Expect.equals(#b, im.memberName);
    Expect.equals(1, im.positionalArguments.length);
    throw new TestException();
  }
}


main()  {
  dynamic a = new A();
  Expect.throws(() {a.b(1);}, (e) => e is TestException);
}
