Index: tests/compiler/dart2js/mirror_helper2_test.dart |
diff --git a/tests/compiler/dart2js/mirror_helper2_test.dart b/tests/compiler/dart2js/mirror_helper2_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..48e731c0f22fa8afffbea288e3d4230a99d51864 |
--- /dev/null |
+++ b/tests/compiler/dart2js/mirror_helper2_test.dart |
@@ -0,0 +1,101 @@ |
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
ahe
2013/08/19 15:34:06
Could you come up with a less generic name for thi
zarah
2013/08/20 14:08:17
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. |
+ |
+import "package:expect/expect.dart"; |
+import 'memory_compiler.dart' show compilerFor; |
+import '../../../sdk/lib/_internal/compiler/implementation/apiimpl.dart' show |
+ Compiler; |
+import |
+ '../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart' |
+show |
+ Node; |
+import |
+ '../../../sdk/lib/_internal/compiler/implementation/dart_backend/dart_backend.dart'; |
+import |
+ '../../../sdk/lib/_internal/compiler/implementation/mirror_renamer/mirror_renamer.dart'; |
+ |
+main() { |
+ testWithMirrorHeplerLibrary(minify: true); |
+ testWithMirrorHeplerLibrary(minify: false); |
+ testWithoutMirrorHelperLibrary(minify: true); |
+ testWithoutMirrorHelperLibrary(minify: false); |
+} |
+ |
+Compiler runCompiler({useMirrorHelperLibrary: false, minify: false}) { |
+ List<String> options = ['--output-type=dart']; |
+ if (minify) { |
+ options.add('--minify'); |
+ } |
+ Compiler compiler = compilerFor(MEMORY_SOURCE_FILES, options: options); |
+ DartBackend backend = compiler.backend; |
+ backend.useMirrorHelperLibrary = useMirrorHelperLibrary; |
+ MirrorRenamer.inverseRenames = null; |
+ compiler.runCompiler(Uri.parse('memory:main.dart')); |
+ return compiler; |
+} |
+ |
+void testWithMirrorHeplerLibrary({bool minify}) { |
+ Compiler compiler = runCompiler(useMirrorHelperLibrary: true, minify: minify); |
+ |
+ DartBackend backend = compiler.backend; |
+ Map<Node, String> renames = backend.renames; |
+ Map<String, String> inverseRenames = MirrorRenamer.inverseRenames; |
+ |
+ Expect.isFalse(null == compiler.mirrorHelperLibrary); |
+ Expect.isFalse(null == compiler.mirrorHelperFunction); |
+ Expect.isTrue(inverseRenames. |
+ containsValue(MirrorRenamer.MIRROR_HELPER_GET_NAME_FUNCTION)); |
+ |
+ for (Node n in renames.keys) { |
+ if (inverseRenames.containsKey(renames[n])) { |
+ if(n.toString() == 'getName') { |
+ Expect.equals(MirrorRenamer.MIRROR_HELPER_GET_NAME_FUNCTION, |
+ inverseRenames[renames[n]]); |
+ } else { |
+ Expect.equals(n.toString(), inverseRenames[renames[n]]); |
+ } |
+ } |
+ } |
+ |
+ String output = compiler.assembledCode; |
+ String getNameMatch = MirrorRenamer.MIRROR_HELPER_GET_NAME_FUNCTION; |
+ Iterable i = getNameMatch.allMatches(output); |
+ |
+ if (minify) { |
+ Expect.equals(1, i.length); |
+ } else { |
+ // Referenced twice in code and twice in renames map. |
+ Expect.equals(4, i.length); |
+ } |
+ |
+ String mapMatch = 'const Map<String,String>'; |
+ i = mapMatch.allMatches(output); |
+ Expect.equals(1, i.length); |
+ |
ahe
2013/08/19 15:34:06
Extra line.
zarah
2013/08/20 14:08:17
Done.
|
+} |
+ |
+void testWithoutMirrorHelperLibrary({bool minify}) { |
+ Compiler compiler = |
+ runCompiler(useMirrorHelperLibrary: false, minify: minify); |
+ |
+ Expect.equals(null, compiler.mirrorHelperLibrary); |
+ Expect.equals(null, compiler.mirrorHelperFunction); |
+ Expect.equals(null, MirrorRenamer.inverseRenames); |
+} |
+ |
+const MEMORY_SOURCE_FILES = const <String, String> { |
+ 'main.dart': """ |
+import 'dart:mirrors'; |
+ |
+ |
+class Foo { |
+ noSuchMethod(Invocation invocation) { |
+ MirrorSystem.getName(invocation.memberName); |
+ } |
+} |
+ |
+void main() { |
+ new Foo().fisk(); |
+} |
+"""}; |