| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library MirrorsTest; | 5 library MirrorsTest; |
| 6 | 6 |
| 7 import 'dart:mirrors'; | 7 import 'dart:mirrors'; |
| 8 | 8 |
| 9 import '../../light_unittest.dart'; | 9 import '../../light_unittest.dart'; |
| 10 | 10 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 | 56 |
| 57 var libMirror = classMirror.owner; | 57 var libMirror = classMirror.owner; |
| 58 expect(libMirror.invoke(#u, ['A', 'B', instance]).reflectee, | 58 expect(libMirror.invoke(#u, ['A', 'B', instance]).reflectee, |
| 59 equals({"a": 'A', "b":'B', "c": instance})); | 59 equals({"a": 'A', "b":'B', "c": instance})); |
| 60 expect(() => libMirror.invoke(#notDefined, []).reflectee, | 60 expect(() => libMirror.invoke(#notDefined, []).reflectee, |
| 61 throws); | 61 throws); |
| 62 expect(() => libMirror.invoke(#u, []).reflectee, | 62 expect(() => libMirror.invoke(#u, []).reflectee, |
| 63 throws); // Wrong arity. | 63 throws); // Wrong arity. |
| 64 } | 64 } |
| 65 | 65 |
| 66 testInstanceFieldAccess(mirrors) { | |
| 67 var instance = new Class(); | |
| 68 var instMirror = reflect(instance); | |
| 69 | |
| 70 instMirror.setFieldAsync(#field, 44); | |
| 71 instMirror.getFieldAsync(#field).then( | |
| 72 expectAsync1((resultMirror) { | |
| 73 expect(resultMirror.reflectee, equals(44)); | |
| 74 expect(instance.field, equals(44)); | |
| 75 })); | |
| 76 } | |
| 77 | |
| 78 /// In dart2js, lists, numbers, and other objects are treated special | 66 /// In dart2js, lists, numbers, and other objects are treated special |
| 79 /// and their methods are invoked through a techique called interceptors. | 67 /// and their methods are invoked through a techique called interceptors. |
| 80 testIntercepted(mirrors) { | 68 testIntercepted(mirrors) { |
| 81 var instance = 1; | 69 var instance = 1; |
| 82 var instMirror = reflect(instance); | 70 var instMirror = reflect(instance); |
| 83 | 71 |
| 84 expect(instMirror.invoke(#toString, []).reflectee, | 72 expect(instMirror.invoke(#toString, []).reflectee, |
| 85 equals('1')); | 73 equals('1')); |
| 86 | 74 |
| 87 instance = []; | 75 instance = []; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 108 var fieldMirror = classMirror.members[#field]; | 96 var fieldMirror = classMirror.members[#field]; |
| 109 var future; | 97 var future; |
| 110 | 98 |
| 111 expect(fieldMirror is VariableMirror, isTrue); | 99 expect(fieldMirror is VariableMirror, isTrue); |
| 112 expect(fieldMirror.type, equals(mirrors.dynamicType)); | 100 expect(fieldMirror.type, equals(mirrors.dynamicType)); |
| 113 | 101 |
| 114 libMirror.setField(#topLevelField, [91]); | 102 libMirror.setField(#topLevelField, [91]); |
| 115 expect(libMirror.getField(#topLevelField).reflectee, | 103 expect(libMirror.getField(#topLevelField).reflectee, |
| 116 equals([91])); | 104 equals([91])); |
| 117 expect(topLevelField, equals([91])); | 105 expect(topLevelField, equals([91])); |
| 118 | |
| 119 libMirror.setFieldAsync(#topLevelField, 42); | |
| 120 future = libMirror.getFieldAsync(#topLevelField); | |
| 121 future.then(expectAsync1((resultMirror) { | |
| 122 expect(resultMirror.reflectee, equals(42)); | |
| 123 expect(topLevelField, equals(42)); | |
| 124 })); | |
| 125 | |
| 126 classMirror.setFieldAsync(#staticField, 43); | |
| 127 future = classMirror.getFieldAsync(#staticField); | |
| 128 future.then(expectAsync1((resultMirror) { | |
| 129 expect(resultMirror.reflectee, equals(43)); | |
| 130 expect(Class.staticField, equals(43)); | |
| 131 })); | |
| 132 | |
| 133 instMirror.setFieldAsync(#field, 44); | |
| 134 future = instMirror.getFieldAsync(#field); | |
| 135 future.then(expectAsync1((resultMirror) { | |
| 136 expect(resultMirror.reflectee, equals(44)); | |
| 137 expect(instance.field, equals(44)); | |
| 138 })); | |
| 139 } | 106 } |
| 140 | 107 |
| 141 testClosureMirrors(mirrors) { | 108 testClosureMirrors(mirrors) { |
| 142 // TODO(ahe): Test optional parameters (named or not). | 109 // TODO(ahe): Test optional parameters (named or not). |
| 143 var closure = (x, y, z) { return x + y + z; }; | 110 var closure = (x, y, z) { return x + y + z; }; |
| 144 | 111 |
| 145 var mirror = reflect(closure); | 112 var mirror = reflect(closure); |
| 146 expect(mirror is ClosureMirror, equals(true)); | 113 expect(mirror is ClosureMirror, equals(true)); |
| 147 | 114 |
| 148 var funcMirror = mirror.function; | 115 var funcMirror = mirror.function; |
| 149 expect(funcMirror is MethodMirror, equals(true)); | 116 expect(funcMirror is MethodMirror, equals(true)); |
| 150 expect(funcMirror.parameters.length, equals(3)); | 117 expect(funcMirror.parameters.length, equals(3)); |
| 151 | 118 |
| 152 expect(mirror.apply([7, 8, 9]).reflectee, equals(24)); | 119 expect(mirror.apply([7, 8, 9]).reflectee, equals(24)); |
| 153 | |
| 154 var future = mirror.applyAsync([2, 4, 8]); | |
| 155 future.then(expectAsync1((resultMirror) { | |
| 156 expect(resultMirror.reflectee, equals(14)); | |
| 157 })); | |
| 158 } | 120 } |
| 159 | 121 |
| 160 testInvokeConstructor(mirrors) { | 122 testInvokeConstructor(mirrors) { |
| 161 var classMirror = reflectClass(Class); | 123 var classMirror = reflectClass(Class); |
| 162 | 124 |
| 163 var instanceMirror = classMirror.newInstance(const Symbol(''),[]); | 125 var instanceMirror = classMirror.newInstance(const Symbol(''),[]); |
| 164 expect(instanceMirror.reflectee is Class, equals(true)); | 126 expect(instanceMirror.reflectee is Class, equals(true)); |
| 165 expect(instanceMirror.reflectee.field, equals("default value")); | 127 expect(instanceMirror.reflectee.field, equals("default value")); |
| 166 | 128 |
| 167 instanceMirror = classMirror.newInstance(#withInitialValue, | 129 instanceMirror = classMirror.newInstance(#withInitialValue, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 182 | 144 |
| 183 instanceMirror = classMirror.newInstance(#faktory, | 145 instanceMirror = classMirror.newInstance(#faktory, |
| 184 [9]); | 146 [9]); |
| 185 expect(instanceMirror.reflectee is Class, equals(true)); | 147 expect(instanceMirror.reflectee is Class, equals(true)); |
| 186 expect(instanceMirror.reflectee.field, equals(27)); | 148 expect(instanceMirror.reflectee.field, equals(27)); |
| 187 | 149 |
| 188 instanceMirror = classMirror.newInstance(#redirectingFactory, | 150 instanceMirror = classMirror.newInstance(#redirectingFactory, |
| 189 [10]); | 151 [10]); |
| 190 expect(instanceMirror.reflectee is Class, equals(true)); | 152 expect(instanceMirror.reflectee is Class, equals(true)); |
| 191 expect(instanceMirror.reflectee.field, equals(30)); | 153 expect(instanceMirror.reflectee.field, equals(30)); |
| 192 | |
| 193 | |
| 194 var future = classMirror.newInstanceAsync(const Symbol(''), []); | |
| 195 future.then(expectAsync1((resultMirror) { | |
| 196 var instance = resultMirror.reflectee; | |
| 197 expect(instance is Class, equals(true)); | |
| 198 expect(instance.field, equals("default value")); | |
| 199 })); | |
| 200 | |
| 201 future = classMirror.newInstanceAsync(#withInitialValue, [45]); | |
| 202 future.then(expectAsync1((resultMirror) { | |
| 203 var instance = resultMirror.reflectee; | |
| 204 expect(instance is Class, equals(true)); | |
| 205 expect(instance.field, equals(45)); | |
| 206 })); | |
| 207 } | 154 } |
| 208 | 155 |
| 209 testReflectClass(mirrors) { | 156 testReflectClass(mirrors) { |
| 210 var classMirror = reflectClass(Class); | 157 var classMirror = reflectClass(Class); |
| 211 expect(classMirror is ClassMirror, equals(true)); | 158 expect(classMirror is ClassMirror, equals(true)); |
| 212 var symbolClassMirror = reflectClass(Symbol); | 159 var symbolClassMirror = reflectClass(Symbol); |
| 213 var symbolMirror = symbolClassMirror.newInstance(const Symbol(''), | 160 var symbolMirror = symbolClassMirror.newInstance(const Symbol(''), |
| 214 ['withInitialValue']); | 161 ['withInitialValue']); |
| 215 var objectMirror = classMirror.newInstance(symbolMirror.reflectee,[1234]); | 162 var objectMirror = classMirror.newInstance(symbolMirror.reflectee,[1234]); |
| 216 expect(objectMirror.reflectee is Class, equals(true)); | 163 expect(objectMirror.reflectee is Class, equals(true)); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 testLibraryUri(var value, bool check(Uri)) { | 205 testLibraryUri(var value, bool check(Uri)) { |
| 259 var valueMirror = reflect(value); | 206 var valueMirror = reflect(value); |
| 260 ClassMirror valueClass = valueMirror.type; | 207 ClassMirror valueClass = valueMirror.type; |
| 261 LibraryMirror valueLibrary = valueClass.owner; | 208 LibraryMirror valueLibrary = valueClass.owner; |
| 262 expect(check(valueLibrary.uri), isTrue); | 209 expect(check(valueLibrary.uri), isTrue); |
| 263 } | 210 } |
| 264 | 211 |
| 265 main() { | 212 main() { |
| 266 var mirrors = currentMirrorSystem(); | 213 var mirrors = currentMirrorSystem(); |
| 267 test("Test reflective method invocation", () { testInvoke(mirrors); }); | 214 test("Test reflective method invocation", () { testInvoke(mirrors); }); |
| 268 test("Test instance field access", () { testInstanceFieldAccess(mirrors); }); | |
| 269 test('Test intercepted objects', () { testIntercepted(mirrors); }); | 215 test('Test intercepted objects', () { testIntercepted(mirrors); }); |
| 270 test("Test field access", () { testFieldAccess(mirrors); }); | 216 test("Test field access", () { testFieldAccess(mirrors); }); |
| 271 test("Test closure mirrors", () { testClosureMirrors(mirrors); }); | 217 test("Test closure mirrors", () { testClosureMirrors(mirrors); }); |
| 272 test("Test invoke constructor", () { testInvokeConstructor(mirrors); }); | 218 test("Test invoke constructor", () { testInvokeConstructor(mirrors); }); |
| 273 test("Test current library uri", () { | 219 test("Test current library uri", () { |
| 274 testLibraryUri(new Class(), | 220 testLibraryUri(new Class(), |
| 275 (Uri uri) => uri.path.endsWith('/mirrors_test.dart')); | 221 (Uri uri) => uri.path.endsWith('/mirrors_test.dart')); |
| 276 }); | 222 }); |
| 277 test("Test dart library uri", () { | 223 test("Test dart library uri", () { |
| 278 testLibraryUri("test", (Uri uri) => uri == Uri.parse('dart:core')); | 224 testLibraryUri("test", (Uri uri) => uri == Uri.parse('dart:core')); |
| 279 }); | 225 }); |
| 280 test("Test simple and qualifiedName", () { testNames(mirrors); }); | 226 test("Test simple and qualifiedName", () { testNames(mirrors); }); |
| 281 test("Test reflect type", () { testReflectClass(mirrors); }); | 227 test("Test reflect type", () { testReflectClass(mirrors); }); |
| 282 } | 228 } |
| OLD | NEW |