Chromium Code Reviews| Index: tests/lib/mirrors/mirrors_used_inheritance_test.dart |
| diff --git a/tests/lib/mirrors/mirrors_used_inheritance_test.dart b/tests/lib/mirrors/mirrors_used_inheritance_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b01ff9a3e99dbcd4cdcd21ca26c96df90dda44db |
| --- /dev/null |
| +++ b/tests/lib/mirrors/mirrors_used_inheritance_test.dart |
| @@ -0,0 +1,77 @@ |
| +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
|
Johnni Winther
2014/06/27 07:43:02
2013 -> 2014
herhut
2014/06/27 12:34:38
Done.
|
| +// 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. |
| + |
| +// Test to make sure that the names of classes that are marked with meta |
|
Johnni Winther
2014/06/27 07:43:02
Update comment.
herhut
2014/06/27 12:34:38
Done.
|
| +// annotations of MirrorsUsed are preserved. |
| +// In the test the class B is not instantiated, but we still want its names |
| +// ("foo") to be preserved. |
| + |
| +@MirrorsUsed(metaTargets: "Meta") |
| +import 'dart:mirrors'; |
| +import 'package:expect/expect.dart'; |
| + |
| +class Meta { |
| + const Meta(); |
| +} |
| + |
| +class Super { |
| + var inheritedField = 1; |
| + var overriddenField = 1; |
| + |
| + inheritedMethod(x) => x; |
| + overriddenMethod(x) => x; |
| +} |
| + |
| +@Meta() |
| +class Reflected extends Super { |
| + var overriddenField = 2; |
| + var subclassedField = 2; |
| + |
| + overriddenMethod(x) => 2 * x; |
| + subclassedMethod(x) => 2 * x; |
| +} |
| + |
| +class Subclass extends Reflected { |
| + var subclassedField = 4; |
| + var subclassField = 4; |
| + |
| + subclassedMethod(x) => 4 * x; |
| + subclassMethod(x) => 4 * x; |
| +} |
| + |
| +tryCall(object, symbol, value, expected) { |
| + var mirror = reflect(object); |
| + var result = mirror.invoke(symbol, [value]).reflectee; |
| + Expect.equals(result, expected); |
| +} |
| + |
| +tryField(object, symbol, expected) { |
| + var mirror = reflect(object); |
| + var result = mirror.getField(symbol).reflectee; |
| + Expect.equals(result, expected); |
| +} |
| + |
| +main () { |
| + var objects = [new Reflected(), new Subclass()]; |
| + |
| + // Make sure the subclass methods are alive. |
| + objects[1].subclassField = 9; |
| + print(objects[1].subclassMethod(9)); |
| + |
| + var index = 1; |
| + if (new DateTime.now().year == 1984) { |
| + index = 0; |
| + } |
| + |
| + var object = objects[index]; |
|
Johnni Winther
2014/06/27 07:43:02
[object] -> [reflected] to show that we access an
herhut
2014/06/27 12:34:38
Actually, it is an instance of Subclass. I have re
|
| + tryCall(object, #inheritedMethod, 11, 11); |
| + tryCall(object, #overriddenMethod, 11, 22); |
| + tryCall(object, #subclassedMethod, 11, 44); |
| + tryField(object, #inheritedField, 1); |
| + tryField(object, #overriddenField, 2); |
| + tryField(object, #subclassedField, 4); |
| + Expect.throws(() => |
| + reflect(object).invoke(#subclassMethod, [11])); |
| + Expect.throws(() => reflect(object).getField(#subclassField)); |
| +} |