diff --git a/test/cli/proj2/a/a.c b/test/cli/proj2/a/a.c new file mode 100644 index 000000000..e69de29bb diff --git a/test/cli/proj2/b/b.c b/test/cli/proj2/b/b.c new file mode 100644 index 000000000..e69de29bb diff --git a/test/cli/proj2/proj2-exclude.cppcheck b/test/cli/proj2/proj2-exclude.cppcheck new file mode 100644 index 000000000..04b1bcc7d --- /dev/null +++ b/test/cli/proj2/proj2-exclude.cppcheck @@ -0,0 +1,9 @@ + + + + compile_commands.json + + + + + diff --git a/test/cli/proj2/proj2.cppcheck b/test/cli/proj2/proj2.cppcheck new file mode 100644 index 000000000..079023c3e --- /dev/null +++ b/test/cli/proj2/proj2.cppcheck @@ -0,0 +1,6 @@ + + + + compile_commands.json + + diff --git a/test/cli/test-proj2.py b/test/cli/test-proj2.py new file mode 100644 index 000000000..eb6fd89db --- /dev/null +++ b/test/cli/test-proj2.py @@ -0,0 +1,85 @@ + +# python -m pytest test-helloworld.py + +import json +import logging +import os +import subprocess + +COMPILE_COMMANDS_JSON = os.path.join('proj2', 'compile_commands.json') + +def create_compile_commands(path): + j = [{'directory': path+'/a', 'command': 'gcc -c a.c', 'file': 'a.c'}, + {'directory': path+'/b', 'command': 'gcc -c b.c', 'file': 'b.c'}] + f = open(COMPILE_COMMANDS_JSON, 'wt') + f.write(json.dumps(j)) + +# Run Cppcheck with args +def cppcheck(args): + if os.path.isfile('../../bin/debug/cppcheck.exe'): + cmd = '../../bin/debug/cppcheck.exe ' + args + elif os.path.isfile('../../../bin/debug/cppcheck.exe'): + cmd = '../../../bin/debug/cppcheck.exe ' + args + elif os.path.isfile('../../cppcheck'): + cmd = '../../cppcheck ' + args + else: + cmd = '../../../cppcheck ' + args + logging.info(cmd) + p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE) + comm = p.communicate() + stdout = comm[0].decode(encoding='utf-8', errors='ignore').replace('\r\n', '\n') + stderr = comm[1].decode(encoding='utf-8', errors='ignore').replace('\r\n', '\n') + return p.returncode, stdout, stderr + +def test_local_path(): + create_compile_commands(os.path.join(os.getcwd(), 'proj2')) + cwd = os.getcwd() + os.chdir('proj2') + ret, stdout, stderr = cppcheck('--project=compile_commands.json') + os.chdir(cwd) + file1 = os.path.join(cwd, 'proj2', 'a', 'a.c') + file2 = os.path.join(cwd, 'proj2', 'b', 'b.c') + assert ret == 0 + assert stdout.find('Checking %s ...' % (file1)) >= 0 + assert stdout.find('Checking %s ...' % (file2)) >= 0 + +def test_relative_path(): + create_compile_commands(os.path.join(os.getcwd(), 'proj2')) + ret, stdout, stderr = cppcheck('--project=' + COMPILE_COMMANDS_JSON) + cwd = os.getcwd() + file1 = os.path.join(cwd, 'proj2', 'a', 'a.c') + file2 = os.path.join(cwd, 'proj2', 'b', 'b.c') + assert ret == 0 + assert stdout.find('Checking %s ...' % (file1)) >= 0 + assert stdout.find('Checking %s ...' % (file2)) >= 0 + +def test_absolute_path(): + create_compile_commands(os.path.join(os.getcwd(), 'proj2')) + cwd = os.getcwd() + ret, stdout, stderr = cppcheck('--project=' + os.path.join(cwd,COMPILE_COMMANDS_JSON)) + file1 = os.path.join(cwd, 'proj2', 'a', 'a.c') + file2 = os.path.join(cwd, 'proj2', 'b', 'b.c') + assert ret == 0 + assert stdout.find('Checking %s ...' % (file1)) >= 0 + assert stdout.find('Checking %s ...' % (file2)) >= 0 + +def test_project_1(): + create_compile_commands(os.path.join(os.getcwd(), 'proj2')) + ret, stdout, stderr = cppcheck('--project=proj2/proj2.cppcheck') + cwd = os.getcwd() + file1 = os.path.join(cwd, 'proj2', 'a', 'a.c') + file2 = os.path.join(cwd, 'proj2', 'b', 'b.c') + assert ret == 0 + assert stdout.find('Checking %s ...' % (file1)) >= 0 + assert stdout.find('Checking %s ...' % (file2)) >= 0 + +def test_project_2(): + create_compile_commands(os.path.join(os.getcwd(), 'proj2')) + ret, stdout, stderr = cppcheck('--project=proj2/proj2-exclude.cppcheck') + cwd = os.getcwd() + file1 = os.path.join(cwd, 'proj2', 'a', 'a.c') + file2 = os.path.join(cwd, 'proj2', 'b', 'b.c') # Excluded by proj2-exclude.cppcheck + assert ret == 0 + assert stdout.find('Checking %s ...' % (file1)) >= 0 + #assert stdout.find('Checking %s ...' % (file2)) < 0 +