forked from pfqgauxfb/code-analysis
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
9.3 KiB
215 lines
9.3 KiB
|
|
# python3 -m pytest test-unused_function_test.py
|
|
|
|
import os
|
|
import json
|
|
from testutils import cppcheck
|
|
|
|
__script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
__project_dir = os.path.join(__script_dir, 'unusedFunction')
|
|
__project_dir_sep = __project_dir + os.path.sep
|
|
|
|
|
|
# TODO: make this a generic helper function
|
|
def __create_compdb(tmpdir, projpath):
|
|
compile_commands = os.path.join(tmpdir, 'compile_commands.json')
|
|
files = []
|
|
for f in os.listdir(projpath):
|
|
files.append(f)
|
|
files.sort()
|
|
j = []
|
|
for f in files:
|
|
j.append({
|
|
'directory': projpath,
|
|
'file': os.path.join(projpath, f),
|
|
'command': 'gcc -c {}'.format(f)
|
|
})
|
|
with open(compile_commands, 'wt') as f:
|
|
f.write(json.dumps(j, indent=4))
|
|
return compile_commands
|
|
|
|
|
|
def test_unused_functions():
|
|
ret, stdout, stderr = cppcheck(['-q', '--template=simple', '--enable=unusedFunction', '--inline-suppr', '-j1', __project_dir])
|
|
assert stdout.splitlines() == []
|
|
assert stderr.splitlines() == [
|
|
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
|
|
]
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_unused_functions_j():
|
|
ret, stdout, stderr = cppcheck(['-q', '--template=simple', '--enable=unusedFunction', '--inline-suppr', '-j2', __project_dir])
|
|
assert stdout.splitlines() == [
|
|
"cppcheck: unusedFunction check can't be used with '-j' option. Disabling unusedFunction check."
|
|
]
|
|
assert stderr.splitlines() == []
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_unused_functions_project():
|
|
ret, stdout, stderr = cppcheck(['-q',
|
|
'--template=simple',
|
|
'--enable=unusedFunction',
|
|
'--inline-suppr',
|
|
'--project={}'.format(os.path.join(__project_dir, 'unusedFunction.cppcheck')),
|
|
'-j1'])
|
|
assert stdout.splitlines() == []
|
|
assert [
|
|
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
|
|
] == stderr.splitlines()
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_unused_functions_project_j():
|
|
ret, stdout, stderr = cppcheck(['-q',
|
|
'--template=simple',
|
|
'--enable=unusedFunction',
|
|
'--inline-suppr',
|
|
'--project={}'.format(os.path.join(__project_dir, 'unusedFunction.cppcheck')),
|
|
'-j2'])
|
|
assert stdout.splitlines() == [
|
|
"cppcheck: unusedFunction check can't be used with '-j' option. Disabling unusedFunction check."
|
|
]
|
|
assert [] == stderr.splitlines()
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_unused_functions_compdb(tmpdir):
|
|
compdb_file = __create_compdb(tmpdir, __project_dir)
|
|
ret, stdout, stderr = cppcheck(['-q',
|
|
'--template=simple',
|
|
'--enable=unusedFunction',
|
|
'--inline-suppr',
|
|
'--project={}'.format(compdb_file),
|
|
'-j1'
|
|
])
|
|
assert stdout.splitlines() == []
|
|
assert stderr.splitlines() == [
|
|
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
|
|
]
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_unused_functions_compdb_j(tmpdir):
|
|
compdb_file = __create_compdb(tmpdir, __project_dir)
|
|
ret, stdout, stderr = cppcheck(['-q',
|
|
'--template=simple',
|
|
'--enable=unusedFunction',
|
|
'--inline-suppr',
|
|
'--project={}'.format(compdb_file),
|
|
'-j2'
|
|
])
|
|
assert stdout.splitlines() == [
|
|
"cppcheck: unusedFunction check can't be used with '-j' option. Disabling unusedFunction check."
|
|
]
|
|
assert stderr.splitlines() == []
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_unused_functions_builddir(tmpdir):
|
|
build_dir = os.path.join(tmpdir, 'b1')
|
|
os.mkdir(build_dir)
|
|
ret, stdout, stderr = cppcheck(['-q', '--template=simple', '--enable=unusedFunction', '--inline-suppr', '-j1', '--cppcheck-build-dir={}'.format(build_dir), __project_dir])
|
|
assert stdout.splitlines() == []
|
|
assert stderr.splitlines() == [
|
|
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
|
|
]
|
|
assert ret == 0, stdout
|
|
|
|
|
|
# TODO: only f3_3 is unused
|
|
def test_unused_functions_builddir_j(tmpdir):
|
|
build_dir = os.path.join(tmpdir, 'b1')
|
|
os.mkdir(build_dir)
|
|
ret, stdout, stderr = cppcheck(['-q', '--template=simple', '--enable=unusedFunction', '--inline-suppr', '-j2', '--cppcheck-build-dir={}'.format(build_dir), __project_dir])
|
|
assert stdout.splitlines() == []
|
|
assert stderr.splitlines() == [
|
|
"{}1.c:4:0: style: The function 'f1' is never used. [unusedFunction]".format(__project_dir_sep),
|
|
"{}2.c:4:0: style: The function 'f2' is never used. [unusedFunction]".format(__project_dir_sep),
|
|
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep),
|
|
"{}4.c:4:0: style: The function 'f4_1' is never used. [unusedFunction]".format(__project_dir_sep)
|
|
]
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_unused_functions_builddir_project(tmpdir):
|
|
build_dir = os.path.join(tmpdir, 'b1')
|
|
os.mkdir(build_dir)
|
|
ret, stdout, stderr = cppcheck(['-q',
|
|
'--template=simple',
|
|
'--enable=unusedFunction',
|
|
'--inline-suppr',
|
|
'--project={}'.format(os.path.join(__project_dir, 'unusedFunction.cppcheck')),
|
|
'--cppcheck-build-dir={}'.format(build_dir),
|
|
'-j1'])
|
|
assert stdout.splitlines() == []
|
|
assert stderr.splitlines() == [
|
|
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
|
|
]
|
|
assert ret == 0, stdout
|
|
|
|
|
|
# TODO: only f3_3 is unused
|
|
def test_unused_functions_builddir_project_j(tmpdir):
|
|
build_dir = os.path.join(tmpdir, 'b1')
|
|
os.mkdir(build_dir)
|
|
ret, stdout, stderr = cppcheck(['-q',
|
|
'--template=simple',
|
|
'--enable=unusedFunction',
|
|
'--inline-suppr',
|
|
'--project={}'.format(os.path.join(__project_dir, 'unusedFunction.cppcheck')),
|
|
'--cppcheck-build-dir={}'.format(build_dir),
|
|
'-j2'])
|
|
assert stdout.splitlines() == []
|
|
assert stderr.splitlines() == [
|
|
"{}1.c:4:0: style: The function 'f1' is never used. [unusedFunction]".format(__project_dir_sep),
|
|
"{}2.c:4:0: style: The function 'f2' is never used. [unusedFunction]".format(__project_dir_sep),
|
|
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep),
|
|
"{}4.c:4:0: style: The function 'f4_1' is never used. [unusedFunction]".format(__project_dir_sep)
|
|
]
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_unused_functions_builddir_compdb(tmpdir):
|
|
compdb_file = __create_compdb(tmpdir, __project_dir)
|
|
build_dir = os.path.join(tmpdir, 'b1')
|
|
os.mkdir(build_dir)
|
|
ret, stdout, stderr = cppcheck(['-q',
|
|
'--template=simple',
|
|
'--enable=unusedFunction',
|
|
'--inline-suppr',
|
|
'--project={}'.format(compdb_file),
|
|
'--cppcheck-build-dir={}'.format(build_dir),
|
|
'-j1'
|
|
])
|
|
assert stdout.splitlines() == []
|
|
assert stderr.splitlines() == [
|
|
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
|
|
]
|
|
assert ret == 0, stdout
|
|
|
|
|
|
# TODO: only f3_3 is unused
|
|
def test_unused_functions_builddir_compdb_j(tmpdir):
|
|
compdb_file = __create_compdb(tmpdir, __project_dir)
|
|
build_dir = os.path.join(tmpdir, 'b1')
|
|
os.mkdir(build_dir)
|
|
ret, stdout, stderr = cppcheck(['-q',
|
|
'--template=simple',
|
|
'--enable=unusedFunction',
|
|
'--inline-suppr',
|
|
'--project={}'.format(compdb_file),
|
|
'--cppcheck-build-dir={}'.format(build_dir),
|
|
'-j2'
|
|
])
|
|
assert stdout.splitlines() == []
|
|
assert stderr.splitlines() == [
|
|
"{}1.c:4:0: style: The function 'f1' is never used. [unusedFunction]".format(__project_dir_sep),
|
|
"{}2.c:4:0: style: The function 'f2' is never used. [unusedFunction]".format(__project_dir_sep),
|
|
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep),
|
|
"{}4.c:4:0: style: The function 'f4_1' is never used. [unusedFunction]".format(__project_dir_sep)
|
|
]
|
|
assert ret == 0, stdout
|