diff --git a/bears/c_languages/CPPLintBear.py b/bears/c_languages/CPPLintBear.py index a9440153b2..dcc1ba5781 100644 --- a/bears/c_languages/CPPLintBear.py +++ b/bears/c_languages/CPPLintBear.py @@ -3,6 +3,12 @@ from coalib.settings.Setting import typed_list +def check_invalid_config(use_spaces, indent_size): + if not use_spaces or indent_size != 2: + raise ValueError("CPPLint doesn't support indent_size other " + 'than 2 or not using spaces.') + + @linter(executable='cpplint', use_stdout=False, use_stderr=True, @@ -26,12 +32,20 @@ class CPPLintBear: def create_arguments(filename, file, config_file, max_line_length: int=79, cpplint_ignore: typed_list(str)=(), - cpplint_include: typed_list(str)=()): + cpplint_include: typed_list(str) = (), + indent_size: int=2, + use_spaces: bool=True,): """ :param max_line_length: Maximum number of characters for a line. :param cpplint_ignore: List of checkers to ignore. :param cpplint_include: List of checkers to explicitly enable. + :param use_spaces: Only spaces are supported, hence a `True` + value. + :param indent_size: Only an indent size of 2 is permitted by + the bear. """ + check_invalid_config(use_spaces, indent_size) + ignore = ','.join('-'+part.strip() for part in cpplint_ignore) include = ','.join('+'+part.strip() for part in cpplint_include) return ('--filter=' + ignore + ',' + include, diff --git a/tests/c_languages/CPPLintBearTest.py b/tests/c_languages/CPPLintBearTest.py index e897977211..9f08eb950a 100644 --- a/tests/c_languages/CPPLintBearTest.py +++ b/tests/c_languages/CPPLintBearTest.py @@ -1,5 +1,10 @@ from bears.c_languages.CPPLintBear import CPPLintBear -from coalib.testing.LocalBearTestHelper import verify_local_bear +from coalib.testing.LocalBearTestHelper import verify_local_bear,\ + LocalBearTestHelper +from coalib.testing.BearTestHelper import generate_skip_decorator +from coalib.settings.Section import Section +from coalib.settings.Setting import Setting +import queue test_file = """ int main() { @@ -26,3 +31,34 @@ settings={'cpplint_ignore': 'legal', 'max_line_length': '13'}, tempfile_kwargs={'suffix': '.cpp'}) + + +@generate_skip_decorator(CPPLintBear) +class CPPLintBearTest(LocalBearTestHelper): + + def setUp(self): + self.section = Section('name') + self.uut = CPPLintBear(self.section, + queue.Queue()) + + def test_use_spaces_config(self): + settings = {'cpplint_ignore': 'legal', + 'use_spaces': 'False'} + for name, value in settings.items(): + self.section.append(Setting(name, value)) + with self.assertRaisesRegex(AssertionError, 'Bear returned None' + ' on execution\n'): + self.check_validity(self.uut, + test_file.splitlines(keepends=True), + valid=False) + + def test_indent_size_config(self): + settings = {'cpplint_ignore': 'legal', + 'indent_size': '4'} + for name, value in settings.items(): + self.section.append(Setting(name, value)) + with self.assertRaisesRegex(AssertionError, 'Bear returned None' + ' on execution\n'): + self.check_validity(self.uut, + test_file.splitlines(keepends=True), + valid=False)