Skip to content

Commit 3950e75

Browse files
committed
refs #14304 - test/cli/other_test.py: added tests of active checker counts
1 parent a9f88d4 commit 3950e75

1 file changed

Lines changed: 209 additions & 0 deletions

File tree

test/cli/other_test.py

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3986,3 +3986,212 @@ def test_max_configs(tmp_path, max_configs, number_of_configs, check_config, exp
39863986
'{}:0:0: information: Too many #ifdef configurations - cppcheck only checks {} of {} configurations. Use --force to check all configurations. [toomanyconfigs]'
39873987
.format(test_file, max_configs, number_of_configs)
39883988
]
3989+
3990+
3991+
def __test_active_checkers(tmp_path, active_cnt, total_cnt, use_misra=False, use_unusedfunction_only=False, checkers_exp=None):
3992+
test_file = tmp_path / 'test.c'
3993+
with open(test_file, 'w') as f:
3994+
f.write('int i;')
3995+
3996+
build_dir = None
3997+
if checkers_exp is not None:
3998+
build_dir = tmp_path / 'b1'
3999+
os.makedirs(build_dir)
4000+
4001+
args = [
4002+
'-q',
4003+
'--enable=information',
4004+
str(test_file)
4005+
]
4006+
4007+
if use_misra:
4008+
args += ['--addon=misra']
4009+
if build_dir:
4010+
args += ['--cppcheck-build-dir={}'.format(build_dir)]
4011+
else:
4012+
args += ['--no-cppcheck-build-dir']
4013+
4014+
env = {}
4015+
if use_unusedfunction_only:
4016+
env = {'UNUSEDFUNCTION_ONLY': '1'}
4017+
args += ['--enable=unusedFunction']
4018+
exitcode, stdout, stderr, _ = cppcheck_ex(args, remove_checkers_report=False, env=env)
4019+
assert exitcode == 0, stdout
4020+
assert stdout.splitlines() == []
4021+
assert stderr.splitlines() == [
4022+
f'nofile:0:0: information: Active checkers: {active_cnt}/{total_cnt} (use --checkers-report=<filename> to see details) [checkersReport]',
4023+
'' # TODO: get rid of extra newline
4024+
]
4025+
4026+
if build_dir:
4027+
checkers_file = build_dir / 'checkers.txt'
4028+
with open(checkers_file, 'r') as f:
4029+
checkers = f.read().splitlines()
4030+
4031+
assert checkers == checkers_exp
4032+
assert len(checkers) == active_cnt
4033+
4034+
4035+
def test_active_unusedfunction_only(tmp_path):
4036+
# TODO: should only report a single active check
4037+
__test_active_checkers(tmp_path, 5, 966, use_unusedfunction_only=True)
4038+
4039+
4040+
def test_active_unusedfunction_only_builddir(tmp_path):
4041+
# TODO: should only report a single active check
4042+
checkers_exp = [
4043+
'CheckBufferOverrun::analyseWholeProgram',
4044+
'CheckClass::analyseWholeProgram',
4045+
'CheckNullPointer::analyseWholeProgram',
4046+
'CheckUninitVar::analyseWholeProgram',
4047+
'CheckUnusedFunctions::check',
4048+
]
4049+
__test_active_checkers(tmp_path, 5, 966, use_unusedfunction_only=True, checkers_exp=checkers_exp)
4050+
4051+
4052+
def test_active_unusedfunction_only_misra(tmp_path):
4053+
# TODO: should only report a single active check
4054+
__test_active_checkers(tmp_path, 267, 1166, use_unusedfunction_only=True, use_misra=True)
4055+
4056+
4057+
@pytest.mark.xfail(strict=True) # TODO: active count and checkers.txt differ
4058+
def test_active_unusedfunction_only_misra_builddir(tmp_path):
4059+
# TODO: should only report a single active check
4060+
checkers_exp = [
4061+
'CheckBufferOverrun::analyseWholeProgram',
4062+
'CheckClass::analyseWholeProgram',
4063+
'CheckNullPointer::analyseWholeProgram',
4064+
'CheckUninitVar::analyseWholeProgram',
4065+
'CheckUnusedFunctions::check',
4066+
'Misra C: 1.2',
4067+
'Misra C: 1.4',
4068+
'Misra C: 10.1',
4069+
'Misra C: 10.2',
4070+
'Misra C: 10.3',
4071+
'Misra C: 10.4',
4072+
'Misra C: 10.5',
4073+
'Misra C: 10.6',
4074+
'Misra C: 10.7',
4075+
'Misra C: 10.8',
4076+
'Misra C: 11.1',
4077+
'Misra C: 11.2',
4078+
'Misra C: 11.3',
4079+
'Misra C: 11.4',
4080+
'Misra C: 11.5',
4081+
'Misra C: 11.6',
4082+
'Misra C: 11.7',
4083+
'Misra C: 11.8',
4084+
'Misra C: 11.9',
4085+
'Misra C: 12.1',
4086+
'Misra C: 12.2',
4087+
'Misra C: 12.3',
4088+
'Misra C: 12.4',
4089+
'Misra C: 13.1',
4090+
'Misra C: 13.3',
4091+
'Misra C: 13.4',
4092+
'Misra C: 13.5',
4093+
'Misra C: 13.6',
4094+
'Misra C: 14.1',
4095+
'Misra C: 14.2',
4096+
'Misra C: 14.4',
4097+
'Misra C: 15.1',
4098+
'Misra C: 15.2',
4099+
'Misra C: 15.3',
4100+
'Misra C: 15.4',
4101+
'Misra C: 15.5',
4102+
'Misra C: 15.6',
4103+
'Misra C: 15.7',
4104+
'Misra C: 16.1',
4105+
'Misra C: 16.2',
4106+
'Misra C: 16.3',
4107+
'Misra C: 16.4',
4108+
'Misra C: 16.5',
4109+
'Misra C: 16.6',
4110+
'Misra C: 16.7',
4111+
'Misra C: 17.1',
4112+
'Misra C: 17.2',
4113+
'Misra C: 17.3',
4114+
'Misra C: 17.6',
4115+
'Misra C: 17.7',
4116+
'Misra C: 17.8',
4117+
'Misra C: 18.4',
4118+
'Misra C: 18.5',
4119+
'Misra C: 18.7',
4120+
'Misra C: 18.8',
4121+
'Misra C: 19.2',
4122+
'Misra C: 2.2',
4123+
'Misra C: 2.3',
4124+
'Misra C: 2.4',
4125+
'Misra C: 2.5',
4126+
'Misra C: 2.7',
4127+
'Misra C: 20.1',
4128+
'Misra C: 20.10',
4129+
'Misra C: 20.11',
4130+
'Misra C: 20.12',
4131+
'Misra C: 20.13',
4132+
'Misra C: 20.14',
4133+
'Misra C: 20.2',
4134+
'Misra C: 20.3',
4135+
'Misra C: 20.4',
4136+
'Misra C: 20.5',
4137+
'Misra C: 20.7',
4138+
'Misra C: 20.8',
4139+
'Misra C: 20.9',
4140+
'Misra C: 21.1',
4141+
'Misra C: 21.10',
4142+
'Misra C: 21.11',
4143+
'Misra C: 21.12',
4144+
'Misra C: 21.14',
4145+
'Misra C: 21.15',
4146+
'Misra C: 21.16',
4147+
'Misra C: 21.19',
4148+
'Misra C: 21.2',
4149+
'Misra C: 21.20',
4150+
'Misra C: 21.21',
4151+
'Misra C: 21.3',
4152+
'Misra C: 21.4',
4153+
'Misra C: 21.5',
4154+
'Misra C: 21.6',
4155+
'Misra C: 21.7',
4156+
'Misra C: 21.8',
4157+
'Misra C: 21.9',
4158+
'Misra C: 22.10',
4159+
'Misra C: 22.5',
4160+
'Misra C: 22.7',
4161+
'Misra C: 22.8',
4162+
'Misra C: 22.9',
4163+
'Misra C: 3.1',
4164+
'Misra C: 4.1',
4165+
'Misra C: 4.2',
4166+
'Misra C: 5.1',
4167+
'Misra C: 5.2',
4168+
'Misra C: 5.4',
4169+
'Misra C: 5.5',
4170+
'Misra C: 5.6',
4171+
'Misra C: 5.7',
4172+
'Misra C: 5.8',
4173+
'Misra C: 5.9',
4174+
'Misra C: 6.1',
4175+
'Misra C: 6.2',
4176+
'Misra C: 7.1',
4177+
'Misra C: 7.2',
4178+
'Misra C: 7.3',
4179+
'Misra C: 7.4',
4180+
'Misra C: 8.1',
4181+
'Misra C: 8.10',
4182+
'Misra C: 8.11',
4183+
'Misra C: 8.12',
4184+
'Misra C: 8.14',
4185+
'Misra C: 8.2',
4186+
'Misra C: 8.4',
4187+
'Misra C: 8.5',
4188+
'Misra C: 8.6',
4189+
'Misra C: 8.7',
4190+
'Misra C: 8.8',
4191+
'Misra C: 8.9',
4192+
'Misra C: 9.2',
4193+
'Misra C: 9.3',
4194+
'Misra C: 9.4',
4195+
'Misra C: 9.5'
4196+
]
4197+
__test_active_checkers(tmp_path, 267, 1166, use_unusedfunction_only=True, use_misra=True, checkers_exp=checkers_exp)

0 commit comments

Comments
 (0)