import pytest import checkpackagelib.test_util as util import checkpackagelib.lib as m ConsecutiveEmptyLines = [ ('1 line (no newline)', 'any', '', []), ('1 line', 'any', '\n', []), ('2 lines', 'any', '\n' '\n', [['any:2: consecutive empty lines']]), ('more than 2 consecutive', 'any', '\n' '\n' '\n', [['any:2: consecutive empty lines'], ['any:3: consecutive empty lines']]), ('ignore whitespace 1', 'any', '\n' ' ', [['any:2: consecutive empty lines']]), ('ignore whitespace 2', 'any', ' \n' '\t\n', [['any:2: consecutive empty lines']]), ] @pytest.mark.parametrize('testname,filename,string,expected', ConsecutiveEmptyLines) def test_ConsecutiveEmptyLines(testname, filename, string, expected): warnings = util.check_file(m.ConsecutiveEmptyLines, filename, string) assert warnings == expected EmptyLastLine = [ ('ignore empty file', 'any', '', []), ('empty line (newline)', 'any', '\n', [['any:1: empty line at end of file']]), ('empty line (space, newline)', 'any', ' \n', [['any:1: empty line at end of file']]), ('empty line (space, no newline)', 'any', ' ', [['any:1: empty line at end of file']]), ('warn for the last of 2', 'any', '\n' '\n', [['any:2: empty line at end of file']]), ('warn for the last of 3', 'any', '\n' '\n' '\n', [['any:3: empty line at end of file']]), ('ignore whitespace', 'any', ' \n' '\t\n', [['any:2: empty line at end of file']]), ] @pytest.mark.parametrize('testname,filename,string,expected', EmptyLastLine) def test_EmptyLastLine(testname, filename, string, expected): warnings = util.check_file(m.EmptyLastLine, filename, string) assert warnings == expected NewlineAtEof = [ ('good', 'any', 'text\n', []), ('text (bad)', 'any', '\n' 'text', [['any:2: missing newline at end of file', 'text']]), ('space (bad)', 'any', '\n' ' ', [['any:2: missing newline at end of file', ' ']]), ('tab (bad)', 'any', '\n' '\t', [['any:2: missing newline at end of file', '\t']]), ('even for file with one line', 'any', ' ', [['any:1: missing newline at end of file', ' ']]), ] @pytest.mark.parametrize('testname,filename,string,expected', NewlineAtEof) def test_NewlineAtEof(testname, filename, string, expected): warnings = util.check_file(m.NewlineAtEof, filename, string) assert warnings == expected TrailingSpace = [ ('good', 'any', 'text\n', []), ('ignore missing newline', 'any', '\n' 'text', []), ('spaces', 'any', 'text \n', [['any:1: line contains trailing whitespace', 'text \n']]), ('tabs after text', 'any', 'text\t\t\n', [['any:1: line contains trailing whitespace', 'text\t\t\n']]), ('mix of tabs and spaces', 'any', ' \n' ' ', [['any:1: line contains trailing whitespace', ' \n'], ['any:2: line contains trailing whitespace', ' ']]), ('blank line with tabs', 'any', '\n' '\t', [['any:2: line contains trailing whitespace', '\t']]), ] @pytest.mark.parametrize('testname,filename,string,expected', TrailingSpace) def test_TrailingSpace(testname, filename, string, expected): warnings = util.check_file(m.TrailingSpace, filename, string) assert warnings == expected Utf8Characters = [ ('usual', 'any', 'text\n', []), ('acceptable character', 'any', '\x60', []), ('unacceptable character', 'any', '\x81', [['any:1: line contains UTF-8 characters', '\x81']]), ('2 warnings', 'any', 'text\n' 'text \xc8 text\n' '\xc9\n', [['any:2: line contains UTF-8 characters', 'text \xc8 text\n'], ['any:3: line contains UTF-8 characters', '\xc9\n']]), ] @pytest.mark.parametrize('testname,filename,string,expected', Utf8Characters) def test_Utf8Characters(testname, filename, string, expected): warnings = util.check_file(m.Utf8Characters, filename, string) assert warnings == expected def test_all_check_functions_are_used(): import inspect import checkpackagelib.lib_config as lib_config import checkpackagelib.lib_hash as lib_hash import checkpackagelib.lib_mk as lib_mk import checkpackagelib.lib_patch as lib_patch c_config = [c[0] for c in inspect.getmembers(lib_config, inspect.isclass)] c_hash = [c[0] for c in inspect.getmembers(lib_hash, inspect.isclass)] c_mk = [c[0] for c in inspect.getmembers(lib_mk, inspect.isclass)] c_patch = [c[0] for c in inspect.getmembers(lib_patch, inspect.isclass)] c_all = c_config + c_hash + c_mk + c_patch c_common = [c[0] for c in inspect.getmembers(m, inspect.isclass)] assert set(c_common) <= set(c_all)