2019-04-14 21:02:53 +02:00
|
|
|
|
|
|
|
# python -m pytest test-helloworld.py
|
|
|
|
|
|
|
|
import json
|
|
|
|
import os
|
2019-04-15 16:57:16 +02:00
|
|
|
from testutils import create_gui_project_file, cppcheck
|
2019-04-14 21:02:53 +02:00
|
|
|
|
|
|
|
COMPILE_COMMANDS_JSON = os.path.join('proj2', 'compile_commands.json')
|
|
|
|
|
2019-04-15 10:01:27 +02:00
|
|
|
def create_compile_commands():
|
|
|
|
prjpath = os.path.join(os.getcwd(), 'proj2')
|
|
|
|
j = [{'directory': os.path.join(prjpath,'a'), 'command': 'gcc -c a.c', 'file': 'a.c'},
|
|
|
|
{'directory': os.path.join(prjpath,'b'), 'command': 'gcc -c b.c', 'file': 'b.c'}]
|
2019-04-14 21:02:53 +02:00
|
|
|
f = open(COMPILE_COMMANDS_JSON, 'wt')
|
|
|
|
f.write(json.dumps(j))
|
|
|
|
|
2019-04-15 10:01:27 +02:00
|
|
|
# Run Cppcheck from project path
|
|
|
|
def cppcheck_local(args):
|
2019-04-14 21:02:53 +02:00
|
|
|
cwd = os.getcwd()
|
|
|
|
os.chdir('proj2')
|
2019-04-15 10:01:27 +02:00
|
|
|
ret, stdout, stderr = cppcheck(args)
|
2019-04-14 21:02:53 +02:00
|
|
|
os.chdir(cwd)
|
2019-04-15 10:01:27 +02:00
|
|
|
return (ret, stdout, stderr)
|
|
|
|
|
|
|
|
|
|
|
|
def test_local_path():
|
|
|
|
create_compile_commands()
|
|
|
|
ret, stdout, stderr = cppcheck_local('--project=compile_commands.json')
|
|
|
|
cwd = os.getcwd()
|
2019-04-14 21:02:53 +02:00
|
|
|
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():
|
2019-04-15 10:01:27 +02:00
|
|
|
create_compile_commands()
|
2019-04-14 21:02:53 +02:00
|
|
|
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():
|
2019-04-15 10:01:27 +02:00
|
|
|
create_compile_commands()
|
2019-04-14 21:02:53 +02:00
|
|
|
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
|
|
|
|
|
2019-04-15 08:53:23 +02:00
|
|
|
def test_gui_project_loads_compile_commands_1():
|
2019-04-15 10:01:27 +02:00
|
|
|
create_compile_commands()
|
2019-04-14 21:02:53 +02:00
|
|
|
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
|
|
|
|
|
2019-04-15 08:53:23 +02:00
|
|
|
def test_gui_project_loads_compile_commands_2():
|
2019-04-15 10:01:27 +02:00
|
|
|
create_compile_commands()
|
2019-04-15 15:03:06 +02:00
|
|
|
exclude_path_1 = os.path.join(os.getcwd(), 'proj2', 'b').replace('\\', '/')
|
|
|
|
create_gui_project_file('proj2/test.cppcheck',
|
|
|
|
import_project='compile_commands.json',
|
|
|
|
exclude_paths=[exclude_path_1])
|
|
|
|
ret, stdout, stderr = cppcheck('--project=proj2/test.cppcheck')
|
|
|
|
cwd = os.getcwd()
|
|
|
|
file1 = os.path.join(cwd, 'proj2', 'a', 'a.c')
|
|
|
|
file2 = os.path.join(cwd, 'proj2', 'b', 'b.c') # Excluded by test.cppcheck
|
|
|
|
assert ret == 0
|
|
|
|
assert stdout.find('Checking %s ...' % (file1)) >= 0
|
|
|
|
assert stdout.find('Checking %s ...' % (file2)) < 0
|
2019-04-15 08:48:58 +02:00
|
|
|
|
2019-04-15 19:00:57 +02:00
|
|
|
|
|
|
|
def test_gui_project_loads_relative_vs_solution():
|
|
|
|
create_gui_project_file('test.cppcheck', import_project='proj2/proj2.sln')
|
|
|
|
ret, stdout, stderr = cppcheck('--project=test.cppcheck')
|
|
|
|
file1 = os.path.join('proj2', 'a', 'a.c')
|
|
|
|
file2 = os.path.join('proj2', 'b', 'b.c')
|
2019-04-14 21:02:53 +02:00
|
|
|
assert ret == 0
|
2019-04-15 19:00:57 +02:00
|
|
|
assert stdout.find('Checking %s Debug|Win32...' % (file1)) >= 0
|
|
|
|
assert stdout.find('Checking %s Debug|x64...' % (file1)) >= 0
|
|
|
|
assert stdout.find('Checking %s Release|Win32...' % (file1)) >= 0
|
|
|
|
assert stdout.find('Checking %s Release|x64...' % (file1)) >= 0
|
|
|
|
assert stdout.find('Checking %s Debug|Win32...' % (file2)) >= 0
|
|
|
|
assert stdout.find('Checking %s Debug|x64...' % (file2)) >= 0
|
|
|
|
assert stdout.find('Checking %s Release|Win32...' % (file2)) >= 0
|
|
|
|
assert stdout.find('Checking %s Release|x64...' % (file2)) >= 0
|
|
|
|
|
|
|
|
def test_gui_project_loads_absolute_vs_solution():
|
|
|
|
create_gui_project_file('test.cppcheck', import_project=os.path.join(os.getcwd(),'proj2', 'proj2.sln').replace('\\', '/'))
|
|
|
|
ret, stdout, stderr = cppcheck('--project=test.cppcheck')
|
|
|
|
file1 = os.path.join(os.getcwd(), 'proj2', 'a', 'a.c')
|
|
|
|
file2 = os.path.join(os.getcwd(), 'proj2', 'b', 'b.c')
|
|
|
|
print(stdout)
|
|
|
|
assert ret == 0
|
|
|
|
assert stdout.find('Checking %s Debug|Win32...' % (file1)) >= 0
|
|
|
|
assert stdout.find('Checking %s Debug|x64...' % (file1)) >= 0
|
|
|
|
assert stdout.find('Checking %s Release|Win32...' % (file1)) >= 0
|
|
|
|
assert stdout.find('Checking %s Release|x64...' % (file1)) >= 0
|
|
|
|
assert stdout.find('Checking %s Debug|Win32...' % (file2)) >= 0
|
|
|
|
assert stdout.find('Checking %s Debug|x64...' % (file2)) >= 0
|
|
|
|
assert stdout.find('Checking %s Release|Win32...' % (file2)) >= 0
|
|
|
|
assert stdout.find('Checking %s Release|x64...' % (file2)) >= 0
|
|
|
|
|
|
|
|
def test_gui_project_loads_relative_vs_solution():
|
|
|
|
create_gui_project_file('test.cppcheck', root_path='proj2', import_project='proj2/proj2.sln')
|
|
|
|
ret, stdout, stderr = cppcheck('--project=test.cppcheck')
|
|
|
|
assert stderr == ('[a/a.c:1]: (error) Division by zero.\n'
|
|
|
|
'[b/b.c:1]: (error) Division by zero.\n')
|
2019-04-14 21:02:53 +02:00
|
|
|
|
2019-04-15 19:46:12 +02:00
|
|
|
def test_gui_project_loads_relative_vs_solution():
|
|
|
|
create_gui_project_file('test.cppcheck', root_path='proj2', import_project='proj2/proj2.sln', exclude_paths=['b'])
|
|
|
|
ret, stdout, stderr = cppcheck('--project=test.cppcheck')
|
|
|
|
assert stderr == '[a/a.c:1]: (error) Division by zero.\n'
|
|
|
|
|
2019-04-15 19:53:49 +02:00
|
|
|
def test_gui_project_loads_absolute_vs_solution():
|
|
|
|
create_gui_project_file('test.cppcheck',
|
|
|
|
root_path=os.path.join(os.getcwd(), 'proj2').replace('\\', '/'),
|
|
|
|
import_project=os.path.join(os.getcwd(), 'proj2', 'proj2.sln').replace('\\', '/'))
|
|
|
|
ret, stdout, stderr = cppcheck('--project=test.cppcheck')
|
|
|
|
assert stderr == ('[a/a.c:1]: (error) Division by zero.\n'
|
|
|
|
'[b/b.c:1]: (error) Division by zero.\n')
|
|
|
|
|