blob: 5657efa96bb5c9cbbdb8d0b0c8b2367d11711db6 [file] [log] [blame]
// 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");
}""");
}