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 ad8f1f1d96e42349cf731c0678a9010c5b9762a0..626aee7e140e589d4e6d704e2a61d5cdeea87f16 100644 |
--- a/tests/compiler/dart2js/equivalence/check_functions.dart |
+++ b/tests/compiler/dart2js/equivalence/check_functions.dart |
@@ -18,6 +18,8 @@ import 'package:compiler/src/js_backend/backend_usage.dart'; |
import 'package:compiler/src/js_backend/enqueuer.dart'; |
import 'package:compiler/src/js_backend/native_data.dart'; |
import 'package:compiler/src/js_backend/interceptor_data.dart'; |
+import 'package:compiler/src/js_emitter/code_emitter_task.dart'; |
+import 'package:compiler/src/js_emitter/model.dart'; |
import 'package:compiler/src/serialization/equivalence.dart'; |
import 'package:compiler/src/universe/class_set.dart'; |
import 'package:compiler/src/universe/world_builder.dart'; |
@@ -633,7 +635,7 @@ void checkResolutionEnqueuers( |
ResolutionEnqueuer enqueuer2, |
{bool elementEquivalence(Entity a, Entity b): _areEntitiesEquivalent, |
bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, |
- bool elementFilter(Element element), |
+ bool elementFilter(Entity element), |
bool verbose: false, |
bool skipClassUsageTesting: false}) { |
elementFilter ??= (_) => true; |
@@ -796,3 +798,66 @@ void checkCodegenEnqueuers(CodegenEnqueuer enqueuer1, CodegenEnqueuer enqueuer2, |
areAbstractUsagesEquivalent, |
verbose: verbose); |
} |
+ |
+// TODO(johnniwinther): Check all emitter properties. |
+void checkEmitters(CodeEmitterTask emitter1, CodeEmitterTask emitter2, |
+ {bool elementEquivalence(Entity a, Entity b): _areEntitiesEquivalent, |
+ bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, |
+ bool elementFilter(Element element), |
+ bool verbose: false}) { |
+ checkPrograms( |
+ emitter1.emitter.programForTesting, emitter2.emitter.programForTesting); |
+ |
+ checkSets( |
+ emitter1.typeTestRegistry.rtiNeededClasses, |
+ emitter2.typeTestRegistry.rtiNeededClasses, |
+ "TypeTestRegistry rti needed classes mismatch", |
+ elementEquivalence, |
+ verbose: verbose); |
+ |
+ checkSets( |
+ emitter1.typeTestRegistry.checkedFunctionTypes, |
+ emitter2.typeTestRegistry.checkedFunctionTypes, |
+ "TypeTestRegistry checked function types mismatch", |
+ typeEquivalence, |
+ verbose: verbose); |
+ |
+ checkSets( |
+ emitter1.typeTestRegistry.checkedClasses, |
+ emitter2.typeTestRegistry.checkedClasses, |
+ "TypeTestRegistry checked classes mismatch", |
+ elementEquivalence, |
+ verbose: verbose); |
+} |
+ |
+// TODO(johnniwinther): Check all program properties. |
+void checkEmitterPrograms(Program program1, Program program2) { |
+ checkLists(program1.fragments, program2.fragments, 'fragments', |
+ (a, b) => a.outputFileName == b.outputFileName, |
+ onSameElement: checkEmitterFragments); |
+} |
+ |
+// TODO(johnniwinther): Check all fragment properties. |
+void checkEmitterFragments(Fragment fragment1, Fragment fragment2) { |
+ checkLists(fragment1.libraries, fragment2.libraries, 'libraries', |
+ (a, b) => a.element.canonicalUri == b.element.canonicalUri, |
+ onSameElement: checkEmitterLibraries); |
+} |
+ |
+// TODO(johnniwinther): Check all library properties. |
+void checkEmitterLibraries(Library library1, Library library2) { |
+ checkLists(library1.classes, library2.classes, 'classes', |
+ (a, b) => a.element.name == b.element.name, |
+ onSameElement: checkEmitterClasses); |
+// TODO(johnniwinther): Check static method properties. |
+ checkLists(library1.statics, library2.statics, 'statics', |
+ (a, b) => a.name.key == b.name.key); |
+} |
+ |
+// TODO(johnniwinther): Check all class properties. |
+void checkEmitterClasses(Class class1, Class class2) { |
+ checkLists(class1.methods, class2.methods, 'methods', |
+ (a, b) => a.name.key == b.name.key); |
+ checkLists(class1.isChecks, class2.isChecks, 'isChecks', |
+ (a, b) => a.name.key == b.name.key); |
+} |