cppcheck/tools/test_reduce.py

143 lines
3.0 KiB
Python

#!/usr/bin/env python
from reduce import Reduce
class ReduceTest(Reduce):
def __init__(self):
# we do not want the super __init__ to be called
# super().__init__('', '', '')
pass
def runtool(self, filedata=None):
return True
def writefile(self, filedata):
pass
def writebackupfile(self, filedata):
pass
def test_removecomments():
"""make sure we keep the \n when removing a comment at the end of a line"""
reduce = ReduceTest()
filedata = [
'int i; // some integer\n',
'int j;\n'
]
expected = [
'int i;\n',
'int j;\n'
]
reduce.removecomments(filedata)
assert filedata == expected
def test_removedirectives():
"""do not remove any of the #if*, #el* or #endif directives on their own"""
reduce = ReduceTest()
filedata = [
'#if 0\n',
'#else\n',
'#endif\n',
'#ifdef DEF\n',
'#elif 0\n'
'#endif\n'
]
expected = [
'#if 0\n',
'#else\n',
'#endif\n',
'#ifdef DEF\n',
'#elif 0\n'
'#endif\n'
]
reduce.removedirectives(filedata)
assert filedata == expected
def test_combinelines_chunk():
"""do not fail with 'TypeError: slice indices must be integers or None or have an __index__ method'"""
class ReduceTestFail(ReduceTest):
def runtool(self, filedata=None):
print(filedata)
return False
reduce = ReduceTestFail()
# need to have at least 11 lines ending with comma to enter chunked mode and twice as much for second iteration
filedata = [
'int i,\n',
'j,\n',
'k,\n',
'l,\n',
'm,\n',
'n,\n',
'o,\n',
'p,\n',
'q,\n',
'r,\n',
's,\n',
't;\n',
'int i1,\n',
'j1,\n',
'k1,\n',
'l1,\n',
'm1,\n',
'n1,\n',
'o1,\n',
'p1,\n',
'q1,\n',
'r1,\n',
's1,\n',
't1;\n'
]
reduce.combinelines(filedata)
def test_combinelines_chunk_2():
"""'filedata' is not changed by the function since the data is assigned to a local variable"""
reduce = ReduceTest()
# need to have at least 11 lines ending with comma to enter chunked mode
filedata = [
'int i,\n',
'j,\n',
'k,\n',
'l,\n',
'm,\n',
'n,\n',
'o,\n',
'p,\n',
'q,\n',
'r,\n',
's,\n',
't;\n'
]
filedata2 = reduce.combinelines(filedata)
assert filedata == filedata
assert filedata2 == ['int i,j,\n',
'',
'l,\n',
'm,\n',
'n,\n',
'o,\n',
'p,\n',
'q,\n',
'r,\n',
's,\n',
't;\n',
'']