Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2040)

Unified Diff: dart/tests/lib/mirrors/mirrors_test.dart

Issue 14646031: Implement invoke, setField, and getField (unminified). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Make expando private Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
Johnni Winther 2013/05/08 08:22:08 How unorthodox to use 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);
+}

Powered by Google App Engine
This is Rietveld 408576698