| #!/usr/bin/env python |
| # Copyright 2017 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import sys |
| import unittest |
| |
| import PRESUBMIT |
| |
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
| import PRESUBMIT_test_mocks |
| |
| class CheckARCCompilationGuardTest(unittest.TestCase): |
| """Test the _CheckARCCompilationGuard presubmit check.""" |
| |
| def testGoodImplementationFiles(self): |
| """Test that .m and .mm files with a guard don't raise any errors.""" |
| lines = ["foobar"] + PRESUBMIT.ARC_COMPILE_GUARD |
| mock_input = PRESUBMIT_test_mocks.MockInputApi() |
| mock_input.files = [ |
| PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.mm', lines), |
| PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.m', lines), |
| ] |
| mock_output = PRESUBMIT_test_mocks.MockOutputApi() |
| errors = PRESUBMIT._CheckARCCompilationGuard(mock_input, mock_output) |
| self.assertEqual(len(errors), 0) |
| |
| def testBadImplementationFiles(self): |
| """Test that .m and .mm files without a guard raise an error.""" |
| lines = ["foobar"] |
| mock_input = PRESUBMIT_test_mocks.MockInputApi() |
| mock_input.files = [ |
| PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.mm', lines), |
| PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.m', lines), |
| ] |
| mock_output = PRESUBMIT_test_mocks.MockOutputApi() |
| errors = PRESUBMIT._CheckARCCompilationGuard(mock_input, mock_output) |
| self.assertEqual(len(errors), 1) |
| self.assertEqual('error', errors[0].type) |
| self.assertTrue('ios/path/foo_controller.m' in errors[0].message) |
| self.assertTrue('ios/path/foo_controller.mm' in errors[0].message) |
| |
| def testOtherFiles(self): |
| """Test that other files without a guard don't raise errors.""" |
| lines = ["foobar"] |
| mock_input = PRESUBMIT_test_mocks.MockInputApi() |
| mock_input.files = [ |
| PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.h', lines), |
| PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.cc', lines), |
| PRESUBMIT_test_mocks.MockFile('ios/path/BUILD.gn', lines), |
| ] |
| mock_output = PRESUBMIT_test_mocks.MockOutputApi() |
| errors = PRESUBMIT._CheckARCCompilationGuard(mock_input, mock_output) |
| self.assertEqual(len(errors), 0) |
| |
| class CheckTODOFormatTest(unittest.TestCase): |
| """Test the _CheckBugInToDo presubmit check.""" |
| |
| def testTODOs(self): |
| bad_lines = ['TO''DO(ldap): fix this', |
| 'TO''DO(ladp): see crbug.com/8675309', |
| 'TO''DO(8675309): fix this', |
| 'TO''DO(http://crbug.com/8675309): fix this', |
| 'TO''DO( crbug.com/8675309): fix this', |
| 'TO''DO(crbug/8675309): fix this', |
| 'TO''DO(crbug.com): fix this'] |
| good_lines = ['TO''DO(crbug.com/8675309): fix this', |
| 'TO''DO(crbug.com/8675309): fix this (please)'] |
| mock_input = PRESUBMIT_test_mocks.MockInputApi() |
| mock_input.files = [PRESUBMIT_test_mocks.MockFile( |
| 'ios/path/foo_controller.mm', bad_lines + good_lines)] |
| mock_output = PRESUBMIT_test_mocks.MockOutputApi() |
| errors = PRESUBMIT._CheckBugInToDo(mock_input, mock_output) |
| self.assertEqual(len(errors), 1) |
| self.assertEqual('error', errors[0].type) |
| self.assertTrue('without bug numbers' in errors[0].message) |
| error_lines = errors[0].message.split('\n') |
| self.assertEqual(len(error_lines), len(bad_lines) + 2) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |