Index: test/codegen/lib/mirrors/constructors_test.dart |
diff --git a/test/codegen/lib/mirrors/constructors_test.dart b/test/codegen/lib/mirrors/constructors_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ac13e3b218008b99d895a5500b2346b9d9a26640 |
--- /dev/null |
+++ b/test/codegen/lib/mirrors/constructors_test.dart |
@@ -0,0 +1,72 @@ |
+// 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.constructors_test; |
+ |
+import 'dart:mirrors'; |
+ |
+import 'package:expect/expect.dart'; |
+ |
+import 'stringify.dart'; |
+ |
+constructorsOf(ClassMirror cm) { |
+ var result = new Map(); |
+ cm.declarations.forEach((k,v) { |
+ if(v is MethodMirror && v.isConstructor) result[k] = v; |
+ }); |
+ return result; |
+} |
+ |
+class Foo { |
+} |
+ |
+class Bar { |
+ Bar(); |
+} |
+ |
+class Baz { |
+ Baz.named(); |
+} |
+ |
+class Biz { |
+ Biz(); |
+ Biz.named(); |
+} |
+ |
+main() { |
+ ClassMirror fooMirror = reflectClass(Foo); |
+ Map<Symbol, MethodMirror> fooConstructors = constructorsOf(fooMirror); |
+ ClassMirror barMirror = reflectClass(Bar); |
+ Map<Symbol, MethodMirror> barConstructors = constructorsOf(barMirror); |
+ ClassMirror bazMirror = reflectClass(Baz); |
+ Map<Symbol, MethodMirror> bazConstructors = constructorsOf(bazMirror); |
+ ClassMirror bizMirror = reflectClass(Biz); |
+ Map<Symbol, MethodMirror> bizConstructors = constructorsOf(bizMirror); |
+ |
+ expect('{Foo: Method(s(Foo) in s(Foo), constructor)}', fooConstructors); |
+ expect('{Bar: Method(s(Bar) in s(Bar), constructor)}', barConstructors); |
+ expect('{Baz.named: Method(s(Baz.named) in s(Baz), constructor)}', |
+ bazConstructors); |
+ expect('{Biz: Method(s(Biz) in s(Biz), constructor),' |
+ ' Biz.named: Method(s(Biz.named) in s(Biz), constructor)}', |
+ bizConstructors); |
+ print(bizConstructors); |
+ |
+ expect('[]', fooConstructors.values.single.parameters); |
+ expect('[]', barConstructors.values.single.parameters); |
+ expect('[]', bazConstructors.values.single.parameters); |
+ for (var constructor in bizConstructors.values) { |
+ expect('[]', constructor.parameters); |
+ } |
+ |
+ expect('[s()]', |
+ fooConstructors.values.map((m) => m.constructorName).toList()); |
+ expect('[s()]', |
+ barConstructors.values.map((m) => m.constructorName).toList()); |
+ expect('[s(named)]', |
+ bazConstructors.values.map((m) => m.constructorName).toList()); |
+ expect('[s(), s(named)]', |
+ bizConstructors.values.map((m) => m.constructorName).toList() |
+ ..sort(compareSymbols)); |
+} |