1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
#!/usr/bin/env python
from reduce import Reduce
class ReduceTest(Reduce):
# pylint: disable-next=super-init-not-called - we do not want the super __init__ to be called
def __init__(self):
# 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'
]
filedata_exp = filedata
filedata2 = reduce.combinelines(filedata)
assert filedata == filedata_exp
assert filedata2 == ['int i,j,\n',
'',
'l,\n',
'm,\n',
'n,\n',
'o,\n',
'p,\n',
'q,\n',
'r,\n',
's,\n',
't;\n',
'']
|