| Index: dart/tests/lib/mirrors/mirrors_test.dart
|
| diff --git a/dart/tests/lib/mirrors/mirrors_test.dart b/dart/tests/lib/mirrors/mirrors_test.dart
|
| index fd7b0c8362acbfab5628357e62eafd60244044da..24f3607c69f088fe71dc1bd549257bd3facaf46b 100644
|
| --- a/dart/tests/lib/mirrors/mirrors_test.dart
|
| +++ b/dart/tests/lib/mirrors/mirrors_test.dart
|
| @@ -30,13 +30,49 @@ testInvoke(mirrors) {
|
| equals({"a": 'A', "b":'B', "c": instance}));
|
| }
|
|
|
| +testInstanceFieldAccess(mirrors) {
|
| + var instance = new Class();
|
| + var instMirror = reflect(instance);
|
| +
|
| + instMirror.setFieldAsync(const Symbol('field'), 44);
|
| + instMirror.getFieldAsync(const Symbol('field')).then(
|
| + expectAsync1((resultMirror) {
|
| + expect(resultMirror.reflectee, equals(44));
|
| + expect(instance.field, equals(44));
|
| + }));
|
| +}
|
| +
|
| +/// In dart2js, lists, numbers, and other objects are treated special
|
| +/// and their methods are invoked through a techique called interceptors.
|
| +testIntercepted(mirrors) {
|
| + var instance = 1;
|
| + var instMirror = reflect(instance);
|
| +
|
| + expect(instMirror.invoke(const Symbol('toString'), []).reflectee,
|
| + equals('1'));
|
| +
|
| + instance = [];
|
| + instMirror = reflect(instance);
|
| + instMirror.setField(const Symbol('length'), 44);
|
| + var resultMirror = instMirror.getField(const Symbol('length'));
|
| + expect(resultMirror.reflectee, equals(44));
|
| + expect(instance.length, equals(44));
|
| +
|
| + expect(instMirror.invoke(const Symbol('toString'), []).reflectee,
|
| + equals('[null, null, null, null, null, null, null, null, null, null,'
|
| + ' null, null, null, null, null, null, null, null, null, null,'
|
| + ' null, null, null, null, null, null, null, null, null, null,'
|
| + ' null, null, null, null, null, null, null, null, null, null,'
|
| + ' null, null, null, null]'));
|
| +}
|
| +
|
| testFieldAccess(mirrors) {
|
| var instance = new Class();
|
|
|
| var libMirror = mirrors.findLibrary(const Symbol("MirrorsTest")).single;
|
| var classMirror = libMirror.classes[const Symbol("Class")];
|
| var instMirror = reflect(instance);
|
| - var fieldMirror = classMirror.members[new Symbol('field')];
|
| + var fieldMirror = classMirror.members[const Symbol('field')];
|
|
|
| expect(fieldMirror is VariableMirror, isTrue);
|
| expect(fieldMirror.type, equals(mirrors.dynamicType));
|
| @@ -46,22 +82,22 @@ testFieldAccess(mirrors) {
|
| equals([91]));
|
| expect(topLevelField, equals([91]));
|
|
|
| - libMirror.setFieldAsync(new Symbol('topLevelField'), 42);
|
| - var future = libMirror.getFieldAsync(new Symbol('topLevelField'));
|
| + libMirror.setFieldAsync(const Symbol('topLevelField'), 42);
|
| + var future = libMirror.getFieldAsync(const Symbol('topLevelField'));
|
| future.then(expectAsync1((resultMirror) {
|
| expect(resultMirror.reflectee, equals(42));
|
| expect(topLevelField, equals(42));
|
| }));
|
|
|
| - classMirror.setFieldAsync(new Symbol('staticField'), 43);
|
| - future = classMirror.getFieldAsync(new Symbol('staticField'));
|
| + classMirror.setFieldAsync(const Symbol('staticField'), 43);
|
| + future = classMirror.getFieldAsync(const Symbol('staticField'));
|
| future.then(expectAsync1((resultMirror) {
|
| expect(resultMirror.reflectee, equals(43));
|
| expect(Class.staticField, equals(43));
|
| }));
|
|
|
| - instMirror.setFieldAsync(new Symbol('field'), 44);
|
| - future = instMirror.getFieldAsync(new Symbol('field'));
|
| + instMirror.setFieldAsync(const Symbol('field'), 44);
|
| + future = instMirror.getFieldAsync(const Symbol('field'));
|
| future.then(expectAsync1((resultMirror) {
|
| expect(resultMirror.reflectee, equals(44));
|
| expect(instance.field, equals(44));
|
| @@ -87,8 +123,7 @@ testClosureMirrors(mirrors) {
|
| }
|
|
|
| testInvokeConstructor(mirrors) {
|
| - var libMirror = mirrors.findLibrary(const Symbol("MirrorsTest")).single;
|
| - var classMirror = libMirror.classes[const Symbol("Class")];
|
| + var classMirror = reflectClass(Class);
|
|
|
| var instanceMirror = classMirror.newInstance(const Symbol(''),[]);
|
| expect(instanceMirror.reflectee is Class, equals(true));
|
| @@ -99,14 +134,14 @@ testInvokeConstructor(mirrors) {
|
| expect(instanceMirror.reflectee is Class, equals(true));
|
| expect(instanceMirror.reflectee.field, equals(45));
|
|
|
| - var future = classMirror.newInstanceAsync(new Symbol(''), []);
|
| + var future = classMirror.newInstanceAsync(const Symbol(''), []);
|
| future.then(expectAsync1((resultMirror) {
|
| var instance = resultMirror.reflectee;
|
| expect(instance is Class, equals(true));
|
| expect(instance.field, equals("default value"));
|
| }));
|
|
|
| - future = classMirror.newInstanceAsync(new Symbol('withInitialValue'), [45]);
|
| + future = classMirror.newInstanceAsync(const Symbol('withInitialValue'), [45]);
|
| future.then(expectAsync1((resultMirror) {
|
| var instance = resultMirror.reflectee;
|
| expect(instance is Class, equals(true));
|
| @@ -163,9 +198,12 @@ testLibraryUri(var value, bool check(Uri)) {
|
| expect(check(valueLibrary.uri), isTrue);
|
| }
|
|
|
| -main() {
|
| +mainWithArgument({bool isDart2js}) {
|
| var mirrors = currentMirrorSystem();
|
| test("Test reflective method invocation", () { testInvoke(mirrors); });
|
| + test("Test instance field access", () { testInstanceFieldAccess(mirrors); });
|
| + test('Test intercepted objects', () { testIntercepted(mirrors); });
|
| + if (isDart2js) return;
|
| test("Test field access", () { testFieldAccess(mirrors); });
|
| test("Test closure mirrors", () { testClosureMirrors(mirrors); });
|
| test("Test invoke constructor", () { testInvokeConstructor(mirrors); });
|
| @@ -179,3 +217,7 @@ main() {
|
| testLibraryUri("test", (Uri uri) => uri == Uri.parse('dart:core'));
|
| });
|
| }
|
| +
|
| +main() {
|
| + mainWithArgument(isDart2js: false);
|
| +}
|
|
|