Index: tests/compiler/dart2js/mirrors_test.dart |
diff --git a/tests/compiler/dart2js/mirrors_test.dart b/tests/compiler/dart2js/mirrors_test.dart |
index 1819193fb9ea61ca85ac0f8b8ba69b7259e157c2..9d2e8d7a51c20015d5fd1e9b09cc4d3b0abea842 100644 |
--- a/tests/compiler/dart2js/mirrors_test.dart |
+++ b/tests/compiler/dart2js/mirrors_test.dart |
@@ -38,7 +38,8 @@ main() { |
var dirPath = scriptPath.directoryPath; |
var libPath = dirPath.join(new Path.fromNative('../../../sdk/')); |
var inputPath = dirPath.join(new Path.fromNative('mirrors_helper.dart')); |
- var compilation = new Compilation.library([inputPath], libPath); |
+ var compilation = new Compilation.library([inputPath], libPath, null, |
+ <String>['--preserve-comments']); |
Expect.isNotNull(compilation, "No compilation created"); |
var mirrors = compilation.mirrors; |
@@ -169,99 +170,158 @@ void testFoo(MirrorSystem system, LibraryMirror helperLibrary, |
// 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; |
+ var metadataList = fooClass.metadata; |
+ Expect.isNotNull(metadataList); |
+ Expect.equals(16, metadataList.length); |
+ var metadataListIndex = 0; |
+ var metadata; |
+ |
+ var dartMirrorsLibrary = system.libraries['dart.mirrors']; |
+ Expect.isNotNull(dartMirrorsLibrary); |
+ var commentType = dartMirrorsLibrary.classes['Comment']; |
+ Expect.isNotNull(commentType); |
+ |
+ // /// Singleline doc comment. |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.isTrue(metadata is CommentInstanceMirror); |
+ Expect.equals(commentType.originalDeclaration, metadata.type); |
+ Expect.isTrue(metadata.isDocComment); |
+ Expect.stringEquals( |
+ "/// Singleline doc comment.", metadata.text); |
+ Expect.stringEquals( |
+ "Singleline doc comment.", metadata.trimmedText); |
+ |
+ // @Metadata |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.isTrue(metadata is TypeInstanceMirror); |
+ var metadataType = metadata.representedType; |
Expect.isNotNull(metadataType); |
Expect.stringEquals('Metadata', metadataType.simpleName); |
+ // // This is intentionally the type literal. |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.isTrue(metadata is CommentInstanceMirror); |
+ Expect.equals(commentType.originalDeclaration, metadata.type); |
+ Expect.isFalse(metadata.isDocComment); |
+ Expect.stringEquals( |
+ "// This is intentionally the type literal.", metadata.text); |
+ Expect.stringEquals( |
+ "This is intentionally the type literal.", metadata.trimmedText); |
+ |
+ // Singleline comment 1. |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.isTrue(metadata is CommentInstanceMirror); |
+ Expect.equals(commentType.originalDeclaration, metadata.type); |
+ Expect.isFalse(metadata.isDocComment); |
+ Expect.stringEquals( |
+ "// Singleline comment 1.", metadata.text); |
+ Expect.stringEquals( |
+ "Singleline comment 1.", metadata.trimmedText); |
+ |
+ // Singleline comment 2. |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.isTrue(metadata is CommentInstanceMirror); |
+ Expect.equals(commentType.originalDeclaration, metadata.type); |
+ Expect.isFalse(metadata.isDocComment); |
+ Expect.stringEquals( |
+ "// Singleline comment 2.", metadata.text); |
+ Expect.stringEquals( |
+ "Singleline comment 2.", metadata.trimmedText); |
+ |
// @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) { |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata.type); |
+ metadata.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) { |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata.type); |
+ metadata.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) { |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata.type); |
+ metadata.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) { |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata.type); |
+ metadata.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) { |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata.type); |
+ metadata.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) { |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata.type); |
+ metadata.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) { |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata.type); |
+ metadata.getField('data').then((InstanceMirror data) { |
Expect.isTrue(data is ListInstanceMirror); |
Expect.isFalse(data.hasReflectee); |
Expect.throws(() => data.reflectee, (_) => true); |
@@ -274,13 +334,13 @@ void testFoo(MirrorSystem system, LibraryMirror helperLibrary, |
}); |
}); |
- // @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) { |
+ // @Metadata(/* Inline comment */ const {'foo':"Foo"}) |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata.type); |
+ metadata.getField('data').then((InstanceMirror data) { |
Expect.isTrue(data is MapInstanceMirror); |
Expect.isFalse(data.hasReflectee); |
Expect.throws(() => data.reflectee, (_) => true); |
@@ -298,28 +358,57 @@ void testFoo(MirrorSystem system, LibraryMirror helperLibrary, |
}); |
// @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) { |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.equals(metadataType.originalDeclaration, metadata.type); |
+ metadata.getField('data').then((InstanceMirror data) { |
Expect.isNotNull(data); |
Expect.isTrue(data.hasReflectee); |
Expect.isNull(data.reflectee); |
}); |
+ // /** Multiline doc comment. */ |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.isTrue(metadata is CommentInstanceMirror); |
+ Expect.equals(commentType.originalDeclaration, metadata.type); |
+ Expect.isTrue(metadata.isDocComment); |
+ Expect.stringEquals( |
+ "/** Multiline doc comment. */", metadata.text); |
+ Expect.stringEquals( |
+ "Multiline doc comment. ", metadata.trimmedText); |
+ |
+ // /* Multiline comment. */ |
+ metadata = metadataList[metadataListIndex++]; |
+ Expect.isTrue(metadata is InstanceMirror); |
+ Expect.isFalse(metadata.hasReflectee); |
+ Expect.throws(() => metadata.reflectee, (_) => true); |
+ Expect.isTrue(metadata is CommentInstanceMirror); |
+ Expect.equals(commentType.originalDeclaration, metadata.type); |
+ Expect.isFalse(metadata.isDocComment); |
+ Expect.stringEquals( |
+ "/* Multiline comment. */", metadata.text); |
+ Expect.stringEquals( |
+ "Multiline comment. ", metadata.trimmedText); |
+ |
+ Expect.equals(metadataList.length, metadataListIndex); |
+ |
////////////////////////////////////////////////////////////////////////////// |
// Location test |
////////////////////////////////////////////////////////////////////////////// |
var fooClassLocation = fooClass.location; |
Expect.isNotNull(fooClassLocation); |
- // Expect the location to start with the first metadata. |
- Expect.equals(348, fooClassLocation.offset, "Unexpected offset"); |
+ // Expect the location to start with the first metadata, not including the |
+ // leading comment. |
+ Expect.equals(376, fooClassLocation.offset, "Unexpected offset"); |
// Expect the location to end with the class body. |
- Expect.equals(227, fooClassLocation.length, "Unexpected length"); |
- Expect.equals(17, fooClassLocation.line, "Unexpected line"); |
+ Expect.equals(332, fooClassLocation.length, "Unexpected length"); |
+ Expect.equals(18, fooClassLocation.line, "Unexpected line"); |
Expect.equals(1, fooClassLocation.column, "Unexpected column"); |
} |