@@ -4051,4 +4051,215 @@ def test_no_valid_configuration_check_config(tmp_path):
40514051 assert stderr .splitlines () == [
40524052 '{}:1:2: error: No header in #include [syntaxError]' .format (test_file ),
40534053 '{}:1:2: error: No header in #include [syntaxError]' .format (test_file )
4054- ]
4054+ ]
4055+
4056+
4057+ def __test_active_checkers (tmp_path , active_cnt , total_cnt , use_misra = False , use_unusedfunction_only = False , checkers_exp = None ):
4058+ test_file = tmp_path / 'test.c'
4059+ with open (test_file , 'w' ) as f :
4060+ f .write ('int i;' )
4061+
4062+ build_dir = None
4063+ if checkers_exp is not None :
4064+ build_dir = tmp_path / 'b1'
4065+ os .makedirs (build_dir )
4066+
4067+ args = [
4068+ '-q' ,
4069+ '--enable=information' ,
4070+ '-j1' ,
4071+ str (test_file )
4072+ ]
4073+
4074+ if use_misra :
4075+ args += ['--addon=misra' ]
4076+ if build_dir :
4077+ args += ['--cppcheck-build-dir={}' .format (build_dir )]
4078+ else :
4079+ args += ['--no-cppcheck-build-dir' ]
4080+
4081+ env = {}
4082+ if use_unusedfunction_only :
4083+ env = {'UNUSEDFUNCTION_ONLY' : '1' }
4084+ args += ['--enable=unusedFunction' ]
4085+ exitcode , stdout , stderr , _ = cppcheck_ex (args , remove_checkers_report = False , env = env )
4086+ assert exitcode == 0 , stdout
4087+ assert stdout .splitlines () == []
4088+ assert stderr .splitlines () == [
4089+ f'nofile:0:0: information: Active checkers: { active_cnt } /{ total_cnt } (use --checkers-report=<filename> to see details) [checkersReport]' ,
4090+ '' # TODO: get rid of extra newline
4091+ ]
4092+
4093+ if build_dir :
4094+ checkers_file = build_dir / 'checkers.txt'
4095+ with open (checkers_file , 'r' ) as f :
4096+ checkers = f .read ().splitlines ()
4097+
4098+ assert checkers == checkers_exp
4099+ assert len (checkers ) == active_cnt
4100+
4101+
4102+ def test_active_unusedfunction_only (tmp_path ):
4103+ # TODO: should only report a single active check
4104+ __test_active_checkers (tmp_path , 5 , 966 , use_unusedfunction_only = True )
4105+
4106+
4107+ def test_active_unusedfunction_only_builddir (tmp_path ):
4108+ # TODO: should only report a single active check
4109+ checkers_exp = [
4110+ 'CheckBufferOverrun::analyseWholeProgram' ,
4111+ 'CheckClass::analyseWholeProgram' ,
4112+ 'CheckNullPointer::analyseWholeProgram' ,
4113+ 'CheckUninitVar::analyseWholeProgram' ,
4114+ 'CheckUnusedFunctions::check' ,
4115+ ]
4116+ __test_active_checkers (tmp_path , 5 , 966 , use_unusedfunction_only = True , checkers_exp = checkers_exp )
4117+
4118+
4119+ def test_active_unusedfunction_only_misra (tmp_path ):
4120+ # TODO: should only report a single active check
4121+ __test_active_checkers (tmp_path , 267 , 1166 , use_unusedfunction_only = True , use_misra = True )
4122+
4123+
4124+ @pytest .mark .xfail (strict = True ) # TODO: active count and checkers.txt differ
4125+ def test_active_unusedfunction_only_misra_builddir (tmp_path ):
4126+ # TODO: should only report a single active check
4127+ checkers_exp = [
4128+ 'CheckBufferOverrun::analyseWholeProgram' ,
4129+ 'CheckClass::analyseWholeProgram' ,
4130+ 'CheckNullPointer::analyseWholeProgram' ,
4131+ 'CheckUninitVar::analyseWholeProgram' ,
4132+ 'CheckUnusedFunctions::check' ,
4133+ 'Misra C: 1.2' ,
4134+ 'Misra C: 1.4' ,
4135+ 'Misra C: 10.1' ,
4136+ 'Misra C: 10.2' ,
4137+ 'Misra C: 10.3' ,
4138+ 'Misra C: 10.4' ,
4139+ 'Misra C: 10.5' ,
4140+ 'Misra C: 10.6' ,
4141+ 'Misra C: 10.7' ,
4142+ 'Misra C: 10.8' ,
4143+ 'Misra C: 11.1' ,
4144+ 'Misra C: 11.2' ,
4145+ 'Misra C: 11.3' ,
4146+ 'Misra C: 11.4' ,
4147+ 'Misra C: 11.5' ,
4148+ 'Misra C: 11.6' ,
4149+ 'Misra C: 11.7' ,
4150+ 'Misra C: 11.8' ,
4151+ 'Misra C: 11.9' ,
4152+ 'Misra C: 12.1' ,
4153+ 'Misra C: 12.2' ,
4154+ 'Misra C: 12.3' ,
4155+ 'Misra C: 12.4' ,
4156+ 'Misra C: 13.1' ,
4157+ 'Misra C: 13.3' ,
4158+ 'Misra C: 13.4' ,
4159+ 'Misra C: 13.5' ,
4160+ 'Misra C: 13.6' ,
4161+ 'Misra C: 14.1' ,
4162+ 'Misra C: 14.2' ,
4163+ 'Misra C: 14.4' ,
4164+ 'Misra C: 15.1' ,
4165+ 'Misra C: 15.2' ,
4166+ 'Misra C: 15.3' ,
4167+ 'Misra C: 15.4' ,
4168+ 'Misra C: 15.5' ,
4169+ 'Misra C: 15.6' ,
4170+ 'Misra C: 15.7' ,
4171+ 'Misra C: 16.1' ,
4172+ 'Misra C: 16.2' ,
4173+ 'Misra C: 16.3' ,
4174+ 'Misra C: 16.4' ,
4175+ 'Misra C: 16.5' ,
4176+ 'Misra C: 16.6' ,
4177+ 'Misra C: 16.7' ,
4178+ 'Misra C: 17.1' ,
4179+ 'Misra C: 17.2' ,
4180+ 'Misra C: 17.3' ,
4181+ 'Misra C: 17.6' ,
4182+ 'Misra C: 17.7' ,
4183+ 'Misra C: 17.8' ,
4184+ 'Misra C: 18.4' ,
4185+ 'Misra C: 18.5' ,
4186+ 'Misra C: 18.7' ,
4187+ 'Misra C: 18.8' ,
4188+ 'Misra C: 19.2' ,
4189+ 'Misra C: 2.2' ,
4190+ 'Misra C: 2.3' ,
4191+ 'Misra C: 2.4' ,
4192+ 'Misra C: 2.5' ,
4193+ 'Misra C: 2.7' ,
4194+ 'Misra C: 20.1' ,
4195+ 'Misra C: 20.10' ,
4196+ 'Misra C: 20.11' ,
4197+ 'Misra C: 20.12' ,
4198+ 'Misra C: 20.13' ,
4199+ 'Misra C: 20.14' ,
4200+ 'Misra C: 20.2' ,
4201+ 'Misra C: 20.3' ,
4202+ 'Misra C: 20.4' ,
4203+ 'Misra C: 20.5' ,
4204+ 'Misra C: 20.7' ,
4205+ 'Misra C: 20.8' ,
4206+ 'Misra C: 20.9' ,
4207+ 'Misra C: 21.1' ,
4208+ 'Misra C: 21.10' ,
4209+ 'Misra C: 21.11' ,
4210+ 'Misra C: 21.12' ,
4211+ 'Misra C: 21.14' ,
4212+ 'Misra C: 21.15' ,
4213+ 'Misra C: 21.16' ,
4214+ 'Misra C: 21.19' ,
4215+ 'Misra C: 21.2' ,
4216+ 'Misra C: 21.20' ,
4217+ 'Misra C: 21.21' ,
4218+ 'Misra C: 21.3' ,
4219+ 'Misra C: 21.4' ,
4220+ 'Misra C: 21.5' ,
4221+ 'Misra C: 21.6' ,
4222+ 'Misra C: 21.7' ,
4223+ 'Misra C: 21.8' ,
4224+ 'Misra C: 21.9' ,
4225+ 'Misra C: 22.10' ,
4226+ 'Misra C: 22.5' ,
4227+ 'Misra C: 22.7' ,
4228+ 'Misra C: 22.8' ,
4229+ 'Misra C: 22.9' ,
4230+ 'Misra C: 3.1' ,
4231+ 'Misra C: 4.1' ,
4232+ 'Misra C: 4.2' ,
4233+ 'Misra C: 5.1' ,
4234+ 'Misra C: 5.2' ,
4235+ 'Misra C: 5.4' ,
4236+ 'Misra C: 5.5' ,
4237+ 'Misra C: 5.6' ,
4238+ 'Misra C: 5.7' ,
4239+ 'Misra C: 5.8' ,
4240+ 'Misra C: 5.9' ,
4241+ 'Misra C: 6.1' ,
4242+ 'Misra C: 6.2' ,
4243+ 'Misra C: 7.1' ,
4244+ 'Misra C: 7.2' ,
4245+ 'Misra C: 7.3' ,
4246+ 'Misra C: 7.4' ,
4247+ 'Misra C: 8.1' ,
4248+ 'Misra C: 8.10' ,
4249+ 'Misra C: 8.11' ,
4250+ 'Misra C: 8.12' ,
4251+ 'Misra C: 8.14' ,
4252+ 'Misra C: 8.2' ,
4253+ 'Misra C: 8.4' ,
4254+ 'Misra C: 8.5' ,
4255+ 'Misra C: 8.6' ,
4256+ 'Misra C: 8.7' ,
4257+ 'Misra C: 8.8' ,
4258+ 'Misra C: 8.9' ,
4259+ 'Misra C: 9.2' ,
4260+ 'Misra C: 9.3' ,
4261+ 'Misra C: 9.4' ,
4262+ 'Misra C: 9.5'
4263+ ]
4264+ __test_active_checkers (tmp_path , 267 , 1166 , use_unusedfunction_only = True , use_misra = True , checkers_exp = checkers_exp )
4265+
0 commit comments