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 # TODO (kphanee): Add cases for testing the DEFINE_TYPE_CASTS usecases also. | |
Dirk Pranke
2014/01/27 19:38:51
NIt: s/TODO/FIXME, don't use a username.
r.kasibhatla
2014/02/03 15:29:15
Done.
| |
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.' |
aarya
2014/01/27 19:45:56
nit: do we want to add DEFINE_TYPE_CASTS in messag
r.kasibhatla
2014/02/03 15:29:15
This usecase is specifically for the error when we
inferno
2014/02/03 15:44:23
Yes, this new message is fine.
| |
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 |
(...skipping 4398 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 |