| // Copyright (c) 2014, 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. |
| |
| library vm_references_test; |
| |
| import 'dart:mirrors'; |
| import 'package:observatory/service_io.dart'; |
| import 'package:unittest/unittest.dart'; |
| import 'test_helper.dart'; |
| |
| class Foo { } |
| |
| Foo foo; |
| var /*MirrorReference*/ ref; |
| |
| void script() { |
| foo = new Foo(); |
| ClassMirror fooClassMirror = reflectClass(Foo); |
| InstanceMirror fooClassMirrorMirror = reflect(fooClassMirror); |
| LibraryMirror libmirrors = fooClassMirrorMirror.type.owner; |
| ref = reflect(fooClassMirror).getField(MirrorSystem.getSymbol('_reflectee', libmirrors)).reflectee; |
| } |
| |
| var tests = [ |
| |
| (Isolate isolate) => |
| isolate.rootLib.load().then((Library lib) { |
| Field fooField = lib.variables.singleWhere((v) => v.name == 'foo'); |
| Instance foo = fooField.value; |
| Field refField = lib.variables.singleWhere((v) => v.name == 'ref'); |
| Instance ref = refField.value; |
| |
| expect(foo.isMirrorReference, isFalse); |
| expect(ref.isMirrorReference, isTrue); |
| expect(ref.referent, isNull); |
| return ref.load().then((Instance loadedRef) { |
| expect(loadedRef.referent, isNotNull); |
| expect(loadedRef.referent.name, equals('Foo')); |
| expect(loadedRef.referent, equals(foo.clazz)); |
| }); |
| }), |
| |
| ]; |
| |
| main(args) => runIsolateTests(args, tests, testeeBefore: script); |