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

Side by Side Diff: tests/compiler/dart2js/kernel/closed_world2_test.dart

Issue 2874973003: Add more equivalence tests for ElementEnvironment (Closed)
Patch Set: Created 3 years, 7 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 unified diff | Download patch
OLDNEW
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 // Partial test that the closed world computed from [WorldImpact]s derived from 5 // Partial test that the closed world computed from [WorldImpact]s derived from
6 // kernel is equivalent to the original computed from resolution. 6 // kernel is equivalent to the original computed from resolution.
7 library dart2js.kernel.closed_world2_test; 7 library dart2js.kernel.closed_world2_test;
8 8
9 import 'dart:async'; 9 import 'dart:async';
10 10
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse, 264 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse,
265 usage2.isIsolateInUse); 265 usage2.isIsolateInUse);
266 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed, 266 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed,
267 usage2.isFunctionApplyUsed); 267 usage2.isFunctionApplyUsed);
268 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed, 268 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed,
269 usage2.isNoSuchMethodUsed); 269 usage2.isNoSuchMethodUsed);
270 } 270 }
271 271
272 checkElementEnvironment(ElementEnvironment env1, ElementEnvironment env2, 272 checkElementEnvironment(ElementEnvironment env1, ElementEnvironment env2,
273 KernelEquivalence equivalence) { 273 KernelEquivalence equivalence) {
274 checkMembers(MemberEntity member1, MemberEntity member2) {
275 Expect.equals(env1.isDeferredLoadLibraryGetter(member1),
276 env2.isDeferredLoadLibraryGetter(member2));
277
278 checkListEquivalence(
279 member1,
280 member2,
281 'metadata',
282 env1.getMemberMetadata(member1),
283 env2.getMemberMetadata(member2),
284 equivalence.defaultStrategy.testConstantValues);
285 }
286
274 checkSetEquivalence(env1, env2, 'libraries', env1.libraries, env2.libraries, 287 checkSetEquivalence(env1, env2, 'libraries', env1.libraries, env2.libraries,
275 equivalence.entityEquivalence, 288 equivalence.entityEquivalence,
276 onSameElement: (LibraryEntity lib1, LibraryEntity lib2) { 289 onSameElement: (LibraryEntity lib1, LibraryEntity lib2) {
290 Expect.identical(lib1, env1.lookupLibrary(lib1.canonicalUri));
291 Expect.identical(lib2, env2.lookupLibrary(lib2.canonicalUri));
292
277 List<ClassEntity> classes2 = <ClassEntity>[]; 293 List<ClassEntity> classes2 = <ClassEntity>[];
278 env1.forEachClass(lib1, (ClassEntity cls1) { 294 env1.forEachClass(lib1, (ClassEntity cls1) {
295 Expect.identical(cls1, env1.lookupClass(lib1, cls1.name));
296
279 String className = cls1.name; 297 String className = cls1.name;
280 ClassEntity cls2 = env2.lookupClass(lib2, className); 298 ClassEntity cls2 = env2.lookupClass(lib2, className);
281 Expect.isNotNull(cls2, 'Missing class $className in $lib2'); 299 Expect.isNotNull(cls2, 'Missing class $className in $lib2');
300 Expect.identical(cls2, env2.lookupClass(lib2, cls2.name));
301
282 check(lib1, lib2, 'class:${className}', cls1, cls2, 302 check(lib1, lib2, 'class:${className}', cls1, cls2,
283 equivalence.entityEquivalence); 303 equivalence.entityEquivalence);
284 304
285 check(cls1, cls2, 'superclass', env1.getSuperClass(cls1), 305 Expect.equals(env1.isGenericClass(cls1), env2.isGenericClass(cls2));
286 env2.getSuperClass(cls2), equivalence.entityEquivalence); 306
307 check(
308 cls1,
309 cls2,
310 'superclass',
311 env1.getSuperClass(cls1, skipUnnamedMixinApplications: false),
312 env2.getSuperClass(cls2, skipUnnamedMixinApplications: false),
313 equivalence.entityEquivalence);
314 check(
315 cls1,
316 cls2,
317 'superclass',
318 env1.getSuperClass(cls1, skipUnnamedMixinApplications: true),
319 env2.getSuperClass(cls2, skipUnnamedMixinApplications: true),
320 equivalence.entityEquivalence);
321
322 List<InterfaceType> supertypes1 = <InterfaceType>[];
323 env1.forEachSupertype(cls1, supertypes1.add);
324 List<InterfaceType> supertypes2 = <InterfaceType>[];
325 env2.forEachSupertype(cls2, supertypes1.add);
326 equivalence.defaultStrategy
327 .testTypeLists(cls1, cls2, 'supertypes', supertypes1, supertypes2);
328
329 List<ClassEntity> mixins1 = <ClassEntity>[];
330 env1.forEachMixin(cls1, mixins1.add);
331 List<ClassEntity> mixins2 = <ClassEntity>[];
332 env2.forEachMixin(cls2, mixins2.add);
333 equivalence.defaultStrategy.testLists(cls1, cls2, 'mixins', mixins1,
334 mixins2, equivalence.entityEquivalence);
287 335
288 Map<MemberEntity, ClassEntity> members1 = <MemberEntity, ClassEntity>{}; 336 Map<MemberEntity, ClassEntity> members1 = <MemberEntity, ClassEntity>{};
289 Map<MemberEntity, ClassEntity> members2 = <MemberEntity, ClassEntity>{}; 337 Map<MemberEntity, ClassEntity> members2 = <MemberEntity, ClassEntity>{};
290 env1.forEachClassMember(cls1, 338 env1.forEachClassMember(cls1,
291 (ClassEntity declarer1, MemberEntity member1) { 339 (ClassEntity declarer1, MemberEntity member1) {
340 if (cls1 == declarer1) {
341 Expect.identical(
342 member1,
343 env1.lookupClassMember(cls1, member1.name,
344 setter: member1.isSetter));
345 }
292 members1[member1] = declarer1; 346 members1[member1] = declarer1;
293 }); 347 });
294 env2.forEachClassMember(cls2, 348 env2.forEachClassMember(cls2,
295 (ClassEntity declarer2, MemberEntity member2) { 349 (ClassEntity declarer2, MemberEntity member2) {
350 if (cls2 == declarer2) {
351 Expect.identical(
352 member2,
353 env2.lookupClassMember(cls2, member2.name,
354 setter: member2.isSetter));
355 }
296 members2[member2] = declarer2; 356 members2[member2] = declarer2;
297 }); 357 });
298 checkMapEquivalence(cls1, cls2, 'members', members1, members2, 358 checkMapEquivalence(cls1, cls2, 'members', members1, members2, (a, b) {
299 equivalence.entityEquivalence, equivalence.entityEquivalence); 359 bool result = equivalence.entityEquivalence(a, b);
360 if (result) checkMembers(a, b);
361 return result;
362 }, equivalence.entityEquivalence);
300 363
301 classes2.add(cls2); 364 classes2.add(cls2);
302 }); 365 });
303 env2.forEachClass(lib2, (ClassEntity cls2) { 366 env2.forEachClass(lib2, (ClassEntity cls2) {
304 Expect.isTrue(classes2.contains(cls2), "Extra class $cls2 in $lib2"); 367 Expect.isTrue(classes2.contains(cls2), "Extra class $cls2 in $lib2");
305 }); 368 });
306 }); 369 });
307
308 // TODO(johnniwinther): Test the remaining properties of [ElementEnvironment]. 370 // TODO(johnniwinther): Test the remaining properties of [ElementEnvironment].
309 } 371 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698