Skip to content

Commit 9130b3b

Browse files
authored
refs #12274 / fixed #13287 - test/cli/proj2_test.py: made it location-independent / some cleanups (danmar#6636)
1 parent a8b5307 commit 9130b3b

File tree

2 files changed

+55
-63
lines changed

2 files changed

+55
-63
lines changed

lib/importproject.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,7 +1269,7 @@ bool ImportProject::importCppcheckGuiProject(std::istream &istr, Settings *setti
12691269
if (strcmp(name, CppcheckXml::RootPathName) == 0) {
12701270
const char* attr = node->Attribute(CppcheckXml::RootPathNameAttrib);
12711271
if (attr) {
1272-
temp.basePaths.push_back(joinRelativePath(path, attr));
1272+
temp.basePaths.push_back(Path::fromNativeSeparators(joinRelativePath(path, attr)));
12731273
temp.relativePaths = true;
12741274
}
12751275
} else if (strcmp(name, CppcheckXml::BuildDirElementName) == 0)
@@ -1401,7 +1401,7 @@ bool ImportProject::importCppcheckGuiProject(std::istream &istr, Settings *setti
14011401
settings->premiumArgs = temp.premiumArgs.substr(1);
14021402

14031403
for (const std::string &p : paths)
1404-
guiProject.pathNames.push_back(p);
1404+
guiProject.pathNames.push_back(Path::fromNativeSeparators(p));
14051405
settings->supprs.nomsg.addSuppressions(std::move(suppressions));
14061406
settings->checkHeaders = temp.checkHeaders;
14071407
settings->checkUnusedTemplates = temp.checkUnusedTemplates;

test/cli/proj2_test.py

Lines changed: 53 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -5,97 +5,90 @@
55
import os
66
from testutils import create_gui_project_file, cppcheck
77

8-
COMPILE_COMMANDS_JSON = 'compile_commands.json'
9-
10-
ERR_A = ('%s:1:7: error: Division by zero. [zerodiv]\n' +
11-
'x = 3 / 0;\n' +
12-
' ^\n') % os.path.join('a', 'a.c')
13-
ERR_B = ('%s:1:7: error: Division by zero. [zerodiv]\n' +
14-
'x = 3 / 0;\n' +
15-
' ^\n') % os.path.join('b', 'b.c')
16-
17-
def realpath(s):
18-
return os.path.realpath(s).replace('\\', '/')
19-
20-
def create_compile_commands():
21-
j = [{'directory': realpath('proj2/a'), 'command': 'gcc -c a.c', 'file': 'a.c'},
22-
{'directory': realpath('proj2'), 'command': 'gcc -c b/b.c', 'file': 'b/b.c'}]
23-
with open('proj2/' + COMPILE_COMMANDS_JSON, 'wt') as f:
8+
__script_dir = os.path.dirname(os.path.abspath(__file__))
9+
__proj_dir = os.path.join(__script_dir, 'proj2')
10+
11+
__COMPILE_COMMANDS_JSON = 'compile_commands.json'
12+
13+
__ERR_A = ('%s:1:7: error: Division by zero. [zerodiv]\n' +
14+
'x = 3 / 0;\n' +
15+
' ^\n') % os.path.join('a', 'a.c')
16+
__ERR_B = ('%s:1:7: error: Division by zero. [zerodiv]\n' +
17+
'x = 3 / 0;\n' +
18+
' ^\n') % os.path.join('b', 'b.c')
19+
20+
def __create_compile_commands():
21+
j = [{'directory': os.path.join(__proj_dir, 'a'), 'command': 'gcc -c a.c', 'file': 'a.c'},
22+
{'directory': __proj_dir, 'command': 'gcc -c b/b.c', 'file': 'b/b.c'}]
23+
with open(os.path.join(__proj_dir, __COMPILE_COMMANDS_JSON), 'wt') as f:
2424
f.write(json.dumps(j))
2525

26-
# Run Cppcheck from project path
27-
def cppcheck_local(args):
28-
cwd = os.getcwd()
29-
os.chdir('proj2')
30-
ret, stdout, stderr = cppcheck(args)
31-
os.chdir(cwd)
32-
return ret, stdout, stderr
3326

3427
def test_file_filter():
35-
ret, stdout, _ = cppcheck(['proj2/','--file-filter=proj2/a/*'])
28+
ret, stdout, _ = cppcheck(['proj2/','--file-filter=proj2/a/*'], cwd=__script_dir)
3629
file1 = os.path.join('proj2', 'a', 'a.c')
3730
file2 = os.path.join('proj2', 'b', 'b.c')
38-
assert ret == 0
31+
assert ret == 0, stdout
3932
assert stdout.find('Checking %s ...' % file1) >= 0
40-
ret, stdout, _ = cppcheck(['proj2/','--file-filter=proj2/b*'])
33+
ret, stdout, _ = cppcheck(['proj2/','--file-filter=proj2/b*'], cwd=__script_dir)
4134
assert ret == 0, stdout
4235
assert stdout.find('Checking %s ...' % file2) >= 0
4336

4437
def test_local_path():
45-
create_compile_commands()
46-
ret, stdout, _ = cppcheck_local(['--project=compile_commands.json'])
38+
__create_compile_commands()
39+
ret, stdout, _ = cppcheck(['--project=compile_commands.json'], cwd=__proj_dir)
4740
file1 = os.path.join('a', 'a.c')
4841
file2 = os.path.join('b', 'b.c')
4942
assert ret == 0, stdout
5043
assert stdout.find('Checking %s ...' % file1) >= 0
5144
assert stdout.find('Checking %s ...' % file2) >= 0
5245

5346
def test_local_path_force():
54-
create_compile_commands()
55-
ret, stdout, _ = cppcheck_local(['--project=compile_commands.json', '--force'])
47+
__create_compile_commands()
48+
ret, stdout, _ = cppcheck(['--project=compile_commands.json', '--force'], cwd=__proj_dir)
5649
assert ret == 0, stdout
5750
assert stdout.find('AAA') >= 0
5851

5952
def test_local_path_maxconfigs():
60-
create_compile_commands()
61-
ret, stdout, _ = cppcheck_local(['--project=compile_commands.json', '--max-configs=2'])
53+
__create_compile_commands()
54+
ret, stdout, _ = cppcheck(['--project=compile_commands.json', '--max-configs=2'], cwd=__proj_dir)
6255
assert ret == 0, stdout
6356
assert stdout.find('AAA') >= 0
6457

6558
def test_relative_path():
66-
create_compile_commands()
67-
ret, stdout, _ = cppcheck(['--project=proj2/' + COMPILE_COMMANDS_JSON])
59+
__create_compile_commands()
60+
ret, stdout, _ = cppcheck(['--project=proj2/' + __COMPILE_COMMANDS_JSON], cwd=__script_dir)
6861
file1 = os.path.join('proj2', 'a', 'a.c')
6962
file2 = os.path.join('proj2', 'b', 'b.c')
7063
assert ret == 0, stdout
7164
assert stdout.find('Checking %s ...' % file1) >= 0
7265
assert stdout.find('Checking %s ...' % file2) >= 0
7366

7467
def test_absolute_path():
75-
create_compile_commands()
76-
ret, stdout, _ = cppcheck(['--project=' + os.path.realpath('proj2/' + COMPILE_COMMANDS_JSON)])
77-
file1 = os.path.realpath('proj2/a/a.c')
78-
file2 = os.path.realpath('proj2/b/b.c')
68+
__create_compile_commands()
69+
ret, stdout, _ = cppcheck(['--project=' + os.path.join(__proj_dir, __COMPILE_COMMANDS_JSON)], cwd=__script_dir)
70+
file1 = os.path.join(__proj_dir, 'a', 'a.c')
71+
file2 = os.path.join(__proj_dir, 'b', 'b.c')
7972
assert ret == 0, stdout
8073
assert stdout.find('Checking %s ...' % file1) >= 0
8174
assert stdout.find('Checking %s ...' % file2) >= 0
8275

8376
def test_gui_project_loads_compile_commands_1():
84-
create_compile_commands()
85-
ret, stdout, _ = cppcheck(['--project=proj2/proj2.cppcheck'])
77+
__create_compile_commands()
78+
ret, stdout, _ = cppcheck(['--project=proj2/proj2.cppcheck'], cwd=__script_dir)
8679
file1 = os.path.join('proj2', 'a', 'a.c')
8780
file2 = os.path.join('proj2', 'b', 'b.c')
8881
assert ret == 0, stdout
8982
assert stdout.find('Checking %s ...' % file1) >= 0
9083
assert stdout.find('Checking %s ...' % file2) >= 0
9184

9285
def test_gui_project_loads_compile_commands_2():
93-
create_compile_commands()
86+
__create_compile_commands()
9487
exclude_path_1 = 'proj2/b'
95-
create_gui_project_file('proj2/test.cppcheck',
88+
create_gui_project_file(os.path.join(__proj_dir, 'test.cppcheck'),
9689
import_project='compile_commands.json',
9790
exclude_paths=[exclude_path_1])
98-
ret, stdout, _ = cppcheck(['--project=proj2/test.cppcheck'])
91+
ret, stdout, _ = cppcheck(['--project=' + os.path.join('proj2','test.cppcheck')], cwd=__script_dir)
9992
file1 = os.path.join('proj2', 'a', 'a.c')
10093
file2 = os.path.join('proj2', 'b', 'b.c') # Excluded by test.cppcheck
10194
assert ret == 0, stdout
@@ -104,8 +97,8 @@ def test_gui_project_loads_compile_commands_2():
10497

10598

10699
def test_gui_project_loads_relative_vs_solution():
107-
create_gui_project_file('test.cppcheck', import_project='proj2/proj2.sln')
108-
ret, stdout, _ = cppcheck(['--project=test.cppcheck'])
100+
create_gui_project_file(os.path.join(__script_dir, 'test.cppcheck'), import_project='proj2/proj2.sln')
101+
ret, stdout, _ = cppcheck(['--project=test.cppcheck'], cwd=__script_dir)
109102
file1 = os.path.join('proj2', 'a', 'a.c')
110103
file2 = os.path.join('proj2', 'b', 'b.c')
111104
assert ret == 0, stdout
@@ -119,11 +112,10 @@ def test_gui_project_loads_relative_vs_solution():
119112
assert stdout.find('Checking %s Release|x64...' % file2) >= 0
120113

121114
def test_gui_project_loads_absolute_vs_solution():
122-
create_gui_project_file('test.cppcheck', import_project=realpath('proj2/proj2.sln'))
123-
ret, stdout, _ = cppcheck(['--project=test.cppcheck'])
124-
file1 = os.path.realpath('proj2/a/a.c')
125-
file2 = os.path.realpath('proj2/b/b.c')
126-
print(stdout)
115+
create_gui_project_file(os.path.join(__script_dir, 'test.cppcheck'), import_project=os.path.join(__proj_dir, 'proj2.sln'))
116+
ret, stdout, _ = cppcheck(['--project=test.cppcheck'], cwd=__script_dir)
117+
file1 = os.path.join(__proj_dir, 'a', 'a.c')
118+
file2 = os.path.join(__proj_dir, 'b', 'b.c')
127119
assert ret == 0, stdout
128120
assert stdout.find('Checking %s Debug|Win32...' % file1) >= 0
129121
assert stdout.find('Checking %s Debug|x64...' % file1) >= 0
@@ -135,21 +127,21 @@ def test_gui_project_loads_absolute_vs_solution():
135127
assert stdout.find('Checking %s Release|x64...' % file2) >= 0
136128

137129
def test_gui_project_loads_relative_vs_solution_2():
138-
create_gui_project_file('test.cppcheck', root_path='proj2', import_project='proj2/proj2.sln')
139-
ret, stdout, stderr = cppcheck(['--project=test.cppcheck'])
130+
create_gui_project_file(os.path.join(__script_dir, 'test.cppcheck'), root_path='proj2', import_project='proj2/proj2.sln')
131+
ret, stdout, stderr = cppcheck(['--project=test.cppcheck'], cwd=__script_dir)
140132
assert ret == 0, stdout
141-
assert stderr == ERR_A + ERR_B
133+
assert stderr == __ERR_A + __ERR_B
142134

143135
def test_gui_project_loads_relative_vs_solution_with_exclude():
144-
create_gui_project_file('test.cppcheck', root_path='proj2', import_project='proj2/proj2.sln', exclude_paths=['b'])
145-
ret, stdout, stderr = cppcheck(['--project=test.cppcheck'])
136+
create_gui_project_file(os.path.join(__script_dir, 'test.cppcheck'), root_path='proj2', import_project='proj2/proj2.sln', exclude_paths=['b'])
137+
ret, stdout, stderr = cppcheck(['--project=test.cppcheck'], cwd=__script_dir)
146138
assert ret == 0, stdout
147-
assert stderr == ERR_A
139+
assert stderr == __ERR_A
148140

149141
def test_gui_project_loads_absolute_vs_solution_2():
150-
create_gui_project_file('test.cppcheck',
151-
root_path=realpath('proj2'),
152-
import_project=realpath('proj2/proj2.sln'))
153-
ret, stdout, stderr = cppcheck(['--project=test.cppcheck'])
142+
create_gui_project_file(os.path.join(__script_dir, 'test.cppcheck'),
143+
root_path=__proj_dir,
144+
import_project=os.path.join(__proj_dir, 'proj2.sln'))
145+
ret, stdout, stderr = cppcheck(['--project=test.cppcheck'], cwd=__script_dir)
154146
assert ret == 0, stdout
155-
assert stderr == ERR_A + ERR_B
147+
assert stderr == __ERR_A + __ERR_B

0 commit comments

Comments
 (0)