// 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 cascaded method invocation has the form e..suffix where e is
 * an expression and suffix is a sequence of operator, method, getter or
 * setter invocations.
 * cascadeSection:
 *   '..'  (cascadeSelector arguments*)(assignableSelector arguments*)*
 * (assignmentOperator expressionWithoutCascade)?
 * ;
 * cascadeSelector:
 *   '[' expression ']' |
 *   identifier
 * ;
 * @description Checks that using static members in a cascaded invocation
 * expression results in a NoSuchMethodError as expected, since they're being
 * invoked on an instance.
 * @author rodionov
 */
import '../../../../Utils/expect.dart';

class C {
  int i1 = 0;
  int i2 = 0;
  m1() {i1++;}
  m2() {i2++;}
  static sm() {}
  static var sv;
}

main() {
  dynamic c = new C();
  try {
    c..sm();
    Expect.fail("NoSuchMethodError expected.");
  } on NoSuchMethodError catch (ok) {}

  try {
    c..sv;
    Expect.fail("NoSuchMethodError expected.");
  } on NoSuchMethodError catch (ok) {}

  try {
    c..m1()..sm()..m2();
    Expect.fail("NoSuchMethodError expected.");
  } on NoSuchMethodError catch (ok) {}
  Expect.equals(1, c.i1, "m1 was not executed");
  Expect.equals(0, c.i2, "m2 was executed");
}
