| // 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"); |
| }"""); |
| } |