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