Skip to content

Commit 40b7ac2

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

1 file changed

Lines changed: 210 additions & 0 deletions

File tree

test/cli/other_test.py

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

0 commit comments

Comments
 (0)