213 lines
5.0 KiB
Python
213 lines
5.0 KiB
Python
|
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)
|