| Index: tests/lib/mirrors/closure_mirror_find_in_context_test.dart
|
| diff --git a/tests/lib/mirrors/closure_mirror_find_in_context_test.dart b/tests/lib/mirrors/closure_mirror_find_in_context_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e119691deceeda9cffb781dbd9871269d90b4407
|
| --- /dev/null
|
| +++ b/tests/lib/mirrors/closure_mirror_find_in_context_test.dart
|
| @@ -0,0 +1,146 @@
|
| +// 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; // Hiding the instance field.
|
| + var y = 3; // Not in context.
|
| + baz() {
|
| + if (x) {}
|
| + if (instanceInC) {}
|
| + };
|
| + return reflect(baz);
|
| + }
|
| +}
|
| +
|
| +main() {
|
| + C c = new C();
|
| + ClosureMirror cm = reflect(c.foo);
|
| +
|
| + var result;
|
| +
|
| + result = cm.findInContext(const Symbol("globalVariable"));
|
| + expect("Instance(value = globalVariable)", result);
|
| +
|
| + result = cm.findInContext(const Symbol("globalFoo"));
|
| + Expect.isTrue(result is ClosureMirror);
|
| + expect("Instance(value = 17)", result.apply(const []));
|
| +
|
| + result = cm.findInContext(const Symbol("S.staticInS"));
|
| + expect("Instance(value = staticInS)", result);
|
| +
|
| + result = cm.findInContext(const Symbol("staticInS"));
|
| + Expect.isFalse(result is InstanceMirror);
|
| + Expect.equals(null, result);
|
| +
|
| + result = cm.findInContext(const Symbol("staticFooInS"));
|
| + Expect.isTrue(result is ClosureMirror);
|
| + expect("Instance(value = staticFooInS)", result.apply(const []));
|
| +
|
| + result = cm.findInContext(const Symbol("C.staticFooInS"));
|
| + Expect.isTrue(result is ClosureMirror);
|
| + expect("Instance(value = staticFooInS)", result.apply(const []));
|
| +
|
| + result = cm.findInContext(const Symbol("C.staticInC"));
|
| + expect("Instance(value = staticInC)", result);
|
| +
|
| + result = cm.findInContext(const Symbol("staticInC"));
|
| + expect("Instance(value = staticInC)", result);
|
| +
|
| + result = cm.findInContext(const Symbol("C.staticFooInC"));
|
| + Expect.isTrue(result is ClosureMirror);
|
| + expect("Instance(value = staticFooInC)", result.apply(const []));
|
| +
|
| + result = cm.findInContext(const Symbol("staticFooInC"));
|
| + Expect.isTrue(result is ClosureMirror);
|
| + expect("Instance(value = staticFooInC)", result.apply(const []));
|
| +
|
| + result = cm.findInContext(const Symbol("instanceInC"));
|
| + expect("Instance(value = instanceInC)", result);
|
| +
|
| + result = cm.findInContext(const Symbol("instanceInS"));
|
| + expect("Instance(value = instanceInS)", result);
|
| +
|
| + result = cm.findInContext(const Symbol("globalVariableInImport1"));
|
| + expect("Instance(value = globalVariableInImport1)", result);
|
| +
|
| + result = cm.findInContext(const Symbol("StaticClass.staticField"));
|
| + expect("Instance(value = staticField)", result);
|
| +
|
| + result = cm.findInContext(
|
| + const Symbol("StaticClass.staticFunctionInStaticClass"));
|
| + Expect.isTrue(result is ClosureMirror);
|
| + expect("Instance(value = staticFunctionInStaticClass)",
|
| + result.apply(const []));
|
| +
|
| + result = cm.findInContext(
|
| + const Symbol("imp1.StaticClass.staticFunctionInStaticClass"));
|
| + Expect.isTrue(result is ClosureMirror);
|
| + expect("Instance(value = staticFunctionInStaticClass)",
|
| + result.apply(const []));
|
| +
|
| + result = cm.findInContext(const Symbol("imp1.globalVariableInImport1"));
|
| + expect("Instance(value = globalVariableInImport1)", result);
|
| +
|
| + result = cm.findInContext(const Symbol("imp2.globalVariableInImport"));
|
| + Expect.isFalse(result is InstanceMirror);
|
| + Expect.equals(null, result);
|
| +
|
| + result = cm.findInContext(const Symbol("imp1.StaticClass.staticField"));
|
| + expect("Instance(value = staticField)", result);
|
| +
|
| + result = cm.findInContext(
|
| + const Symbol("imp1_hidden.StaticClass.staticField"));
|
| + Expect.isFalse(result is InstanceMirror);
|
| + Expect.equals(null, result);
|
| +
|
| + result = cm.findInContext(const Symbol("firstGlobalVariableInImport2"));
|
| + expect("Instance(value = firstGlobalVariableInImport2)", result);
|
| +
|
| + result = cm.findInContext(const Symbol("secondGlobalVariableInImport2"));
|
| + Expect.isFalse(result is InstanceMirror);
|
| + Expect.equals(null, result);
|
| +
|
| + result = cm.findInContext(const Symbol("imp2.secondGlobalVariableInImport2"));
|
| + expect("Instance(value = secondGlobalVariableInImport2)", result);
|
| +
|
| + result = c.bar().findInContext(const Symbol("x"));
|
| + expect("Instance(value = 7)", result);
|
| +
|
| + result = c.bar().findInContext(const Symbol("instanceInC"));
|
| + expect("Instance(value = 11)", result);
|
| +
|
| + result = c.bar().findInContext(const Symbol("y"));
|
| + Expect.isFalse(result is InstanceMirror);
|
| + Expect.equals(null, result);
|
| +}
|
|
|