@@ -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