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