| // 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:async_helper/async_helper.dart"; |
| import "package:expect/expect.dart"; |
| import "../memory_compiler.dart"; |
| |
| const SOURCE = const { |
| 'main.dart': """ |
| library main; |
| |
| class Class { |
| var a, b, c, d, e, f, g, h; |
| Class.optional(this.a, int b, void this.c(), |
| [this.d, int this.e, void this.f(), |
| this.g = 0, int this.h = 0]); |
| Class.named(this.a, int b, void this.c(), |
| {this.d, int this.e, void this.f(), |
| this.g: 0, int this.h: 0}); |
| methodOptional(a, int b, void c(), |
| [d, int e, void f(), |
| g = 0, int h = 0]) {} |
| methodNamed(a, int b, void c(), |
| {d, int e, void f(), |
| g: 0, int h: 0}) {} |
| } |
| """, |
| }; |
| |
| main() { |
| asyncTest(() => mirrorSystemFor(SOURCE).then((MirrorSystem mirrors) { |
| LibraryMirror dartCore = mirrors.libraries[Uri.parse('memory:main.dart')]; |
| ClassMirror classMirror = dartCore.declarations[#Class]; |
| testMethod(classMirror.declarations[#optional]); |
| testMethod(classMirror.declarations[#named]); |
| testMethod(classMirror.declarations[#methodOptional]); |
| testMethod(classMirror.declarations[#methodNamed]); |
| })); |
| } |
| |
| testMethod(MethodMirror mirror) { |
| Expect.equals(8, mirror.parameters.length); |
| for (int i = 0 ; i < 6 ; i++) { |
| testParameter(mirror.parameters[i], false); |
| } |
| for (int i = 6 ; i < 8 ; i++) { |
| testParameter(mirror.parameters[i], true); |
| } |
| } |
| |
| testParameter(ParameterMirror mirror, bool expectDefaultValue) { |
| if (expectDefaultValue) { |
| Expect.isTrue(mirror.hasDefaultValue); |
| Expect.isNotNull(mirror.defaultValue); |
| } else { |
| Expect.isFalse(mirror.hasDefaultValue); |
| Expect.isNull(mirror.defaultValue); |
| } |
| } |