@@ -954,8 +954,11 @@ def test_unused_function_include(tmpdir):
954954 __test_unused_function_include (tmpdir , [])
955955
956956
957+ # TODO: test with clang-tidy
958+ # TODO: test with --addon
959+ # TODO: test with FileSettings
957960# TODO: test with multiple files
958- def __test_showtime (tmp_path , showtime , exp_len , exp_last , extra_args = None ):
961+ def __test_showtime (tmp_path , showtime , exp_res , exp_last , extra_args = None ):
959962 test_file = tmp_path / 'test.cpp'
960963 with open (test_file , 'wt' ) as f :
961964 f .write (
@@ -979,37 +982,40 @@ def __test_showtime(tmp_path, showtime, exp_len, exp_last, extra_args=None):
979982 exitcode , stdout , stderr = cppcheck (args )
980983 assert exitcode == 0
981984 lines = stdout .splitlines ()
985+ exp_len = exp_res
986+ if exp_res :
987+ exp_len += 1 # empty line at the beginning - only added when individual results exist
982988 if 'cppcheck internal API usage' in stdout :
983989 exp_len += 1
990+ exp_len += 1 # last line
984991 assert len (lines ) == exp_len
985- idx_last = exp_len - 1
986- if idx_last :
992+ if exp_res :
987993 assert lines [0 ] == ''
988- for i in range (1 , idx_last ):
994+ for i in range (1 , exp_res ):
989995 assert 'avg.' in lines [i ]
990- assert lines [idx_last ].startswith (exp_last )
996+ assert lines [exp_len - 1 ].startswith (exp_last )
991997 assert stderr == ''
992998
993999
9941000def test_showtime_top5_file (tmp_path ):
995- __test_showtime (tmp_path , 'top5_file' , 7 , 'Check time: ' )
1001+ __test_showtime (tmp_path , 'top5_file' , 5 , 'Check time: ' )
9961002
9971003
9981004# TODO: remove extra args when --executor=process works works
9991005def test_showtime_top5_summary (tmp_path ):
1000- __test_showtime (tmp_path , 'top5_summary' , 7 , 'Overall time: ' , ['-j1' ])
1006+ __test_showtime (tmp_path , 'top5_summary' , 5 , 'Overall time: ' , ['-j1' ])
10011007
10021008
10031009# TODO: remove when --executor=process works works
10041010def test_showtime_top5_summary_j_thread (tmp_path ):
1005- __test_showtime (tmp_path , 'top5_summary' , 7 , 'Overall time: ' , ['-j2' , '--executor=thread' ])
1011+ __test_showtime (tmp_path , 'top5_summary' , 5 , 'Overall time: ' , ['-j2' , '--executor=thread' ])
10061012
10071013
10081014# TODO: remove override when fixed
10091015@pytest .mark .skipif (sys .platform == 'win32' , reason = "requires ProcessExecutor" )
10101016@pytest .mark .xfail (strict = True ) # TODO: need to transfer the timer results to parent process - see #4452
10111017def test_showtime_top5_summary_j_process (tmp_path ):
1012- __test_showtime (tmp_path , 'top5_summary' , 7 , 'Overall time: ' , ['-j2' , '--executor=process' ])
1018+ __test_showtime (tmp_path , 'top5_summary' , 5 , 'Overall time: ' , ['-j2' , '--executor=process' ])
10131019
10141020
10151021def test_showtime_file (tmp_path ):
@@ -1034,7 +1040,39 @@ def test_showtime_summary_j_process(tmp_path):
10341040
10351041
10361042def test_showtime_file_total (tmp_path ):
1037- __test_showtime (tmp_path , 'file-total' , 1 , 'Check time: ' )
1043+ __test_showtime (tmp_path , 'file-total' , 0 , 'Check time: ' )
1044+
1045+
1046+ def test_showtime_unique (tmp_path ):
1047+ test_file = tmp_path / 'test.cpp'
1048+ with open (test_file , 'wt' ) as f :
1049+ f .write (
1050+ """
1051+ void f()
1052+ {
1053+ (void)(*((int*)0)); // cppcheck-suppress nullPointer
1054+ }
1055+ """ )
1056+
1057+ args = [
1058+ '--showtime=summary' ,
1059+ '--quiet' ,
1060+ '--inline-suppr' ,
1061+ str (test_file )
1062+ ]
1063+
1064+ exitcode , stdout , stderr = cppcheck (args )
1065+ assert exitcode == 0
1066+ multi_res = []
1067+ for line in stdout .splitlines ():
1068+ # TODO: remove when we no longer emit empty line
1069+ if not line :
1070+ continue
1071+ if any (i in line for i in ['1 result(s)' , 'Overall time:' ]):
1072+ continue
1073+ multi_res .append (line )
1074+ assert multi_res == []
1075+ assert stderr == ''
10381076
10391077
10401078def test_missing_addon (tmpdir ):
0 commit comments