Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 engine.static_warning_code_test; | 5 library engine.static_warning_code_test; |
| 6 | 6 |
| 7 import 'package:analyzer/src/generated/source_io.dart'; | 7 import 'package:analyzer/src/generated/source_io.dart'; |
| 8 import 'package:analyzer/src/generated/error.dart'; | 8 import 'package:analyzer/src/generated/error.dart'; |
| 9 import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode; | 9 import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode; |
| 10 import 'package:unittest/unittest.dart'; | 10 import 'package:unittest/unittest.dart'; |
| (...skipping 1691 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1702 int m() { return 0; } | 1702 int m() { return 0; } |
| 1703 } | 1703 } |
| 1704 class B extends A { | 1704 class B extends A { |
| 1705 void m() {} | 1705 void m() {} |
| 1706 }'''); | 1706 }'''); |
| 1707 resolve(source); | 1707 resolve(source); |
| 1708 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE] ); | 1708 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE] ); |
| 1709 verify([source]); | 1709 verify([source]); |
| 1710 } | 1710 } |
| 1711 | 1711 |
| 1712 void test_invalidOverride_defaultOverridesNonDefault() { | |
| 1713 // If the base class provided an explicit value for a default parameter, | |
| 1714 // then it is a static warning for the derived class to provide a different | |
| 1715 // value, even if implicitly. | |
| 1716 Source source = addSource(r''' | |
| 1717 class A { | |
| 1718 foo([x = 1]) {} | |
| 1719 } | |
| 1720 class B extends A { | |
| 1721 foo([x]) {} | |
| 1722 } | |
| 1723 '''); | |
| 1724 resolve(source); | |
| 1725 assertErrors(source, [ | |
| 1726 StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL]) ; | |
| 1727 verify([source]); | |
| 1728 } | |
| 1729 | |
| 1730 void test_invalidOverride_defaultOverridesNonDefault_named() { | |
| 1731 // If the base class provided an explicit value for a default parameter, | |
| 1732 // then it is a static warning for the derived class to provide a different | |
| 1733 // value, even if implicitly. | |
| 1734 Source source = addSource(r''' | |
| 1735 class A { | |
| 1736 foo({x: 1}) {} | |
| 1737 } | |
| 1738 class B extends A { | |
| 1739 foo({x}) {} | |
| 1740 } | |
| 1741 '''); | |
| 1742 resolve(source); | |
| 1743 assertErrors(source, [ | |
| 1744 StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED]); | |
| 1745 verify([source]); | |
| 1746 } | |
| 1747 | |
| 1748 void test_invalidOverride_defaultOverridesNonDefaultNull() { | |
|
Brian Wilkerson
2014/11/04 18:46:42
I'm not sure whether we want to continue, but the
| |
| 1749 // If the base class provided an explicit null value for a default | |
| 1750 // parameter, then it is ok for the derived class to let the default value | |
| 1751 // be implicit, because the implicit default value of null matches the | |
| 1752 // explicit default value of null. | |
| 1753 Source source = addSource(r''' | |
| 1754 class A { | |
| 1755 foo([x = null]) {} | |
| 1756 } | |
| 1757 class B extends A { | |
| 1758 foo([x]) {} | |
| 1759 } | |
| 1760 '''); | |
| 1761 resolve(source); | |
| 1762 assertNoErrors(source); | |
|
scheglov
2014/11/04 18:43:20
Test cases without errors should be added to NonEr
| |
| 1763 verify([source]); | |
| 1764 } | |
| 1765 | |
| 1766 void test_invalidOverride_defaultOverridesNonDefaultNull_named() { | |
| 1767 // If the base class provided an explicit null value for a default | |
| 1768 // parameter, then it is ok for the derived class to let the default value | |
| 1769 // be implicit, because the implicit default value of null matches the | |
| 1770 // explicit default value of null. | |
| 1771 Source source = addSource(r''' | |
| 1772 class A { | |
| 1773 foo({x: null}) {} | |
| 1774 } | |
| 1775 class B extends A { | |
| 1776 foo({x}) {} | |
| 1777 } | |
| 1778 '''); | |
| 1779 resolve(source); | |
| 1780 assertNoErrors(source); | |
| 1781 verify([source]); | |
| 1782 } | |
| 1783 | |
| 1784 void test_invalidOverride_nonDefaultOverridesDefault() { | |
| 1785 // If the base class lets the default parameter be implicit, then it is ok | |
| 1786 // for the derived class to provide an explicit default value, even if it's | |
| 1787 // not null. | |
| 1788 Source source = addSource(r''' | |
| 1789 class A { | |
| 1790 foo([x]) {} | |
| 1791 } | |
| 1792 class B extends A { | |
| 1793 foo([x = 1]) {} | |
| 1794 } | |
| 1795 '''); | |
| 1796 resolve(source); | |
| 1797 assertNoErrors(source); | |
| 1798 verify([source]); | |
| 1799 } | |
| 1800 | |
| 1801 void test_invalidOverride_nonDefaultOverridesDefault_named() { | |
| 1802 // If the base class lets the default parameter be implicit, then it is ok | |
| 1803 // for the derived class to provide an explicit default value, even if it's | |
| 1804 // not null. | |
| 1805 Source source = addSource(r''' | |
| 1806 class A { | |
| 1807 foo({x}) {} | |
| 1808 } | |
| 1809 class B extends A { | |
| 1810 foo({x: 1}) {} | |
| 1811 } | |
| 1812 '''); | |
| 1813 resolve(source); | |
| 1814 assertNoErrors(source); | |
| 1815 verify([source]); | |
| 1816 } | |
| 1817 | |
| 1712 void test_invalidOverrideDifferentDefaultValues_named() { | 1818 void test_invalidOverrideDifferentDefaultValues_named() { |
| 1713 Source source = addSource(r''' | 1819 Source source = addSource(r''' |
| 1714 class A { | 1820 class A { |
| 1715 m({int p : 0}) {} | 1821 m({int p : 0}) {} |
| 1716 } | 1822 } |
| 1717 class B extends A { | 1823 class B extends A { |
| 1718 m({int p : 1}) {} | 1824 m({int p : 1}) {} |
| 1719 }'''); | 1825 }'''); |
| 1720 resolve(source); | 1826 resolve(source); |
| 1721 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_V ALUES_NAMED]); | 1827 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_V ALUES_NAMED]); |
| (...skipping 1415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3137 }'''); | 3243 }'''); |
| 3138 resolve(source); | 3244 resolve(source); |
| 3139 assertErrors(source, [StaticWarningCode.VOID_RETURN_FOR_GETTER]); | 3245 assertErrors(source, [StaticWarningCode.VOID_RETURN_FOR_GETTER]); |
| 3140 } | 3246 } |
| 3141 } | 3247 } |
| 3142 | 3248 |
| 3143 main() { | 3249 main() { |
| 3144 groupSep = ' | '; | 3250 groupSep = ' | '; |
| 3145 runReflectiveTests(StaticWarningCodeTest); | 3251 runReflectiveTests(StaticWarningCodeTest); |
| 3146 } | 3252 } |
| OLD | NEW |