| 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 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 return self.perform_lint(code, 'test.cpp', basic_error_rules) | 293 return self.perform_lint(code, 'test.cpp', basic_error_rules) |
| 294 | 294 |
| 295 # Only include what you use errors. | 295 # Only include what you use errors. |
| 296 def perform_include_what_you_use(self, code, filename='foo.h', fs=None): | 296 def perform_include_what_you_use(self, code, filename='foo.h', fs=None): |
| 297 basic_error_rules = ('-', | 297 basic_error_rules = ('-', |
| 298 '+build/include_what_you_use') | 298 '+build/include_what_you_use') |
| 299 return self.perform_lint(code, filename, basic_error_rules, fs) | 299 return self.perform_lint(code, filename, basic_error_rules, fs) |
| 300 | 300 |
| 301 def perform_avoid_static_cast_of_objects(self, code, filename='foo.cpp', fs=
None): | 301 def perform_avoid_static_cast_of_objects(self, code, filename='foo.cpp', fs=
None): |
| 302 basic_error_rules = ('-', | 302 basic_error_rules = ('-', |
| 303 '+security/casting', |
| 303 '+runtime/casting') | 304 '+runtime/casting') |
| 304 return self.perform_lint(code, filename, basic_error_rules, fs) | 305 return self.perform_lint(code, filename, basic_error_rules, fs) |
| 305 | 306 |
| 306 # Perform lint and compare the error message with "expected_message". | 307 # Perform lint and compare the error message with "expected_message". |
| 307 def assert_lint(self, code, expected_message, file_name='foo.cpp'): | 308 def assert_lint(self, code, expected_message, file_name='foo.cpp'): |
| 308 self.assertEqual(expected_message, self.perform_single_line_lint(code, f
ile_name)) | 309 self.assertEqual(expected_message, self.perform_single_line_lint(code, f
ile_name)) |
| 309 | 310 |
| 310 def assert_lint_one_of_many_errors_re(self, code, expected_message_re, file_
name='foo.cpp'): | 311 def assert_lint_one_of_many_errors_re(self, code, expected_message_re, file_
name='foo.cpp'): |
| 311 messages = self.perform_single_line_lint(code, file_name) | 312 messages = self.perform_single_line_lint(code, file_name) |
| 312 for message in messages: | 313 for message in messages: |
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 751 statement = 'int* x = dynamic_cast<int*>(&foo);' | 752 statement = 'int* x = dynamic_cast<int*>(&foo);' |
| 752 error_message = ( | 753 error_message = ( |
| 753 'Do not use dynamic_cast<>. If you need to cast within a class ' | 754 'Do not use dynamic_cast<>. If you need to cast within a class ' |
| 754 'hierarchy, use static_cast<> to upcast. Google doesn\'t support ' | 755 'hierarchy, use static_cast<> to upcast. Google doesn\'t support ' |
| 755 'RTTI. [runtime/rtti] [5]') | 756 'RTTI. [runtime/rtti] [5]') |
| 756 # dynamic_cast is disallowed in most files. | 757 # dynamic_cast is disallowed in most files. |
| 757 self.assert_language_rules_check('foo.cpp', statement, error_message) | 758 self.assert_language_rules_check('foo.cpp', statement, error_message) |
| 758 self.assert_language_rules_check('foo.h', statement, error_message) | 759 self.assert_language_rules_check('foo.h', statement, error_message) |
| 759 | 760 |
| 760 # Tests for static_cast readability. | 761 # Tests for static_cast readability. |
| 762 # FIXME: Add cases for testing the DEFINE_TYPE_CASTS usecases also. |
| 761 def test_static_cast_on_objects_with_toFoo(self): | 763 def test_static_cast_on_objects_with_toFoo(self): |
| 762 mock_header_contents = ['inline Foo* toFoo(Bar* bar)'] | 764 mock_header_contents = ['inline Foo* toFoo(Bar* bar)'] |
| 763 fs = FileSystem() | 765 fs = FileSystem() |
| 764 orig_read_text_file_fn = fs.read_text_file | 766 orig_read_text_file_fn = fs.read_text_file |
| 765 | 767 |
| 766 def mock_read_text_file_fn(path): | 768 def mock_read_text_file_fn(path): |
| 767 return mock_header_contents | 769 return mock_header_contents |
| 768 | 770 |
| 769 try: | 771 try: |
| 770 fs.read_text_file = mock_read_text_file_fn | 772 fs.read_text_file = mock_read_text_file_fn |
| 771 message = self.perform_avoid_static_cast_of_objects( | 773 message = self.perform_avoid_static_cast_of_objects( |
| 772 'Foo* x = static_cast<Foo*>(bar);', | 774 'Foo* x = static_cast<Foo*>(bar);', |
| 773 filename='casting.cpp', | 775 filename='casting.cpp', |
| 774 fs=fs) | 776 fs=fs) |
| 775 self.assertEqual(message, 'static_cast of class objects is not allow
ed. Use toFoo defined in Foo.h.' | 777 self.assertEqual(message, 'static_cast of class objects is not allow
ed. Use toFoo defined in Foo.h.' |
| 776 ' [runtime/casting] [4]') | 778 ' [security/casting] [4]') |
| 777 finally: | 779 finally: |
| 778 fs.read_text_file = orig_read_text_file_fn | 780 fs.read_text_file = orig_read_text_file_fn |
| 779 | 781 |
| 780 def test_static_cast_on_objects_without_toFoo(self): | 782 def test_static_cast_on_objects_without_toFoo(self): |
| 781 mock_header_contents = ['inline FooBar* toFooBar(Bar* bar)'] | 783 mock_header_contents = ['inline FooBar* toFooBar(Bar* bar)'] |
| 782 fs = FileSystem() | 784 fs = FileSystem() |
| 783 orig_read_text_file_fn = fs.read_text_file | 785 orig_read_text_file_fn = fs.read_text_file |
| 784 | 786 |
| 785 def mock_read_text_file_fn(path): | 787 def mock_read_text_file_fn(path): |
| 786 return mock_header_contents | 788 return mock_header_contents |
| 787 | 789 |
| 788 try: | 790 try: |
| 789 fs.read_text_file = mock_read_text_file_fn | 791 fs.read_text_file = mock_read_text_file_fn |
| 790 message = self.perform_avoid_static_cast_of_objects( | 792 message = self.perform_avoid_static_cast_of_objects( |
| 791 'Foo* x = static_cast<Foo*>(bar);', | 793 'Foo* x = static_cast<Foo*>(bar);', |
| 792 filename='casting.cpp', | 794 filename='casting.cpp', |
| 793 fs=fs) | 795 fs=fs) |
| 794 self.assertEqual(message, 'static_cast of class objects is not allow
ed. Add toFoo in Foo.h and use it instead.' | 796 self.assertEqual(message, 'static_cast of class objects is not allow
ed. Define cast macro DEFINE_TYPE_CASTS(Foo) in Foo.h and use it.' |
| 795 ' [runtime/casting] [4]') | 797 ' [runtime/casting] [4]') |
| 796 finally: | 798 finally: |
| 797 fs.read_text_file = orig_read_text_file_fn | 799 fs.read_text_file = orig_read_text_file_fn |
| 798 | 800 |
| 799 # We cannot test this functionality because of difference of | 801 # We cannot test this functionality because of difference of |
| 800 # function definitions. Anyway, we may never enable this. | 802 # function definitions. Anyway, we may never enable this. |
| 801 # | 803 # |
| 802 # # Test for unnamed arguments in a method. | 804 # # Test for unnamed arguments in a method. |
| 803 # def test_check_for_unnamed_params(self): | 805 # def test_check_for_unnamed_params(self): |
| 804 # message = ('All parameters should be named in a function' | 806 # message = ('All parameters should be named in a function' |
| (...skipping 4380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5185 def test_ne(self): | 5187 def test_ne(self): |
| 5186 """Test __ne__ inequality function.""" | 5188 """Test __ne__ inequality function.""" |
| 5187 checker1 = self._checker() | 5189 checker1 = self._checker() |
| 5188 checker2 = self._checker() | 5190 checker2 = self._checker() |
| 5189 | 5191 |
| 5190 # != calls __ne__. | 5192 # != calls __ne__. |
| 5191 # By default, __ne__ always returns true on different objects. | 5193 # By default, __ne__ always returns true on different objects. |
| 5192 # Thus, just check the distinguishing case to verify that the | 5194 # Thus, just check the distinguishing case to verify that the |
| 5193 # code defines __ne__. | 5195 # code defines __ne__. |
| 5194 self.assertFalse(checker1 != checker2) | 5196 self.assertFalse(checker1 != checker2) |
| OLD | NEW |