Chromium Code Reviews| Index: tests/lib/mirrors/fake_function_test.dart |
| diff --git a/tests/lib/mirrors/fake_function_test.dart b/tests/lib/mirrors/fake_function_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..545f8240b06d37eaa6662d38c82b22bce433b7e1 |
| --- /dev/null |
| +++ b/tests/lib/mirrors/fake_function_test.dart |
| @@ -0,0 +1,42 @@ |
| +// Copyright (c) 2013, 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. |
| + |
| +import "dart:mirrors"; |
| + |
| +import "package:expect/expect.dart"; |
| + |
| +class WannabeFunction { |
| + int call(int a, int b) => a + b; |
| + method(); |
|
siva
2013/08/07 23:06:41
Can you add a body for it so that it can be invoke
|
| +} |
| + |
| +main() { |
| + Expect.isTrue(new WannabeFunction() is Function); |
| + |
| + ClosureMirror cm = reflect(new WannabeFunction()); |
| + Expect.equals(7, cm.invoke(const Symbol("call"), [3,4]).reflectee); |
| + Expect.throws(() => cm.invoke(const Symbol("call"), [3]), |
| + (e) => e is NoSuchMethodError, |
| + "Wrong arity"); |
| + Expect.equals(7, cm.apply([3,4]).reflectee); |
| + Expect.throws(() => cm.apply([3]), |
| + (e) => e is NoSuchMethodError, |
| + "Wrong arity"); |
|
siva
2013/08/07 23:06:41
Can you also add a test to invoke "method" using c
|
| + |
| + MethodMirror mm = cm.function; |
| + Expect.equals(const Symbol("call"), mm.simpleName); |
| + Expect.equals(reflectClass(WannabeFunction), |
| + mm.owner); |
| + Expect.isTrue(mm.isRegularMethod); |
| + Expect.equals(const Symbol("int"), mm.returnType.simpleName); |
| + Expect.equals(const Symbol("int"), mm.parameters[0].type.simpleName); |
| + Expect.equals(const Symbol("int"), mm.parameters[1].type.simpleName); |
| + |
| + ClassMirror km = cm.type; |
| + Expect.equals(reflectClass(WannabeFunction), km); |
| + Expect.equals(const Symbol("WannabeFunction"), km.simpleName); |
| + Expect.equals(mm, km.members[const Symbol("call")]); |
| + Expect.setEquals([const Symbol("call"), const Symbol("method")], |
| + km.members.keys); |
| +} |