Index: test/codegen/lib/mirrors/mirrors_reader_test.dart |
diff --git a/test/codegen/lib/mirrors/mirrors_reader_test.dart b/test/codegen/lib/mirrors/mirrors_reader_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5528701e01f8861ddcc7d75b1016bd688f4d53f8 |
--- /dev/null |
+++ b/test/codegen/lib/mirrors/mirrors_reader_test.dart |
@@ -0,0 +1,70 @@ |
+// Copyright (c) 2014, 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. |
+ |
+// Test that everything reachable from a [MirrorSystem] can be accessed. |
+ |
+library test.mirrors.reader; |
+ |
+import 'dart:mirrors'; |
+import 'package:expect/expect.dart'; |
+import 'mirrors_reader.dart'; |
+ |
+class RuntimeMirrorsReader extends MirrorsReader { |
+ final MirrorSystem mirrorSystem; |
+ final String mirrorSystemType; |
+ |
+ RuntimeMirrorsReader(MirrorSystem mirrorSystem, |
+ {bool verbose: false, bool includeStackTrace: false}) |
+ : this.mirrorSystem = mirrorSystem, |
+ this.mirrorSystemType = '${mirrorSystem.runtimeType}', |
+ super(verbose: verbose, includeStackTrace: includeStackTrace); |
+ |
+ visitLibraryMirror(LibraryMirror mirror) { |
+ super.visitLibraryMirror(mirror); |
+ Expect.equals(mirror, mirrorSystem.libraries[mirror.uri]); |
+ } |
+ |
+ visitClassMirror(ClassMirror mirror) { |
+ super.visitClassMirror(mirror); |
+ Expect.isNotNull(mirror.owner); |
+ } |
+ |
+ bool allowUnsupported(var receiver, String tag, UnsupportedError exception) { |
+ if (mirrorSystemType == '_LocalMirrorSystem') { |
+ // VM mirror system. |
+ if (tag.endsWith('location')) { |
+ return receiver is ParameterMirror; |
+ } |
+ } else if (mirrorSystemType == 'JsMirrorSystem') { |
+ // Dart2js runtime mirror system. |
+ if (tag.endsWith('.metadata')) { |
+ return true;// Issue 10905. |
+ } |
+ } |
+ return false; |
+ } |
+ |
+ bool expectUnsupported(var receiver, String tag, UnsupportedError exception) { |
+ // [DeclarationMirror.location] is intentionally not supported in runtime |
+ // mirrors. |
+ |
+ if (mirrorSystemType == '_LocalMirrorSystem') { |
+ // VM mirror system. |
+ } else if (mirrorSystemType == 'JsMirrorSystem') { |
+ // Dart2js runtime mirror system. |
+ if (receiver is DeclarationMirror && tag == 'location') { |
+ return true; |
+ } |
+ } |
+ return false; |
+ } |
+} |
+ |
+void main([List<String> arguments = const <String>[]]) { |
+ MirrorSystem mirrors = currentMirrorSystem(); |
+ MirrorsReader reader = new RuntimeMirrorsReader(mirrors, |
+ verbose: arguments.contains('-v'), |
+ includeStackTrace: arguments.contains('-s')); |
+ reader.checkMirrorSystem(mirrors); |
+} |