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..33a6a0372467fd2e64f0b2a588fd7a14ace82964 |
| --- /dev/null |
| +++ b/tests/lib/mirrors/fake_function_test.dart |
| @@ -0,0 +1,45 @@ |
| +// 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(); |
| +} |
| + |
| +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"); |
| + |
| + MethodMirror mm = cm.function; |
| + Expect.equals(const Symbol("call"), mm.simpleName); |
| + Expect.equals(reflectClass(WannabeFunction), |
| + mm.owner); |
| + // TODO(11944): isOperator not yet implemented. |
| + // Expect.isTrue(mm.isOperator); |
|
ahe
2013/08/06 20:32:46
I don't think call is an operator (it's just a ver
rmacnak
2013/08/06 20:38:02
Ah, it used to be one last summer :)
|
| + // Operators are considered regular methods. |
| + Expect.isTrue(mm.isRegularMethod); |
| + |
| + FunctionTypeMirror ftm = cm.type; |
| + Expect.equals(reflectClass(WannabeFunction), ftm); |
| + Expect.equals(const Symbol("WannabeFunction"), ftm.simpleName); |
| + Expect.equals(mm, ftm.callMethod); |
| + Expect.equals(const Symbol("int"), ftm.returnType.simpleName); |
| + Expect.equals(const Symbol("int"), ftm.parameters[0].type.simpleName); |
| + Expect.equals(const Symbol("int"), ftm.parameters[1].type.simpleName); |
| + Expect.setEquals([const Symbol("call"), const Symbol("method")], |
| + ftm.members.keys); |
| +} |