Index: tests/compiler/dart2js/mirrors_test.dart |
diff --git a/tests/compiler/dart2js/mirrors_test.dart b/tests/compiler/dart2js/mirrors_test.dart |
index aa4de8effa11dd294daf1518cfbc2f1152d4e6b9..e0025b82086958c709ad478b39c56f536a132959 100644 |
--- a/tests/compiler/dart2js/mirrors_test.dart |
+++ b/tests/compiler/dart2js/mirrors_test.dart |
@@ -164,6 +164,148 @@ void testFoo(MirrorSystem system, LibraryMirror helperLibrary, |
Expect.isNotNull(fooClass.getters); |
Expect.isNotNull(fooClass.setters); |
Expect.isNotNull(fooClass.variables); |
+ |
+ ////////////////////////////////////////////////////////////////////////////// |
+ // Metadata tests |
+ ////////////////////////////////////////////////////////////////////////////// |
+ |
+ var metadata = fooClass.metadata; |
+ Expect.isNotNull(metadata); |
+ Expect.equals(10, metadata.length); |
+ |
+ // @Metadata // This is intentionally the type literal. |
+ var metadata0 = metadata[0]; |
+ Expect.isTrue(metadata0 is InstanceMirror); |
+ Expect.isFalse(metadata0.hasReflectee); |
+ Expect.throws(() => metadata0.reflectee, (_) => true); |
+ Expect.isTrue(metadata0 is TypeInstanceMirror); |
+ var metadataType = metadata0.representedType; |
+ Expect.isNotNull(metadataType); |
+ Expect.stringEquals('Metadata', metadataType.simpleName); |
+ |
+ // @Metadata(null) |
+ var metadata1 = metadata[1]; |
+ Expect.isTrue(metadata1 is InstanceMirror); |
+ Expect.isFalse(metadata1.hasReflectee); |
+ Expect.throws(() => metadata1.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata1.type); |
+ metadata1.getField('data').then((InstanceMirror data) { |
+ Expect.isNotNull(data); |
+ Expect.isTrue(data.hasReflectee); |
+ Expect.isNull(data.reflectee); |
+ }); |
+ |
+ // @Metadata(true) |
+ var metadata2 = metadata[2]; |
+ Expect.isTrue(metadata2 is InstanceMirror); |
+ Expect.isFalse(metadata2.hasReflectee); |
+ Expect.throws(() => metadata2.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata2.type); |
+ metadata2.getField('data').then((InstanceMirror data) { |
+ Expect.isNotNull(data); |
+ Expect.isTrue(data.hasReflectee); |
+ Expect.isTrue(data.reflectee); |
+ }); |
+ |
+ // @Metadata(false) |
+ var metadata3 = metadata[3]; |
+ Expect.isTrue(metadata3 is InstanceMirror); |
+ Expect.isFalse(metadata3.hasReflectee); |
+ Expect.throws(() => metadata3.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata3.type); |
+ metadata3.getField('data').then((InstanceMirror data) { |
+ Expect.isNotNull(data); |
+ Expect.isTrue(data.hasReflectee); |
+ Expect.isFalse(data.reflectee); |
+ }); |
+ |
+ // @Metadata(0) |
+ var metadata4 = metadata[4]; |
+ Expect.isTrue(metadata4 is InstanceMirror); |
+ Expect.isFalse(metadata4.hasReflectee); |
+ Expect.throws(() => metadata4.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata4.type); |
+ metadata4.getField('data').then((InstanceMirror data) { |
+ Expect.isNotNull(data); |
+ Expect.isTrue(data.hasReflectee); |
+ Expect.equals(0, data.reflectee); |
+ }); |
+ |
+ // @Metadata(1.5) |
+ var metadata5 = metadata[5]; |
+ Expect.isTrue(metadata5 is InstanceMirror); |
+ Expect.isFalse(metadata5.hasReflectee); |
+ Expect.throws(() => metadata5.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata5.type); |
+ metadata5.getField('data').then((InstanceMirror data) { |
+ Expect.isNotNull(data); |
+ Expect.isTrue(data.hasReflectee); |
+ Expect.equals(1.5, data.reflectee); |
+ }); |
+ |
+ // @Metadata("Foo") |
+ var metadata6 = metadata[6]; |
+ Expect.isTrue(metadata6 is InstanceMirror); |
+ Expect.isFalse(metadata6.hasReflectee); |
+ Expect.throws(() => metadata6.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata6.type); |
+ metadata6.getField('data').then((InstanceMirror data) { |
+ Expect.isNotNull(data); |
+ Expect.isTrue(data.hasReflectee); |
+ Expect.stringEquals("Foo", data.reflectee); |
+ }); |
+ |
+ // @Metadata(const ["Foo"]) |
+ var metadata7 = metadata[7]; |
+ Expect.isTrue(metadata7 is InstanceMirror); |
+ Expect.isFalse(metadata7.hasReflectee); |
+ Expect.throws(() => metadata7.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata7.type); |
+ metadata7.getField('data').then((InstanceMirror data) { |
+ Expect.isTrue(data is ListInstanceMirror); |
+ Expect.isFalse(data.hasReflectee); |
+ Expect.throws(() => data.reflectee, (_) => true); |
+ ListInstanceMirror listData = data; |
+ Expect.equals(1, listData.length); |
+ listData[0].then((InstanceMirror element) { |
+ Expect.isNotNull(element); |
+ Expect.isTrue(element.hasReflectee); |
+ Expect.stringEquals("Foo", element.reflectee); |
+ }); |
+ }); |
+ |
+ // @Metadata(const {'foo':"Foo"}) |
+ var metadata8 = metadata[8]; |
+ Expect.isTrue(metadata8 is InstanceMirror); |
+ Expect.isFalse(metadata8.hasReflectee); |
+ Expect.throws(() => metadata8.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata8.type); |
+ metadata8.getField('data').then((InstanceMirror data) { |
+ Expect.isTrue(data is MapInstanceMirror); |
+ Expect.isFalse(data.hasReflectee); |
+ Expect.throws(() => data.reflectee, (_) => true); |
+ MapInstanceMirror mapData = data; |
+ Expect.equals(1, mapData.length); |
+ Expect.stringEquals('foo', mapData.keys.iterator().next()); |
+ mapData['foo'].then((InstanceMirror element) { |
+ Expect.isNotNull(element); |
+ Expect.isTrue(element.hasReflectee); |
+ Expect.stringEquals("Foo", element.reflectee); |
+ }); |
+ Expect.isNull(mapData['bar']); |
+ }); |
+ |
+ // @metadata |
+ var metadata9 = metadata[9]; |
+ Expect.isTrue(metadata9 is InstanceMirror); |
+ Expect.isFalse(metadata9.hasReflectee); |
+ Expect.throws(() => metadata9.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata9.type); |
+ metadata9.getField('data').then((InstanceMirror data) { |
+ Expect.isNotNull(data); |
+ Expect.isTrue(data.hasReflectee); |
+ Expect.isNull(data.reflectee); |
+ }); |
} |
// Testing abstract class Bar: |
@@ -245,6 +387,10 @@ void testBar(MirrorSystem system, LibraryMirror helperLibrary, |
Expect.isNotNull(barInterfaceConstructors, "Constructors map is null"); |
Expect.isTrue(barInterfaceConstructors.isEmpty, |
"Constructors map is unempty"); |
+ |
+ var metadata = barClass.metadata; |
+ Expect.isNotNull(metadata); |
+ Expect.equals(0, metadata.length); |
} |
// Testing class Baz: |
@@ -724,6 +870,10 @@ void testBaz(MirrorSystem system, LibraryMirror helperLibrary, |
// TODO(johnniwinther): Add more tests of constructors. |
// TODO(johnniwinther): Add a test for unnamed factory methods. |
+ |
+ var metadata = bazClass.metadata; |
+ Expect.isNotNull(metadata); |
+ Expect.equals(0, metadata.length); |
} |
// class _PrivateClass { |
@@ -789,4 +939,8 @@ void testPrivate(MirrorSystem system, LibraryMirror helperLibrary, |
Expect.isFalse(privateFactoryConstructor.isRedirectingConstructor); |
Expect.isFalse(privateFactoryConstructor.isGenerativeConstructor); |
Expect.isTrue(privateFactoryConstructor.isFactoryConstructor); |
+ |
+ var metadata = privateClass.metadata; |
+ Expect.isNotNull(metadata); |
+ Expect.equals(0, metadata.length); |
} |