示例#1
0
    def test_parse_annotations_correctly(self):
        param_str = '_In_ int a, _Inout_ int b, _Out_opt_ int c'
        param1 = Param('a', 'int', 'in')
        param2 = Param('b', 'int', 'inout')
        param3 = Param('c', 'int', 'out_opt')

        self.assertEqual(parse_func_parameters(param_str), [param1, param2, param3])
示例#2
0
    def test_parse_two_annotations_correctly(self):
        param_str = 'IN OUT int a'

        self.assertEqual(
            parse_func_parameters(param_str)[0].annotations_text,
            '_Inout_'
        )
示例#3
0
    def test_parse__in_annotation(self):
        param_str = '__in int f'
        param = Param('f', '__in int')

        param.parse_annotations()

        self.assertEqual(parse_func_parameters(param_str), [param])
示例#4
0
    def test_parse_multiple_parameters(self):
        param_str = 'void x, unsigned int a, char * c'
        param1 = Param('x', 'void')
        param2 = Param('a', 'unsigned int')
        param3 = Param('c', 'char *')

        self.assertEqual(parse_func_parameters(param_str),
                         [param1, param2, param3])
示例#5
0
    def test_parse_parameters_with_multiword_ret_type(self):
        param_str = 'unsigned int i, int f(unsigned int a, char), char c3'
        param1 = Param('i', 'unsigned int')
        param2 = Param('f', 'int (unsigned int a, char)')
        param3 = Param('c3', 'char')

        self.assertEqual(parse_func_parameters(param_str),
                         [param1, param2, param3])
示例#6
0
    def test_parse_parameters_without_name_just_returns_type(self):
        param_str = 'int, void *, char **, bool'
        param1 = Param('', 'int')
        param2 = Param('', 'void *')
        param3 = Param('', 'char **')
        param4 = Param('', 'bool')

        self.assertEqual(parse_func_parameters(param_str),
                         [param1, param2, param3, param4])
示例#7
0
    def test_parse_parameters_with_in_annotations(self):
        param_str = '_In_ char c_2__, _In_opt_ int f'
        param1 = Param('c_2__', '_In_ char')
        param2 = Param('f', '_In_opt_ int')

        param1.parse_annotations()
        param2.parse_annotations()

        self.assertEqual(parse_func_parameters(param_str), [param1, param2])
示例#8
0
    def test_parse_parameters_with_out_annotations(self):
        param_str = '_Inout_ char c_2__, _Out_ int f, _Out_opt_ int x'
        param1 = Param('c_2__', '_Out_ char')
        param2 = Param('f', '_Out_ int')
        param3 = Param('x', '_Out_ int')

        param1.parse_annotations()
        param2.parse_annotations()
        param3.parse_annotations()

        self.assertEqual(parse_func_parameters(param_str),
                         [param1, param2, param3])
示例#9
0
    def test_parse_parameters_with_array_with_arithmetic_expr(self):
        param_str = 'int x[5 - 4/2 + sizeof(int)], char c'
        param1 = Param('x', 'int [5 - 4/2 + sizeof(int)]')
        param2 = Param('c', 'char')

        self.assertEqual(parse_func_parameters(param_str), [param1, param2])
示例#10
0
 def test_parse_one_void_parameter(self):
     self.assertEqual(
         parse_func_parameters('void x'),
         [Param('x', 'void')]
     )
示例#11
0
 def test_parse_empty_string_returns_empty_list_of_params(self):
     self.assertEqual(parse_func_parameters(''), [])
示例#12
0
 def test_parse_annotations_does_not_affect_type(self):
     self.assertEqual(
         parse_func_parameters('IN TYPE_INFO i'),
         [Param('i', 'TYPE_INFO')]
     )
示例#13
0
    def test_invalid_function_parameter_is_ignored(self):
        param_str = 'char c, int f(int x, int y'
        param = Param('c', 'char')

        self.assertEqual(parse_func_parameters(param_str), [param])
示例#14
0
 def test_parse_param_with_nested_brackets_in_params(self):
     self.assertEqual(
         parse_func_parameters('void * func(int a, void (*g)(x))'),
         [Param('func', 'void * (int a, void (*g)(x))')]
     )
示例#15
0
 def test_parse__function_with_call_convention_as_parameter(self):
     self.assertEqual(
         parse_func_parameters('void * (__cdecl func)(int a, char b)'),
         [Param('func', 'void * (__cdecl )(int a, char b)')]
     )
示例#16
0
 def test_parse_function_as_parameter(self):
     self.assertEqual(
         parse_func_parameters('void * func(int a, char b)'),
         [Param('func', 'void * (int a, char b)')]
     )
示例#17
0
    def test_parse_function_as_parameter_without_param_names_only_types(self):
        param_str = 'char c_2__, int f(int, char)'
        param1 = Param('c_2__', 'char')
        param2 = Param('f', 'int (int, char)')

        self.assertEqual(parse_func_parameters(param_str), [param1, param2])
示例#18
0
 def test_parse_named_ptr_to_function_as_parameter(self):
     self.assertEqual(
         parse_func_parameters('void * (*func)(int a, char b)'),
         [Param('func', 'void * (*)(int a, char b)')]
     )
示例#19
0
    def test_parse_parameters_with_two_dimensional_array(self):
        param_str = 'int x[5][10], char c'
        param1 = Param('x', 'int [5][10]')
        param2 = Param('c', 'char')

        self.assertEqual(parse_func_parameters(param_str), [param1, param2])
示例#20
0
 def test_parse_function_with_name_in_brackets(self):
     self.assertEqual(
         parse_func_parameters('void * (func)(int a, char b)'),
         [Param('func', 'void * ()(int a, char b)')]
     )
示例#21
0
 def test_parse_ptr_to_func_with_call_conv_does_not_care_if_conv_is_OK(self):
     self.assertEqual(
         parse_func_parameters('void * (__tricky_macro*func)(int a, char b)'),
         [Param('func', 'void * (__tricky_macro*)(int a, char b)')]
     )