| OLD | NEW |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 // Partial test that the closed world computed from [WorldImpact]s derived from | 5 // Partial test that the closed world computed from [WorldImpact]s derived from |
| 6 // kernel is equivalent to the original computed from resolution. | 6 // kernel is equivalent to the original computed from resolution. |
| 7 library dart2js.kernel.closed_world2_test; | 7 library dart2js.kernel.closed_world2_test; |
| 8 | 8 |
| 9 import 'dart:async'; | 9 import 'dart:async'; |
| 10 | 10 |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse, | 264 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse, |
| 265 usage2.isIsolateInUse); | 265 usage2.isIsolateInUse); |
| 266 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed, | 266 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed, |
| 267 usage2.isFunctionApplyUsed); | 267 usage2.isFunctionApplyUsed); |
| 268 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed, | 268 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed, |
| 269 usage2.isNoSuchMethodUsed); | 269 usage2.isNoSuchMethodUsed); |
| 270 } | 270 } |
| 271 | 271 |
| 272 checkElementEnvironment(ElementEnvironment env1, ElementEnvironment env2, | 272 checkElementEnvironment(ElementEnvironment env1, ElementEnvironment env2, |
| 273 KernelEquivalence equivalence) { | 273 KernelEquivalence equivalence) { |
| 274 checkMembers(MemberEntity member1, MemberEntity member2) { |
| 275 Expect.equals(env1.isDeferredLoadLibraryGetter(member1), |
| 276 env2.isDeferredLoadLibraryGetter(member2)); |
| 277 |
| 278 checkListEquivalence( |
| 279 member1, |
| 280 member2, |
| 281 'metadata', |
| 282 env1.getMemberMetadata(member1), |
| 283 env2.getMemberMetadata(member2), |
| 284 equivalence.defaultStrategy.testConstantValues); |
| 285 } |
| 286 |
| 274 checkSetEquivalence(env1, env2, 'libraries', env1.libraries, env2.libraries, | 287 checkSetEquivalence(env1, env2, 'libraries', env1.libraries, env2.libraries, |
| 275 equivalence.entityEquivalence, | 288 equivalence.entityEquivalence, |
| 276 onSameElement: (LibraryEntity lib1, LibraryEntity lib2) { | 289 onSameElement: (LibraryEntity lib1, LibraryEntity lib2) { |
| 290 Expect.identical(lib1, env1.lookupLibrary(lib1.canonicalUri)); |
| 291 Expect.identical(lib2, env2.lookupLibrary(lib2.canonicalUri)); |
| 292 |
| 277 List<ClassEntity> classes2 = <ClassEntity>[]; | 293 List<ClassEntity> classes2 = <ClassEntity>[]; |
| 278 env1.forEachClass(lib1, (ClassEntity cls1) { | 294 env1.forEachClass(lib1, (ClassEntity cls1) { |
| 295 Expect.identical(cls1, env1.lookupClass(lib1, cls1.name)); |
| 296 |
| 279 String className = cls1.name; | 297 String className = cls1.name; |
| 280 ClassEntity cls2 = env2.lookupClass(lib2, className); | 298 ClassEntity cls2 = env2.lookupClass(lib2, className); |
| 281 Expect.isNotNull(cls2, 'Missing class $className in $lib2'); | 299 Expect.isNotNull(cls2, 'Missing class $className in $lib2'); |
| 300 Expect.identical(cls2, env2.lookupClass(lib2, cls2.name)); |
| 301 |
| 282 check(lib1, lib2, 'class:${className}', cls1, cls2, | 302 check(lib1, lib2, 'class:${className}', cls1, cls2, |
| 283 equivalence.entityEquivalence); | 303 equivalence.entityEquivalence); |
| 284 | 304 |
| 285 check(cls1, cls2, 'superclass', env1.getSuperClass(cls1), | 305 Expect.equals(env1.isGenericClass(cls1), env2.isGenericClass(cls2)); |
| 286 env2.getSuperClass(cls2), equivalence.entityEquivalence); | 306 |
| 307 check( |
| 308 cls1, |
| 309 cls2, |
| 310 'superclass', |
| 311 env1.getSuperClass(cls1, skipUnnamedMixinApplications: false), |
| 312 env2.getSuperClass(cls2, skipUnnamedMixinApplications: false), |
| 313 equivalence.entityEquivalence); |
| 314 check( |
| 315 cls1, |
| 316 cls2, |
| 317 'superclass', |
| 318 env1.getSuperClass(cls1, skipUnnamedMixinApplications: true), |
| 319 env2.getSuperClass(cls2, skipUnnamedMixinApplications: true), |
| 320 equivalence.entityEquivalence); |
| 321 |
| 322 List<InterfaceType> supertypes1 = <InterfaceType>[]; |
| 323 env1.forEachSupertype(cls1, supertypes1.add); |
| 324 List<InterfaceType> supertypes2 = <InterfaceType>[]; |
| 325 env2.forEachSupertype(cls2, supertypes1.add); |
| 326 equivalence.defaultStrategy |
| 327 .testTypeLists(cls1, cls2, 'supertypes', supertypes1, supertypes2); |
| 328 |
| 329 List<ClassEntity> mixins1 = <ClassEntity>[]; |
| 330 env1.forEachMixin(cls1, mixins1.add); |
| 331 List<ClassEntity> mixins2 = <ClassEntity>[]; |
| 332 env2.forEachMixin(cls2, mixins2.add); |
| 333 equivalence.defaultStrategy.testLists(cls1, cls2, 'mixins', mixins1, |
| 334 mixins2, equivalence.entityEquivalence); |
| 287 | 335 |
| 288 Map<MemberEntity, ClassEntity> members1 = <MemberEntity, ClassEntity>{}; | 336 Map<MemberEntity, ClassEntity> members1 = <MemberEntity, ClassEntity>{}; |
| 289 Map<MemberEntity, ClassEntity> members2 = <MemberEntity, ClassEntity>{}; | 337 Map<MemberEntity, ClassEntity> members2 = <MemberEntity, ClassEntity>{}; |
| 290 env1.forEachClassMember(cls1, | 338 env1.forEachClassMember(cls1, |
| 291 (ClassEntity declarer1, MemberEntity member1) { | 339 (ClassEntity declarer1, MemberEntity member1) { |
| 340 if (cls1 == declarer1) { |
| 341 Expect.identical( |
| 342 member1, |
| 343 env1.lookupClassMember(cls1, member1.name, |
| 344 setter: member1.isSetter)); |
| 345 } |
| 292 members1[member1] = declarer1; | 346 members1[member1] = declarer1; |
| 293 }); | 347 }); |
| 294 env2.forEachClassMember(cls2, | 348 env2.forEachClassMember(cls2, |
| 295 (ClassEntity declarer2, MemberEntity member2) { | 349 (ClassEntity declarer2, MemberEntity member2) { |
| 350 if (cls2 == declarer2) { |
| 351 Expect.identical( |
| 352 member2, |
| 353 env2.lookupClassMember(cls2, member2.name, |
| 354 setter: member2.isSetter)); |
| 355 } |
| 296 members2[member2] = declarer2; | 356 members2[member2] = declarer2; |
| 297 }); | 357 }); |
| 298 checkMapEquivalence(cls1, cls2, 'members', members1, members2, | 358 checkMapEquivalence(cls1, cls2, 'members', members1, members2, (a, b) { |
| 299 equivalence.entityEquivalence, equivalence.entityEquivalence); | 359 bool result = equivalence.entityEquivalence(a, b); |
| 360 if (result) checkMembers(a, b); |
| 361 return result; |
| 362 }, equivalence.entityEquivalence); |
| 300 | 363 |
| 301 classes2.add(cls2); | 364 classes2.add(cls2); |
| 302 }); | 365 }); |
| 303 env2.forEachClass(lib2, (ClassEntity cls2) { | 366 env2.forEachClass(lib2, (ClassEntity cls2) { |
| 304 Expect.isTrue(classes2.contains(cls2), "Extra class $cls2 in $lib2"); | 367 Expect.isTrue(classes2.contains(cls2), "Extra class $cls2 in $lib2"); |
| 305 }); | 368 }); |
| 306 }); | 369 }); |
| 307 | |
| 308 // TODO(johnniwinther): Test the remaining properties of [ElementEnvironment]. | 370 // TODO(johnniwinther): Test the remaining properties of [ElementEnvironment]. |
| 309 } | 371 } |
| OLD | NEW |