PRESUBMIT_test.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #!/usr/bin/env python
  2. # Copyright 2017 The Chromium Authors. All rights reserved.
  3. # Use of this source code is governed by a BSD-style license that can be
  4. # found in the LICENSE file.
  5. import os
  6. import sys
  7. import unittest
  8. import PRESUBMIT
  9. sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  10. import PRESUBMIT_test_mocks
  11. class CheckARCCompilationGuardTest(unittest.TestCase):
  12. """Test the _CheckARCCompilationGuard presubmit check."""
  13. def testGoodImplementationFiles(self):
  14. """Test that .m and .mm files with a guard don't raise any errors."""
  15. lines = ["foobar"] + PRESUBMIT.ARC_COMPILE_GUARD
  16. mock_input = PRESUBMIT_test_mocks.MockInputApi()
  17. mock_input.files = [
  18. PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.mm', lines),
  19. PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.m', lines),
  20. ]
  21. mock_output = PRESUBMIT_test_mocks.MockOutputApi()
  22. errors = PRESUBMIT._CheckARCCompilationGuard(mock_input, mock_output)
  23. self.assertEqual(len(errors), 0)
  24. def testBadImplementationFiles(self):
  25. """Test that .m and .mm files without a guard raise an error."""
  26. lines = ["foobar"]
  27. mock_input = PRESUBMIT_test_mocks.MockInputApi()
  28. mock_input.files = [
  29. PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.mm', lines),
  30. PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.m', lines),
  31. ]
  32. mock_output = PRESUBMIT_test_mocks.MockOutputApi()
  33. errors = PRESUBMIT._CheckARCCompilationGuard(mock_input, mock_output)
  34. self.assertEqual(len(errors), 1)
  35. self.assertEqual('error', errors[0].type)
  36. self.assertTrue('ios/path/foo_controller.m' in errors[0].message)
  37. self.assertTrue('ios/path/foo_controller.mm' in errors[0].message)
  38. def testOtherFiles(self):
  39. """Test that other files without a guard don't raise errors."""
  40. lines = ["foobar"]
  41. mock_input = PRESUBMIT_test_mocks.MockInputApi()
  42. mock_input.files = [
  43. PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.h', lines),
  44. PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.cc', lines),
  45. PRESUBMIT_test_mocks.MockFile('ios/path/BUILD.gn', lines),
  46. ]
  47. mock_output = PRESUBMIT_test_mocks.MockOutputApi()
  48. errors = PRESUBMIT._CheckARCCompilationGuard(mock_input, mock_output)
  49. self.assertEqual(len(errors), 0)
  50. class CheckTODOFormatTest(unittest.TestCase):
  51. """Test the _CheckBugInToDo presubmit check."""
  52. def testTODOs(self):
  53. bad_lines = ['TO''DO(ldap): fix this',
  54. 'TO''DO(ladp): see crbug.com/8675309',
  55. 'TO''DO(8675309): fix this',
  56. 'TO''DO(http://crbug.com/8675309): fix this',
  57. 'TO''DO( crbug.com/8675309): fix this',
  58. 'TO''DO(crbug/8675309): fix this',
  59. 'TO''DO(crbug.com): fix this']
  60. good_lines = ['TO''DO(crbug.com/8675309): fix this',
  61. 'TO''DO(crbug.com/8675309): fix this (please)']
  62. mock_input = PRESUBMIT_test_mocks.MockInputApi()
  63. mock_input.files = [PRESUBMIT_test_mocks.MockFile(
  64. 'ios/path/foo_controller.mm', bad_lines + good_lines)]
  65. mock_output = PRESUBMIT_test_mocks.MockOutputApi()
  66. errors = PRESUBMIT._CheckBugInToDo(mock_input, mock_output)
  67. self.assertEqual(len(errors), 1)
  68. self.assertEqual('error', errors[0].type)
  69. self.assertTrue('without bug numbers' in errors[0].message)
  70. error_lines = errors[0].message.split('\n')
  71. self.assertEqual(len(error_lines), len(bad_lines) + 2)
  72. class CheckHasNoIncludeDirectivesTest(unittest.TestCase):
  73. """Test the _CheckHasNoIncludeDirectives presubmit check."""
  74. def testFindsIncludeDirectives(self):
  75. good_lines = ['#import <system>',
  76. '#import "my/path/my/header.h"',
  77. '#import "my/path/my/source.mm"',
  78. '#import "my/path/my/source.m"']
  79. bad_lines = ['#include <system>',
  80. '#import <system>',
  81. '#include "my/path/my/header.h"',
  82. '#include "my/path/my/source.mm"',
  83. '#import "my/path/my/header.h"'
  84. '#include "my/path/my/source.m"']
  85. mock_input = PRESUBMIT_test_mocks.MockInputApi()
  86. mock_input.files = [
  87. PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.mm', bad_lines),
  88. PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller_2.mm', good_lines),
  89. PRESUBMIT_test_mocks.MockFile('ios/path/bar_controller.h', bad_lines),
  90. PRESUBMIT_test_mocks.MockFile('ios/path/bar_controller.m', bad_lines),
  91. PRESUBMIT_test_mocks.MockFile('ios/path/bar_controller.cc', bad_lines),
  92. PRESUBMIT_test_mocks.MockFile('chrome/path/foo_controller.mm', bad_lines),
  93. ]
  94. mock_output = PRESUBMIT_test_mocks.MockOutputApi()
  95. errors = PRESUBMIT._CheckHasNoIncludeDirectives(mock_input, mock_output)
  96. self.assertEqual(len(errors), 1)
  97. self.assertEqual('error', errors[0].type)
  98. self.assertTrue('ios/path/foo_controller.mm:1' in errors[0].message)
  99. self.assertTrue('ios/path/foo_controller.mm:3' in errors[0].message)
  100. self.assertTrue('ios/path/foo_controller.mm:4' in errors[0].message)
  101. if __name__ == '__main__':
  102. unittest.main()