|  | // 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) => C(z, z); | 
|  | factory C.other2() => C(0, 0); | 
|  | 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 as LibraryMirror; | 
|  | 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) => C(z, 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 as LibraryMirror; | 
|  | expectSource(otherLib.declarations[#main]!, | 
|  | """main() { | 
|  | print("Blah"); | 
|  | }"""); | 
|  | } |