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