OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 import '../../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart'
; | 5 import '../../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart'
; |
6 import '../../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.
dart'; | 6 import '../../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.
dart'; |
7 | 7 |
8 import 'dart:io'; | 8 import 'dart:io'; |
9 | 9 |
10 int count(Iterable iterable) { | 10 int count(Iterable iterable) { |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 "Constructors map is unempty"); | 157 "Constructors map is unempty"); |
158 | 158 |
159 // TODO(johnniwinther): Add thorough tests of [ClassMirror.functions], | 159 // TODO(johnniwinther): Add thorough tests of [ClassMirror.functions], |
160 // [ClassMirror.getters], [ClassMirror.setters], [ClassMirror.members], | 160 // [ClassMirror.getters], [ClassMirror.setters], [ClassMirror.members], |
161 // and [ClassMirror.variable]. | 161 // and [ClassMirror.variable]. |
162 Expect.isNotNull(fooClass.functions); | 162 Expect.isNotNull(fooClass.functions); |
163 Expect.isNotNull(fooClass.members); | 163 Expect.isNotNull(fooClass.members); |
164 Expect.isNotNull(fooClass.getters); | 164 Expect.isNotNull(fooClass.getters); |
165 Expect.isNotNull(fooClass.setters); | 165 Expect.isNotNull(fooClass.setters); |
166 Expect.isNotNull(fooClass.variables); | 166 Expect.isNotNull(fooClass.variables); |
| 167 |
| 168 ////////////////////////////////////////////////////////////////////////////// |
| 169 // Metadata tests |
| 170 ////////////////////////////////////////////////////////////////////////////// |
| 171 |
| 172 var metadata = fooClass.metadata; |
| 173 Expect.isNotNull(metadata); |
| 174 Expect.equals(10, metadata.length); |
| 175 |
| 176 // @Metadata // This is intentionally the type literal. |
| 177 var metadata0 = metadata[0]; |
| 178 Expect.isTrue(metadata0 is InstanceMirror); |
| 179 Expect.isFalse(metadata0.hasReflectee); |
| 180 Expect.throws(() => metadata0.reflectee, (_) => true); |
| 181 Expect.isTrue(metadata0 is TypeInstanceMirror); |
| 182 var metadataType = metadata0.representedType; |
| 183 Expect.isNotNull(metadataType); |
| 184 Expect.stringEquals('Metadata', metadataType.simpleName); |
| 185 |
| 186 // @Metadata(null) |
| 187 var metadata1 = metadata[1]; |
| 188 Expect.isTrue(metadata1 is InstanceMirror); |
| 189 Expect.isFalse(metadata1.hasReflectee); |
| 190 Expect.throws(() => metadata1.reflectee, (_) => true); |
| 191 Expect.equals(metadataType.originalDeclaration, metadata1.type); |
| 192 metadata1.getField('data').then((InstanceMirror data) { |
| 193 Expect.isNotNull(data); |
| 194 Expect.isTrue(data.hasReflectee); |
| 195 Expect.isNull(data.reflectee); |
| 196 }); |
| 197 |
| 198 // @Metadata(true) |
| 199 var metadata2 = metadata[2]; |
| 200 Expect.isTrue(metadata2 is InstanceMirror); |
| 201 Expect.isFalse(metadata2.hasReflectee); |
| 202 Expect.throws(() => metadata2.reflectee, (_) => true); |
| 203 Expect.equals(metadataType.originalDeclaration, metadata2.type); |
| 204 metadata2.getField('data').then((InstanceMirror data) { |
| 205 Expect.isNotNull(data); |
| 206 Expect.isTrue(data.hasReflectee); |
| 207 Expect.isTrue(data.reflectee); |
| 208 }); |
| 209 |
| 210 // @Metadata(false) |
| 211 var metadata3 = metadata[3]; |
| 212 Expect.isTrue(metadata3 is InstanceMirror); |
| 213 Expect.isFalse(metadata3.hasReflectee); |
| 214 Expect.throws(() => metadata3.reflectee, (_) => true); |
| 215 Expect.equals(metadataType.originalDeclaration, metadata3.type); |
| 216 metadata3.getField('data').then((InstanceMirror data) { |
| 217 Expect.isNotNull(data); |
| 218 Expect.isTrue(data.hasReflectee); |
| 219 Expect.isFalse(data.reflectee); |
| 220 }); |
| 221 |
| 222 // @Metadata(0) |
| 223 var metadata4 = metadata[4]; |
| 224 Expect.isTrue(metadata4 is InstanceMirror); |
| 225 Expect.isFalse(metadata4.hasReflectee); |
| 226 Expect.throws(() => metadata4.reflectee, (_) => true); |
| 227 Expect.equals(metadataType.originalDeclaration, metadata4.type); |
| 228 metadata4.getField('data').then((InstanceMirror data) { |
| 229 Expect.isNotNull(data); |
| 230 Expect.isTrue(data.hasReflectee); |
| 231 Expect.equals(0, data.reflectee); |
| 232 }); |
| 233 |
| 234 // @Metadata(1.5) |
| 235 var metadata5 = metadata[5]; |
| 236 Expect.isTrue(metadata5 is InstanceMirror); |
| 237 Expect.isFalse(metadata5.hasReflectee); |
| 238 Expect.throws(() => metadata5.reflectee, (_) => true); |
| 239 Expect.equals(metadataType.originalDeclaration, metadata5.type); |
| 240 metadata5.getField('data').then((InstanceMirror data) { |
| 241 Expect.isNotNull(data); |
| 242 Expect.isTrue(data.hasReflectee); |
| 243 Expect.equals(1.5, data.reflectee); |
| 244 }); |
| 245 |
| 246 // @Metadata("Foo") |
| 247 var metadata6 = metadata[6]; |
| 248 Expect.isTrue(metadata6 is InstanceMirror); |
| 249 Expect.isFalse(metadata6.hasReflectee); |
| 250 Expect.throws(() => metadata6.reflectee, (_) => true); |
| 251 Expect.equals(metadataType.originalDeclaration, metadata6.type); |
| 252 metadata6.getField('data').then((InstanceMirror data) { |
| 253 Expect.isNotNull(data); |
| 254 Expect.isTrue(data.hasReflectee); |
| 255 Expect.stringEquals("Foo", data.reflectee); |
| 256 }); |
| 257 |
| 258 // @Metadata(const ["Foo"]) |
| 259 var metadata7 = metadata[7]; |
| 260 Expect.isTrue(metadata7 is InstanceMirror); |
| 261 Expect.isFalse(metadata7.hasReflectee); |
| 262 Expect.throws(() => metadata7.reflectee, (_) => true); |
| 263 Expect.equals(metadataType.originalDeclaration, metadata7.type); |
| 264 metadata7.getField('data').then((InstanceMirror data) { |
| 265 Expect.isTrue(data is ListInstanceMirror); |
| 266 Expect.isFalse(data.hasReflectee); |
| 267 Expect.throws(() => data.reflectee, (_) => true); |
| 268 ListInstanceMirror listData = data; |
| 269 Expect.equals(1, listData.length); |
| 270 listData[0].then((InstanceMirror element) { |
| 271 Expect.isNotNull(element); |
| 272 Expect.isTrue(element.hasReflectee); |
| 273 Expect.stringEquals("Foo", element.reflectee); |
| 274 }); |
| 275 }); |
| 276 |
| 277 // @Metadata(const {'foo':"Foo"}) |
| 278 var metadata8 = metadata[8]; |
| 279 Expect.isTrue(metadata8 is InstanceMirror); |
| 280 Expect.isFalse(metadata8.hasReflectee); |
| 281 Expect.throws(() => metadata8.reflectee, (_) => true); |
| 282 Expect.equals(metadataType.originalDeclaration, metadata8.type); |
| 283 metadata8.getField('data').then((InstanceMirror data) { |
| 284 Expect.isTrue(data is MapInstanceMirror); |
| 285 Expect.isFalse(data.hasReflectee); |
| 286 Expect.throws(() => data.reflectee, (_) => true); |
| 287 MapInstanceMirror mapData = data; |
| 288 Expect.equals(1, mapData.length); |
| 289 Expect.stringEquals('foo', mapData.keys.iterator().next()); |
| 290 mapData['foo'].then((InstanceMirror element) { |
| 291 Expect.isNotNull(element); |
| 292 Expect.isTrue(element.hasReflectee); |
| 293 Expect.stringEquals("Foo", element.reflectee); |
| 294 }); |
| 295 Expect.isNull(mapData['bar']); |
| 296 }); |
| 297 |
| 298 // @metadata |
| 299 var metadata9 = metadata[9]; |
| 300 Expect.isTrue(metadata9 is InstanceMirror); |
| 301 Expect.isFalse(metadata9.hasReflectee); |
| 302 Expect.throws(() => metadata9.reflectee, (_) => true); |
| 303 Expect.equals(metadataType.originalDeclaration, metadata9.type); |
| 304 metadata9.getField('data').then((InstanceMirror data) { |
| 305 Expect.isNotNull(data); |
| 306 Expect.isTrue(data.hasReflectee); |
| 307 Expect.isNull(data.reflectee); |
| 308 }); |
167 } | 309 } |
168 | 310 |
169 // Testing abstract class Bar: | 311 // Testing abstract class Bar: |
170 // | 312 // |
171 // abstract class Bar<E> { | 313 // abstract class Bar<E> { |
172 // | 314 // |
173 // } | 315 // } |
174 void testBar(MirrorSystem system, LibraryMirror helperLibrary, | 316 void testBar(MirrorSystem system, LibraryMirror helperLibrary, |
175 Map<String,TypeMirror> classes) { | 317 Map<String,TypeMirror> classes) { |
176 var barClass = classes["Bar"]; | 318 var barClass = classes["Bar"]; |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 | 380 |
239 var barInterfaceMembers = barClass.members; | 381 var barInterfaceMembers = barClass.members; |
240 Expect.isNotNull(barInterfaceMembers, "Declared members map is null"); | 382 Expect.isNotNull(barInterfaceMembers, "Declared members map is null"); |
241 Expect.isTrue(barInterfaceMembers.isEmpty, | 383 Expect.isTrue(barInterfaceMembers.isEmpty, |
242 "Declared members map is unempty"); | 384 "Declared members map is unempty"); |
243 | 385 |
244 var barInterfaceConstructors = barClass.constructors; | 386 var barInterfaceConstructors = barClass.constructors; |
245 Expect.isNotNull(barInterfaceConstructors, "Constructors map is null"); | 387 Expect.isNotNull(barInterfaceConstructors, "Constructors map is null"); |
246 Expect.isTrue(barInterfaceConstructors.isEmpty, | 388 Expect.isTrue(barInterfaceConstructors.isEmpty, |
247 "Constructors map is unempty"); | 389 "Constructors map is unempty"); |
| 390 |
| 391 var metadata = barClass.metadata; |
| 392 Expect.isNotNull(metadata); |
| 393 Expect.equals(0, metadata.length); |
248 } | 394 } |
249 | 395 |
250 // Testing class Baz: | 396 // Testing class Baz: |
251 // | 397 // |
252 // class Baz<E,F extends Foo> implements Bar<E> { | 398 // class Baz<E,F extends Foo> implements Bar<E> { |
253 // Baz(); | 399 // Baz(); |
254 // const Baz.named(); | 400 // const Baz.named(); |
255 // factory Baz.factory() => new Baz<E,F>(); | 401 // factory Baz.factory() => new Baz<E,F>(); |
256 // | 402 // |
257 // static method1(e) {} | 403 // static method1(e) {} |
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
717 Expect.isFalse(bazClassFactoryConstructor.isRedirectingConstructor); | 863 Expect.isFalse(bazClassFactoryConstructor.isRedirectingConstructor); |
718 Expect.isTrue(bazClassFactoryConstructor.isFactoryConstructor); | 864 Expect.isTrue(bazClassFactoryConstructor.isFactoryConstructor); |
719 Expect.stringEquals('Baz.factory', bazClassFactoryConstructor.simpleName); | 865 Expect.stringEquals('Baz.factory', bazClassFactoryConstructor.simpleName); |
720 Expect.stringEquals('Baz.factory', bazClassFactoryConstructor.displayName); | 866 Expect.stringEquals('Baz.factory', bazClassFactoryConstructor.displayName); |
721 Expect.stringEquals('mirrors_helper.Baz.Baz.factory', | 867 Expect.stringEquals('mirrors_helper.Baz.Baz.factory', |
722 bazClassFactoryConstructor.qualifiedName); | 868 bazClassFactoryConstructor.qualifiedName); |
723 Expect.stringEquals('factory', bazClassFactoryConstructor.constructorName); | 869 Expect.stringEquals('factory', bazClassFactoryConstructor.constructorName); |
724 | 870 |
725 // TODO(johnniwinther): Add more tests of constructors. | 871 // TODO(johnniwinther): Add more tests of constructors. |
726 // TODO(johnniwinther): Add a test for unnamed factory methods. | 872 // TODO(johnniwinther): Add a test for unnamed factory methods. |
| 873 |
| 874 var metadata = bazClass.metadata; |
| 875 Expect.isNotNull(metadata); |
| 876 Expect.equals(0, metadata.length); |
727 } | 877 } |
728 | 878 |
729 // class _PrivateClass { | 879 // class _PrivateClass { |
730 // var _privateField; | 880 // var _privateField; |
731 // get _privateGetter => _privateField; | 881 // get _privateGetter => _privateField; |
732 // void set _privateSetter(value) => _privateField = value; | 882 // void set _privateSetter(value) => _privateField = value; |
733 // void _privateMethod() {} | 883 // void _privateMethod() {} |
734 // _PrivateClass._privateConstructor(); | 884 // _PrivateClass._privateConstructor(); |
735 // factory _PrivateClass._privateFactoryConstructor() => new _PrivateClass(); | 885 // factory _PrivateClass._privateFactoryConstructor() => new _PrivateClass(); |
736 // } | 886 // } |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
782 var privateFactoryConstructor = | 932 var privateFactoryConstructor = |
783 privateClass.members['_PrivateClass._privateFactoryConstructor']; | 933 privateClass.members['_PrivateClass._privateFactoryConstructor']; |
784 Expect.isNotNull(privateFactoryConstructor); | 934 Expect.isNotNull(privateFactoryConstructor); |
785 Expect.isTrue(privateFactoryConstructor is MethodMirror); | 935 Expect.isTrue(privateFactoryConstructor is MethodMirror); |
786 Expect.isTrue(privateFactoryConstructor.isConstructor); | 936 Expect.isTrue(privateFactoryConstructor.isConstructor); |
787 Expect.isTrue(privateFactoryConstructor.isPrivate); | 937 Expect.isTrue(privateFactoryConstructor.isPrivate); |
788 Expect.isFalse(privateFactoryConstructor.isConstConstructor); | 938 Expect.isFalse(privateFactoryConstructor.isConstConstructor); |
789 Expect.isFalse(privateFactoryConstructor.isRedirectingConstructor); | 939 Expect.isFalse(privateFactoryConstructor.isRedirectingConstructor); |
790 Expect.isFalse(privateFactoryConstructor.isGenerativeConstructor); | 940 Expect.isFalse(privateFactoryConstructor.isGenerativeConstructor); |
791 Expect.isTrue(privateFactoryConstructor.isFactoryConstructor); | 941 Expect.isTrue(privateFactoryConstructor.isFactoryConstructor); |
| 942 |
| 943 var metadata = privateClass.metadata; |
| 944 Expect.isNotNull(metadata); |
| 945 Expect.equals(0, metadata.length); |
792 } | 946 } |
OLD | NEW |