| 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 /// Equivalence test functions for data objects. | 5 /// Equivalence test functions for data objects. |
| 6 | 6 |
| 7 library dart2js.equivalence.functions; | 7 library dart2js.equivalence.functions; |
| 8 | 8 |
| 9 import 'package:expect/expect.dart'; | 9 import 'package:expect/expect.dart'; |
| 10 import 'package:compiler/src/common/resolution.dart'; | 10 import 'package:compiler/src/common/resolution.dart'; |
| (...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse, | 422 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse, |
| 423 usage2.isIsolateInUse); | 423 usage2.isIsolateInUse); |
| 424 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed, | 424 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed, |
| 425 usage2.isFunctionApplyUsed); | 425 usage2.isFunctionApplyUsed); |
| 426 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed, | 426 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed, |
| 427 usage2.isNoSuchMethodUsed); | 427 usage2.isNoSuchMethodUsed); |
| 428 } | 428 } |
| 429 | 429 |
| 430 checkElementEnvironment( | 430 checkElementEnvironment( |
| 431 ElementEnvironment env1, ElementEnvironment env2, TestStrategy strategy) { | 431 ElementEnvironment env1, ElementEnvironment env2, TestStrategy strategy) { |
| 432 strategy.testElements( |
| 433 env1, env2, 'mainLibrary', env1.mainLibrary, env2.mainLibrary); |
| 434 strategy.testElements( |
| 435 env1, env2, 'mainFunction', env1.mainFunction, env2.mainFunction); |
| 436 |
| 432 checkMembers(MemberEntity member1, MemberEntity member2) { | 437 checkMembers(MemberEntity member1, MemberEntity member2) { |
| 433 Expect.equals(env1.isDeferredLoadLibraryGetter(member1), | 438 Expect.equals(env1.isDeferredLoadLibraryGetter(member1), |
| 434 env2.isDeferredLoadLibraryGetter(member2)); | 439 env2.isDeferredLoadLibraryGetter(member2)); |
| 435 | 440 |
| 436 checkListEquivalence( | 441 checkListEquivalence( |
| 437 member1, | 442 member1, |
| 438 member2, | 443 member2, |
| 439 'metadata', | 444 'metadata', |
| 440 env1.getMemberMetadata(member1), | 445 env1.getMemberMetadata(member1), |
| 441 env2.getMemberMetadata(member2), | 446 env2.getMemberMetadata(member2), |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 setter: member2.isSetter)); | 517 setter: member2.isSetter)); |
| 513 } | 518 } |
| 514 members2[member2] = declarer2; | 519 members2[member2] = declarer2; |
| 515 }); | 520 }); |
| 516 checkMapEquivalence(cls1, cls2, 'members', members1, members2, (a, b) { | 521 checkMapEquivalence(cls1, cls2, 'members', members1, members2, (a, b) { |
| 517 bool result = strategy.elementEquivalence(a, b); | 522 bool result = strategy.elementEquivalence(a, b); |
| 518 if (result) checkMembers(a, b); | 523 if (result) checkMembers(a, b); |
| 519 return result; | 524 return result; |
| 520 }, strategy.elementEquivalence); | 525 }, strategy.elementEquivalence); |
| 521 | 526 |
| 527 Set<ConstructorEntity> constructors2 = new Set<ConstructorEntity>(); |
| 528 env1.forEachConstructor(cls1, (ConstructorEntity constructor1) { |
| 529 Expect.identical( |
| 530 constructor1, env1.lookupConstructor(cls1, constructor1.name)); |
| 531 |
| 532 String constructorName = constructor1.name; |
| 533 ConstructorEntity constructor2 = |
| 534 env2.lookupConstructor(cls2, constructorName); |
| 535 Expect.isNotNull( |
| 536 constructor2, "Missing constructor for $constructor1 in $cls2 "); |
| 537 Expect.identical( |
| 538 constructor2, env2.lookupConstructor(cls2, constructor2.name)); |
| 539 |
| 540 constructors2.add(constructor2); |
| 541 |
| 542 check(cls1, cls2, 'constructor:${constructorName}', constructor1, |
| 543 constructor2, strategy.elementEquivalence); |
| 544 |
| 545 checkMembers(constructor1, constructor2); |
| 546 }); |
| 547 env2.forEachConstructor(cls2, (ConstructorEntity constructor2) { |
| 548 Expect.isTrue(constructors2.contains(constructor2), |
| 549 "Extra constructor $constructor2 in $cls2"); |
| 550 }); |
| 551 |
| 522 classes2.add(cls2); | 552 classes2.add(cls2); |
| 523 }); | 553 }); |
| 524 env2.forEachClass(lib2, (ClassEntity cls2) { | 554 env2.forEachClass(lib2, (ClassEntity cls2) { |
| 525 Expect.isTrue(classes2.contains(cls2), "Extra class $cls2 in $lib2"); | 555 Expect.isTrue(classes2.contains(cls2), "Extra class $cls2 in $lib2"); |
| 526 }); | 556 }); |
| 557 |
| 558 Set<MemberEntity> members2 = new Set<MemberEntity>(); |
| 559 env1.forEachLibraryMember(lib1, (MemberEntity member1) { |
| 560 Expect.identical( |
| 561 member1, |
| 562 env1.lookupLibraryMember(lib1, member1.name, |
| 563 setter: member1.isSetter)); |
| 564 |
| 565 String memberName = member1.name; |
| 566 MemberEntity member2 = |
| 567 env2.lookupLibraryMember(lib2, memberName, setter: member1.isSetter); |
| 568 Expect.isNotNull(member2, 'Missing member for $member1 in $lib2'); |
| 569 Expect.identical( |
| 570 member2, |
| 571 env2.lookupLibraryMember(lib2, member2.name, |
| 572 setter: member2.isSetter)); |
| 573 |
| 574 members2.add(member2); |
| 575 |
| 576 check(lib1, lib2, 'member:${memberName}', member1, member2, |
| 577 strategy.elementEquivalence); |
| 578 |
| 579 checkMembers(member1, member2); |
| 580 }); |
| 581 env2.forEachLibraryMember(lib2, (MemberEntity member2) { |
| 582 Expect.isTrue( |
| 583 members2.contains(member2), "Extra member $member2 in $lib2"); |
| 584 }); |
| 527 }); | 585 }); |
| 528 // TODO(johnniwinther): Test the remaining properties of [ElementEnvironment]. | 586 // TODO(johnniwinther): Test the remaining properties of [ElementEnvironment]. |
| 529 } | 587 } |
| 530 | 588 |
| 531 bool areInstantiationInfosEquivalent( | 589 bool areInstantiationInfosEquivalent( |
| 532 InstantiationInfo info1, | 590 InstantiationInfo info1, |
| 533 InstantiationInfo info2, | 591 InstantiationInfo info2, |
| 534 bool elementEquivalence(Entity a, Entity b), | 592 bool elementEquivalence(Entity a, Entity b), |
| 535 bool typeEquivalence(DartType a, DartType b)) { | 593 bool typeEquivalence(DartType a, DartType b)) { |
| 536 checkMaps( | 594 checkMaps( |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 603 backendUsage1.isFunctionApplyUsed, | 661 backendUsage1.isFunctionApplyUsed, |
| 604 backendUsage1.isFunctionApplyUsed, | 662 backendUsage1.isFunctionApplyUsed, |
| 605 "JavaScriptBackend.hasFunctionApplySupport mismatch"); | 663 "JavaScriptBackend.hasFunctionApplySupport mismatch"); |
| 606 Expect.equals( | 664 Expect.equals( |
| 607 backendUsage1.isRuntimeTypeUsed, | 665 backendUsage1.isRuntimeTypeUsed, |
| 608 backendUsage2.isRuntimeTypeUsed, | 666 backendUsage2.isRuntimeTypeUsed, |
| 609 "JavaScriptBackend.hasRuntimeTypeSupport mismatch"); | 667 "JavaScriptBackend.hasRuntimeTypeSupport mismatch"); |
| 610 Expect.equals(backendUsage1.isIsolateInUse, backendUsage2.isIsolateInUse, | 668 Expect.equals(backendUsage1.isIsolateInUse, backendUsage2.isIsolateInUse, |
| 611 "JavaScriptBackend.hasIsolateSupport mismatch"); | 669 "JavaScriptBackend.hasIsolateSupport mismatch"); |
| 612 } | 670 } |
| OLD | NEW |