Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(512)

Unified Diff: tests/compiler/dart2js/equivalence/check_functions.dart

Issue 2979783003: More equivalence testing (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/kernel/env.dart ('k') | tests/compiler/dart2js/equivalence/check_helpers.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/compiler/dart2js/equivalence/check_functions.dart
diff --git a/tests/compiler/dart2js/equivalence/check_functions.dart b/tests/compiler/dart2js/equivalence/check_functions.dart
index 2543f5f98f719b3ba2400b3212df507858e40f00..21243004cdffc44258f21caabf35f540af2767e3 100644
--- a/tests/compiler/dart2js/equivalence/check_functions.dart
+++ b/tests/compiler/dart2js/equivalence/check_functions.dart
@@ -382,7 +382,15 @@ void checkNativeBasicData(NativeBasicDataImpl data1, NativeBasicDataImpl data2,
data2.nativeClassTagInfo,
strategy.elementEquivalence,
(a, b) => a == b);
- // TODO(johnniwinther): Check the remaining properties.
+ checkSetEquivalence(
+ data1,
+ data2,
+ 'jsInteropLibraries',
+ data1.jsInteropLibraries,
+ data2.jsInteropLibraries,
+ strategy.elementEquivalence);
+ checkSetEquivalence(data1, data2, 'jsInteropClasses', data1.jsInteropClasses,
+ data2.jsInteropClasses, strategy.elementEquivalence);
}
void checkBackendUsage(
@@ -442,7 +450,8 @@ void checkBackendUsage(
}
checkElementEnvironment(
- ElementEnvironment env1, ElementEnvironment env2, TestStrategy strategy) {
+ ElementEnvironment env1, ElementEnvironment env2, TestStrategy strategy,
+ {bool checkConstructorBodies: false}) {
strategy.testElements(
env1, env2, 'mainLibrary', env1.mainLibrary, env2.mainLibrary);
strategy.testElements(
@@ -459,6 +468,11 @@ checkElementEnvironment(
env1.getMemberMetadata(member1),
env2.getMemberMetadata(member2),
strategy.testConstantValues);
+
+ if (member1 is FunctionEntity && member2 is FunctionEntity) {
+ check(member1, member2, 'rawType', env1.getFunctionType(member1),
+ env2.getFunctionType(member2), strategy.typeEquivalence);
+ }
}
checkSetEquivalence(env1, env2, 'libraries', env1.libraries, env2.libraries,
@@ -467,6 +481,8 @@ checkElementEnvironment(
Expect.identical(lib1, env1.lookupLibrary(lib1.canonicalUri));
Expect.identical(lib2, env2.lookupLibrary(lib2.canonicalUri));
+ // TODO(johnniwinther): Check libraryName.
+
List<ClassEntity> classes2 = <ClassEntity>[];
env1.forEachClass(lib1, (ClassEntity cls1) {
Expect.identical(cls1, env1.lookupClass(lib1, cls1.name));
@@ -496,19 +512,53 @@ checkElementEnvironment(
env2.getSuperClass(cls2, skipUnnamedMixinApplications: true),
strategy.elementEquivalence);
+ InterfaceType thisType1 = env1.getThisType(cls1);
+ InterfaceType thisType2 = env2.getThisType(cls2);
+ check(cls1, cls2, 'thisType', thisType1, thisType2,
+ strategy.typeEquivalence);
+ check(cls1, cls2, 'rawType', env1.getRawType(cls1), env2.getRawType(cls2),
+ strategy.typeEquivalence);
+ check(
+ cls1,
+ cls2,
+ 'createInterfaceType',
+ env1.createInterfaceType(cls1, thisType1.typeArguments),
+ env2.createInterfaceType(cls2, thisType2.typeArguments),
+ strategy.typeEquivalence);
+
+ check(cls1, cls2, 'isGenericClass', env1.isGenericClass(cls1),
+ env2.isGenericClass(cls2));
+ check(cls1, cls2, 'isMixinApplication', env1.isMixinApplication(cls1),
+ env2.isMixinApplication(cls2));
+ check(
+ cls1,
+ cls2,
+ 'isUnnamedMixinApplication',
+ env1.isUnnamedMixinApplication(cls1),
+ env2.isUnnamedMixinApplication(cls2));
+ check(
+ cls1,
+ cls2,
+ 'getEffectiveMixinClass',
+ env1.getEffectiveMixinClass(cls1),
+ env2.getEffectiveMixinClass(cls2),
+ strategy.elementEquivalence);
+
+ // TODO(johnniwinther): Check type variable bounds.
+
List<InterfaceType> supertypes1 = <InterfaceType>[];
env1.forEachSupertype(cls1, supertypes1.add);
List<InterfaceType> supertypes2 = <InterfaceType>[];
- env2.forEachSupertype(cls2, supertypes1.add);
- strategy.testTypeLists(
- cls1, cls2, 'supertypes', supertypes1, supertypes2);
+ env2.forEachSupertype(cls2, supertypes2.add);
Siggi Cherem (dart-lang) 2017/07/12 19:29:10 eek!
+ checkLists(supertypes1, supertypes2, 'supertypes on $cls1, $cls2',
+ strategy.typeEquivalence);
List<ClassEntity> mixins1 = <ClassEntity>[];
env1.forEachMixin(cls1, mixins1.add);
List<ClassEntity> mixins2 = <ClassEntity>[];
env2.forEachMixin(cls2, mixins2.add);
- strategy.testLists(
- cls1, cls2, 'mixins', mixins1, mixins2, strategy.elementEquivalence);
+ checkLists(mixins1, mixins2, 'mixins on $cls1, $cls2',
+ strategy.elementEquivalence);
Map<MemberEntity, ClassEntity> members1 = <MemberEntity, ClassEntity>{};
Map<MemberEntity, ClassEntity> members2 = <MemberEntity, ClassEntity>{};
@@ -563,6 +613,29 @@ checkElementEnvironment(
"Extra constructor $constructor2 in $cls2");
});
+ if (checkConstructorBodies) {
+ Set<ConstructorBodyEntity> constructorBodies1 =
+ new Set<ConstructorBodyEntity>();
+ Set<ConstructorBodyEntity> constructorBodies2 =
+ new Set<ConstructorBodyEntity>();
+ env1.forEachConstructorBody(cls1,
+ (ConstructorBodyEntity constructorBody1) {
+ constructorBodies1.add(constructorBody1);
+ });
+ env2.forEachConstructorBody(cls2,
+ (ConstructorBodyEntity constructorBody2) {
+ constructorBodies2.add(constructorBody2);
+ });
+ checkSetEquivalence(cls1, cls2, 'constructor-bodies',
+ constructorBodies1, constructorBodies2, strategy.elementEquivalence,
+ onSameElement: (ConstructorBodyEntity constructorBody1,
+ ConstructorBodyEntity constructorBody2) {
+ check(constructorBody1, constructorBody2, 'name',
+ constructorBody1.name, constructorBody2.name);
+
+ checkMembers(constructorBody1, constructorBody2);
+ });
+ }
classes2.add(cls2);
});
env2.forEachClass(lib2, (ClassEntity cls2) {
@@ -597,7 +670,7 @@ checkElementEnvironment(
members2.contains(member2), "Extra member $member2 in $lib2");
});
});
- // TODO(johnniwinther): Test the remaining properties of [ElementEnvironment].
+ // TODO(johnniwinther): Check getLocalFunctionType and getUnaliasedType ?
}
bool areInstantiationInfosEquivalent(
@@ -894,6 +967,8 @@ void checkEmitterFragments(
if (fragment1 is MainFragment && fragment2 is MainFragment) {
check(fragment1, fragment2, 'invokeMain', fragment1.invokeMain,
fragment2.invokeMain, areJsNodesEquivalent);
+ } else if (fragment1 is DeferredFragment && fragment2 is DeferredFragment) {
+ check(fragment1, fragment2, 'name', fragment1.name, fragment2.name);
}
}
@@ -909,7 +984,7 @@ void checkEmitterLibraries(
checkLists(
library1.staticFieldsForReflection,
library2.staticFieldsForReflection,
- 'staticFieldsForReflection',
+ 'staticFieldsForReflection on $library1/$library2',
(a, b) => a.name.key == b.name.key,
onSameElement: checkEmitterFields);
}
@@ -933,8 +1008,11 @@ void checkEmitterClasses(Class class1, Class class2, TestStrategy strategy) {
checkLists(class1.noSuchMethodStubs, class2.noSuchMethodStubs,
'noSuchMethodStubs', (a, b) => a.name.key == b.name.key,
onSameElement: (a, b) => checkEmitterMethods(a, b, strategy));
- checkLists(class1.staticFieldsForReflection, class2.staticFieldsForReflection,
- 'staticFieldsForReflection', (a, b) => a.name.key == b.name.key,
+ checkLists(
+ class1.staticFieldsForReflection,
+ class2.staticFieldsForReflection,
+ 'staticFieldsForReflection on $class1/$class2',
+ (a, b) => a.name.key == b.name.key,
onSameElement: checkEmitterFields);
check(class1, class2, 'superclassName', class1.superclassName?.key,
« no previous file with comments | « pkg/compiler/lib/src/kernel/env.dart ('k') | tests/compiler/dart2js/equivalence/check_helpers.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698