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.
285 lines
8.0 KiB
285 lines
8.0 KiB
|
|
# python -m pytest test-inline-suppress.py
|
|
|
|
import json
|
|
import os
|
|
import pytest
|
|
from testutils import cppcheck
|
|
|
|
__script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
__proj_inline_suppres_path = 'proj-inline-suppress' + os.path.sep
|
|
|
|
|
|
def __create_unused_function_compile_commands(tmpdir):
|
|
prjpath = os.path.realpath(os.path.join(__script_dir, 'proj-inline-suppress-unusedFunction'))
|
|
j = [{'directory': prjpath,
|
|
'command': '/usr/bin/c++ -I"' + prjpath + '" -o "' + os.path.join(prjpath, 'B.cpp.o') + '" -c "' + os.path.join(prjpath, 'B.cpp') + '"',
|
|
'file': os.path.join(prjpath, 'B.cpp')},
|
|
{'directory': prjpath,
|
|
'command': '/usr/bin/c++ -I"' + prjpath + '" -o "' + os.path.join(prjpath, 'A.cpp.o') + '" -c "' + os.path.join(prjpath, 'A.cpp') + '"',
|
|
'file': os.path.join(prjpath, 'A.cpp')}]
|
|
compdb_path = os.path.join(tmpdir, 'proj-inline-suppress-unusedFunction')
|
|
os.makedirs(compdb_path)
|
|
compile_commands = os.path.join(compdb_path, 'compile_commands.json')
|
|
with open(compile_commands, 'wt') as f:
|
|
f.write(json.dumps(j, indent=4))
|
|
return compile_commands
|
|
|
|
|
|
def test1():
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'--inline-suppr',
|
|
'proj-inline-suppress'
|
|
]
|
|
ret, stdout, stderr = cppcheck(args, cwd=__script_dir)
|
|
assert stderr == ''
|
|
assert stdout == ''
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test2():
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'proj-inline-suppress'
|
|
]
|
|
ret, stdout, stderr = cppcheck(args, cwd=__script_dir)
|
|
lines = stderr.splitlines()
|
|
assert lines == [
|
|
'{}3.cpp:4:19: error: Division by zero. [zerodiv]'.format(__proj_inline_suppres_path)
|
|
]
|
|
assert stdout == ''
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_unmatched_suppression():
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'--inline-suppr',
|
|
'--enable=information',
|
|
'--disable=missingInclude',
|
|
'--error-exitcode=1',
|
|
'{}2.c'.format(__proj_inline_suppres_path)
|
|
]
|
|
ret, stdout, stderr = cppcheck(args, cwd=__script_dir)
|
|
lines = stderr.splitlines()
|
|
assert lines == [
|
|
'{}2.c:2:0: information: Unmatched suppression: some_warning_id [unmatchedSuppression]'.format(__proj_inline_suppres_path)
|
|
]
|
|
assert stdout == ''
|
|
assert ret == 1, stdout
|
|
|
|
|
|
def test_unmatched_suppression_path_with_extra_stuff():
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'--inline-suppr',
|
|
'--enable=information',
|
|
'--disable=missingInclude',
|
|
'--error-exitcode=1',
|
|
'{}2.c'.format(__proj_inline_suppres_path)
|
|
]
|
|
ret, stdout, stderr = cppcheck(args, cwd=__script_dir)
|
|
lines = stderr.splitlines()
|
|
assert lines == [
|
|
'{}2.c:2:0: information: Unmatched suppression: some_warning_id [unmatchedSuppression]'.format(__proj_inline_suppres_path)
|
|
]
|
|
assert stdout == ''
|
|
assert ret == 1, stdout
|
|
|
|
|
|
def test_backwards_compatibility():
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'{}3.cpp'.format(__proj_inline_suppres_path)
|
|
]
|
|
ret, stdout, stderr = cppcheck(args, cwd=__script_dir)
|
|
lines = stderr.splitlines()
|
|
assert lines == [
|
|
'{}3.cpp:4:19: error: Division by zero. [zerodiv]'.format(__proj_inline_suppres_path)
|
|
]
|
|
assert stdout == ''
|
|
assert ret == 0, stdout
|
|
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'--inline-suppr',
|
|
'{}3.cpp'.format(__proj_inline_suppres_path)
|
|
]
|
|
ret, stdout, stderr = cppcheck(args, cwd=__script_dir)
|
|
lines = stderr.splitlines()
|
|
assert lines == []
|
|
assert stdout == ''
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def __test_compile_commands_unused_function(tmpdir, use_j):
|
|
compdb_file = __create_unused_function_compile_commands(tmpdir)
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'--enable=all',
|
|
'--error-exitcode=1',
|
|
'--project={}'.format(compdb_file)
|
|
]
|
|
if use_j:
|
|
args.append('-j2')
|
|
else:
|
|
args.append('-j1')
|
|
ret, stdout, stderr = cppcheck(args)
|
|
proj_path_sep = os.path.join(__script_dir, 'proj-inline-suppress-unusedFunction') + os.path.sep
|
|
lines = stderr.splitlines()
|
|
assert lines == [
|
|
"{}B.cpp:6:0: style: The function 'unusedFunctionTest' is never used. [unusedFunction]".format(proj_path_sep)
|
|
]
|
|
assert stdout == ''
|
|
assert ret == 1, stdout
|
|
|
|
|
|
def test_compile_commands_unused_function(tmpdir):
|
|
__test_compile_commands_unused_function(tmpdir, False)
|
|
|
|
|
|
@pytest.mark.skip # unusedFunction does not work with -j
|
|
def test_compile_commands_unused_function_j(tmpdir):
|
|
__test_compile_commands_unused_function(tmpdir, True)
|
|
|
|
|
|
def __test_compile_commands_unused_function_suppression(tmpdir, use_j):
|
|
compdb_file = __create_unused_function_compile_commands(tmpdir)
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'--enable=all',
|
|
'--inline-suppr',
|
|
'--error-exitcode=1',
|
|
'--project={}'.format(compdb_file)
|
|
]
|
|
if use_j:
|
|
args.append('-j2')
|
|
else:
|
|
args.append('-j1')
|
|
ret, stdout, stderr = cppcheck(args)
|
|
lines = stderr.splitlines()
|
|
assert lines == []
|
|
assert stdout == ''
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_compile_commands_unused_function_suppression(tmpdir):
|
|
__test_compile_commands_unused_function_suppression(tmpdir, False)
|
|
|
|
|
|
@pytest.mark.skip # unusedFunction does not work with -j
|
|
def test_compile_commands_unused_function_suppression_j(tmpdir):
|
|
__test_compile_commands_unused_function_suppression(tmpdir, True)
|
|
|
|
|
|
def test_unmatched_suppression_ifdef():
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'--enable=information',
|
|
'--disable=missingInclude',
|
|
'--inline-suppr',
|
|
'-DNO_ZERO_DIV',
|
|
'trac5704/trac5704a.c'
|
|
]
|
|
ret, stdout, stderr = cppcheck(args, cwd=__script_dir)
|
|
lines = stderr.splitlines()
|
|
assert lines == []
|
|
assert stdout == ''
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_unmatched_suppression_ifdef_0():
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'--enable=information',
|
|
'--disable=missingInclude',
|
|
'--inline-suppr',
|
|
'trac5704/trac5704b.c'
|
|
]
|
|
ret, stdout, stderr = cppcheck(args, cwd=__script_dir)
|
|
lines = stderr.splitlines()
|
|
assert lines == []
|
|
assert stdout == ''
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_build_dir(tmpdir):
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'--cppcheck-build-dir={}'.format(tmpdir),
|
|
'--enable=all',
|
|
'--inline-suppr',
|
|
'{}4.c'.format(__proj_inline_suppres_path)
|
|
]
|
|
|
|
ret, stdout, stderr = cppcheck(args, cwd=__script_dir)
|
|
lines = stderr.splitlines()
|
|
assert lines == []
|
|
assert stdout == ''
|
|
assert ret == 0, stdout
|
|
|
|
ret, stdout, stderr = cppcheck(args, cwd=__script_dir)
|
|
lines = stderr.splitlines()
|
|
assert lines == []
|
|
assert stdout == ''
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def __test_build_dir_unused_template(tmpdir, use_j):
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'--cppcheck-build-dir={}'.format(tmpdir),
|
|
'--enable=all',
|
|
'--inline-suppr',
|
|
'{}template.cpp'.format(__proj_inline_suppres_path)
|
|
]
|
|
if use_j:
|
|
args.append('-j2')
|
|
else:
|
|
args.append('-j1')
|
|
|
|
ret, stdout, stderr = cppcheck(args, cwd=__script_dir)
|
|
lines = stderr.splitlines()
|
|
assert lines == []
|
|
assert stdout == ''
|
|
assert ret == 0, stdout
|
|
|
|
|
|
def test_build_dir_unused_template(tmpdir):
|
|
__test_build_dir_unused_template(tmpdir, False)
|
|
|
|
|
|
@pytest.mark.xfail(strict=True)
|
|
def test_build_dir_unused_template_j(tmpdir):
|
|
__test_build_dir_unused_template(tmpdir, True)
|
|
|
|
|
|
def test_suppress_unmatched_inline_suppression(): # 11172
|
|
args = [
|
|
'-q',
|
|
'--template=simple',
|
|
'--enable=information',
|
|
'--disable=missingInclude',
|
|
'--suppress=unmatchedSuppression',
|
|
'--inline-suppr',
|
|
'{}2.c'.format(__proj_inline_suppres_path)
|
|
]
|
|
ret, stdout, stderr = cppcheck(args, cwd=__script_dir)
|
|
lines = stderr.splitlines()
|
|
assert lines == []
|
|
assert stdout == ''
|
|
assert ret == 0, stdout
|