OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 import glob | 6 import glob |
7 import json | 7 import json |
8 import os | 8 import os |
9 import re | 9 import re |
10 import subprocess | 10 import subprocess |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 results = PRESUBMIT._CheckPatchFiles(mock_input_api, MockOutputApi()) | 385 results = PRESUBMIT._CheckPatchFiles(mock_input_api, MockOutputApi()) |
386 self.assertEqual(0, len(results)) | 386 self.assertEqual(0, len(results)) |
387 | 387 |
388 | 388 |
389 class CheckSingletonInHeadersTest(unittest.TestCase): | 389 class CheckSingletonInHeadersTest(unittest.TestCase): |
390 def testSingletonInArbitraryHeader(self): | 390 def testSingletonInArbitraryHeader(self): |
391 diff_singleton_h = ['base::subtle::AtomicWord ' | 391 diff_singleton_h = ['base::subtle::AtomicWord ' |
392 'base::Singleton<Type, Traits, DifferentiatingType>::'] | 392 'base::Singleton<Type, Traits, DifferentiatingType>::'] |
393 diff_foo_h = ['// base::Singleton<Foo> in comment.', | 393 diff_foo_h = ['// base::Singleton<Foo> in comment.', |
394 'friend class base::Singleton<Foo>'] | 394 'friend class base::Singleton<Foo>'] |
| 395 diff_foo2_h = [' //Foo* bar = base::Singleton<Foo>::get();'] |
395 diff_bad_h = ['Foo* foo = base::Singleton<Foo>::get();'] | 396 diff_bad_h = ['Foo* foo = base::Singleton<Foo>::get();'] |
396 mock_input_api = MockInputApi() | 397 mock_input_api = MockInputApi() |
397 mock_input_api.files = [MockAffectedFile('base/memory/singleton.h', | 398 mock_input_api.files = [MockAffectedFile('base/memory/singleton.h', |
398 diff_singleton_h), | 399 diff_singleton_h), |
399 MockAffectedFile('foo.h', diff_foo_h), | 400 MockAffectedFile('foo.h', diff_foo_h), |
| 401 MockAffectedFile('foo2.h', diff_foo2_h), |
400 MockAffectedFile('bad.h', diff_bad_h)] | 402 MockAffectedFile('bad.h', diff_bad_h)] |
401 warnings = PRESUBMIT._CheckSingletonInHeaders(mock_input_api, | 403 warnings = PRESUBMIT._CheckSingletonInHeaders(mock_input_api, |
402 MockOutputApi()) | 404 MockOutputApi()) |
403 self.assertEqual(1, len(warnings)) | 405 self.assertEqual(1, len(warnings)) |
| 406 self.assertEqual(2, len(warnings[0].items)) |
404 self.assertEqual('error', warnings[0].type) | 407 self.assertEqual('error', warnings[0].type) |
405 self.assertTrue('Found base::Singleton<T>' in warnings[0].message) | 408 self.assertTrue('Found base::Singleton<T>' in warnings[0].message) |
406 | 409 |
407 def testSingletonInCC(self): | 410 def testSingletonInCC(self): |
408 diff_cc = ['Foo* foo = base::Singleton<Foo>::get();'] | 411 diff_cc = ['Foo* foo = base::Singleton<Foo>::get();'] |
409 mock_input_api = MockInputApi() | 412 mock_input_api = MockInputApi() |
410 mock_input_api.files = [MockAffectedFile('some/path/foo.cc', diff_cc)] | 413 mock_input_api.files = [MockAffectedFile('some/path/foo.cc', diff_cc)] |
411 warnings = PRESUBMIT._CheckSingletonInHeaders(mock_input_api, | 414 warnings = PRESUBMIT._CheckSingletonInHeaders(mock_input_api, |
412 MockOutputApi()) | 415 MockOutputApi()) |
413 self.assertEqual(0, len(warnings)) | 416 self.assertEqual(0, len(warnings)) |
414 | 417 |
415 | 418 |
416 class CheckBaseMacrosInHeadersTest(unittest.TestCase): | 419 class CheckBaseMacrosInHeadersTest(unittest.TestCase): |
417 def _make_h(self, macro, header): | 420 def _make_h(self, macro, header, line_prefix=''): |
418 return (""" | 421 return (""" |
419 #include "base/%s.h" | 422 #include "base/%s.h" |
420 | 423 |
421 class Thing { | 424 class Thing { |
422 private: | 425 private: |
423 DISALLOW_%s(Thing); | 426 %sDISALLOW_%s(Thing); |
424 }; | 427 }; |
425 """ % (macro, header)).splitlines() | 428 """ % (macro, line_prefix, header)).splitlines() |
426 | 429 |
427 def testBaseMacrosInHeadersBad(self): | 430 def testBaseMacrosInHeadersBad(self): |
428 mock_input_api = MockInputApi() | 431 mock_input_api = MockInputApi() |
429 mock_input_api.files = [ | 432 mock_input_api.files = [ |
430 MockAffectedFile('foo.h', self._make_h('not_macros', 'ASSIGN')), | 433 MockAffectedFile('foo.h', self._make_h('not_macros', 'ASSIGN')), |
431 MockAffectedFile('bar.h', self._make_h('not_macros', 'COPY')), | 434 MockAffectedFile('bar.h', self._make_h('not_macros', 'COPY')), |
432 MockAffectedFile('baz.h', self._make_h('not_macros', 'COPY_AND_ASSIGN')), | 435 MockAffectedFile('baz.h', self._make_h('not_macros', 'COPY_AND_ASSIGN')), |
433 MockAffectedFile('qux.h', self._make_h('not_macros', 'EVIL')), | 436 MockAffectedFile('qux.h', self._make_h('not_macros', 'EVIL')), |
434 ] | 437 ] |
435 warnings = PRESUBMIT._CheckBaseMacrosInHeaders(mock_input_api, | 438 warnings = PRESUBMIT._CheckBaseMacrosInHeaders(mock_input_api, |
436 MockOutputApi()) | 439 MockOutputApi()) |
437 self.assertEqual(1, len(warnings)) | 440 self.assertEqual(1, len(warnings)) |
438 self.assertEqual(4, len(warnings[0].items)) | 441 self.assertEqual(4, len(warnings[0].items)) |
439 | 442 |
440 def testBaseMacrosInHeadersGood(self): | 443 def testBaseMacrosInHeadersGood(self): |
441 mock_input_api = MockInputApi() | 444 mock_input_api = MockInputApi() |
442 mock_input_api.files = [ | 445 mock_input_api.files = [ |
443 MockAffectedFile('foo.h', self._make_h('macros', 'ASSIGN')), | 446 MockAffectedFile('foo.h', self._make_h('macros', 'ASSIGN')), |
444 MockAffectedFile('bar.h', self._make_h('macros', 'COPY')), | 447 MockAffectedFile('bar.h', self._make_h('macros', 'COPY')), |
445 MockAffectedFile('baz.h', self._make_h('macros', 'COPY_AND_ASSIGN')), | 448 MockAffectedFile('baz.h', self._make_h('macros', 'COPY_AND_ASSIGN')), |
446 MockAffectedFile('qux.h', self._make_h('macros', 'EVIL')), | 449 MockAffectedFile('qux.h', self._make_h('macros', 'EVIL')), |
| 450 MockAffectedFile('foz.h', self._make_h('not_macros', 'ASSIGN', '//')), |
| 451 MockAffectedFile('foz.h', self._make_h('not_macros', 'ASSIGN', ' //')), |
447 ] | 452 ] |
448 warnings = PRESUBMIT._CheckBaseMacrosInHeaders(mock_input_api, | 453 warnings = PRESUBMIT._CheckBaseMacrosInHeaders(mock_input_api, |
449 MockOutputApi()) | 454 MockOutputApi()) |
450 self.assertEqual(0, len(warnings)) | 455 self.assertEqual(0, len(warnings)) |
451 | 456 |
452 | 457 |
453 class InvalidOSMacroNamesTest(unittest.TestCase): | 458 class InvalidOSMacroNamesTest(unittest.TestCase): |
454 def testInvalidOSMacroNames(self): | 459 def testInvalidOSMacroNames(self): |
455 lines = ['#if defined(OS_WINDOWS)', | 460 lines = ['#if defined(OS_WINDOWS)', |
456 ' #elif defined(OS_WINDOW)', | 461 ' #elif defined(OS_WINDOW)', |
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
977 # Tag must not contain | 982 # Tag must not contain |
978 nb = len(msgs[4].items) | 983 nb = len(msgs[4].items) |
979 self.assertEqual(2, nb, | 984 self.assertEqual(2, nb, |
980 'Expected %d items, found %d: %s' % (2, nb, msgs[4].items)) | 985 'Expected %d items, found %d: %s' % (2, nb, msgs[4].items)) |
981 self.assertTrue('HasDottedTag.java' in msgs[4].items) | 986 self.assertTrue('HasDottedTag.java' in msgs[4].items) |
982 self.assertTrue('HasOldTag.java' in msgs[4].items) | 987 self.assertTrue('HasOldTag.java' in msgs[4].items) |
983 | 988 |
984 | 989 |
985 if __name__ == '__main__': | 990 if __name__ == '__main__': |
986 unittest.main() | 991 unittest.main() |
OLD | NEW |