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

Unified Diff: tests/compiler/dart2js/kernel/closed_world2_test.dart

Issue 2845093003: Handle mixed in members (Closed)
Patch Set: Created 3 years, 8 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
Index: tests/compiler/dart2js/kernel/closed_world2_test.dart
diff --git a/tests/compiler/dart2js/kernel/closed_world2_test.dart b/tests/compiler/dart2js/kernel/closed_world2_test.dart
index 2aba723d90df910dd448a24ef794dde3ce03c424..e8af45d1501f635352c847cdbdf939f29bbd02ec 100644
--- a/tests/compiler/dart2js/kernel/closed_world2_test.dart
+++ b/tests/compiler/dart2js/kernel/closed_world2_test.dart
@@ -16,6 +16,7 @@ import 'package:compiler/src/common/backend_api.dart';
import 'package:compiler/src/common/tasks.dart';
import 'package:compiler/src/compiler.dart';
import 'package:compiler/src/deferred_load.dart';
+import 'package:compiler/src/elements/entities.dart';
import 'package:compiler/src/elements/resolution_types.dart';
import 'package:compiler/src/elements/types.dart';
import 'package:compiler/src/enqueue.dart';
@@ -61,12 +62,26 @@ class ClassWithSetter {
void set setter(_) {}
}
+class Mixin {
+ method1() {}
+ method2() {}
+ method3() {}
+}
+class Class1 = Object with Mixin;
+class Class2 extends Object with Mixin {
+ method3() {}
+}
+
+
@NoInline()
main() {
print('Hello World');
''.contains; // Trigger member closurization.
new Element.div();
new ClassWithSetter().setter = null;
+ new Class1().method1();
+ new Class2().method2();
+ new Class2().method3();
}
'''
};
@@ -122,6 +137,7 @@ Future mainInternal(List<String> args,
options: [Flags.analyzeAll, Flags.useKernel, Flags.enableAssertMessage]);
await compiler.run(entryPoint);
compiler.resolutionWorldBuilder.closeWorld();
+ ElementEnvironment environment1 = compiler.elementEnvironment;
print('---- closed world from kernel ------------------------------------');
Compiler compiler2 = compilerFor(
@@ -143,10 +159,15 @@ Future mainInternal(List<String> args,
compiler.backend.kernelTask.program);
await compiler2.run(entryPoint);
Expect.isFalse(compiler2.compilationFailed);
+
+ KernelEquivalence equivalence = new KernelEquivalence(elementMap);
+
+ ElementEnvironment environment2 = compiler2.elementEnvironment;
+ checkElementEnvironment(environment1, environment2, equivalence);
+
ResolutionEnqueuer enqueuer2 = compiler2.enqueuer.resolution;
BackendUsage backendUsage2 = compiler2.backend.backendUsage;
ClosedWorld closedWorld2 = compiler2.resolutionWorldBuilder.closeWorld();
- KernelEquivalence equivalence = new KernelEquivalence(elementMap);
checkBackendUsage(backendUsage1, backendUsage2, equivalence);
checkResolutionEnqueuers(backendUsage1, backendUsage2, enqueuer1, enqueuer2,
@@ -294,6 +315,45 @@ void checkBackendUsage(BackendUsageImpl usage1, BackendUsageImpl usage2,
usage2.isNoSuchMethodUsed);
}
+checkElementEnvironment(ElementEnvironment env1, ElementEnvironment env2,
+ KernelEquivalence equivalence) {
+ checkSetEquivalence(env1, env2, 'libraries', env1.libraries, env2.libraries,
+ equivalence.entityEquivalence,
+ onSameElement: (LibraryEntity lib1, LibraryEntity lib2) {
+ List<ClassEntity> classes2 = <ClassEntity>[];
+ env1.forEachClass(lib1, (ClassEntity cls1) {
+ String className = cls1.name;
+ ClassEntity cls2 = env2.lookupClass(lib2, className);
+ Expect.isNotNull(cls2, 'Missing class $className in $lib2');
+ check(lib1, lib2, 'class:${className}', cls1, cls2,
+ equivalence.entityEquivalence);
+
+ check(cls1, cls2, 'superclass', env1.getSuperClass(cls1),
+ env2.getSuperClass(cls2), equivalence.entityEquivalence);
+
+ Map<MemberEntity, ClassEntity> members1 = <MemberEntity, ClassEntity>{};
+ Map<MemberEntity, ClassEntity> members2 = <MemberEntity, ClassEntity>{};
+ env1.forEachClassMember(cls1,
+ (ClassEntity declarer1, MemberEntity member1) {
+ members1[member1] = declarer1;
+ });
+ env1.forEachClassMember(cls1,
+ (ClassEntity declarer2, MemberEntity member2) {
+ members2[member2] = declarer2;
+ });
+ checkMapEquivalence(cls1, cls2, 'members', members1, members2,
+ equivalence.entityEquivalence, equivalence.entityEquivalence);
+
+ classes2.add(cls2);
+ });
+ env2.forEachClass(lib2, (ClassEntity cls2) {
+ Expect.isTrue(classes2.contains(cls2), "Extra class $cls2 in $lib2");
+ });
+ });
+
+ // TODO(johnniwinther): Test the remaining properties of [ElementEnvironment].
+}
+
class MemoryDillLibraryLoaderTask extends DillLibraryLoaderTask {
final ir.Program program;
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_map.dart ('k') | tests/compiler/dart2js/serialization/model_test_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698