blob: b26a1400dbec0d435268b2f42069689169bb0159 [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.
import "dart:mirrors";
import "stringify.dart";
import "package:expect/expect.dart";
import "closure_mirror_import1.dart";
import "closure_mirror_import1.dart" as imp1;
import "closure_mirror_import1.dart" as imp1_hidden
hide globalVariableInImport, StaticClass;
import "closure_mirror_import2.dart" as imp2;
var globalVariable = "globalVariable";
globalFoo() => 17;
class S {
static staticFooInS() => "staticFooInS";
static var staticInS = "staticInS";
var instanceInS = "instanceInS";
}
class C extends S {
static staticFooInC() => "staticFooInC";
static var staticInC = "staticInC";
var instanceInC = "instanceInC";
foo() => null;
bar() {
var x = 7;
var instanceInC = 11; // Shadowing the instance field.
var y = 3; // Not in context.
baz() {
if (x) {}
if (instanceInC) {}
};
return reflect(baz);
}
baz() {
var instanceInC = null; // Shadowing with a null value.
return reflect(() => instanceInC);
}
}
main() {
C c = new C();
ClosureMirror cm = reflect(c.foo);
var result;
result = cm.findInContext(#globalVariable);
expect("Instance(value = globalVariable)", result);
result = cm.findInContext(#globalFoo);
Expect.isTrue(result is ClosureMirror);
expect("Instance(value = 17)", result.apply(const []));
result = cm.findInContext(#S.staticInS);
expect("Instance(value = staticInS)", result);
result = cm.findInContext(#staticInS);
Expect.isFalse(result is InstanceMirror);
Expect.equals(null, result);
result = cm.findInContext(#staticFooInS);
Expect.isTrue(result is ClosureMirror);
expect("Instance(value = staticFooInS)", result.apply(const []));
result = cm.findInContext(#C.staticFooInS);
Expect.isTrue(result is ClosureMirror);
expect("Instance(value = staticFooInS)", result.apply(const []));
result = cm.findInContext(#C.staticInC);
expect("Instance(value = staticInC)", result);
result = cm.findInContext(#staticInC);
expect("Instance(value = staticInC)", result);
result = cm.findInContext(#C.staticFooInC);
Expect.isTrue(result is ClosureMirror);
expect("Instance(value = staticFooInC)", result.apply(const []));
result = cm.findInContext(#staticFooInC);
Expect.isTrue(result is ClosureMirror);
expect("Instance(value = staticFooInC)", result.apply(const []));
result = cm.findInContext(#instanceInC);
expect("Instance(value = instanceInC)", result);
result = cm.findInContext(#instanceInS);
expect("Instance(value = instanceInS)", result);
result = cm.findInContext(#globalVariableInImport1);
expect("Instance(value = globalVariableInImport1)", result);
result = cm.findInContext(#StaticClass.staticField);
expect("Instance(value = staticField)", result);
result = cm.findInContext(#StaticClass.staticFunctionInStaticClass);
Expect.isTrue(result is ClosureMirror);
expect("Instance(value = staticFunctionInStaticClass)",
result.apply(const []));
result = cm.findInContext(#imp1.StaticClass.staticFunctionInStaticClass);
Expect.isTrue(result is ClosureMirror);
expect("Instance(value = staticFunctionInStaticClass)",
result.apply(const []));
result = cm.findInContext(#imp1.globalVariableInImport1);
expect("Instance(value = globalVariableInImport1)", result);
result = cm.findInContext(#imp2.globalVariableInImport);
Expect.isFalse(result is InstanceMirror);
Expect.equals(null, result);
result = cm.findInContext(#imp1.StaticClass.staticField);
expect("Instance(value = staticField)", result);
result = cm.findInContext(#imp1_hidden.StaticClass.staticField);
Expect.isFalse(result is InstanceMirror);
Expect.equals(null, result);
result = cm.findInContext(#firstGlobalVariableInImport2);
expect("Instance(value = firstGlobalVariableInImport2)", result);
result = cm.findInContext(#secondGlobalVariableInImport2);
Expect.isFalse(result is InstanceMirror);
Expect.equals(null, result);
result = cm.findInContext(#imp2.secondGlobalVariableInImport2);
expect("Instance(value = secondGlobalVariableInImport2)", result);
result = c.bar().findInContext(#x);
expect("Instance(value = 7)", result);
result = c.bar().findInContext(#instanceInC);
expect("Instance(value = 11)", result);
result = c.bar().findInContext(#y);
Expect.isFalse(result is InstanceMirror);
Expect.equals(null, result);
result = c.baz().findInContext(#instanceInC);
expect("Instance(value = <null>)", result);
}