Index: test/codegen/lib/mirrors/method_mirror_source_test.dart |
diff --git a/test/codegen/lib/mirrors/method_mirror_source_test.dart b/test/codegen/lib/mirrors/method_mirror_source_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cea4dc1631840b2542ec3bf3076d99553718b99e |
--- /dev/null |
+++ b/test/codegen/lib/mirrors/method_mirror_source_test.dart |
@@ -0,0 +1,110 @@ |
+// Copyright (c) 2013, 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. |
+ |
+// Note: This test relies on LF line endings in the source file. |
+ |
+import "dart:mirrors"; |
+import "package:expect/expect.dart"; |
+import "method_mirror_source_other.dart"; |
+ |
+expectSource(Mirror mirror, String source) { |
+ MethodMirror methodMirror; |
+ if (mirror is ClosureMirror) { |
+ methodMirror = mirror.function; |
+ } else { |
+ methodMirror = mirror as MethodMirror; |
+ } |
+ Expect.isTrue(methodMirror is MethodMirror); |
+ Expect.equals(source, methodMirror.source); |
+} |
+ |
+foo1() {} |
+doSomething(e) => e; |
+ |
+int get x => 42; |
+set x(value) { } |
+ |
+class S {} |
+ |
+class C extends S { |
+ |
+ var _x; |
+ var _y; |
+ |
+ C(this._x, y) |
+ : _y = y, |
+ super(); |
+ |
+ factory C.other(num z) {} |
+ factory C.other2() {} |
+ factory C.other3() = C.other2; |
+ |
+ static dynamic foo() { |
+ // Happy foo. |
+ } |
+ |
+ // Some comment. |
+ |
+ void bar() { /* Not so happy bar. */ } |
+ |
+ num get someX => |
+ 181; |
+ |
+ set someX(v) { |
+ // Discard this one. |
+ } |
+} |
+ |
+ |
+main() { |
+ // Top-level members |
+ LibraryMirror lib = reflectClass(C).owner; |
+ expectSource(lib.declarations[#foo1], |
+ "foo1() {}"); |
+ expectSource(lib.declarations[#x], |
+ "int get x => 42;"); |
+ expectSource(lib.declarations[const Symbol("x=")], |
+ "set x(value) { }"); |
+ |
+ // Class members |
+ ClassMirror cm = reflectClass(C); |
+ expectSource(cm.declarations[#foo], |
+ "static dynamic foo() {\n" |
+ " // Happy foo.\n" |
+ " }"); |
+ expectSource(cm.declarations[#bar], |
+ "void bar() { /* Not so happy bar. */ }"); |
+ expectSource(cm.declarations[#someX], |
+ "num get someX =>\n" |
+ " 181;"); |
+ expectSource(cm.declarations[const Symbol("someX=")], |
+ "set someX(v) {\n" |
+ " // Discard this one.\n" |
+ " }"); |
+ expectSource(cm.declarations[#C], |
+ "C(this._x, y)\n" |
+ " : _y = y,\n" |
+ " super();"); |
+ expectSource(cm.declarations[#C.other], |
+ "factory C.other(num z) {}"); |
+ expectSource(cm.declarations[#C.other3], |
+ "factory C.other3() = C.other2;"); |
+ |
+ // Closures |
+ expectSource(reflect((){}), "(){}"); |
+ expectSource(reflect((x,y,z) { return x*y*z; }), "(x,y,z) { return x*y*z; }"); |
+ expectSource(reflect((e) => doSomething(e)), "(e) => doSomething(e)"); |
+ |
+ namedClosure(x,y,z) => 1; |
+ var a = () {}; |
+ expectSource(reflect(namedClosure), "namedClosure(x,y,z) => 1;"); |
+ expectSource(reflect(a), "() {}"); |
+ |
+ // Function at first line. |
+ LibraryMirror otherLib = reflectClass(SomethingInOther).owner; |
+ expectSource(otherLib.declarations[#main], |
+"""main() { |
+ print("Blah"); |
+}"""); |
+} |