Index: tests/lib/mirrors/invoke_subscript_test.dart |
diff --git a/tests/lib/mirrors/invoke_subscript_test.dart b/tests/lib/mirrors/invoke_subscript_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..301091a7ed8bab73f6da41529c83729ef9c0cb8f |
--- /dev/null |
+++ b/tests/lib/mirrors/invoke_subscript_test.dart |
@@ -0,0 +1,107 @@ |
+// 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. |
+ |
+library test.invoke_subscript_test; |
+ |
+import 'dart:mirrors'; |
+import 'package:expect/expect.dart'; |
+ |
+class Super { |
+ inheritedMethod(a, b) => a + b; |
+ staticFunctionInSuper(x) => x; |
+} |
+ |
+class Class extends Super { |
+ var field = 'f'; |
+ get getter => 'g'; |
+ set setter(v) => 's'; |
+ method(x, y, z) => '$x-$y-$z'; |
+ methodWithNamed(x, {y, z:'Z'}) => '$x+$y+$z'; |
+ methodWithOptPos(x, [y, z='Z']) => '$x*$y*$z'; |
+ |
+ static var staticField = 'sf'; |
+ static get staticGetter => 'sg'; |
+ static set staticSetter(v) => 'ss'; |
+ static staticFunction(x, y, z) => '$x-$y-$z'; |
+ static staticFunctionWithNamed(x, {y, z:'Z'}) => '$x+$y+$z'; |
+ static staticFunctionWithOptPos(x, [y, z='Z']) => '$x*$y*$z'; |
+ |
+} |
+ |
+var toplevelField ='tf'; |
+get toplevelGetter => 'tg'; |
+set toplevelSetter(v) => 'ts'; |
+toplevelFunction(x, y, z) => '$x-$y-$z'; |
+toplevelFunctionWithNamed(x, {y, z:'Z'}) => '$x+$y+$z'; |
+toplevelFunctionWithOptPos(x, [y, z='Z']) => '$x*$y*$z'; |
+ |
+expectArgumentError(f) { |
+ Expect.throws(f, (e) => e is ArgumentError); |
+} |
+ |
+main() { |
+ InstanceMirror im = reflect(new Class()); |
+ Expect.equals('A-B-C', im[#method]('A', 'B', 'C').reflectee); |
+ Expect.throws(() => im[#method]('A', 'B', 'C', 'D'), |
+ (e) => e is NoSuchMethodError, |
+ 'Wrong arity'); |
+ Expect.equals(7, im[#inheritedMethod](3, 4).reflectee); |
+ expectArgumentError(() => im[#field]); |
+ expectArgumentError(() => im[#getter]); |
+ expectArgumentError(() => im[#setter]); |
+ expectArgumentError(() => im[#doesntExist]); |
+ expectArgumentError(() => im[#staticFunction]); |
+ |
+ ClassMirror cm = reflectClass(Class); |
+ Expect.equals('A-B-C', cm[#staticFunction]('A', 'B', 'C').reflectee); |
+ Expect.throws(() => cm[#staticFunction]('A', 'B', 'C', 'D'), |
+ (e) => e is NoSuchMethodError, |
+ 'Wrong arity'); |
+ expectArgumentError(() => cm[#staticField]); |
+ expectArgumentError(() => cm[#staticGetter]); |
+ expectArgumentError(() => cm[#staticSetter]); |
+ expectArgumentError(() => cm[#staticDoesntExist]); |
+ expectArgumentError(() => cm[#staticFunctionInSuper]); |
+ expectArgumentError(() => cm[#method]); |
+ |
+ LibraryMirror lm = cm.owner; |
+ Expect.equals('A-B-C', lm[#toplevelFunction]('A', 'B', 'C').reflectee); |
+ Expect.throws(() => lm[#toplevelFunction]('A', 'B', 'C', 'D'), |
+ (e) => e is NoSuchMethodError, |
+ 'Wrong arity'); |
+ |
+ expectArgumentError(() => lm[#toplevelField]); |
+ expectArgumentError(() => lm[#toplevelGetter]); |
+ expectArgumentError(() => lm[#toplevelSetter]); |
+ expectArgumentError(() => lm[#toplevelDoesntExist]); |
+ |
+ // dart2js might stop testing here. |
+ |
+ Expect.equals('A+B+Z', im[#methodWithNamed]('A', y: 'B').reflectee); |
+ Expect.equals('A*B*Z', im[#methodWithOptPos]('A', 'B').reflectee); |
+ Expect.throws(() => im[#methodWithNamed]('A', w: 'D'), |
+ (e) => e is NoSuchMethodError, |
+ 'Wrong arity'); |
+ Expect.throws(() => im[#method](), |
+ (e) => e is NoSuchMethodError, |
+ 'Wrong arity'); |
+ |
+ Expect.equals('A+B+Z', cm[#staticFunctionWithNamed]('A', y: 'B').reflectee); |
+ Expect.equals('A*B*Z', cm[#staticFunctionWithOptPos]('A', 'B').reflectee); |
+ Expect.throws(() => cm[#staticFunctionWithNamed]('A', w: 'D'), |
+ (e) => e is NoSuchMethodError, |
+ 'Wrong arity'); |
+ Expect.throws(() => cm[#staticFunctionWithOptPos](), |
+ (e) => e is NoSuchMethodError, |
+ 'Wrong arity'); |
+ |
+ Expect.equals('A+B+Z', lm[#toplevelFunctionWithNamed]('A', y: 'B').reflectee); |
+ Expect.equals('A*B*Z', lm[#toplevelFunctionWithOptPos]('A', 'B').reflectee); |
+ Expect.throws(() => lm[#toplevelFunctionWithNamed]('A', w: 'D'), |
+ (e) => e is NoSuchMethodError, |
+ 'Wrong arity'); |
+ Expect.throws(() => lm[#toplevelFunctionWithOptPos](), |
+ (e) => e is NoSuchMethodError, |
+ 'Wrong arity'); |
+} |