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 1777 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1788 String f/*<S>*/(/*=S*/ x) => null; | 1788 String f/*<S>*/(/*=S*/ x) => null; |
1789 }'''); | 1789 }'''); |
1790 // TODO(jmesserly): we can't use assertErrors because STRONG_MODE_* errors | 1790 // TODO(jmesserly): we can't use assertErrors because STRONG_MODE_* errors |
1791 // from CodeChecker don't have working equality. | 1791 // from CodeChecker don't have working equality. |
1792 List<AnalysisError> errors = analysisContext2.computeErrors(source); | 1792 List<AnalysisError> errors = analysisContext2.computeErrors(source); |
1793 | 1793 |
1794 // Sort errors by name. | 1794 // Sort errors by name. |
1795 errors.sort((AnalysisError e1, AnalysisError e2) => | 1795 errors.sort((AnalysisError e1, AnalysisError e2) => |
1796 e1.errorCode.name.compareTo(e2.errorCode.name)); | 1796 e1.errorCode.name.compareTo(e2.errorCode.name)); |
1797 | 1797 |
1798 expect(errors.map((e) => e.errorCode.name), [ | 1798 expect( |
1799 'INVALID_METHOD_OVERRIDE_RETURN_TYPE', | 1799 errors.map((e) => e.errorCode.name), |
1800 'STRONG_MODE_INVALID_METHOD_OVERRIDE' | 1800 unorderedEquals([ |
1801 ]); | 1801 'INVALID_METHOD_OVERRIDE_RETURN_TYPE', |
| 1802 'STRONG_MODE_INVALID_METHOD_OVERRIDE' |
| 1803 ])); |
1802 expect(errors[0].message, contains('Iterable<S>'), | 1804 expect(errors[0].message, contains('Iterable<S>'), |
1803 reason: 'errors should be in terms of the type parameters ' | 1805 reason: 'errors should be in terms of the type parameters ' |
1804 'at the error location'); | 1806 'at the error location'); |
1805 verify([source]); | 1807 verify([source]); |
1806 } | 1808 } |
1807 | 1809 |
1808 void test_genericMethod_override_invalidTypeParamBounds() { | 1810 void test_genericMethod_override_invalidTypeParamBounds() { |
1809 Source source = addSource(r''' | 1811 Source source = addSource(r''' |
1810 class A {} | 1812 class A {} |
1811 class B extends A {} | 1813 class B extends A {} |
1812 class C { | 1814 class C { |
1813 /*=T*/ f/*<T extends A>*/(/*=T*/ x) => null; | 1815 /*=T*/ f/*<T extends A>*/(/*=T*/ x) => null; |
1814 } | 1816 } |
1815 class D extends C { | 1817 class D extends C { |
1816 /*=T*/ f/*<T extends B>*/(/*=T*/ x) => null; | 1818 /*=T*/ f/*<T extends B>*/(/*=T*/ x) => null; |
1817 }'''); | 1819 }'''); |
1818 // TODO(jmesserly): this is modified code from assertErrors, which we can't | 1820 // TODO(jmesserly): this is modified code from assertErrors, which we can't |
1819 // use directly because STRONG_MODE_* errors don't have working equality. | 1821 // use directly because STRONG_MODE_* errors don't have working equality. |
1820 List<AnalysisError> errors = analysisContext2.computeErrors(source); | 1822 List<AnalysisError> errors = analysisContext2.computeErrors(source); |
1821 List errorNames = errors.map((e) => e.errorCode.name).toList(); | |
1822 expect(errorNames, hasLength(2)); | |
1823 expect(errorNames, contains('STRONG_MODE_INVALID_METHOD_OVERRIDE')); | |
1824 expect( | 1823 expect( |
1825 errorNames, contains('INVALID_METHOD_OVERRIDE_TYPE_PARAMETER_BOUND')); | 1824 errors.map((e) => e.errorCode.name), |
| 1825 unorderedEquals([ |
| 1826 'INVALID_METHOD_OVERRIDE_TYPE_PARAMETER_BOUND', |
| 1827 'STRONG_MODE_INVALID_METHOD_OVERRIDE' |
| 1828 ])); |
1826 verify([source]); | 1829 verify([source]); |
1827 } | 1830 } |
1828 | 1831 |
1829 void test_genericMethod_override_invalidTypeParamCount() { | 1832 void test_genericMethod_override_invalidTypeParamCount() { |
1830 Source source = addSource(r''' | 1833 Source source = addSource(r''' |
1831 class C { | 1834 class C { |
1832 /*=T*/ f/*<T>*/(/*=T*/ x) => null; | 1835 /*=T*/ f/*<T>*/(/*=T*/ x) => null; |
1833 } | 1836 } |
1834 class D extends C { | 1837 class D extends C { |
1835 /*=S*/ f/*<T, S>*/(/*=T*/ x) => null; | 1838 /*=S*/ f/*<T, S>*/(/*=T*/ x) => null; |
1836 }'''); | 1839 }'''); |
1837 // TODO(jmesserly): we can't use assertErrors because STRONG_MODE_* errors | 1840 // TODO(jmesserly): we can't use assertErrors because STRONG_MODE_* errors |
1838 // from CodeChecker don't have working equality. | 1841 // from CodeChecker don't have working equality. |
1839 List<AnalysisError> errors = analysisContext2.computeErrors(source); | 1842 List<AnalysisError> errors = analysisContext2.computeErrors(source); |
1840 expect(errors.map((e) => e.errorCode.name), [ | 1843 expect( |
1841 'STRONG_MODE_INVALID_METHOD_OVERRIDE', | 1844 errors.map((e) => e.errorCode.name), |
1842 'INVALID_METHOD_OVERRIDE_TYPE_PARAMETERS' | 1845 unorderedEquals([ |
1843 ]); | 1846 'STRONG_MODE_INVALID_METHOD_OVERRIDE', |
| 1847 'INVALID_METHOD_OVERRIDE_TYPE_PARAMETERS' |
| 1848 ])); |
1844 verify([source]); | 1849 verify([source]); |
1845 } | 1850 } |
1846 | 1851 |
1847 void test_genericMethod_propagatedType_promotion() { | 1852 void test_genericMethod_propagatedType_promotion() { |
1848 // Regression test for: | 1853 // Regression test for: |
1849 // https://github.com/dart-lang/sdk/issues/25340 | 1854 // https://github.com/dart-lang/sdk/issues/25340 |
1850 | 1855 |
1851 // Note, after https://github.com/dart-lang/sdk/issues/25486 the original | 1856 // Note, after https://github.com/dart-lang/sdk/issues/25486 the original |
1852 // example won't work, as we now compute a static type and therefore discard | 1857 // example won't work, as we now compute a static type and therefore discard |
1853 // the propagated type. So a new test was created that doesn't run under | 1858 // 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... |
2303 main() { | 2308 main() { |
2304 var v = x; | 2309 var v = x; |
2305 v; // marker | 2310 v; // marker |
2306 } | 2311 } |
2307 int x = 3; | 2312 int x = 3; |
2308 '''; | 2313 '''; |
2309 assertPropagatedAssignedType(code, typeProvider.intType, null); | 2314 assertPropagatedAssignedType(code, typeProvider.intType, null); |
2310 assertTypeOfMarkedExpression(code, typeProvider.intType, null); | 2315 assertTypeOfMarkedExpression(code, typeProvider.intType, null); |
2311 } | 2316 } |
2312 } | 2317 } |
OLD | NEW |