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

Side by Side Diff: tests/compiler/dart2js/world_test.dart

Issue 2622583004: Use entities in all masks. (Closed)
Patch Set: Update comment. Created 3 years, 11 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 library world_test; 5 library world_test;
6 6
7 import 'package:expect/expect.dart'; 7 import 'package:expect/expect.dart';
8 import 'package:async_helper/async_helper.dart'; 8 import 'package:async_helper/async_helper.dart';
9 import 'type_test_helper.dart'; 9 import 'type_test_helper.dart';
10 import 'package:compiler/src/common/names.dart'; 10 import 'package:compiler/src/common/names.dart';
11 import 'package:compiler/src/elements/elements.dart' 11 import 'package:compiler/src/elements/elements.dart'
12 show Element, ClassElement, LibraryElement; 12 show Element, ClassElement, LibraryElement;
13 import 'package:compiler/src/universe/class_set.dart'; 13 import 'package:compiler/src/universe/class_set.dart';
14 import 'package:compiler/src/world.dart' show ClosedWorld; 14 import 'package:compiler/src/world.dart' show ClassQuery, ClosedWorld;
15 15
16 void main() { 16 void main() {
17 asyncTest(() async { 17 asyncTest(() async {
18 await testClassSets(); 18 await testClassSets();
19 await testProperties(); 19 await testProperties();
20 await testNativeClasses(); 20 await testNativeClasses();
21 await testCommonSubclasses();
21 }); 22 });
22 } 23 }
23 24
24 testClassSets() async { 25 testClassSets() async {
25 var env = await TypeEnvironment.create( 26 var env = await TypeEnvironment.create(
26 r""" 27 r"""
27 class A implements X {} 28 class A implements X {}
28 class B {} 29 class B {}
29 class C_Super extends A {} 30 class C_Super extends A {}
30 class C extends C_Super {} 31 class C extends C_Super {}
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 isDirectlyInstantiated: false, 504 isDirectlyInstantiated: false,
504 isAbstractlyInstantiated: true, 505 isAbstractlyInstantiated: true,
505 isIndirectlyInstantiated: false, 506 isIndirectlyInstantiated: false,
506 hasStrictSubtype: false, 507 hasStrictSubtype: false,
507 hasOnlySubclasses: true, 508 hasOnlySubclasses: true,
508 lubOfInstantiatedSubclasses: clsCanvasRenderingContext2D, 509 lubOfInstantiatedSubclasses: clsCanvasRenderingContext2D,
509 lubOfInstantiatedSubtypes: clsCanvasRenderingContext2D, 510 lubOfInstantiatedSubtypes: clsCanvasRenderingContext2D,
510 instantiatedSubclassCount: 0, 511 instantiatedSubclassCount: 0,
511 instantiatedSubtypeCount: 0); 512 instantiatedSubtypeCount: 0);
512 } 513 }
514
515 testCommonSubclasses() async {
516 var env = await TypeEnvironment.create('',
517 mainSource: r"""
518 class A {}
519 class B {}
520 class C extends A {}
521 class D implements A {}
522 class E extends B {}
523 class F implements C, E {}
524 class G extends C implements E {}
525 class H implements C {}
526 class I extends D implements E {}
527 class J extends E implements D {}
528 main() {
529 new A();
530 new B();
531 new C();
532 new D();
533 new E();
534 new F();
535 new G();
536 new H();
537 new I();
538 new J();
539 }
540 """,
541 useMockCompiler: false);
542 ClosedWorld closedWorld = env.closedWorld;
543
544 ClassElement Object_ = env.getElement("Object");
545 ClassElement A = env.getElement("A");
546 ClassElement B = env.getElement("B");
547 ClassElement C = env.getElement("C");
548 ClassElement D = env.getElement("D");
549 ClassElement F = env.getElement("F");
550 ClassElement G = env.getElement("G");
551 ClassElement H = env.getElement("H");
552 ClassElement I = env.getElement("I");
553 ClassElement J = env.getElement("J");
554
555 void check(ClassElement cls1, ClassQuery query1, ClassElement cls2,
556 ClassQuery query2, List<ClassElement> expectedResult) {
557 Iterable<ClassElement> result1 =
558 closedWorld.commonSubclasses(cls1, query1, cls2, query2);
559 Iterable<ClassElement> result2 =
560 closedWorld.commonSubclasses(cls2, query2, cls1, query1);
561 Expect.setEquals(
562 result1,
563 result2,
564 "Asymmetric results for ($cls1,$query1) vs ($cls2,$query2):"
565 "\n a vs b: $result1\n b vs a: $result2");
566 Expect.setEquals(
567 expectedResult,
568 result1,
569 "Unexpected results for ($cls1,$query1) vs ($cls2,$query2):"
570 "\n expected: $expectedResult\n actual: $result1");
571 }
572
573 check(A, ClassQuery.EXACT, A, ClassQuery.EXACT, []);
574 check(A, ClassQuery.EXACT, A, ClassQuery.SUBCLASS, []);
575 check(A, ClassQuery.EXACT, A, ClassQuery.SUBTYPE, []);
576 check(A, ClassQuery.SUBCLASS, A, ClassQuery.SUBCLASS, [C]);
577 check(A, ClassQuery.SUBCLASS, A, ClassQuery.SUBTYPE, [C]);
578 check(A, ClassQuery.SUBTYPE, A, ClassQuery.SUBTYPE, [C, D]);
579
580 check(A, ClassQuery.EXACT, B, ClassQuery.EXACT, []);
581 check(A, ClassQuery.EXACT, B, ClassQuery.SUBCLASS, []);
582 check(A, ClassQuery.SUBCLASS, B, ClassQuery.EXACT, []);
583 check(A, ClassQuery.EXACT, B, ClassQuery.SUBTYPE, []);
584 check(A, ClassQuery.SUBTYPE, B, ClassQuery.EXACT, []);
585 check(A, ClassQuery.SUBCLASS, B, ClassQuery.SUBCLASS, []);
586 check(A, ClassQuery.SUBCLASS, B, ClassQuery.SUBTYPE, [G]);
587 check(A, ClassQuery.SUBTYPE, B, ClassQuery.SUBCLASS, [J]);
588 check(A, ClassQuery.SUBTYPE, B, ClassQuery.SUBTYPE, [F, G, I, J]);
589
590 check(A, ClassQuery.EXACT, C, ClassQuery.EXACT, []);
591 check(A, ClassQuery.EXACT, C, ClassQuery.SUBCLASS, []);
592 check(A, ClassQuery.SUBCLASS, C, ClassQuery.EXACT, []);
593 check(A, ClassQuery.EXACT, C, ClassQuery.SUBTYPE, []);
594 check(A, ClassQuery.SUBTYPE, C, ClassQuery.EXACT, []);
595 check(A, ClassQuery.SUBCLASS, C, ClassQuery.SUBCLASS, [G]);
596 check(A, ClassQuery.SUBCLASS, C, ClassQuery.SUBTYPE, [G]);
597 check(A, ClassQuery.SUBTYPE, C, ClassQuery.SUBCLASS, [G]);
598 check(A, ClassQuery.SUBTYPE, C, ClassQuery.SUBTYPE, [F, G, H]);
599
600 check(B, ClassQuery.EXACT, C, ClassQuery.EXACT, []);
601 check(B, ClassQuery.EXACT, C, ClassQuery.SUBCLASS, []);
602 check(B, ClassQuery.SUBCLASS, C, ClassQuery.EXACT, []);
603 check(B, ClassQuery.EXACT, C, ClassQuery.SUBTYPE, []);
604 check(B, ClassQuery.SUBTYPE, C, ClassQuery.EXACT, []);
605 check(B, ClassQuery.SUBCLASS, C, ClassQuery.SUBCLASS, []);
606 check(B, ClassQuery.SUBCLASS, C, ClassQuery.SUBTYPE, []);
607 check(B, ClassQuery.SUBTYPE, C, ClassQuery.SUBCLASS, [G]);
608 check(B, ClassQuery.SUBTYPE, C, ClassQuery.SUBTYPE, [F, G]);
609 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698