def assert_create_as(self, srccode, exp_expr=None, exp_params=None, exp_valid=True, exp_name='MACRO'): pyexpr = compile(exp_expr, '<string>', 'eval') if exp_expr else None assert MacroDef.create_from_srccode(srccode) \ == MacroDef(exp_name, pyexpr, exp_params, exp_valid)
def test_read_onMacro_returnsParsedMacro(self): parser = self.parse('\n\n#define MACRO 3') assert parser.macros['MACRO'] \ == MacroDef('MACRO', compile('3', '<string>', 'eval'))
class Container: macro = MacroDef.create_from_srccode('macro sub_macro(3)') def sub_macro(cls, param): return param + 2
def test_init_setsAttrs(self): macro = MacroDef('NAME', '1 + 2', (), False) assert macro.name == 'NAME' assert macro.code == '1 + 2' assert macro.params == () assert not macro.valid
class Container: strct_ptr = Mock() macro = MacroDef.create_from_srccode('macro strct_ptr->member')
class Container: macro = MacroDef.create_from_srccode('macro constant') constant = 9
class Container: macro = MacroDef('macro', '1')
def test_read_onNonStrPredefinedMacro_implicitlyConvertToStr(self): parser = self.parse('', MACRO=1) code_obj = compile("1", '<string>', 'eval') assert parser.macros['MACRO'] \ == MacroDef('MACRO', code_obj)
class Container: macro = MacroDef('MACRO', None)
class Container: macro = MacroDef('MACRO', valid=False)
class Container: enum = Mock() macro = MacroDef.create_from_srccode('macro (enum name)1')
class Container: union = Mock() macro = MacroDef.create_from_srccode('macro (union name *)1')
class Container: struct = Mock() macro = MacroDef.create_from_srccode('macro (struct name *)1')
def test_read_onPredefinedMacros_makeThemAvailableLikeUsualMacros(self): parser = self.parse('', MACRO='a') code_obj = compile("self.a", '<string>', 'eval') assert parser.macros['MACRO'] == MacroDef('MACRO', code_obj)
class Container: macro = MacroDef.create_from_srccode('macro(a, b)')
def test_read_onPredefinedMacroIsEmptyStr_implicitlyConvertsToNone(self): parser = self.parse('', MACRO='') assert parser.macros['MACRO'] == MacroDef('MACRO', None)
class Container: int = MagicMock() macro = MacroDef.create_from_srccode('macro (int*)1 * 2')
def test_read_onPredefinedMacroIsNone_setMacroToNone(self): parser = self.parse('', MACRO=None) assert parser.macros['MACRO'] == MacroDef('MACRO', None)
def test_createFromSrcCode_onStringMacroWithEscapeSeq_mustNotGenerateAnyKindOfWarning( self): with warnings.catch_warnings(record=True) as warning_list: MacroDef.create_from_srccode(r'MACRO "\n"') assert not warning_list