| OLD | NEW |
| 1 # -*- coding: utf-8; -*- | 1 # -*- coding: utf-8; -*- |
| 2 # | 2 # |
| 3 # Copyright (C) 2011 Google Inc. All rights reserved. | 3 # Copyright (C) 2011 Google Inc. All rights reserved. |
| 4 # Copyright (C) 2009 Torch Mobile Inc. | 4 # Copyright (C) 2009 Torch Mobile Inc. |
| 5 # Copyright (C) 2009 Apple Inc. All rights reserved. | 5 # Copyright (C) 2009 Apple Inc. All rights reserved. |
| 6 # Copyright (C) 2010 Chris Jerdonek (cjerdonek@webkit.org) | 6 # Copyright (C) 2010 Chris Jerdonek (cjerdonek@webkit.org) |
| 7 # | 7 # |
| 8 # Redistribution and use in source and binary forms, with or without | 8 # Redistribution and use in source and binary forms, with or without |
| 9 # modification, are permitted provided that the following conditions are | 9 # modification, are permitted provided that the following conditions are |
| 10 # met: | 10 # met: |
| (...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 'is_pure': True, | 503 'is_pure': True, |
| 504 'is_declaration': True}) | 504 'is_declaration': True}) |
| 505 | 505 |
| 506 def test_ignore_macros(self): | 506 def test_ignore_macros(self): |
| 507 self.perform_function_detection(['void aFunctionName(int); \\'], None) | 507 self.perform_function_detection(['void aFunctionName(int); \\'], None) |
| 508 | 508 |
| 509 def test_non_functions(self): | 509 def test_non_functions(self): |
| 510 # This case exposed an error because the open brace was in quotes. | 510 # This case exposed an error because the open brace was in quotes. |
| 511 self.perform_function_detection( | 511 self.perform_function_detection( |
| 512 ['asm(', | 512 ['asm(', |
| 513 ' "stmdb sp!, {r1-r3}" "\n"', | 513 ' "stmdb sp!, {r1-r3}" "\n"', |
| 514 ');'], | 514 ');'], |
| 515 # This isn't a function but it looks like one to our simple | 515 # This isn't a function but it looks like one to our simple |
| 516 # algorithm and that is ok. | 516 # algorithm and that is ok. |
| 517 {'name': 'asm', | 517 {'name': 'asm', |
| 518 'modifiers_and_return_type': '', | 518 'modifiers_and_return_type': '', |
| 519 'function_name_start_position': (0, 0), | 519 'function_name_start_position': (0, 0), |
| 520 'parameter_start_position': (0, 3), | 520 'parameter_start_position': (0, 3), |
| 521 'parameter_end_position': (2, 1), | 521 'parameter_end_position': (2, 1), |
| 522 'body_start_position': (2, 1), | 522 'body_start_position': (2, 1), |
| 523 'end_position': (2, 2), | 523 'end_position': (2, 2), |
| (...skipping 776 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1300 ' [readability/multiline_comment] [5]') | 1300 ' [readability/multiline_comment] [5]') |
| 1301 | 1301 |
| 1302 # Test suspicious usage of "if" like this: | 1302 # Test suspicious usage of "if" like this: |
| 1303 # if (a == b) { | 1303 # if (a == b) { |
| 1304 # DoSomething(); | 1304 # DoSomething(); |
| 1305 # } if (a == c) { // Should be "else if". | 1305 # } if (a == c) { // Should be "else if". |
| 1306 # DoSomething(); // This gets called twice if a == b && a == c. | 1306 # DoSomething(); // This gets called twice if a == b && a == c. |
| 1307 # } | 1307 # } |
| 1308 def test_suspicious_usage_of_if(self): | 1308 def test_suspicious_usage_of_if(self): |
| 1309 self.assert_lint( | 1309 self.assert_lint( |
| 1310 ' if (a == b) {', | 1310 ' if (a == b) {', |
| 1311 '') | 1311 '') |
| 1312 self.assert_lint( | 1312 self.assert_lint( |
| 1313 ' } if (a == b) {', | 1313 ' } if (a == b) {', |
| 1314 'Did you mean "else if"? If not, start a new line for "if".' | 1314 'Did you mean "else if"? If not, start a new line for "if".' |
| 1315 ' [readability/braces] [4]') | 1315 ' [readability/braces] [4]') |
| 1316 | 1316 |
| 1317 # Test suspicious usage of memset. Specifically, a 0 | 1317 # Test suspicious usage of memset. Specifically, a 0 |
| 1318 # as the final argument is almost certainly an error. | 1318 # as the final argument is almost certainly an error. |
| 1319 def test_suspicious_usage_of_memset(self): | 1319 def test_suspicious_usage_of_memset(self): |
| 1320 # Normal use is okay. | 1320 # Normal use is okay. |
| 1321 self.assert_lint( | 1321 self.assert_lint( |
| 1322 ' memset(buf, 0, sizeof(buf))', | 1322 ' memset(buf, 0, sizeof(buf))', |
| 1323 '') | 1323 '') |
| 1324 | 1324 |
| 1325 # A 0 as the final argument is almost certainly an error. | 1325 # A 0 as the final argument is almost certainly an error. |
| 1326 self.assert_lint( | 1326 self.assert_lint( |
| 1327 ' memset(buf, sizeof(buf), 0)', | 1327 ' memset(buf, sizeof(buf), 0)', |
| 1328 'Did you mean "memset(buf, 0, sizeof(buf))"?' | 1328 'Did you mean "memset(buf, 0, sizeof(buf))"?' |
| 1329 ' [runtime/memset] [4]') | 1329 ' [runtime/memset] [4]') |
| 1330 self.assert_lint( | 1330 self.assert_lint( |
| 1331 ' memset(buf, xsize * ysize, 0)', | 1331 ' memset(buf, xsize * ysize, 0)', |
| 1332 'Did you mean "memset(buf, 0, xsize * ysize)"?' | 1332 'Did you mean "memset(buf, 0, xsize * ysize)"?' |
| 1333 ' [runtime/memset] [4]') | 1333 ' [runtime/memset] [4]') |
| 1334 | 1334 |
| 1335 # There is legitimate test code that uses this form. | 1335 # There is legitimate test code that uses this form. |
| 1336 # This is okay since the second argument is a literal. | 1336 # This is okay since the second argument is a literal. |
| 1337 self.assert_lint( | 1337 self.assert_lint( |
| 1338 " memset(buf, 'y', 0)", | 1338 " memset(buf, 'y', 0)", |
| 1339 '') | 1339 '') |
| 1340 self.assert_lint( | 1340 self.assert_lint( |
| 1341 ' memset(buf, 4, 0)', | 1341 ' memset(buf, 4, 0)', |
| 1342 '') | 1342 '') |
| 1343 self.assert_lint( | 1343 self.assert_lint( |
| 1344 ' memset(buf, -1, 0)', | 1344 ' memset(buf, -1, 0)', |
| 1345 '') | 1345 '') |
| 1346 self.assert_lint( | 1346 self.assert_lint( |
| 1347 ' memset(buf, 0xF1, 0)', | 1347 ' memset(buf, 0xF1, 0)', |
| 1348 '') | 1348 '') |
| 1349 self.assert_lint( | 1349 self.assert_lint( |
| 1350 ' memset(buf, 0xcd, 0)', | 1350 ' memset(buf, 0xcd, 0)', |
| 1351 '') | 1351 '') |
| 1352 | 1352 |
| 1353 def test_check_posix_threading(self): | 1353 def test_check_posix_threading(self): |
| 1354 self.assert_lint('sctime_r()', '') | 1354 self.assert_lint('sctime_r()', '') |
| 1355 self.assert_lint('strtok_r()', '') | 1355 self.assert_lint('strtok_r()', '') |
| 1356 self.assert_lint(' strtok_r(foo, ba, r)', '') | 1356 self.assert_lint(' strtok_r(foo, ba, r)', '') |
| 1357 self.assert_lint('brand()', '') | 1357 self.assert_lint('brand()', '') |
| 1358 self.assert_lint('_rand()', '') | 1358 self.assert_lint('_rand()', '') |
| 1359 self.assert_lint('.rand()', '') | 1359 self.assert_lint('.rand()', '') |
| 1360 self.assert_lint('>rand()', '') | 1360 self.assert_lint('>rand()', '') |
| 1361 self.assert_lint('rand()', | 1361 self.assert_lint('rand()', |
| 1362 'Consider using rand_r(...) instead of rand(...)' | 1362 'Consider using rand_r(...) instead of rand(...)' |
| 1363 ' for improved thread safety.' | 1363 ' for improved thread safety.' |
| 1364 ' [runtime/threadsafe_fn] [2]') | 1364 ' [runtime/threadsafe_fn] [2]') |
| 1365 self.assert_lint('strtok()', | 1365 self.assert_lint('strtok()', |
| 1366 'Consider using strtok_r(...) ' | 1366 'Consider using strtok_r(...) ' |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1550 self.assert_lint('CHECK(CreateTestFile(dir, (1 >> 20)));', '') | 1550 self.assert_lint('CHECK(CreateTestFile(dir, (1 >> 20)));', '') |
| 1551 | 1551 |
| 1552 self.assert_lint('CHECK(x<42)', | 1552 self.assert_lint('CHECK(x<42)', |
| 1553 'Consider using CHECK_LT instead of CHECK(a < b)' | 1553 'Consider using CHECK_LT instead of CHECK(a < b)' |
| 1554 ' [readability/check] [2]') | 1554 ' [readability/check] [2]') |
| 1555 self.assert_lint('CHECK(x>42)', | 1555 self.assert_lint('CHECK(x>42)', |
| 1556 'Consider using CHECK_GT instead of CHECK(a > b)' | 1556 'Consider using CHECK_GT instead of CHECK(a > b)' |
| 1557 ' [readability/check] [2]') | 1557 ' [readability/check] [2]') |
| 1558 | 1558 |
| 1559 self.assert_lint( | 1559 self.assert_lint( |
| 1560 ' EXPECT_TRUE(42 < x) // Random comment.', | 1560 ' EXPECT_TRUE(42 < x) // Random comment.', |
| 1561 'Consider using EXPECT_LT instead of EXPECT_TRUE(a < b)' | 1561 'Consider using EXPECT_LT instead of EXPECT_TRUE(a < b)' |
| 1562 ' [readability/check] [2]') | 1562 ' [readability/check] [2]') |
| 1563 self.assert_lint( | 1563 self.assert_lint( |
| 1564 'EXPECT_TRUE( 42 < x )', | 1564 'EXPECT_TRUE( 42 < x )', |
| 1565 'Consider using EXPECT_LT instead of EXPECT_TRUE(a < b)' | 1565 'Consider using EXPECT_LT instead of EXPECT_TRUE(a < b)' |
| 1566 ' [readability/check] [2]') | 1566 ' [readability/check] [2]') |
| 1567 self.assert_lint( | 1567 self.assert_lint( |
| 1568 'CHECK("foo" == "foo")', | 1568 'CHECK("foo" == "foo")', |
| 1569 'Consider using CHECK_EQ instead of CHECK(a == b)' | 1569 'Consider using CHECK_EQ instead of CHECK(a == b)' |
| 1570 ' [readability/check] [2]') | 1570 ' [readability/check] [2]') |
| 1571 | 1571 |
| 1572 self.assert_lint('CHECK_EQ("foo", "foo")', '') | 1572 self.assert_lint('CHECK_EQ("foo", "foo")', '') |
| 1573 | 1573 |
| 1574 def test_check_deprecated_macros(self): | 1574 def test_check_deprecated_macros(self): |
| 1575 self.assert_lint('ASSERT(foo)', 'ASSERT is deprecated. Use DCHECK or ' | 1575 self.assert_lint('ASSERT(foo)', 'ASSERT is deprecated. Use DCHECK or ' |
| 1576 'its variants instead. [build/deprecated] [5]') | 1576 'its variants instead. [build/deprecated] [5]') |
| 1577 self.assert_lint(' ASSERT_UNUSED(foo, foo)', 'ASSERT_UNUSED is ' | 1577 self.assert_lint(' ASSERT_UNUSED(foo, foo)', 'ASSERT_UNUSED is ' |
| 1578 'deprecated. Use DCHECK or its variants instead. ' | 1578 'deprecated. Use DCHECK or its variants instead. ' |
| 1579 '[build/deprecated] [5]') | 1579 '[build/deprecated] [5]') |
| 1580 self.assert_lint('ASSERT_NOT_REACHED()', 'ASSERT_NOT_REACHED is ' | 1580 self.assert_lint('ASSERT_NOT_REACHED()', 'ASSERT_NOT_REACHED is ' |
| 1581 'deprecated. Use NOTREACHED instead. ' | 1581 'deprecated. Use NOTREACHED instead. ' |
| 1582 '[build/deprecated] [5]') | 1582 '[build/deprecated] [5]') |
| 1583 self.assert_lint('ASSERT_WITH_SECURITY_IMPLICATION(foo)', | 1583 self.assert_lint('ASSERT_WITH_SECURITY_IMPLICATION(foo)', |
| 1584 'ASSERT_WITH_SECURITY_IMPLICATION is deprecated. Use ' | 1584 'ASSERT_WITH_SECURITY_IMPLICATION is deprecated. Use ' |
| 1585 'SECURITY_DCHECK instead. [build/deprecated] [5]') | 1585 'SECURITY_DCHECK instead. [build/deprecated] [5]') |
| 1586 self.assert_lint('WTF_LOG(foo)', 'WTF_LOG is deprecated. Use DVLOG ' | 1586 self.assert_lint('WTF_LOG(foo)', 'WTF_LOG is deprecated. Use DVLOG ' |
| 1587 'instead. [build/deprecated] [5]') | 1587 'instead. [build/deprecated] [5]') |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1620 self.assert_lint('string Foo::bar;', | 1620 self.assert_lint('string Foo::bar;', |
| 1621 'For a static/global string constant, use a C style ' | 1621 'For a static/global string constant, use a C style ' |
| 1622 'string instead: "char Foo::bar[]".' | 1622 'string instead: "char Foo::bar[]".' |
| 1623 ' [runtime/string] [4]') | 1623 ' [runtime/string] [4]') |
| 1624 # Rare case. | 1624 # Rare case. |
| 1625 self.assert_lint('string foo("foobar");', | 1625 self.assert_lint('string foo("foobar");', |
| 1626 'For a static/global string constant, use a C style ' | 1626 'For a static/global string constant, use a C style ' |
| 1627 'string instead: "char foo[]".' | 1627 'string instead: "char foo[]".' |
| 1628 ' [runtime/string] [4]') | 1628 ' [runtime/string] [4]') |
| 1629 # Should not catch local or member variables. | 1629 # Should not catch local or member variables. |
| 1630 self.assert_lint(' string foo', '') | 1630 self.assert_lint(' string foo', '') |
| 1631 # Should not catch functions. | 1631 # Should not catch functions. |
| 1632 self.assert_lint('string EmptyString() { return ""; }', '') | 1632 self.assert_lint('string EmptyString() { return ""; }', '') |
| 1633 self.assert_lint('string EmptyString () { return ""; }', '') | 1633 self.assert_lint('string EmptyString () { return ""; }', '') |
| 1634 self.assert_lint('string VeryLongNameFunctionSometimesEndsWith(\n' | 1634 self.assert_lint('string VeryLongNameFunctionSometimesEndsWith(\n' |
| 1635 ' VeryLongNameType veryLongNameVariable) { }', '') | 1635 ' VeryLongNameType veryLongNameVariable) { }', '') |
| 1636 self.assert_lint('template<>\n' | 1636 self.assert_lint('template<>\n' |
| 1637 'string FunctionTemplateSpecialization<SomeType>(\n' | 1637 'string FunctionTemplateSpecialization<SomeType>(\n' |
| 1638 ' int x) { return ""; }', '') | 1638 ' int x) { return ""; }', '') |
| 1639 self.assert_lint('template<>\n' | 1639 self.assert_lint('template<>\n' |
| 1640 'string FunctionTemplateSpecialization<vector<A::B>* >(
\n' | 1640 'string FunctionTemplateSpecialization<vector<A::B>* >(
\n' |
| 1641 ' int x) { return ""; }', '') | 1641 ' int x) { return ""; }', '') |
| 1642 | 1642 |
| 1643 # should not catch methods of template classes. | 1643 # should not catch methods of template classes. |
| 1644 self.assert_lint('string Class<Type>::Method() const\n' | 1644 self.assert_lint('string Class<Type>::Method() const\n' |
| 1645 '{\n' | 1645 '{\n' |
| 1646 ' return "";\n' | 1646 ' return "";\n' |
| 1647 '}\n', '') | 1647 '}\n', '') |
| 1648 self.assert_lint('string Class<Type>::Method(\n' | 1648 self.assert_lint('string Class<Type>::Method(\n' |
| 1649 ' int arg) const\n' | 1649 ' int arg) const\n' |
| 1650 '{\n' | 1650 '{\n' |
| 1651 ' return "";\n' | 1651 ' return "";\n' |
| 1652 '}\n', '') | 1652 '}\n', '') |
| 1653 | 1653 |
| 1654 def test_no_spaces_in_function_calls(self): | 1654 def test_no_spaces_in_function_calls(self): |
| 1655 self.assert_lint('TellStory(1, 3);', | 1655 self.assert_lint('TellStory(1, 3);', |
| 1656 '') | 1656 '') |
| 1657 self.assert_lint('TellStory(1 /* wolf */, 3 /* pigs */);', | 1657 self.assert_lint('TellStory(1 /* wolf */, 3 /* pigs */);', |
| 1658 '') | 1658 '') |
| 1659 self.assert_multi_line_lint('#endif\n );', | 1659 self.assert_multi_line_lint('#endif\n );', |
| 1660 '') | 1660 '') |
| 1661 | 1661 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1719 self.assert_multi_line_lint( | 1719 self.assert_multi_line_lint( |
| 1720 '''\ | 1720 '''\ |
| 1721 struct Foo* | 1721 struct Foo* |
| 1722 foo = NewFoo();''', | 1722 foo = NewFoo();''', |
| 1723 '') | 1723 '') |
| 1724 # Here is an example where the linter gets confused, even though | 1724 # Here is an example where the linter gets confused, even though |
| 1725 # the code doesn't violate the style guide. | 1725 # the code doesn't violate the style guide. |
| 1726 self.assert_multi_line_lint( | 1726 self.assert_multi_line_lint( |
| 1727 'class Foo\n' | 1727 'class Foo\n' |
| 1728 '#ifdef DERIVE_FROM_GOO\n' | 1728 '#ifdef DERIVE_FROM_GOO\n' |
| 1729 ' : public Goo {\n' | 1729 ' : public Goo {\n' |
| 1730 '#else\n' | 1730 '#else\n' |
| 1731 ' : public Hoo {\n' | 1731 ' : public Hoo {\n' |
| 1732 '#endif\n' | 1732 '#endif\n' |
| 1733 '};', | 1733 '};', |
| 1734 'Failed to find complete declaration of class Foo' | 1734 'Failed to find complete declaration of class Foo' |
| 1735 ' [build/class] [5]') | 1735 ' [build/class] [5]') |
| 1736 | 1736 |
| 1737 def test_build_end_comment(self): | 1737 def test_build_end_comment(self): |
| 1738 # The crosstool compiler we currently use will fail to compile the | 1738 # The crosstool compiler we currently use will fail to compile the |
| 1739 # code in this test, so we might consider removing the lint check. | 1739 # code in this test, so we might consider removing the lint check. |
| 1740 self.assert_lint('#endif Not a comment', | 1740 self.assert_lint('#endif Not a comment', |
| 1741 'Uncommented text after #endif is non-standard.' | 1741 'Uncommented text after #endif is non-standard.' |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2108 'MyClass', False) | 2108 'MyClass', False) |
| 2109 build_test_case([('unsigned', 'm_unsignedMember', 4), ('unsigned', 'm_an
otherUnsigned', 3)], | 2109 build_test_case([('unsigned', 'm_unsignedMember', 4), ('unsigned', 'm_an
otherUnsigned', 3)], |
| 2110 'MyClass', False) | 2110 'MyClass', False) |
| 2111 | 2111 |
| 2112 build_test_case([('bool', 'm_boolMember', 4), ('bool', 'm_anotherbool',
3), | 2112 build_test_case([('bool', 'm_boolMember', 4), ('bool', 'm_anotherbool',
3), |
| 2113 ('bool', 'm_moreBool', 1), ('bool', 'm_lastBool', 1), | 2113 ('bool', 'm_moreBool', 1), ('bool', 'm_lastBool', 1), |
| 2114 ('unsigned int', 'm_tokenUnsigned', 4)], | 2114 ('unsigned int', 'm_tokenUnsigned', 4)], |
| 2115 'MyClass', True, ['Omit int when using unsigned [runtim
e/unsigned] [1]']) | 2115 'MyClass', True, ['Omit int when using unsigned [runtim
e/unsigned] [1]']) |
| 2116 | 2116 |
| 2117 self.assert_multi_line_lint('class NoProblemsHere {\n' | 2117 self.assert_multi_line_lint('class NoProblemsHere {\n' |
| 2118 ' bool m_boolMember;\n' | 2118 ' bool m_boolMember;\n' |
| 2119 ' unsigned m_unsignedMember;\n' | 2119 ' unsigned m_unsignedMember;\n' |
| 2120 ' unsigned m_bitField1 : 1;\n' | 2120 ' unsigned m_bitField1 : 1;\n' |
| 2121 ' unsigned m_bitField4 : 4;\n' | 2121 ' unsigned m_bitField4 : 4;\n' |
| 2122 '}\n', '') | 2122 '}\n', '') |
| 2123 | 2123 |
| 2124 # Bitfields which are not declared unsigned or bool will generate a warning. | 2124 # Bitfields which are not declared unsigned or bool will generate a warning. |
| 2125 def test_unsigned_bool_bitfields(self): | 2125 def test_unsigned_bool_bitfields(self): |
| 2126 def errmsg(member, name, bit_type): | 2126 def errmsg(member, name, bit_type): |
| 2127 return ('Member %s of class %s defined as a bitfield of type %s. ' | 2127 return ('Member %s of class %s defined as a bitfield of type %s. ' |
| 2128 'Please declare all bitfields as unsigned. [runtime/bitfiel
ds] [4]' | 2128 'Please declare all bitfields as unsigned. [runtime/bitfiel
ds] [4]' |
| 2129 % (member, name, bit_type)) | 2129 % (member, name, bit_type)) |
| 2130 | 2130 |
| 2131 def warning_bitfield_test(member, name, bit_type, bits): | 2131 def warning_bitfield_test(member, name, bit_type, bits): |
| (...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2657 def assert_function_length_check_above_error_level(self, error_level): | 2657 def assert_function_length_check_above_error_level(self, error_level): |
| 2658 """Generate and check function just above the trigger level for --v sett
ing. | 2658 """Generate and check function just above the trigger level for --v sett
ing. |
| 2659 | 2659 |
| 2660 Args: | 2660 Args: |
| 2661 error_level: --v setting for cpp_style. | 2661 error_level: --v setting for cpp_style. |
| 2662 """ | 2662 """ |
| 2663 self.assert_function_length_check_definition(self.trigger_lines(error_le
vel) + 1, | 2663 self.assert_function_length_check_definition(self.trigger_lines(error_le
vel) + 1, |
| 2664 error_level) | 2664 error_level) |
| 2665 | 2665 |
| 2666 def function_body(self, number_of_lines): | 2666 def function_body(self, number_of_lines): |
| 2667 return ' {\n' + ' this_is_just_a_test();\n' * number_of_lines + '}' | 2667 return ' {\n' + ' this_is_just_a_test();\n' * number_of_lines + '}' |
| 2668 | 2668 |
| 2669 def function_body_with_blank_lines(self, number_of_lines): | 2669 def function_body_with_blank_lines(self, number_of_lines): |
| 2670 return ' {\n' + ' this_is_just_a_test();\n\n' * number_of_lines + '}' | 2670 return ' {\n' + ' this_is_just_a_test();\n\n' * number_of_lines + '}' |
| 2671 | 2671 |
| 2672 def function_body_with_no_lints(self, number_of_lines): | 2672 def function_body_with_no_lints(self, number_of_lines): |
| 2673 return ' {\n' + ' this_is_just_a_test(); // NOLINT\n' * number_of_li
nes + '}' | 2673 return ' {\n' + ' this_is_just_a_test(); // NOLINT\n' * number_of_line
s + '}' |
| 2674 | 2674 |
| 2675 # Test line length checks. | 2675 # Test line length checks. |
| 2676 def test_function_length_check_declaration(self): | 2676 def test_function_length_check_declaration(self): |
| 2677 self.assert_function_lengths_check( | 2677 self.assert_function_lengths_check( |
| 2678 'void test();', # Not a function definition | 2678 'void test();', # Not a function definition |
| 2679 '') | 2679 '') |
| 2680 | 2680 |
| 2681 def test_function_length_check_declaration_with_block_following(self): | 2681 def test_function_length_check_declaration_with_block_following(self): |
| 2682 self.assert_function_lengths_check( | 2682 self.assert_function_lengths_check( |
| 2683 ('void test();\n' | 2683 ('void test();\n' |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2730 def test_function_length_check_definition_at_severity1(self): | 2730 def test_function_length_check_definition_at_severity1(self): |
| 2731 self.assert_function_length_check_definition_ok(self.trigger_lines(1)) | 2731 self.assert_function_length_check_definition_ok(self.trigger_lines(1)) |
| 2732 | 2732 |
| 2733 def test_function_length_check_definition_above_severity1(self): | 2733 def test_function_length_check_definition_above_severity1(self): |
| 2734 self.assert_function_length_check_above_error_level(1) | 2734 self.assert_function_length_check_above_error_level(1) |
| 2735 | 2735 |
| 2736 def test_function_length_check_definition_severity1_plus_indented(self): | 2736 def test_function_length_check_definition_severity1_plus_indented(self): |
| 2737 error_level = 1 | 2737 error_level = 1 |
| 2738 error_lines = self.trigger_lines(error_level) + 1 | 2738 error_lines = self.trigger_lines(error_level) + 1 |
| 2739 trigger_level = self.trigger_lines(self.min_confidence) | 2739 trigger_level = self.trigger_lines(self.min_confidence) |
| 2740 indent_spaces = ' ' | 2740 indent_spaces = ' ' |
| 2741 self.assert_function_lengths_check( | 2741 self.assert_function_lengths_check( |
| 2742 re.sub(r'(?m)^(.)', indent_spaces + r'\1', | 2742 re.sub(r'(?m)^(.)', indent_spaces + r'\1', |
| 2743 'void test_indent(int x)\n' + self.function_body(error_lines)
), | 2743 'void test_indent(int x)\n' + self.function_body(error_lines)
), |
| 2744 ('Small and focused functions are preferred: ' | 2744 ('Small and focused functions are preferred: ' |
| 2745 'test_indent() has %d non-comment lines ' | 2745 'test_indent() has %d non-comment lines ' |
| 2746 '(error triggered by exceeding %d lines).' | 2746 '(error triggered by exceeding %d lines).' |
| 2747 ' [readability/fn_size] [%d]') | 2747 ' [readability/fn_size] [%d]') |
| 2748 % (error_lines, trigger_level, error_level)) | 2748 % (error_lines, trigger_level, error_level)) |
| 2749 | 2749 |
| 2750 def test_function_length_check_definition_severity1_plus_blanks(self): | 2750 def test_function_length_check_definition_severity1_plus_blanks(self): |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2915 | 2915 |
| 2916 self.assert_multi_line_lint( | 2916 self.assert_multi_line_lint( |
| 2917 '''\ | 2917 '''\ |
| 2918 class Foo::Goo { | 2918 class Foo::Goo { |
| 2919 virtual ~Goo(); | 2919 virtual ~Goo(); |
| 2920 virtual void goo(); | 2920 virtual void goo(); |
| 2921 };''', | 2921 };''', |
| 2922 '') | 2922 '') |
| 2923 self.assert_multi_line_lint( | 2923 self.assert_multi_line_lint( |
| 2924 'class MyClass {\n' | 2924 'class MyClass {\n' |
| 2925 ' int getIntValue() { DCHECK(m_ptr); return *m_ptr; }\n' | 2925 ' int getIntValue() { DCHECK(m_ptr); return *m_ptr; }\n' |
| 2926 '};\n', | 2926 '};\n', |
| 2927 '') | 2927 '') |
| 2928 | 2928 |
| 2929 self.assert_multi_line_lint( | 2929 self.assert_multi_line_lint( |
| 2930 '''\ | 2930 '''\ |
| 2931 class Qualified::Goo : public Foo { | 2931 class Qualified::Goo : public Foo { |
| 2932 virtual void goo(); | 2932 virtual void goo(); |
| 2933 };''', | 2933 };''', |
| 2934 '') | 2934 '') |
| 2935 | 2935 |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3065 code: C++ source code expected to generate a warning message. | 3065 code: C++ source code expected to generate a warning message. |
| 3066 expected_message: Message expected to be generated by the C++ code. | 3066 expected_message: Message expected to be generated by the C++ code. |
| 3067 """ | 3067 """ |
| 3068 self.assertEqual(expected_message, | 3068 self.assertEqual(expected_message, |
| 3069 self.perform_pass_ptr_check(code)) | 3069 self.perform_pass_ptr_check(code)) |
| 3070 | 3070 |
| 3071 def test_pass_ref_ptr_in_function(self): | 3071 def test_pass_ref_ptr_in_function(self): |
| 3072 self.assert_pass_ptr_check( | 3072 self.assert_pass_ptr_check( |
| 3073 'int myFunction()\n' | 3073 'int myFunction()\n' |
| 3074 '{\n' | 3074 '{\n' |
| 3075 ' PassRefPtr<Type1> variable = variable2;\n' | 3075 ' PassRefPtr<Type1> variable = variable2;\n' |
| 3076 '}', | 3076 '}', |
| 3077 'Local variables should never be PassRefPtr (see ' | 3077 'Local variables should never be PassRefPtr (see ' |
| 3078 'http://webkit.org/coding/RefPtr.html). [readability/pass_ptr] [5]'
) | 3078 'http://webkit.org/coding/RefPtr.html). [readability/pass_ptr] [5]'
) |
| 3079 | 3079 |
| 3080 def test_pass_own_ptr_in_function(self): | 3080 def test_pass_own_ptr_in_function(self): |
| 3081 self.assert_pass_ptr_check( | 3081 self.assert_pass_ptr_check( |
| 3082 'int myFunction()\n' | 3082 'int myFunction()\n' |
| 3083 '{\n' | 3083 '{\n' |
| 3084 ' PassOwnPtr<Type1> variable = variable2;\n' | 3084 ' PassOwnPtr<Type1> variable = variable2;\n' |
| 3085 '}', | 3085 '}', |
| 3086 'Local variables should never be PassOwnPtr (see ' | 3086 'Local variables should never be PassOwnPtr (see ' |
| 3087 'http://webkit.org/coding/RefPtr.html). [readability/pass_ptr] [5]'
) | 3087 'http://webkit.org/coding/RefPtr.html). [readability/pass_ptr] [5]'
) |
| 3088 | 3088 |
| 3089 def test_pass_other_type_ptr_in_function(self): | 3089 def test_pass_other_type_ptr_in_function(self): |
| 3090 self.assert_pass_ptr_check( | 3090 self.assert_pass_ptr_check( |
| 3091 'int myFunction()\n' | 3091 'int myFunction()\n' |
| 3092 '{\n' | 3092 '{\n' |
| 3093 ' PassOtherTypePtr<Type1> variable;\n' | 3093 ' PassOtherTypePtr<Type1> variable;\n' |
| 3094 '}', | 3094 '}', |
| 3095 'Local variables should never be PassOtherTypePtr (see ' | 3095 'Local variables should never be PassOtherTypePtr (see ' |
| 3096 'http://webkit.org/coding/RefPtr.html). [readability/pass_ptr] [5]'
) | 3096 'http://webkit.org/coding/RefPtr.html). [readability/pass_ptr] [5]'
) |
| 3097 | 3097 |
| 3098 def test_pass_ref_ptr_return_value(self): | 3098 def test_pass_ref_ptr_return_value(self): |
| 3099 self.assert_pass_ptr_check( | 3099 self.assert_pass_ptr_check( |
| 3100 'PassRefPtr<Type1>\n' | 3100 'PassRefPtr<Type1>\n' |
| 3101 'myFunction(int)\n' | 3101 'myFunction(int)\n' |
| 3102 '{\n' | 3102 '{\n' |
| 3103 '}', | 3103 '}', |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3159 '') | 3159 '') |
| 3160 self.assert_pass_ptr_check( | 3160 self.assert_pass_ptr_check( |
| 3161 'int myFunction(OwnPtr<Type1>& simple)\n' | 3161 'int myFunction(OwnPtr<Type1>& simple)\n' |
| 3162 '{\n' | 3162 '{\n' |
| 3163 '}', | 3163 '}', |
| 3164 '') | 3164 '') |
| 3165 | 3165 |
| 3166 def test_ref_ptr_member_variable(self): | 3166 def test_ref_ptr_member_variable(self): |
| 3167 self.assert_pass_ptr_check( | 3167 self.assert_pass_ptr_check( |
| 3168 'class Foo {' | 3168 'class Foo {' |
| 3169 ' RefPtr<Type1> m_other;\n' | 3169 ' RefPtr<Type1> m_other;\n' |
| 3170 '};\n', | 3170 '};\n', |
| 3171 '') | 3171 '') |
| 3172 | 3172 |
| 3173 | 3173 |
| 3174 class LeakyPatternTest(CppStyleTestBase): | 3174 class LeakyPatternTest(CppStyleTestBase): |
| 3175 | 3175 |
| 3176 def assert_leaky_pattern_check(self, code, expected_message): | 3176 def assert_leaky_pattern_check(self, code, expected_message): |
| 3177 """Check warnings for leaky patterns are as expected. | 3177 """Check warnings for leaky patterns are as expected. |
| 3178 | 3178 |
| 3179 Args: | 3179 Args: |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3223 class WebKitStyleTest(CppStyleTestBase): | 3223 class WebKitStyleTest(CppStyleTestBase): |
| 3224 | 3224 |
| 3225 # for https://www.chromium.org/blink/coding-style | 3225 # for https://www.chromium.org/blink/coding-style |
| 3226 | 3226 |
| 3227 def test_line_breaking(self): | 3227 def test_line_breaking(self): |
| 3228 # 2. An else statement should go on the same line as a preceding | 3228 # 2. An else statement should go on the same line as a preceding |
| 3229 # close brace if one is present, else it should line up with the | 3229 # close brace if one is present, else it should line up with the |
| 3230 # if statement. | 3230 # if statement. |
| 3231 self.assert_multi_line_lint( | 3231 self.assert_multi_line_lint( |
| 3232 'if (condition) {\n' | 3232 'if (condition) {\n' |
| 3233 ' doSomething();\n' | 3233 ' doSomething();\n' |
| 3234 ' doSomethingAgain();\n' | 3234 ' doSomethingAgain();\n' |
| 3235 '} else {\n' | 3235 '} else {\n' |
| 3236 ' doSomethingElse();\n' | 3236 ' doSomethingElse();\n' |
| 3237 ' doSomethingElseAgain();\n' | 3237 ' doSomethingElseAgain();\n' |
| 3238 '}\n', | 3238 '}\n', |
| 3239 '') | 3239 '') |
| 3240 self.assert_multi_line_lint( | 3240 self.assert_multi_line_lint( |
| 3241 'if (condition)\n' | 3241 'if (condition)\n' |
| 3242 ' doSomething();\n' | 3242 ' doSomething();\n' |
| 3243 'else\n' | 3243 'else\n' |
| 3244 ' doSomethingElse();\n', | 3244 ' doSomethingElse();\n', |
| 3245 '') | 3245 '') |
| 3246 self.assert_multi_line_lint( | 3246 self.assert_multi_line_lint( |
| 3247 'if (condition) {\n' | 3247 'if (condition) {\n' |
| 3248 ' doSomething();\n' | 3248 ' doSomething();\n' |
| 3249 '} else {\n' | 3249 '} else {\n' |
| 3250 ' doSomethingElse();\n' | 3250 ' doSomethingElse();\n' |
| 3251 ' doSomethingElseAgain();\n' | 3251 ' doSomethingElseAgain();\n' |
| 3252 '}\n', | 3252 '}\n', |
| 3253 '') | 3253 '') |
| 3254 self.assert_multi_line_lint( | 3254 self.assert_multi_line_lint( |
| 3255 '#define TEST_ASSERT(expression) do { if (!(expression)) { ' | 3255 '#define TEST_ASSERT(expression) do { if (!(expression)) { ' |
| 3256 'TestsController::shared().testFailed(__FILE__, __LINE__, #expressio
n); ' | 3256 'TestsController::shared().testFailed(__FILE__, __LINE__, #expressio
n); ' |
| 3257 'return; } } while (0)\n', | 3257 'return; } } while (0)\n', |
| 3258 '') | 3258 '') |
| 3259 # FIXME: currently we only check first conditional, so we cannot detect
errors in next ones. | 3259 # FIXME: currently we only check first conditional, so we cannot detect
errors in next ones. |
| 3260 self.assert_multi_line_lint( | 3260 self.assert_multi_line_lint( |
| 3261 'WTF_MAKE_NONCOPYABLE(ClassName); WTF_MAKE_FAST_ALLOCATED;\n', | 3261 'WTF_MAKE_NONCOPYABLE(ClassName); WTF_MAKE_FAST_ALLOCATED;\n', |
| 3262 '') | 3262 '') |
| 3263 self.assert_multi_line_lint( | 3263 self.assert_multi_line_lint( |
| 3264 'if (condition) doSomething(); else {\n' | 3264 'if (condition) doSomething(); else {\n' |
| 3265 ' doSomethingElse();\n' | 3265 ' doSomethingElse();\n' |
| 3266 '}\n', | 3266 '}\n', |
| 3267 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') | 3267 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') |
| 3268 self.assert_multi_line_lint( | 3268 self.assert_multi_line_lint( |
| 3269 'void func()\n' | 3269 'void func()\n' |
| 3270 '{\n' | 3270 '{\n' |
| 3271 ' while (condition) { }\n' | 3271 ' while (condition) { }\n' |
| 3272 ' return 0;\n' | 3272 ' return 0;\n' |
| 3273 '}\n', | 3273 '}\n', |
| 3274 '') | 3274 '') |
| 3275 | 3275 |
| 3276 # 3. An else if statement should be written as an if statement | 3276 # 3. An else if statement should be written as an if statement |
| 3277 # when the prior if concludes with a return statement. | 3277 # when the prior if concludes with a return statement. |
| 3278 self.assert_multi_line_lint( | 3278 self.assert_multi_line_lint( |
| 3279 'if (motivated) {\n' | 3279 'if (motivated) {\n' |
| 3280 ' if (liquid)\n' | 3280 ' if (liquid)\n' |
| 3281 ' return money;\n' | 3281 ' return money;\n' |
| 3282 '} else if (tired) {\n' | 3282 '} else if (tired) {\n' |
| 3283 ' break;\n' | 3283 ' break;\n' |
| 3284 '}', | 3284 '}', |
| 3285 '') | 3285 '') |
| 3286 self.assert_multi_line_lint( | 3286 self.assert_multi_line_lint( |
| 3287 'if (condition)\n' | 3287 'if (condition)\n' |
| 3288 ' doSomething();\n' | 3288 ' doSomething();\n' |
| 3289 'else if (otherCondition)\n' | 3289 'else if (otherCondition)\n' |
| 3290 ' doSomethingElse();\n', | 3290 ' doSomethingElse();\n', |
| 3291 '') | 3291 '') |
| 3292 self.assert_multi_line_lint( | 3292 self.assert_multi_line_lint( |
| 3293 'if (condition)\n' | 3293 'if (condition)\n' |
| 3294 ' doSomething();\n' | 3294 ' doSomething();\n' |
| 3295 'else\n' | 3295 'else\n' |
| 3296 ' doSomethingElse();\n', | 3296 ' doSomethingElse();\n', |
| 3297 '') | 3297 '') |
| 3298 self.assert_multi_line_lint( | 3298 self.assert_multi_line_lint( |
| 3299 'if (condition)\n' | 3299 'if (condition)\n' |
| 3300 ' returnValue = foo;\n' | 3300 ' returnValue = foo;\n' |
| 3301 'else if (otherCondition)\n' | 3301 'else if (otherCondition)\n' |
| 3302 ' returnValue = bar;\n', | 3302 ' returnValue = bar;\n', |
| 3303 '') | 3303 '') |
| 3304 self.assert_multi_line_lint( | 3304 self.assert_multi_line_lint( |
| 3305 'if (condition)\n' | 3305 'if (condition)\n' |
| 3306 ' returnValue = foo;\n' | 3306 ' returnValue = foo;\n' |
| 3307 'else\n' | 3307 'else\n' |
| 3308 ' returnValue = bar;\n', | 3308 ' returnValue = bar;\n', |
| 3309 '') | 3309 '') |
| 3310 self.assert_multi_line_lint( | 3310 self.assert_multi_line_lint( |
| 3311 'if (condition)\n' | 3311 'if (condition)\n' |
| 3312 ' doSomething();\n' | 3312 ' doSomething();\n' |
| 3313 'else if (liquid)\n' | 3313 'else if (liquid)\n' |
| 3314 ' return money;\n' | 3314 ' return money;\n' |
| 3315 'else if (broke)\n' | 3315 'else if (broke)\n' |
| 3316 ' return favor;\n' | 3316 ' return favor;\n' |
| 3317 'else\n' | 3317 'else\n' |
| 3318 ' sleep(28800);\n', | 3318 ' sleep(28800);\n', |
| 3319 '') | 3319 '') |
| 3320 self.assert_multi_line_lint( | 3320 self.assert_multi_line_lint( |
| 3321 'if (liquid) {\n' | 3321 'if (liquid) {\n' |
| 3322 ' prepare();\n' | 3322 ' prepare();\n' |
| 3323 ' return money;\n' | 3323 ' return money;\n' |
| 3324 '} else if (greedy) {\n' | 3324 '} else if (greedy) {\n' |
| 3325 ' keep();\n' | 3325 ' keep();\n' |
| 3326 ' return nothing;\n' | 3326 ' return nothing;\n' |
| 3327 '}\n', | 3327 '}\n', |
| 3328 'An else if statement should be written as an if statement when the
' | 3328 'An else if statement should be written as an if statement when the
' |
| 3329 'prior "if" concludes with a return, break, continue or goto stateme
nt.' | 3329 'prior "if" concludes with a return, break, continue or goto stateme
nt.' |
| 3330 ' [readability/control_flow] [4]') | 3330 ' [readability/control_flow] [4]') |
| 3331 self.assert_multi_line_lint( | 3331 self.assert_multi_line_lint( |
| 3332 ' if (stupid) {\n' | 3332 ' if (stupid) {\n' |
| 3333 'infiniteLoop:\n' | 3333 'infiniteLoop:\n' |
| 3334 ' goto infiniteLoop;\n' | 3334 ' goto infiniteLoop;\n' |
| 3335 ' } else if (evil)\n' | 3335 ' } else if (evil)\n' |
| 3336 ' goto hell;\n', | 3336 ' goto hell;\n', |
| 3337 ['If one part of an if-else statement uses curly braces, the other p
art must too. [whitespace/braces] [4]', | 3337 ['If one part of an if-else statement uses curly braces, the other p
art must too. [whitespace/braces] [4]', |
| 3338 'An else if statement should be written as an if statement when the
' | 3338 'An else if statement should be written as an if statement when the
' |
| 3339 'prior "if" concludes with a return, break, continue or goto statem
ent.' | 3339 'prior "if" concludes with a return, break, continue or goto statem
ent.' |
| 3340 ' [readability/control_flow] [4]']) | 3340 ' [readability/control_flow] [4]']) |
| 3341 self.assert_multi_line_lint( | 3341 self.assert_multi_line_lint( |
| 3342 'if (liquid)\n' | 3342 'if (liquid)\n' |
| 3343 '{\n' | 3343 '{\n' |
| 3344 ' prepare();\n' | 3344 ' prepare();\n' |
| 3345 ' return money;\n' | 3345 ' return money;\n' |
| 3346 '}\n' | 3346 '}\n' |
| 3347 'else if (greedy)\n' | 3347 'else if (greedy)\n' |
| 3348 ' keep();\n', | 3348 ' keep();\n', |
| 3349 ['If one part of an if-else statement uses curly braces, the other p
art must too. [whitespace/braces] [4]', | 3349 ['If one part of an if-else statement uses curly braces, the other p
art must too. [whitespace/braces] [4]', |
| 3350 'An else if statement should be written as an if statement when the
' | 3350 'An else if statement should be written as an if statement when the
' |
| 3351 'prior "if" concludes with a return, break, continue or goto statem
ent.' | 3351 'prior "if" concludes with a return, break, continue or goto statem
ent.' |
| 3352 ' [readability/control_flow] [4]']) | 3352 ' [readability/control_flow] [4]']) |
| 3353 self.assert_multi_line_lint( | 3353 self.assert_multi_line_lint( |
| 3354 'if (gone)\n' | 3354 'if (gone)\n' |
| 3355 ' return;\n' | 3355 ' return;\n' |
| 3356 'else if (here)\n' | 3356 'else if (here)\n' |
| 3357 ' go();\n', | 3357 ' go();\n', |
| 3358 'An else if statement should be written as an if statement when the
' | 3358 'An else if statement should be written as an if statement when the
' |
| 3359 'prior "if" concludes with a return, break, continue or goto stateme
nt.' | 3359 'prior "if" concludes with a return, break, continue or goto stateme
nt.' |
| 3360 ' [readability/control_flow] [4]') | 3360 ' [readability/control_flow] [4]') |
| 3361 self.assert_multi_line_lint( | 3361 self.assert_multi_line_lint( |
| 3362 'if (gone)\n' | 3362 'if (gone)\n' |
| 3363 ' return;\n' | 3363 ' return;\n' |
| 3364 'else\n' | 3364 'else\n' |
| 3365 ' go();\n', | 3365 ' go();\n', |
| 3366 'An else statement can be removed when the prior "if" concludes ' | 3366 'An else statement can be removed when the prior "if" concludes ' |
| 3367 'with a return, break, continue or goto statement.' | 3367 'with a return, break, continue or goto statement.' |
| 3368 ' [readability/control_flow] [4]') | 3368 ' [readability/control_flow] [4]') |
| 3369 self.assert_multi_line_lint( | 3369 self.assert_multi_line_lint( |
| 3370 'if (motivated) {\n' | 3370 'if (motivated) {\n' |
| 3371 ' prepare();\n' | 3371 ' prepare();\n' |
| 3372 ' continue;\n' | 3372 ' continue;\n' |
| 3373 '} else {\n' | 3373 '} else {\n' |
| 3374 ' cleanUp();\n' | 3374 ' cleanUp();\n' |
| 3375 ' break;\n' | 3375 ' break;\n' |
| 3376 '}\n', | 3376 '}\n', |
| 3377 'An else statement can be removed when the prior "if" concludes ' | 3377 'An else statement can be removed when the prior "if" concludes ' |
| 3378 'with a return, break, continue or goto statement.' | 3378 'with a return, break, continue or goto statement.' |
| 3379 ' [readability/control_flow] [4]') | 3379 ' [readability/control_flow] [4]') |
| 3380 self.assert_multi_line_lint( | 3380 self.assert_multi_line_lint( |
| 3381 'if (tired)\n' | 3381 'if (tired)\n' |
| 3382 ' break;\n' | 3382 ' break;\n' |
| 3383 'else {\n' | 3383 'else {\n' |
| 3384 ' prepare();\n' | 3384 ' prepare();\n' |
| 3385 ' continue;\n' | 3385 ' continue;\n' |
| 3386 '}\n', | 3386 '}\n', |
| 3387 ['If one part of an if-else statement uses curly braces, the other p
art must too. [whitespace/braces] [4]', | 3387 ['If one part of an if-else statement uses curly braces, the other p
art must too. [whitespace/braces] [4]', |
| 3388 'An else statement can be removed when the prior "if" concludes ' | 3388 'An else statement can be removed when the prior "if" concludes ' |
| 3389 'with a return, break, continue or goto statement.' | 3389 'with a return, break, continue or goto statement.' |
| 3390 ' [readability/control_flow] [4]']) | 3390 ' [readability/control_flow] [4]']) |
| 3391 | 3391 |
| 3392 def test_braces(self): | 3392 def test_braces(self): |
| 3393 # 3. Curly braces are not required for single-line conditionals and | 3393 # 3. Curly braces are not required for single-line conditionals and |
| 3394 # loop bodies, but are required for single-statement bodies that | 3394 # loop bodies, but are required for single-statement bodies that |
| 3395 # span multiple lines. | 3395 # span multiple lines. |
| 3396 | 3396 |
| 3397 # | 3397 # |
| 3398 # Positive tests | 3398 # Positive tests |
| 3399 # | 3399 # |
| 3400 self.assert_multi_line_lint( | 3400 self.assert_multi_line_lint( |
| 3401 'if (condition1)\n' | 3401 'if (condition1)\n' |
| 3402 ' statement1();\n' | 3402 ' statement1();\n' |
| 3403 'else\n' | 3403 'else\n' |
| 3404 ' statement2();\n', | 3404 ' statement2();\n', |
| 3405 '') | 3405 '') |
| 3406 | 3406 |
| 3407 self.assert_multi_line_lint( | 3407 self.assert_multi_line_lint( |
| 3408 'if (condition1)\n' | 3408 'if (condition1)\n' |
| 3409 ' statement1();\n' | 3409 ' statement1();\n' |
| 3410 'else if (condition2)\n' | 3410 'else if (condition2)\n' |
| 3411 ' statement2();\n', | 3411 ' statement2();\n', |
| 3412 '') | 3412 '') |
| 3413 | 3413 |
| 3414 self.assert_multi_line_lint( | 3414 self.assert_multi_line_lint( |
| 3415 'if (condition1)\n' | 3415 'if (condition1)\n' |
| 3416 ' statement1();\n' | 3416 ' statement1();\n' |
| 3417 'else if (condition2)\n' | 3417 'else if (condition2)\n' |
| 3418 ' statement2();\n' | 3418 ' statement2();\n' |
| 3419 'else\n' | 3419 'else\n' |
| 3420 ' statement3();\n', | 3420 ' statement3();\n', |
| 3421 '') | 3421 '') |
| 3422 | 3422 |
| 3423 self.assert_multi_line_lint( | 3423 self.assert_multi_line_lint( |
| 3424 'for (; foo; bar)\n' | 3424 'for (; foo; bar)\n' |
| 3425 ' int foo;\n', | 3425 ' int foo;\n', |
| 3426 '') | 3426 '') |
| 3427 | 3427 |
| 3428 self.assert_multi_line_lint( | 3428 self.assert_multi_line_lint( |
| 3429 'for (; foo; bar) {\n' | 3429 'for (; foo; bar) {\n' |
| 3430 ' int foo;\n' | 3430 ' int foo;\n' |
| 3431 '}\n', | 3431 '}\n', |
| 3432 '') | 3432 '') |
| 3433 | 3433 |
| 3434 self.assert_multi_line_lint( | 3434 self.assert_multi_line_lint( |
| 3435 'foreach (foo, foos) {\n' | 3435 'foreach (foo, foos) {\n' |
| 3436 ' int bar;\n' | 3436 ' int bar;\n' |
| 3437 '}\n', | 3437 '}\n', |
| 3438 '') | 3438 '') |
| 3439 | 3439 |
| 3440 self.assert_multi_line_lint( | 3440 self.assert_multi_line_lint( |
| 3441 'foreach (foo, foos)\n' | 3441 'foreach (foo, foos)\n' |
| 3442 ' int bar;\n', | 3442 ' int bar;\n', |
| 3443 '') | 3443 '') |
| 3444 | 3444 |
| 3445 self.assert_multi_line_lint( | 3445 self.assert_multi_line_lint( |
| 3446 'while (true) {\n' | 3446 'while (true) {\n' |
| 3447 ' int foo;\n' | 3447 ' int foo;\n' |
| 3448 '}\n', | 3448 '}\n', |
| 3449 '') | 3449 '') |
| 3450 | 3450 |
| 3451 self.assert_multi_line_lint( | 3451 self.assert_multi_line_lint( |
| 3452 'while (true)\n' | 3452 'while (true)\n' |
| 3453 ' int foo;\n', | 3453 ' int foo;\n', |
| 3454 '') | 3454 '') |
| 3455 | 3455 |
| 3456 self.assert_multi_line_lint( | 3456 self.assert_multi_line_lint( |
| 3457 'if (condition1) {\n' | 3457 'if (condition1) {\n' |
| 3458 ' statement1();\n' | 3458 ' statement1();\n' |
| 3459 '} else {\n' | 3459 '} else {\n' |
| 3460 ' statement2();\n' | 3460 ' statement2();\n' |
| 3461 '}\n', | 3461 '}\n', |
| 3462 '') | 3462 '') |
| 3463 | 3463 |
| 3464 self.assert_multi_line_lint( | 3464 self.assert_multi_line_lint( |
| 3465 'if (condition1) {\n' | 3465 'if (condition1) {\n' |
| 3466 ' statement1();\n' | 3466 ' statement1();\n' |
| 3467 '} else if (condition2) {\n' | 3467 '} else if (condition2) {\n' |
| 3468 ' statement2();\n' | 3468 ' statement2();\n' |
| 3469 '}\n', | 3469 '}\n', |
| 3470 '') | 3470 '') |
| 3471 | 3471 |
| 3472 self.assert_multi_line_lint( | 3472 self.assert_multi_line_lint( |
| 3473 'if (condition1) {\n' | 3473 'if (condition1) {\n' |
| 3474 ' statement1();\n' | 3474 ' statement1();\n' |
| 3475 '} else if (condition2) {\n' | 3475 '} else if (condition2) {\n' |
| 3476 ' statement2();\n' | 3476 ' statement2();\n' |
| 3477 '} else {\n' | 3477 '} else {\n' |
| 3478 ' statement3();\n' | 3478 ' statement3();\n' |
| 3479 '}\n', | 3479 '}\n', |
| 3480 '') | 3480 '') |
| 3481 | 3481 |
| 3482 self.assert_multi_line_lint( | 3482 self.assert_multi_line_lint( |
| 3483 'if (condition1) {\n' | 3483 'if (condition1) {\n' |
| 3484 ' statement1();\n' | 3484 ' statement1();\n' |
| 3485 ' statement1_2();\n' | 3485 ' statement1_2();\n' |
| 3486 '} else if (condition2) {\n' | 3486 '} else if (condition2) {\n' |
| 3487 ' statement2();\n' | 3487 ' statement2();\n' |
| 3488 ' statement2_2();\n' | 3488 ' statement2_2();\n' |
| 3489 '}\n', | 3489 '}\n', |
| 3490 '') | 3490 '') |
| 3491 | 3491 |
| 3492 self.assert_multi_line_lint( | 3492 self.assert_multi_line_lint( |
| 3493 'if (condition1) {\n' | 3493 'if (condition1) {\n' |
| 3494 ' statement1();\n' | 3494 ' statement1();\n' |
| 3495 ' statement1_2();\n' | 3495 ' statement1_2();\n' |
| 3496 '} else if (condition2) {\n' | 3496 '} else if (condition2) {\n' |
| 3497 ' statement2();\n' | 3497 ' statement2();\n' |
| 3498 ' statement2_2();\n' | 3498 ' statement2_2();\n' |
| 3499 '} else {\n' | 3499 '} else {\n' |
| 3500 ' statement3();\n' | 3500 ' statement3();\n' |
| 3501 ' statement3_2();\n' | 3501 ' statement3_2();\n' |
| 3502 '}\n', | 3502 '}\n', |
| 3503 '') | 3503 '') |
| 3504 | 3504 |
| 3505 # | 3505 # |
| 3506 # Negative tests | 3506 # Negative tests |
| 3507 # | 3507 # |
| 3508 | 3508 |
| 3509 self.assert_multi_line_lint( | 3509 self.assert_multi_line_lint( |
| 3510 'if (condition)\n' | 3510 'if (condition)\n' |
| 3511 ' doSomething(\n' | 3511 ' doSomething(\n' |
| 3512 ' spanningMultipleLines);\n', | 3512 ' spanningMultipleLines);\n', |
| 3513 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') | 3513 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') |
| 3514 | 3514 |
| 3515 self.assert_multi_line_lint( | 3515 self.assert_multi_line_lint( |
| 3516 'if (condition)\n' | 3516 'if (condition)\n' |
| 3517 ' // Single-line comment\n' | 3517 ' // Single-line comment\n' |
| 3518 ' doSomething();\n', | 3518 ' doSomething();\n', |
| 3519 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') | 3519 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') |
| 3520 | 3520 |
| 3521 self.assert_multi_line_lint( | 3521 self.assert_multi_line_lint( |
| 3522 'if (condition1)\n' | 3522 'if (condition1)\n' |
| 3523 ' statement1();\n' | 3523 ' statement1();\n' |
| 3524 'else if (condition2)\n' | 3524 'else if (condition2)\n' |
| 3525 ' // Single-line comment\n' | 3525 ' // Single-line comment\n' |
| 3526 ' statement2();\n', | 3526 ' statement2();\n', |
| 3527 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') | 3527 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') |
| 3528 | 3528 |
| 3529 self.assert_multi_line_lint( | 3529 self.assert_multi_line_lint( |
| 3530 'if (condition1)\n' | 3530 'if (condition1)\n' |
| 3531 ' statement1();\n' | 3531 ' statement1();\n' |
| 3532 'else if (condition2)\n' | 3532 'else if (condition2)\n' |
| 3533 ' statement2();\n' | 3533 ' statement2();\n' |
| 3534 'else\n' | 3534 'else\n' |
| 3535 ' // Single-line comment\n' | 3535 ' // Single-line comment\n' |
| 3536 ' statement3();\n', | 3536 ' statement3();\n', |
| 3537 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') | 3537 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') |
| 3538 | 3538 |
| 3539 self.assert_multi_line_lint( | 3539 self.assert_multi_line_lint( |
| 3540 'for (; foo; bar)\n' | 3540 'for (; foo; bar)\n' |
| 3541 ' // Single-line comment\n' | 3541 ' // Single-line comment\n' |
| 3542 ' int foo;\n', | 3542 ' int foo;\n', |
| 3543 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') | 3543 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') |
| 3544 | 3544 |
| 3545 self.assert_multi_line_lint( | 3545 self.assert_multi_line_lint( |
| 3546 'foreach (foo, foos)\n' | 3546 'foreach (foo, foos)\n' |
| 3547 ' // Single-line comment\n' | 3547 ' // Single-line comment\n' |
| 3548 ' int bar;\n', | 3548 ' int bar;\n', |
| 3549 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') | 3549 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') |
| 3550 | 3550 |
| 3551 self.assert_multi_line_lint( | 3551 self.assert_multi_line_lint( |
| 3552 'while (true)\n' | 3552 'while (true)\n' |
| 3553 ' // Single-line comment\n' | 3553 ' // Single-line comment\n' |
| 3554 ' int foo;\n' | 3554 ' int foo;\n' |
| 3555 '\n', | 3555 '\n', |
| 3556 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') | 3556 'A conditional or loop body must use braces if the statement is more
than one line long. [whitespace/braces] [4]') |
| 3557 | 3557 |
| 3558 # 4. If one part of an if-else statement uses curly braces, the | 3558 # 4. If one part of an if-else statement uses curly braces, the |
| 3559 # other part must too. | 3559 # other part must too. |
| 3560 | 3560 |
| 3561 self.assert_multi_line_lint( | 3561 self.assert_multi_line_lint( |
| 3562 'if (condition1) {\n' | 3562 'if (condition1) {\n' |
| 3563 ' doSomething1();\n' | 3563 ' doSomething1();\n' |
| 3564 ' doSomething1_2();\n' | 3564 ' doSomething1_2();\n' |
| 3565 '} else if (condition2)\n' | 3565 '} else if (condition2)\n' |
| 3566 ' doSomething2();\n' | 3566 ' doSomething2();\n' |
| 3567 'else\n' | 3567 'else\n' |
| 3568 ' doSomething3();\n', | 3568 ' doSomething3();\n', |
| 3569 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') | 3569 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') |
| 3570 | 3570 |
| 3571 self.assert_multi_line_lint( | 3571 self.assert_multi_line_lint( |
| 3572 'if (condition1)\n' | 3572 'if (condition1)\n' |
| 3573 ' doSomething1();\n' | 3573 ' doSomething1();\n' |
| 3574 'else if (condition2) {\n' | 3574 'else if (condition2) {\n' |
| 3575 ' doSomething2();\n' | 3575 ' doSomething2();\n' |
| 3576 ' doSomething2_2();\n' | 3576 ' doSomething2_2();\n' |
| 3577 '} else\n' | 3577 '} else\n' |
| 3578 ' doSomething3();\n', | 3578 ' doSomething3();\n', |
| 3579 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') | 3579 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') |
| 3580 | 3580 |
| 3581 self.assert_multi_line_lint( | 3581 self.assert_multi_line_lint( |
| 3582 'if (condition1) {\n' | 3582 'if (condition1) {\n' |
| 3583 ' doSomething1();\n' | 3583 ' doSomething1();\n' |
| 3584 '} else if (condition2) {\n' | 3584 '} else if (condition2) {\n' |
| 3585 ' doSomething2();\n' | 3585 ' doSomething2();\n' |
| 3586 ' doSomething2_2();\n' | 3586 ' doSomething2_2();\n' |
| 3587 '} else\n' | 3587 '} else\n' |
| 3588 ' doSomething3();\n', | 3588 ' doSomething3();\n', |
| 3589 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') | 3589 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') |
| 3590 | 3590 |
| 3591 self.assert_multi_line_lint( | 3591 self.assert_multi_line_lint( |
| 3592 'if (condition1)\n' | 3592 'if (condition1)\n' |
| 3593 ' doSomething1();\n' | 3593 ' doSomething1();\n' |
| 3594 'else if (condition2)\n' | 3594 'else if (condition2)\n' |
| 3595 ' doSomething2();\n' | 3595 ' doSomething2();\n' |
| 3596 'else {\n' | 3596 'else {\n' |
| 3597 ' doSomething3();\n' | 3597 ' doSomething3();\n' |
| 3598 ' doSomething3_2();\n' | 3598 ' doSomething3_2();\n' |
| 3599 '}\n', | 3599 '}\n', |
| 3600 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') | 3600 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') |
| 3601 | 3601 |
| 3602 self.assert_multi_line_lint( | 3602 self.assert_multi_line_lint( |
| 3603 'if (condition1) {\n' | 3603 'if (condition1) {\n' |
| 3604 ' doSomething1();\n' | 3604 ' doSomething1();\n' |
| 3605 ' doSomething1_2();\n' | 3605 ' doSomething1_2();\n' |
| 3606 '} else if (condition2)\n' | 3606 '} else if (condition2)\n' |
| 3607 ' doSomething2();\n' | 3607 ' doSomething2();\n' |
| 3608 'else {\n' | 3608 'else {\n' |
| 3609 ' doSomething3();\n' | 3609 ' doSomething3();\n' |
| 3610 ' doSomething3_2();\n' | 3610 ' doSomething3_2();\n' |
| 3611 '}\n', | 3611 '}\n', |
| 3612 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') | 3612 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') |
| 3613 | 3613 |
| 3614 self.assert_multi_line_lint( | 3614 self.assert_multi_line_lint( |
| 3615 'if (condition1)\n' | 3615 'if (condition1)\n' |
| 3616 ' doSomething1();\n' | 3616 ' doSomething1();\n' |
| 3617 'else if (condition2) {\n' | 3617 'else if (condition2) {\n' |
| 3618 ' doSomething2();\n' | 3618 ' doSomething2();\n' |
| 3619 ' doSomething2_2();\n' | 3619 ' doSomething2_2();\n' |
| 3620 '} else {\n' | 3620 '} else {\n' |
| 3621 ' doSomething3();\n' | 3621 ' doSomething3();\n' |
| 3622 ' doSomething3_2();\n' | 3622 ' doSomething3_2();\n' |
| 3623 '}\n', | 3623 '}\n', |
| 3624 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') | 3624 'If one part of an if-else statement uses curly braces, the other pa
rt must too. [whitespace/braces] [4]') |
| 3625 | 3625 |
| 3626 # 5. Control clauses without a body should use empty braces. | 3626 # 5. Control clauses without a body should use empty braces. |
| 3627 self.assert_multi_line_lint( | 3627 self.assert_multi_line_lint( |
| 3628 'for ( ; current; current = current->next) { }\n', | 3628 'for ( ; current; current = current->next) { }\n', |
| 3629 '') | 3629 '') |
| 3630 self.assert_multi_line_lint( | 3630 self.assert_multi_line_lint( |
| 3631 'for ( ; current; current = current->next);\n', | 3631 'for ( ; current; current = current->next);\n', |
| 3632 'Semicolon defining empty statement for this loop. Use { } instead.
[whitespace/semicolon] [5]') | 3632 'Semicolon defining empty statement for this loop. Use { } instead.
[whitespace/semicolon] [5]') |
| (...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4259 def test_ne(self): | 4259 def test_ne(self): |
| 4260 """Test __ne__ inequality function.""" | 4260 """Test __ne__ inequality function.""" |
| 4261 checker1 = self._checker() | 4261 checker1 = self._checker() |
| 4262 checker2 = self._checker() | 4262 checker2 = self._checker() |
| 4263 | 4263 |
| 4264 # != calls __ne__. | 4264 # != calls __ne__. |
| 4265 # By default, __ne__ always returns true on different objects. | 4265 # By default, __ne__ always returns true on different objects. |
| 4266 # Thus, just check the distinguishing case to verify that the | 4266 # Thus, just check the distinguishing case to verify that the |
| 4267 # code defines __ne__. | 4267 # code defines __ne__. |
| 4268 self.assertFalse(checker1 != checker2) | 4268 self.assertFalse(checker1 != checker2) |
| OLD | NEW |