Skip to content

Commit f7a3761

Browse files
authored
Fixed #12771 (Progress value is not increased) (#7956)
1 parent 9ab1585 commit f7a3761

File tree

3 files changed

+91
-61
lines changed

3 files changed

+91
-61
lines changed

cli/executor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ void Executor::reportStatus(std::size_t fileindex, std::size_t filecount, std::s
6565
{
6666
if (filecount > 1) {
6767
std::ostringstream oss;
68-
const unsigned long percentDone = (sizetotal > 0) ? (100 * sizedone) / sizetotal : 0;
68+
const unsigned long percentDone = (sizetotal > 0) ? (100 * sizedone) / sizetotal : (100 * fileindex / filecount);
6969
oss << fileindex << '/' << filecount
7070
<< " files checked " << percentDone
7171
<< "% done";

test/cli/more-projects_test.py

Lines changed: 51 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -574,13 +574,13 @@ def test_project_file_order(tmpdir):
574574
lines = stdout.splitlines()
575575
assert lines == [
576576
'Checking {} ...'.format(test_file_c),
577-
'1/4 files checked 0% done',
577+
'1/4 files checked 25% done',
578578
'Checking {} ...'.format(test_file_d),
579-
'2/4 files checked 0% done',
579+
'2/4 files checked 50% done',
580580
'Checking {} ...'.format(test_file_b),
581-
'3/4 files checked 0% done',
581+
'3/4 files checked 75% done',
582582
'Checking {} ...'.format(test_file_a),
583-
'4/4 files checked 0% done'
583+
'4/4 files checked 100% done'
584584
]
585585
assert stderr == ''
586586

@@ -648,11 +648,11 @@ def test_project_file_duplicate_2(tmpdir):
648648
lines = stdout.splitlines()
649649
assert lines == [
650650
'Checking {} ...'.format(test_file_c),
651-
'1/3 files checked 0% done',
651+
'1/3 files checked 33% done',
652652
'Checking {} ...'.format(test_file_a),
653-
'2/3 files checked 0% done',
653+
'2/3 files checked 66% done',
654654
'Checking {} ...'.format(test_file_b),
655-
'3/3 files checked 0% done'
655+
'3/3 files checked 100% done'
656656
]
657657
assert stderr == ''
658658

@@ -696,18 +696,18 @@ def test_project_file_duplicate_3(tmpdir):
696696
if sys.platform == 'win32':
697697
assert lines == [
698698
'Checking {} ...'.format(test_file_a),
699-
'1/3 files checked 0% done',
699+
'1/3 files checked 33% done',
700700
'Checking {} ...'.format(test_file_a),
701-
'2/3 files checked 0% done',
701+
'2/3 files checked 66% done',
702702
'Checking {} ...'.format(test_file_a),
703-
'3/3 files checked 0% done'
703+
'3/3 files checked 100% done'
704704
]
705705
else:
706706
assert lines == [
707707
'Checking {} ...'.format(test_file_a),
708-
'1/2 files checked 0% done',
708+
'1/2 files checked 50% done',
709709
'Checking {} ...'.format(test_file_a),
710-
'2/2 files checked 0% done'
710+
'2/2 files checked 100% done'
711711
]
712712
assert stderr == ''
713713

@@ -764,11 +764,11 @@ def test_project_file_duplicate_4(tmpdir):
764764
# TODO: only a single file should be checked
765765
assert lines == [
766766
'Checking {} ...'.format(test_file_a),
767-
'1/3 files checked 0% done',
767+
'1/3 files checked 33% done',
768768
'Checking {} ...'.format(test_file_a),
769-
'2/3 files checked 0% done',
769+
'2/3 files checked 66% done',
770770
'Checking {} ...'.format(test_file_a),
771-
'3/3 files checked 0% done'
771+
'3/3 files checked 100% done'
772772
]
773773
assert stderr == ''
774774

@@ -1061,3 +1061,39 @@ def test_project_file_no_analyze_all_vs_configs(tmp_path):
10611061
ret, stdout, stderr = cppcheck(['--project=' + str(project_path)])
10621062
assert ret == 0, stdout
10631063
assert stderr == ''
1064+
1065+
1066+
@pytest.mark.parametrize("j,executor", [
1067+
(1, "thread"),
1068+
(2, "thread"),
1069+
(2, "process"),
1070+
])
1071+
def test_project_progress(tmp_path, j, executor):
1072+
if sys.platform == 'win32' and executor == "process":
1073+
pytest.skip("process executor not supported on Windows")
1074+
1075+
code = 'x = 1;'
1076+
with open(tmp_path / 'test1.c', 'wt') as f:
1077+
f.write(code)
1078+
with open(tmp_path / 'test2.c', 'wt') as f:
1079+
f.write(code)
1080+
1081+
compilation_db = [
1082+
{"directory": str(tmp_path),
1083+
"command": "gcc -c test1.c",
1084+
"file": "test1.c",
1085+
"output": "test1.o"},
1086+
{"directory": str(tmp_path),
1087+
"command": "gcc -c test2.c",
1088+
"file": "test2.c",
1089+
"output": "test2.o"},
1090+
]
1091+
1092+
project_file = tmp_path / 'compile_commands.json'
1093+
1094+
with open(project_file, 'wt') as f:
1095+
f.write(json.dumps(compilation_db))
1096+
1097+
_, stdout, _ = cppcheck([f'--project={project_file}', f'-j{j}', f'--executor={executor}'])
1098+
assert '1/2 files checked 50% done' in stdout
1099+
assert '2/2 files checked 100% done' in stdout

test/cli/other_test.py

Lines changed: 39 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,13 +1016,13 @@ def test_file_order(tmpdir):
10161016
lines = stdout.splitlines()
10171017
assert lines == [
10181018
'Checking {} ...'.format(test_file_c),
1019-
'1/4 files checked 0% done',
1019+
'1/4 files checked 25% done',
10201020
'Checking {} ...'.format(test_file_d),
1021-
'2/4 files checked 0% done',
1021+
'2/4 files checked 50% done',
10221022
'Checking {} ...'.format(test_file_b),
1023-
'3/4 files checked 0% done',
1023+
'3/4 files checked 75% done',
10241024
'Checking {} ...'.format(test_file_a),
1025-
'4/4 files checked 0% done'
1025+
'4/4 files checked 100% done'
10261026
]
10271027
assert stderr == ''
10281028

@@ -1044,13 +1044,13 @@ def test_markup(tmpdir):
10441044
args = ['--library=qt', test_file_1, test_file_2, test_file_3, test_file_4, '-j1']
10451045
out_lines = [
10461046
'Checking {} ...'.format(test_file_2),
1047-
'1/4 files checked 0% done',
1047+
'1/4 files checked 25% done',
10481048
'Checking {} ...'.format(test_file_4),
1049-
'2/4 files checked 0% done',
1049+
'2/4 files checked 50% done',
10501050
'Checking {} ...'.format(test_file_1),
1051-
'3/4 files checked 0% done',
1051+
'3/4 files checked 75% done',
10521052
'Checking {} ...'.format(test_file_3),
1053-
'4/4 files checked 0% done'
1053+
'4/4 files checked 100% done'
10541054
]
10551055

10561056
assert_cppcheck(args, ec_exp=0, err_exp=[], out_exp=out_lines)
@@ -1075,23 +1075,17 @@ def test_markup_j(tmpdir):
10751075
exitcode, stdout, stderr = cppcheck(args)
10761076
assert exitcode == 0, stdout if stdout else stderr
10771077
lines = stdout.splitlines()
1078-
for i in range(1, 5):
1079-
lines.remove('{}/4 files checked 0% done'.format(i))
1080-
1081-
# this test started to fail in the -j2 injection run when using ThreadExecutor although it always specifies -j2.
1082-
# the order of the files in the output changed so just check for the file extentions
1083-
assert len(lines) == 4
1084-
assert lines[0].endswith('.cpp ...')
1085-
assert lines[1].endswith('.cpp ...')
1086-
assert lines[2].endswith('.qml ...')
1087-
assert lines[3].endswith('.qml ...')
1088-
1089-
#assert lines == [
1090-
# 'Checking {} ...'.format(test_file_2),
1091-
# 'Checking {} ...'.format(test_file_4),
1092-
# 'Checking {} ...'.format(test_file_1),
1093-
# 'Checking {} ...'.format(test_file_3)
1094-
#]
1078+
1079+
assert sorted(lines) == [
1080+
'1/4 files checked 25% done',
1081+
'2/4 files checked 50% done',
1082+
'3/4 files checked 75% done',
1083+
'4/4 files checked 100% done',
1084+
'Checking {} ...'.format(test_file_1),
1085+
'Checking {} ...'.format(test_file_2),
1086+
'Checking {} ...'.format(test_file_3),
1087+
'Checking {} ...'.format(test_file_4)
1088+
]
10951089
assert stderr == ''
10961090

10971091

@@ -1213,11 +1207,11 @@ def test_file_duplicate_2(tmpdir):
12131207
lines = stdout.splitlines()
12141208
assert lines == [
12151209
'Checking {} ...'.format(test_file_c),
1216-
'1/3 files checked 0% done',
1210+
'1/3 files checked 33% done',
12171211
'Checking {} ...'.format(test_file_a),
1218-
'2/3 files checked 0% done',
1212+
'2/3 files checked 66% done',
12191213
'Checking {} ...'.format(test_file_b),
1220-
'3/3 files checked 0% done'
1214+
'3/3 files checked 100% done'
12211215
]
12221216
assert stderr == ''
12231217

@@ -1245,28 +1239,28 @@ def test_file_duplicate_3(tmpdir):
12451239
if sys.platform == 'win32':
12461240
assert lines == [
12471241
'Checking {} ...'.format('a.c'),
1248-
'1/6 files checked 0% done',
1242+
'1/6 files checked 16% done',
12491243
'Checking {} ...'.format('a.c'),
1250-
'2/6 files checked 0% done',
1244+
'2/6 files checked 33% done',
12511245
'Checking {} ...'.format('a.c'),
1252-
'3/6 files checked 0% done',
1246+
'3/6 files checked 50% done',
12531247
'Checking {} ...'.format(test_file_a),
1254-
'4/6 files checked 0% done',
1248+
'4/6 files checked 66% done',
12551249
'Checking {} ...'.format(test_file_a),
1256-
'5/6 files checked 0% done',
1250+
'5/6 files checked 83% done',
12571251
'Checking {} ...'.format(test_file_a),
1258-
'6/6 files checked 0% done'
1252+
'6/6 files checked 100% done'
12591253
]
12601254
else:
12611255
assert lines == [
12621256
'Checking {} ...'.format('a.c'),
1263-
'1/4 files checked 0% done',
1257+
'1/4 files checked 25% done',
12641258
'Checking {} ...'.format('a.c'),
1265-
'2/4 files checked 0% done',
1259+
'2/4 files checked 50% done',
12661260
'Checking {} ...'.format(test_file_a),
1267-
'3/4 files checked 0% done',
1261+
'3/4 files checked 75% done',
12681262
'Checking {} ...'.format(test_file_a),
1269-
'4/4 files checked 0% done'
1263+
'4/4 files checked 100% done'
12701264
]
12711265
assert stderr == ''
12721266

@@ -1298,17 +1292,17 @@ def test_file_duplicate_4(tmpdir):
12981292
# TODO: only a single file should be checked
12991293
assert lines == [
13001294
'Checking {} ...'.format('a.c'),
1301-
'1/6 files checked 0% done',
1295+
'1/6 files checked 16% done',
13021296
'Checking {} ...'.format('a.c'),
1303-
'2/6 files checked 0% done',
1297+
'2/6 files checked 33% done',
13041298
'Checking {} ...'.format('a.c'),
1305-
'3/6 files checked 0% done',
1299+
'3/6 files checked 50% done',
13061300
'Checking {} ...'.format(test_file_a),
1307-
'4/6 files checked 0% done',
1301+
'4/6 files checked 66% done',
13081302
'Checking {} ...'.format(test_file_a),
1309-
'5/6 files checked 0% done',
1303+
'5/6 files checked 83% done',
13101304
'Checking {} ...'.format(test_file_a),
1311-
'6/6 files checked 0% done'
1305+
'6/6 files checked 100% done'
13121306
]
13131307
assert stderr == ''
13141308

@@ -1663,7 +1657,7 @@ def test_filelist(tmpdir):
16631657
]
16641658
assert len(expected), len(lines)
16651659
for i in range(1, len(expected)+1):
1666-
lines.remove('{}/{} files checked 0% done'.format(i, len(expected)))
1660+
lines.remove('{}/{} files checked {}% done'.format(i, len(expected), int(100 * i // len(expected))))
16671661
assert lines == expected
16681662

16691663

0 commit comments

Comments
 (0)