| // 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"); |
| } |