| // Copyright (c) 2012, 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. | |
| // dart2jsOptions=--no-minify | |
| import "package:expect/expect.dart"; | |
| class NoSuchMethodInfo { | |
| Object receiver; | |
| Symbol name; | |
| List args; | |
| NoSuchMethodInfo(Object r, Symbol m, List a) | |
| : receiver = r, | |
| name = m, | |
| args = a; | |
| } | |
| class A { | |
| noSuchMethod(Invocation invocation) { | |
| topLevelInfo = new NoSuchMethodInfo( | |
| this, | |
| invocation.memberName, | |
| invocation.positionalArguments, | |
| ); | |
| return topLevelInfo; | |
| } | |
| foo(a, b, c) { | |
| Expect.fail('Should never enter here'); | |
| } | |
| } | |
| // Used for the setter case. | |
| NoSuchMethodInfo? topLevelInfo; | |
| main() { | |
| A a = new A(); | |
| var info = (a as dynamic).foo(); | |
| Expect.equals(#foo, info.name); | |
| Expect.isTrue(info.args.isEmpty); | |
| Expect.isTrue(identical(info.receiver, a)); | |
| info = (a as dynamic).foo(2); | |
| Expect.equals(#foo, info.name); | |
| Expect.isTrue(info.args.length == 1); | |
| Expect.isTrue(info.args[0] == 2); | |
| Expect.isTrue(identical(info.receiver, a)); | |
| info = (a as dynamic).bar; | |
| Expect.equals(#bar, info.name); | |
| Expect.isTrue(info.args.length == 0); | |
| Expect.isTrue(identical(info.receiver, a)); | |
| (a as dynamic).bar = 2; | |
| info = topLevelInfo; | |
| Expect.equals(const Symbol('bar='), info.name); | |
| Expect.isTrue(info.args.length == 1); | |
| Expect.isTrue(info.args[0] == 2); | |
| Expect.isTrue(identical(info.receiver, a)); | |
| } |