def test_enrich_with_documentation_sets_is_null_terminated():
    # given:
    parameter = Parameter('abc', 'def', PointerType('int', False, 1, False))
    documentation = create_parameter_documentation('abc', null_terminated=True)

    # when:
    parameter.enrich_with_documentation(documentation)

    # then:
    assert parameter.is_null_terminated
def test_enrich_with_documentation_sets_fixed_length():
    # given:
    parameter = Parameter('abc', 'def', PointerType('int', False, 1, False))
    parameter_documentation = create_parameter_documentation('abc',
                                                             fixed_length=4)

    # when:
    parameter.enrich_with_documentation(parameter_documentation)

    # then:
    assert parameter.kind == ParameterKind.kind_in_out()
    assert parameter.fixed_length == 4
def test_enrich_with_documentation_fails_on_impossible_combination():
    # given:
    parameter = Parameter('abc', 'def', SimpleType('int'))
    parameter_documentation = create_parameter_documentation(
        'abc', parameter_kind='out')

    # when:
    try:
        parameter.enrich_with_documentation(parameter_documentation)
    except MockGeneratorError:
        return
    assert False
def test_enrich_with_documentation_sets_length_descriptor():
    # given:
    parameter = Parameter('abc', 'def', PointerType('int', False, 1, False))
    documentation = create_parameter_documentation('abc',
                                                   length_descriptor='size')

    # when:
    parameter.enrich_with_documentation(documentation)

    # then:
    assert parameter.has_length_descriptor
    assert parameter.length_descriptor == 'size'
def test_enrich_with_documentation_sets_is_input():
    # given:
    parameter = Parameter('abc', 'def', PointerType('int', False, 1, False))
    parameter_documentation = create_parameter_documentation(
        'abc', parameter_kind='out')

    # when:
    parameter.enrich_with_documentation(parameter_documentation)

    # then:
    assert parameter.kind == ParameterKind.kind_out()
    assert not parameter.is_input
    assert parameter.is_not_input
def test_enrich_with_documentation_defaults_for_pointers():
    # given:
    parameter = Parameter('abc', 'def', PointerType('int', False, 1, False))
    documentation = create_parameter_documentation('abc')

    # when:
    parameter.enrich_with_documentation(documentation)

    # then:
    assert not parameter.has_simple_type
    assert parameter.has_pointer_type
    assert parameter.is_single_element
    assert not parameter.has_fixed_length
    assert parameter.fixed_length is None
    assert not parameter.is_null_terminated
    assert not parameter.has_length_descriptor
    assert parameter.length_descriptor is None
def test_enrich_with_documentation_defaults():
    # given:
    parameter = Parameter('abc', 'def', SimpleType('int'))
    parameter_documentation = create_parameter_documentation('abc')

    # when:
    parameter.enrich_with_documentation(parameter_documentation)

    # then:
    assert parameter.kind == ParameterKind.kind_in()
    assert parameter.is_input
    assert not parameter.is_not_input
    assert not parameter.is_output
    assert parameter.has_simple_type
    assert not parameter.has_pointer_type
    assert not parameter.is_single_element
    assert not parameter.has_fixed_length
    assert parameter.fixed_length is None
    assert not parameter.is_null_terminated
    assert not parameter.has_length_descriptor
    assert parameter.length_descriptor is None