diff --git a/test/cli/inline-suppress_test.py b/test/cli/inline-suppress_test.py index 6375f65ccb79..5055699ea5a9 100644 --- a/test/cli/inline-suppress_test.py +++ b/test/cli/inline-suppress_test.py @@ -4,6 +4,7 @@ import json import os import pytest +import sys from testutils import cppcheck __script_dir = os.path.dirname(os.path.abspath(__file__)) @@ -237,7 +238,7 @@ def test_build_dir(tmpdir): assert ret == 0, stdout -def __test_build_dir_unused_template(tmpdir, use_j): +def __test_build_dir_unused_template(tmpdir, extra_args): args = [ '-q', '--template=simple', @@ -246,10 +247,8 @@ def __test_build_dir_unused_template(tmpdir, use_j): '--inline-suppr', '{}template.cpp'.format(__proj_inline_suppres_path) ] - if use_j: - args.append('-j2') - else: - args.append('-j1') + + args = args + extra_args ret, stdout, stderr = cppcheck(args, cwd=__script_dir) lines = stderr.splitlines() @@ -259,12 +258,17 @@ def __test_build_dir_unused_template(tmpdir, use_j): def test_build_dir_unused_template(tmpdir): - __test_build_dir_unused_template(tmpdir, False) + __test_build_dir_unused_template(tmpdir, ['-j1']) + + +def test_build_dir_unused_template_j_thread(tmpdir): + __test_build_dir_unused_template(tmpdir, ['-j2', '--executor=thread']) @pytest.mark.xfail(strict=True) -def test_build_dir_unused_template_j(tmpdir): - __test_build_dir_unused_template(tmpdir, True) +@pytest.mark.skipif(sys.platform == 'win32', reason='ProcessExecutor not available on Windows') +def test_build_dir_unused_template_j_process(tmpdir): + __test_build_dir_unused_template(tmpdir, ['-j2', '--executor=process']) def test_suppress_unmatched_inline_suppression(): # 11172 @@ -284,133 +288,92 @@ def test_suppress_unmatched_inline_suppression(): # 11172 assert ret == 0, stdout -# reporting of inline unusedFunction is deferred -def __test_unused_function_unmatched(tmpdir, use_j): +# TODO: should this error out? +def test_duplicate(tmpdir): args = [ '-q', '--template=simple', + '--cppcheck-build-dir={}'.format(tmpdir), '--enable=all', '--inline-suppr', - 'proj-inline-suppress/unusedFunctionUnmatched.cpp' + 'proj-inline-suppress/duplicate.cpp' ] - if use_j: - args.append('-j2') - else: - args.append('-j1') - ret, stdout, stderr = cppcheck(args, cwd=__script_dir) lines = stderr.splitlines() - lines.sort() - assert lines == [ - '{}unusedFunctionUnmatched.cpp:5:0: information: Unmatched suppression: uninitvar [unmatchedSuppression]'.format(__proj_inline_suppres_path), - '{}unusedFunctionUnmatched.cpp:5:0: information: Unmatched suppression: unusedFunction [unmatchedSuppression]'.format(__proj_inline_suppres_path) - ] + assert lines == [] assert stdout == '' assert ret == 0, stdout -def test_unused_function_unmatched(tmpdir): - __test_unused_function_unmatched(tmpdir, False) - - -@pytest.mark.skip # unusedFunction does not work with -j -def test_unused_function_unmatched_j(tmpdir): - __test_unused_function_unmatched(tmpdir, True) - - -# reporting of inline unusedFunction is deferred -def __test_unused_function_unmatched_build_dir(tmpdir, extra_args): +# no error as inline suppressions ars handled separately +def __test_duplicate_cmd(tmpdir, extra_args): args = [ '-q', '--template=simple', '--cppcheck-build-dir={}'.format(tmpdir), '--enable=all', '--inline-suppr', - 'proj-inline-suppress/unusedFunctionUnmatched.cpp' + '--suppress=unreadVariable', + 'proj-inline-suppress/4.c' ] args = args + extra_args ret, stdout, stderr = cppcheck(args, cwd=__script_dir) lines = stderr.splitlines() - lines.sort() - print(lines) + # this is the suppression provided via the command-line which is unused because only the inline suppression is being matched assert lines == [ - '{}unusedFunctionUnmatched.cpp:5:0: information: Unmatched suppression: uninitvar [unmatchedSuppression]'.format(__proj_inline_suppres_path), - '{}unusedFunctionUnmatched.cpp:5:0: information: Unmatched suppression: unusedFunction [unmatchedSuppression]'.format(__proj_inline_suppres_path) + 'nofile:0:0: information: Unmatched suppression: unreadVariable [unmatchedSuppression]' ] assert stdout == '' assert ret == 0, stdout -def test_unused_function_unmatched_build_dir(tmpdir): - __test_unused_function_unmatched_build_dir(tmpdir, ['-j1']) - - @pytest.mark.xfail(strict=True) -def test_unused_function_unmatched_build_dir_j(tmpdir): - __test_unused_function_unmatched_build_dir(tmpdir, ['-j2']) +def test_duplicate_cmd(tmpdir): + __test_duplicate_cmd(tmpdir, ['-j1']) -# no error as inline suppressions are currently not being propagated back -def test_duplicate(tmpdir): - args = [ - '-q', - '--template=simple', - '--cppcheck-build-dir={}'.format(tmpdir), - '--enable=all', - '--inline-suppr', - 'proj-inline-suppress/duplicate.cpp' - ] +def test_duplicate_cmd_j(tmpdir): + __test_duplicate_cmd(tmpdir, ['-j2']) - ret, stdout, stderr = cppcheck(args, cwd=__script_dir) - lines = stderr.splitlines() - assert lines == [] - assert stdout == '' - assert ret == 0, stdout +# no error as inline suppressions ars handled separately +def __test_duplicate_file(tmpdir, extra_args): + suppr_file = os.path.join(tmpdir, 'suppressions') + with open(suppr_file, 'wt') as f: + f.write('''unreadVariable''') -# no error as inline suppressions are currently not being propagated back -def test_duplicate_cmd(tmpdir): args = [ '-q', '--template=simple', '--cppcheck-build-dir={}'.format(tmpdir), '--enable=all', '--inline-suppr', - '--suppress=unreadVariable', + '--suppressions-list={}'.format(suppr_file), 'proj-inline-suppress/4.c' ] + args = args + extra_args + ret, stdout, stderr = cppcheck(args, cwd=__script_dir) lines = stderr.splitlines() - assert lines == [] + # this is the suppression provided via the suppression file which is unused because only the inline suppression is being matched + assert lines == [ + 'nofile:0:0: information: Unmatched suppression: unreadVariable [unmatchedSuppression]' + ] assert stdout == '' assert ret == 0, stdout -# no error as inline suppressions are currently not being propagated back +@pytest.mark.xfail(strict=True) def test_duplicate_file(tmpdir): - suppr_file = os.path.join(tmpdir, 'suppressions') - with open(suppr_file, 'wt') as f: - f.write('''unreadVariable''') + __test_duplicate_file(tmpdir, ['-j1']) - args = [ - '-q', - '--template=simple', - '--cppcheck-build-dir={}'.format(tmpdir), - '--enable=all', - '--inline-suppr', - '--suppressions-list={}'.format(suppr_file), - 'proj-inline-suppress/4.c' - ] - ret, stdout, stderr = cppcheck(args, cwd=__script_dir) - lines = stderr.splitlines() - assert lines == [] - assert stdout == '' - assert ret == 0, stdout +def test_duplicate_file_j(tmpdir): + __test_duplicate_file(tmpdir, ['-j2']) # reporting of inline unusedFunction is deferred @@ -430,6 +393,7 @@ def __test_unused_function_unmatched(tmpdir, use_j): ret, stdout, stderr = cppcheck(args, cwd=__script_dir) lines = stderr.splitlines() + lines.sort() assert lines == [ '{}unusedFunctionUnmatched.cpp:5:0: information: Unmatched suppression: uninitvar [unmatchedSuppression]'.format(__proj_inline_suppres_path), '{}unusedFunctionUnmatched.cpp:5:0: information: Unmatched suppression: unusedFunction [unmatchedSuppression]'.format(__proj_inline_suppres_path) @@ -462,6 +426,8 @@ def __test_unused_function_unmatched_build_dir(tmpdir, extra_args): ret, stdout, stderr = cppcheck(args, cwd=__script_dir) lines = stderr.splitlines() + lines.sort() + print(lines) assert lines == [ '{}unusedFunctionUnmatched.cpp:5:0: information: Unmatched suppression: uninitvar [unmatchedSuppression]'.format(__proj_inline_suppres_path), '{}unusedFunctionUnmatched.cpp:5:0: information: Unmatched suppression: unusedFunction [unmatchedSuppression]'.format(__proj_inline_suppres_path) @@ -474,10 +440,6 @@ def test_unused_function_unmatched_build_dir(tmpdir): __test_unused_function_unmatched_build_dir(tmpdir, ['-j1']) -def test_unused_function_unmatched_build_dir_j_thread(tmpdir): - __test_unused_function_unmatched_build_dir(tmpdir, ['-j2', '--executor=thread']) - - @pytest.mark.xfail(strict=True) -def test_unused_function_unmatched_build_dir_j_process(tmpdir): - __test_unused_function_unmatched_build_dir(tmpdir, ['-j2', '--executor=process']) \ No newline at end of file +def test_unused_function_unmatched_build_dir_j(tmpdir): + __test_unused_function_unmatched_build_dir(tmpdir, ['-j2']) \ No newline at end of file diff --git a/test/cli/unused_function_test.py b/test/cli/unused_function_test.py index 4aa06ade4d03..404211c8bcbd 100644 --- a/test/cli/unused_function_test.py +++ b/test/cli/unused_function_test.py @@ -3,6 +3,8 @@ import os import json +import sys +import pytest from testutils import cppcheck __script_dir = os.path.dirname(os.path.abspath(__file__)) @@ -111,7 +113,12 @@ def test_unused_functions_compdb_j(tmpdir): 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]) + ret, stdout, stderr = cppcheck(['-q', + '--template=simple', + '--enable=unusedFunction', + '--inline-suppr', + '--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) @@ -120,10 +127,18 @@ def test_unused_functions_builddir(tmpdir): # TODO: only f3_3 is unused -def test_unused_functions_builddir_j(tmpdir): +@pytest.mark.skipif(sys.platform == 'win32', reason='ProcessExecutor not available on Windows') +def test_unused_functions_builddir_j_process(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]) + ret, stdout, stderr = cppcheck(['-q', + '--template=simple', + '--enable=unusedFunction', + '--inline-suppr', + '-j2', + '--executor=process', + '--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), @@ -142,8 +157,7 @@ def test_unused_functions_builddir_project(tmpdir): '--enable=unusedFunction', '--inline-suppr', '--project={}'.format(os.path.join(__project_dir, 'unusedFunction.cppcheck')), - '--cppcheck-build-dir={}'.format(build_dir), - '-j1']) + '--cppcheck-build-dir={}'.format(build_dir)]) assert stdout.splitlines() == [] assert stderr.splitlines() == [ "{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep) @@ -152,7 +166,8 @@ def test_unused_functions_builddir_project(tmpdir): # TODO: only f3_3 is unused -def test_unused_functions_builddir_project_j(tmpdir): +@pytest.mark.skipif(sys.platform == 'win32', reason='ProcessExecutor not available on Windows') +def test_unused_functions_builddir_project_j_process(tmpdir): build_dir = os.path.join(tmpdir, 'b1') os.mkdir(build_dir) ret, stdout, stderr = cppcheck(['-q', @@ -161,7 +176,8 @@ def test_unused_functions_builddir_project_j(tmpdir): '--inline-suppr', '--project={}'.format(os.path.join(__project_dir, 'unusedFunction.cppcheck')), '--cppcheck-build-dir={}'.format(build_dir), - '-j2']) + '-j2', + '--executor=process']) assert stdout.splitlines() == [] assert stderr.splitlines() == [ "{}1.c:4:0: style: The function 'f1' is never used. [unusedFunction]".format(__project_dir_sep), @@ -182,7 +198,6 @@ def test_unused_functions_builddir_compdb(tmpdir): '--inline-suppr', '--project={}'.format(compdb_file), '--cppcheck-build-dir={}'.format(build_dir), - '-j1' ]) assert stdout.splitlines() == [] assert stderr.splitlines() == [ @@ -192,7 +207,8 @@ def test_unused_functions_builddir_compdb(tmpdir): # TODO: only f3_3 is unused -def test_unused_functions_builddir_compdb_j(tmpdir): +@pytest.mark.skipif(sys.platform == 'win32', reason='ProcessExecutor not available on Windows') +def test_unused_functions_builddir_compdb_j_process(tmpdir): compdb_file = __create_compdb(tmpdir, __project_dir) build_dir = os.path.join(tmpdir, 'b1') os.mkdir(build_dir) @@ -202,7 +218,8 @@ def test_unused_functions_builddir_compdb_j(tmpdir): '--inline-suppr', '--project={}'.format(compdb_file), '--cppcheck-build-dir={}'.format(build_dir), - '-j2' + '-j2', + '--executor=process' ]) assert stdout.splitlines() == [] assert stderr.splitlines() == [