| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 import "package:expect/expect.dart"; | 5 import "package:expect/expect.dart"; |
| 6 import 'dart:async'; | 6 import 'dart:async'; |
| 7 import "package:async_helper/async_helper.dart"; | 7 import "package:async_helper/async_helper.dart"; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 | 9 |
| 10 import "../../../sdk/lib/_internal/compiler/implementation/resolution/resolution
.dart"; | 10 import "../../../sdk/lib/_internal/compiler/implementation/resolution/resolution
.dart"; |
| (...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 639 Expect.equals(expectedElementCount, map(visitor).length); | 639 Expect.equals(expectedElementCount, map(visitor).length); |
| 640 | 640 |
| 641 compareWarningKinds(script, expectedWarnings, compiler.warnings); | 641 compareWarningKinds(script, expectedWarnings, compiler.warnings); |
| 642 compareWarningKinds(script, expectedErrors, compiler.errors); | 642 compareWarningKinds(script, expectedErrors, compiler.errors); |
| 643 compareWarningKinds(script, expectedInfos, compiler.infos); | 643 compareWarningKinds(script, expectedInfos, compiler.infos); |
| 644 } | 644 } |
| 645 | 645 |
| 646 testClassHierarchy() { | 646 testClassHierarchy() { |
| 647 final MAIN = "main"; | 647 final MAIN = "main"; |
| 648 MockCompiler compiler = new MockCompiler(); | 648 MockCompiler compiler = new MockCompiler(); |
| 649 compiler.parseScript("""class A extends B {} | 649 compiler.parseScript("""class A extends A {} |
| 650 class B extends A {} | |
| 651 main() { return new A(); }"""); | 650 main() { return new A(); }"""); |
| 652 FunctionElement mainElement = compiler.mainApp.find(MAIN); | 651 FunctionElement mainElement = compiler.mainApp.find(MAIN); |
| 653 compiler.resolver.resolve(mainElement); | 652 compiler.resolver.resolve(mainElement); |
| 654 Expect.equals(0, compiler.warnings.length); | 653 Expect.equals(0, compiler.warnings.length); |
| 654 Expect.equals(1, compiler.errors.length); |
| 655 Expect.equals(MessageKind.CYCLIC_CLASS_HIERARCHY, |
| 656 compiler.errors[0].message.kind); |
| 657 |
| 658 compiler = new MockCompiler(); |
| 659 compiler.parseScript("""class A extends B {} |
| 660 class B extends A {} |
| 661 main() { return new A(); }"""); |
| 662 mainElement = compiler.mainApp.find(MAIN); |
| 663 compiler.resolver.resolve(mainElement); |
| 664 Expect.equals(0, compiler.warnings.length); |
| 655 Expect.equals(2, compiler.errors.length); | 665 Expect.equals(2, compiler.errors.length); |
| 656 Expect.equals(MessageKind.CYCLIC_CLASS_HIERARCHY, | 666 Expect.equals(MessageKind.CYCLIC_CLASS_HIERARCHY, |
| 657 compiler.errors[0].message.kind); | 667 compiler.errors[0].message.kind); |
| 658 Expect.equals(MessageKind.CANNOT_FIND_CONSTRUCTOR.error, | 668 Expect.equals(MessageKind.CANNOT_FIND_CONSTRUCTOR.error, |
| 659 compiler.errors[1].message.kind); | 669 compiler.errors[1].message.kind); |
| 660 | 670 |
| 661 compiler = new MockCompiler(); | 671 compiler = new MockCompiler(); |
| 662 compiler.parseScript("""abstract class A extends B {} | 672 compiler.parseScript("""abstract class A extends B {} |
| 663 abstract class B extends A {} | 673 abstract class B extends A {} |
| 664 class C implements A {} | 674 class C implements A {} |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 707 class E extends D {} | 717 class E extends D {} |
| 708 main() { return new E(); }"""); | 718 main() { return new E(); }"""); |
| 709 mainElement = compiler.mainApp.find(MAIN); | 719 mainElement = compiler.mainApp.find(MAIN); |
| 710 compiler.resolver.resolve(mainElement); | 720 compiler.resolver.resolve(mainElement); |
| 711 Expect.equals(0, compiler.warnings.length); | 721 Expect.equals(0, compiler.warnings.length); |
| 712 Expect.equals(0, compiler.errors.length); | 722 Expect.equals(0, compiler.errors.length); |
| 713 aElement = compiler.mainApp.find("E"); | 723 aElement = compiler.mainApp.find("E"); |
| 714 supertypes = aElement.allSupertypes; | 724 supertypes = aElement.allSupertypes; |
| 715 Expect.equals(<String>['A<E>', 'D', 'Object'].toString(), | 725 Expect.equals(<String>['A<E>', 'D', 'Object'].toString(), |
| 716 asSortedStrings(supertypes).toString()); | 726 asSortedStrings(supertypes).toString()); |
| 727 |
| 728 compiler = new MockCompiler(); |
| 729 compiler.parseScript("""class A<T> {} |
| 730 class D extends A<int> implements A<double> {} |
| 731 main() { return new D(); }"""); |
| 732 mainElement = compiler.mainApp.find(MAIN); |
| 733 compiler.resolver.resolve(mainElement); |
| 734 Expect.equals(0, compiler.warnings.length); |
| 735 Expect.equals(1, compiler.errors.length); |
| 736 Expect.equals(MessageKind.MULTI_INHERITANCE, |
| 737 compiler.errors[0].message.kind); |
| 717 } | 738 } |
| 718 | 739 |
| 719 testInitializers() { | 740 testInitializers() { |
| 720 String script; | 741 String script; |
| 721 script = """class A { | 742 script = """class A { |
| 722 int foo; int bar; | 743 int foo; int bar; |
| 723 A() : this.foo = 1, bar = 2; | 744 A() : this.foo = 1, bar = 2; |
| 724 }"""; | 745 }"""; |
| 725 resolveConstructor(script, "A a = new A();", "A", "", 2); | 746 resolveConstructor(script, "A a = new A();", "A", "", 2); |
| 726 | 747 |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 965 }"""; | 986 }"""; |
| 966 asyncTest(() => compileScript(script2).then((compiler) { | 987 asyncTest(() => compileScript(script2).then((compiler) { |
| 967 expect(compiler, | 988 expect(compiler, |
| 968 [MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS], | 989 [MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS], |
| 969 [MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR, | 990 [MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR, |
| 970 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR, | 991 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR, |
| 971 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD, | 992 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD, |
| 972 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD]); | 993 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD]); |
| 973 })); | 994 })); |
| 974 } | 995 } |
| OLD | NEW |