def test_call_entity_set_func(call_entity: CallEntity, call_name_entity: VariableEntity):
    assert call_entity.func is None
    assert call_entity.call_type is None

    call_entity.set_func(call_name_entity)

    assert call_entity.func == call_name_entity
    assert call_entity.call_type == FUNCTION
def test_call_entity_add_double_starred_keyword_argument(call_entity: CallEntity, keyword_argument_double_starred_entity: KeywordEntity):
    assert len(call_entity.keyword_arguments) == 0
    assert len(call_entity.keyword_argument_types) == 0
    assert call_entity.kwargs_var_name is None

    call_entity.set_starred_kwargs(keyword_argument_double_starred_entity)

    assert len(call_entity.keyword_arguments) == 0
    assert len(call_entity.keyword_argument_types) == 0
    assert call_entity.kwargs_var_name == keyword_argument_double_starred_entity.value.name
    assert call_entity.kwargs_var_type == keyword_argument_double_starred_entity.value.entity_type
def test_call_entity_add_keyword(call_entity: CallEntity, keyword_argument_var_entity: KeywordEntity):
    assert len(call_entity.keyword_arguments) == 0
    assert len(call_entity.keyword_argument_types) == 0

    call_entity.add_keyword(keyword_argument_var_entity)

    assert len(call_entity.keyword_arguments) == 1 \
           and call_entity.keyword_arguments[0] == keyword_argument_var_entity
    assert len(call_entity.keyword_argument_types) == 1 \
           and call_entity.keyword_argument_types[0] == keyword_argument_var_entity.entity_type
    assert call_entity.kwargs_var_name is None
def test_call_entity_add_argument(mocker, call_entity: CallEntity, variable_load_entity: VariableEntity):
    assert len(call_entity.arguments) == 0
    assert len(call_entity.argument_types) == 0

    mocker.spy(call_entity, 'set_starred_args')

    call_entity.add_argument(variable_load_entity)

    assert len(call_entity.arguments) == 1
    assert call_entity.argument_types[0] == VARIABLE
    assert call_entity.args_var_name is None
    assert call_entity.set_starred_args.call_count == 0
def test_call_entity_add_starred_argument(mocker, call_entity: CallEntity, starred_entity):
    assert len(call_entity.arguments) == 0
    assert len(call_entity.argument_types) == 0
    assert call_entity.args_var_name is None

    mocker.spy(call_entity, 'set_starred_args')

    call_entity.add_argument(starred_entity)

    assert len(call_entity.arguments) == 0
    assert len(call_entity.argument_types) == 0
    assert call_entity.args_var_name == starred_entity.value.name
    assert call_entity.args_var_type == starred_entity.value.entity_type
    assert call_entity.set_starred_args.call_count == 1
Exemple #6
0
    def parse(self, node: ast.Call, module: Module, context: Context):
        """Process a ``ast.Call`` node and extract relevant stats.

        A ``ast.Call`` node has the following fields:

            - ``func`` that represents the function, which will often be a ``ast.Name`` or ``ast.Attribute`` node
            - ``args`` that represents a list of the arguments passed by position
            - ``keywords`` that represents a list of keyword objects representing arguments passed by keyword
            - ``starargs`` holds a single node, for arguments passed as *args. This is removed in Python 3.5.
            - ``kwargs`` holds a single node, for arguments passed as **kwargs. This is removed in Python 3.5.

        :param node: The node that represents a call expression.
        :param module: The python module where this call is encountered.
        :param context: The context of the given node.
        :return: The CallEntity instance created from the given ``ast.Call`` node.
        """
        call: CallEntity = CallEntity(node, context)
        context.stack_ast_node(call)

        super().parse(node, module, context)

        context.unstack_ast_node()
        module.add_call(call)

        return call
def test_call_entity_initialization(ast_call_node: ast.Call, context: Context):
    call_entity = CallEntity(ast_call_node, context)
    assert call_entity.line_nr == 1
    assert call_entity.func is None
    assert call_entity.call_type is None
    assert len(call_entity.arguments) == 0
    assert len(call_entity.argument_types) == 0
    assert len(call_entity.keyword_arguments) == 0
    assert len(call_entity.keyword_argument_types) == 0
    assert call_entity.args_var_name is None
    assert call_entity.kwargs_var_name is None
    assert call_entity.args_var_type is None
    assert call_entity.kwargs_var_type is None
    assert call_entity.ast_execution_context == context.current_ast_node
    assert call_entity.execution_context == context.current_execution_context
def test_call_name_property(call_entity: CallEntity, call_name_entity: VariableEntity):
    call_entity.set_func(call_name_entity)

    assert call_entity.name == 'fn'
Exemple #9
0
def call_entity():
    return CallEntity(ast_call, Context(Module('test')))