| // 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. |
| |
| // @dart = 2.9 |
| |
| library test.constructors_test; |
| |
| import 'dart:mirrors'; |
| |
| import 'package:expect/expect.dart'; |
| |
| import 'stringify.dart'; |
| |
| constructorsOf(ClassMirror cm) { |
| var result = new Map<Symbol, MethodMirror>(); |
| 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)); |
| } |