| 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 7f16c72788f987de80bddda04032fa4f0de08337..2543f5f98f719b3ba2400b3212df507858e40f00 100644
|
| --- a/tests/compiler/dart2js/equivalence/check_functions.dart
|
| +++ b/tests/compiler/dart2js/equivalence/check_functions.dart
|
| @@ -803,40 +803,42 @@ void checkCodegenEnqueuers(CodegenEnqueuer enqueuer1, CodegenEnqueuer enqueuer2,
|
| }
|
|
|
| // TODO(johnniwinther): Check all emitter properties.
|
| -void checkEmitters(CodeEmitterTask emitter1, CodeEmitterTask emitter2,
|
| +void checkEmitters(
|
| + CodeEmitterTask emitter1, CodeEmitterTask emitter2, TestStrategy strategy,
|
| {bool elementEquivalence(Entity a, Entity b): _areEntitiesEquivalent,
|
| bool typeEquivalence(DartType a, DartType b): areTypesEquivalent,
|
| bool elementFilter(Element element),
|
| bool verbose: false}) {
|
| - checkEmitterPrograms(
|
| - emitter1.emitter.programForTesting, emitter2.emitter.programForTesting);
|
| + checkEmitterPrograms(emitter1.emitter.programForTesting,
|
| + emitter2.emitter.programForTesting, strategy);
|
|
|
| checkSets(
|
| emitter1.typeTestRegistry.rtiNeededClasses,
|
| emitter2.typeTestRegistry.rtiNeededClasses,
|
| "TypeTestRegistry rti needed classes mismatch",
|
| - elementEquivalence,
|
| + strategy.elementEquivalence,
|
| verbose: verbose);
|
|
|
| checkSets(
|
| emitter1.typeTestRegistry.checkedFunctionTypes,
|
| emitter2.typeTestRegistry.checkedFunctionTypes,
|
| "TypeTestRegistry checked function types mismatch",
|
| - typeEquivalence,
|
| + strategy.typeEquivalence,
|
| verbose: verbose);
|
|
|
| checkSets(
|
| emitter1.typeTestRegistry.checkedClasses,
|
| emitter2.typeTestRegistry.checkedClasses,
|
| "TypeTestRegistry checked classes mismatch",
|
| - elementEquivalence,
|
| + strategy.elementEquivalence,
|
| verbose: verbose);
|
| }
|
|
|
| -void checkEmitterPrograms(Program program1, Program program2) {
|
| +void checkEmitterPrograms(
|
| + Program program1, Program program2, TestStrategy strategy) {
|
| checkLists(program1.fragments, program2.fragments, 'fragments',
|
| (a, b) => a.outputFileName == b.outputFileName,
|
| - onSameElement: checkEmitterFragments);
|
| + onSameElement: (a, b) => checkEmitterFragments(a, b, strategy));
|
| checkLists(
|
| program1.holders, program2.holders, 'holders', (a, b) => a.name == b.name,
|
| onSameElement: checkEmitterHolders);
|
| @@ -869,14 +871,15 @@ void checkEmitterPrograms(Program program1, Program program2) {
|
| areJsNodesEquivalent);
|
| }
|
|
|
| -void checkEmitterFragments(Fragment fragment1, Fragment fragment2) {
|
| +void checkEmitterFragments(
|
| + Fragment fragment1, Fragment fragment2, TestStrategy strategy) {
|
| // TODO(johnniwinther): Check outputUnit.
|
| checkLists(fragment1.libraries, fragment2.libraries, 'libraries',
|
| (a, b) => a.element.canonicalUri == b.element.canonicalUri,
|
| - onSameElement: checkEmitterLibraries);
|
| + onSameElement: (a, b) => checkEmitterLibraries(a, b, strategy));
|
| checkLists(fragment1.constants, fragment2.constants, 'constants',
|
| (a, b) => a.name.key == b.name.key,
|
| - onSameElement: checkEmitterConstants);
|
| + onSameElement: (a, b) => checkEmitterConstants(a, b, strategy));
|
| checkLists(fragment1.staticNonFinalFields, fragment2.staticNonFinalFields,
|
| 'staticNonFinalFields', (a, b) => a.name.key == b.name.key,
|
| onSameElement: checkEmitterStaticFields);
|
| @@ -894,14 +897,15 @@ void checkEmitterFragments(Fragment fragment1, Fragment fragment2) {
|
| }
|
| }
|
|
|
| -void checkEmitterLibraries(Library library1, Library library2) {
|
| +void checkEmitterLibraries(
|
| + Library library1, Library library2, TestStrategy strategy) {
|
| check(library1, library2, 'uri', library1.uri, library2.uri);
|
| checkLists(library1.classes, library2.classes, 'classes',
|
| (a, b) => a.element.name == b.element.name,
|
| - onSameElement: checkEmitterClasses);
|
| + onSameElement: (a, b) => checkEmitterClasses(a, b, strategy));
|
| checkLists(library1.statics, library2.statics, 'statics',
|
| (a, b) => a.name.key == b.name.key,
|
| - onSameElement: checkEmitterMethods);
|
| + onSameElement: (a, b) => checkEmitterMethods(a, b, strategy));
|
| checkLists(
|
| library1.staticFieldsForReflection,
|
| library2.staticFieldsForReflection,
|
| @@ -910,25 +914,25 @@ void checkEmitterLibraries(Library library1, Library library2) {
|
| onSameElement: checkEmitterFields);
|
| }
|
|
|
| -void checkEmitterClasses(Class class1, Class class2) {
|
| +void checkEmitterClasses(Class class1, Class class2, TestStrategy strategy) {
|
| checkLists(class1.methods, class2.methods, 'methods',
|
| (a, b) => a.name.key == b.name.key,
|
| - onSameElement: checkEmitterMethods);
|
| + onSameElement: (a, b) => checkEmitterMethods(a, b, strategy));
|
| checkLists(class1.fields, class2.fields, 'fields',
|
| (a, b) => a.name.key == b.name.key,
|
| onSameElement: checkEmitterFields);
|
| checkLists(class1.isChecks, class2.isChecks, 'isChecks',
|
| (a, b) => a.name.key == b.name.key,
|
| - onSameElement: checkEmitterMethods);
|
| + onSameElement: (a, b) => checkEmitterMethods(a, b, strategy));
|
| checkLists(class1.checkedSetters, class2.checkedSetters, 'checkedSetters',
|
| (a, b) => a.name.key == b.name.key,
|
| - onSameElement: checkEmitterMethods);
|
| + onSameElement: (a, b) => checkEmitterMethods(a, b, strategy));
|
| checkLists(class1.callStubs, class2.callStubs, 'callStubs',
|
| (a, b) => a.name.key == b.name.key,
|
| - onSameElement: checkEmitterMethods);
|
| + onSameElement: (a, b) => checkEmitterMethods(a, b, strategy));
|
| checkLists(class1.noSuchMethodStubs, class2.noSuchMethodStubs,
|
| 'noSuchMethodStubs', (a, b) => a.name.key == b.name.key,
|
| - onSameElement: checkEmitterMethods);
|
| + onSameElement: (a, b) => checkEmitterMethods(a, b, strategy));
|
| checkLists(class1.staticFieldsForReflection, class2.staticFieldsForReflection,
|
| 'staticFieldsForReflection', (a, b) => a.name.key == b.name.key,
|
| onSameElement: checkEmitterFields);
|
| @@ -950,7 +954,8 @@ void checkEmitterClasses(Class class1, Class class2) {
|
| checkEmitterHolders(class1.holder, class2.holder);
|
| }
|
|
|
| -void checkEmitterMethods(Method method1, Method method2) {
|
| +void checkEmitterMethods(
|
| + Method method1, Method method2, TestStrategy strategy) {
|
| check(method1, method2, 'code', method1.code, method2.code,
|
| areJsNodesEquivalent);
|
| check(method1, method2, 'is ParameterStubMethod',
|
| @@ -966,12 +971,11 @@ void checkEmitterMethods(Method method1, Method method2) {
|
| method2.callName?.key);
|
| check(method1, method2, 'needsTearOff', method1.needsTearOff,
|
| method2.needsTearOff);
|
| - // TODO(johnniwinther): Fix teadOffName mismatch.
|
| - //check(method1, method2, 'tearOffName',
|
| - // method1.tearOffName?.key, method2.tearOffName?.key);
|
| + check(method1, method2, 'tearOffName', method1.tearOffName?.key,
|
| + method2.tearOffName?.key);
|
| checkLists(method1.parameterStubs, method2.parameterStubs, 'parameterStubs',
|
| (a, b) => a.name.key == b.name.key,
|
| - onSameElement: checkEmitterMethods);
|
| + onSameElement: (a, b) => checkEmitterMethods(a, b, strategy));
|
| check(method1, method2, 'canBeApplied', method1.canBeApplied,
|
| method2.canBeApplied);
|
| check(method1, method2, 'canBeReflected', method1.canBeReflected,
|
| @@ -980,7 +984,32 @@ void checkEmitterMethods(Method method1, Method method2) {
|
| method2.functionType, areJsNodesEquivalent);
|
| check(method1, method2, 'requiredParameterCount',
|
| method1.requiredParameterCount, method2.requiredParameterCount);
|
| - // TODO(johnniwinther): Check optionalParameterDefaultValues.
|
| + if (method1.optionalParameterDefaultValues == null &&
|
| + method2.optionalParameterDefaultValues == null) {
|
| + // Nothing to test.
|
| + } else if (method1.optionalParameterDefaultValues is List &&
|
| + method2.optionalParameterDefaultValues is List) {
|
| + checkLists(
|
| + method1.optionalParameterDefaultValues,
|
| + method2.optionalParameterDefaultValues,
|
| + 'optionalParameterDefaultValues',
|
| + strategy.constantValueEquivalence);
|
| + } else if (method1.optionalParameterDefaultValues is Map &&
|
| + method2.optionalParameterDefaultValues is Map) {
|
| + checkMaps(
|
| + method1.optionalParameterDefaultValues,
|
| + method2.optionalParameterDefaultValues,
|
| + 'optionalParameterDefaultValues',
|
| + equality,
|
| + strategy.constantValueEquivalence);
|
| + } else {
|
| + check(
|
| + method1,
|
| + method2,
|
| + 'optionalParameterDefaultValues',
|
| + method1.optionalParameterDefaultValues,
|
| + method2.optionalParameterDefaultValues);
|
| + }
|
| }
|
| }
|
|
|
| @@ -993,9 +1022,11 @@ void checkEmitterFields(Field field1, Field field2) {
|
| field2.needsCheckedSetter);
|
| }
|
|
|
| -void checkEmitterConstants(Constant constant1, Constant constant2) {
|
| - // TODO(johnniwinther): Check value.
|
| +void checkEmitterConstants(
|
| + Constant constant1, Constant constant2, TestStrategy strategy) {
|
| checkEmitterHolders(constant1.holder, constant2.holder);
|
| + check(constant1, constant2, 'value', constant1.value, constant2.value,
|
| + strategy.constantValueEquivalence);
|
| }
|
|
|
| void checkEmitterStaticFields(StaticField field1, StaticField field2) {
|
|
|