OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 analyzer.test.generated.strong_mode_test; | 5 library analyzer.test.generated.strong_mode_test; |
6 | 6 |
7 import 'package:analyzer/dart/ast/ast.dart'; | 7 import 'package:analyzer/dart/ast/ast.dart'; |
8 import 'package:analyzer/dart/element/element.dart'; | 8 import 'package:analyzer/dart/element/element.dart'; |
9 import 'package:analyzer/dart/element/type.dart'; | 9 import 'package:analyzer/dart/element/type.dart'; |
10 import 'package:analyzer/src/dart/element/element.dart'; | 10 import 'package:analyzer/src/dart/element/element.dart'; |
(...skipping 1761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1772 } | 1772 } |
1773 | 1773 |
1774 void test_genericMethod_override_invalidReturnType() { | 1774 void test_genericMethod_override_invalidReturnType() { |
1775 Source source = addSource(r''' | 1775 Source source = addSource(r''' |
1776 class C { | 1776 class C { |
1777 Iterable/*<T>*/ f/*<T>*/(/*=T*/ x) => null; | 1777 Iterable/*<T>*/ f/*<T>*/(/*=T*/ x) => null; |
1778 } | 1778 } |
1779 class D extends C { | 1779 class D extends C { |
1780 String f/*<S>*/(/*=S*/ x) => null; | 1780 String f/*<S>*/(/*=S*/ x) => null; |
1781 }'''); | 1781 }'''); |
1782 // TODO(jmesserly): we can't use assertErrors because STRONG_MODE_* errors | 1782 assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]); |
1783 // from CodeChecker don't have working equality. | |
1784 List<AnalysisError> errors = analysisContext2.computeErrors(source); | |
1785 | |
1786 // Sort errors by name. | |
1787 errors.sort((AnalysisError e1, AnalysisError e2) => | |
1788 e1.errorCode.name.compareTo(e2.errorCode.name)); | |
1789 | |
1790 expect( | |
1791 errors.map((e) => e.errorCode.name), | |
1792 unorderedEquals([ | |
1793 'INVALID_METHOD_OVERRIDE_RETURN_TYPE', | |
1794 'STRONG_MODE_INVALID_METHOD_OVERRIDE' | |
1795 ])); | |
1796 expect(errors[0].message, contains('Iterable<S>'), | |
1797 reason: 'errors should be in terms of the type parameters ' | |
1798 'at the error location'); | |
1799 verify([source]); | 1783 verify([source]); |
1800 } | 1784 } |
1801 | 1785 |
1802 void test_genericMethod_override_invalidTypeParamBounds() { | 1786 void test_genericMethod_override_invalidTypeParamBounds() { |
1803 Source source = addSource(r''' | 1787 Source source = addSource(r''' |
1804 class A {} | 1788 class A {} |
1805 class B extends A {} | 1789 class B extends A {} |
1806 class C { | 1790 class C { |
1807 /*=T*/ f/*<T extends A>*/(/*=T*/ x) => null; | 1791 /*=T*/ f/*<T extends A>*/(/*=T*/ x) => null; |
1808 } | 1792 } |
1809 class D extends C { | 1793 class D extends C { |
1810 /*=T*/ f/*<T extends B>*/(/*=T*/ x) => null; | 1794 /*=T*/ f/*<T extends B>*/(/*=T*/ x) => null; |
1811 }'''); | 1795 }'''); |
1812 // TODO(jmesserly): this is modified code from assertErrors, which we can't | 1796 assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]); |
1813 // use directly because STRONG_MODE_* errors don't have working equality. | |
1814 List<AnalysisError> errors = analysisContext2.computeErrors(source); | |
1815 expect( | |
1816 errors.map((e) => e.errorCode.name), | |
1817 unorderedEquals([ | |
1818 'INVALID_METHOD_OVERRIDE_TYPE_PARAMETER_BOUND', | |
1819 'STRONG_MODE_INVALID_METHOD_OVERRIDE' | |
1820 ])); | |
1821 verify([source]); | 1797 verify([source]); |
1822 } | 1798 } |
1823 | 1799 |
1824 void test_genericMethod_override_invalidTypeParamCount() { | 1800 void test_genericMethod_override_invalidTypeParamCount() { |
1825 Source source = addSource(r''' | 1801 Source source = addSource(r''' |
1826 class C { | 1802 class C { |
1827 /*=T*/ f/*<T>*/(/*=T*/ x) => null; | 1803 /*=T*/ f/*<T>*/(/*=T*/ x) => null; |
1828 } | 1804 } |
1829 class D extends C { | 1805 class D extends C { |
1830 /*=S*/ f/*<T, S>*/(/*=T*/ x) => null; | 1806 /*=S*/ f/*<T, S>*/(/*=T*/ x) => null; |
1831 }'''); | 1807 }'''); |
1832 // TODO(jmesserly): we can't use assertErrors because STRONG_MODE_* errors | 1808 assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]); |
1833 // from CodeChecker don't have working equality. | |
1834 List<AnalysisError> errors = analysisContext2.computeErrors(source); | |
1835 expect( | |
1836 errors.map((e) => e.errorCode.name), | |
1837 unorderedEquals([ | |
1838 'STRONG_MODE_INVALID_METHOD_OVERRIDE', | |
1839 'INVALID_METHOD_OVERRIDE_TYPE_PARAMETERS' | |
1840 ])); | |
1841 verify([source]); | 1809 verify([source]); |
1842 } | 1810 } |
1843 | 1811 |
1844 void test_genericMethod_propagatedType_promotion() { | 1812 void test_genericMethod_propagatedType_promotion() { |
1845 // Regression test for: | 1813 // Regression test for: |
1846 // https://github.com/dart-lang/sdk/issues/25340 | 1814 // https://github.com/dart-lang/sdk/issues/25340 |
1847 | 1815 |
1848 // Note, after https://github.com/dart-lang/sdk/issues/25486 the original | 1816 // Note, after https://github.com/dart-lang/sdk/issues/25486 the original |
1849 // example won't work, as we now compute a static type and therefore discard | 1817 // example won't work, as we now compute a static type and therefore discard |
1850 // the propagated type. So a new test was created that doesn't run under | 1818 // the propagated type. So a new test was created that doesn't run under |
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2300 main() { | 2268 main() { |
2301 var v = x; | 2269 var v = x; |
2302 v; // marker | 2270 v; // marker |
2303 } | 2271 } |
2304 int x = 3; | 2272 int x = 3; |
2305 '''; | 2273 '''; |
2306 assertPropagatedAssignedType(code, typeProvider.intType, null); | 2274 assertPropagatedAssignedType(code, typeProvider.intType, null); |
2307 assertTypeOfMarkedExpression(code, typeProvider.intType, null); | 2275 assertTypeOfMarkedExpression(code, typeProvider.intType, null); |
2308 } | 2276 } |
2309 } | 2277 } |
OLD | NEW |