blob: f2e46114231ebae20b9a793e37b687f247b8568e [file] [log] [blame]
// 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");
}