Пример #1
0
def test_offset_override():
    template = XMLTemplateParser("""
        <template name="template0">
            <layout name="layout0" offset="0x300">
                <area name="area0" offset="0x300" boundary="0x200">
                    <field name="field0" size="1">
                    </field>
                </area>
            </layout>
        </template>""").parse()
    assert template.layout0.offset == 0x300
    assert template.layout0.area0.offset == 0x300
    assert template.layout0.area0.absolute_address == 0x600
    assert template.layout0.area0.boundary == 0x200
    assert template.layout0.area0.size == 0x200
def test_stretch_with_auto_sizing_parent():
    template = XMLTemplateParser("""
        <template sizing="auto">
            <header size="4">
            </header>
            <payload name="payload" sizing="stretch">
            </payload>
        </template>
    """).parse()
    binalyzer = Binalyzer(template)
    binalyzer.data = io.BytesIO(bytes([0x01] * 8))
    binalyzer.template.payload.value = bytes([0x02] *
                                             binalyzer.template.payload.size)
    print(binalyzer.template.size)
    print(binalyzer.template.value)
Пример #3
0
def test_field_relative_offset():
    expected_data_stream = bytes([0] * 32 + [1] * 32 + [2] * 32 + [3] * 32)
    test_data_stream = io.BytesIO(bytes([0] * 128))
    template = XMLTemplateParser("""<template name="template0">
            <field name="field0" size="32"></field>
            <field name="field1" size="32"></field>
            <field name="field2" size="32"></field>
            <field name="field3" size="32"></field>
        </template>""").parse()
    binalyzer = Binalyzer(template, test_data_stream)

    binalyzer.template.field0.value = bytes([0] * 32)
    binalyzer.template.field1.value = bytes([1] * 32)
    binalyzer.template.field2.value = bytes([2] * 32)
    binalyzer.template.field3.value = bytes([3] * 32)
    assert binalyzer.template.value == expected_data_stream
Пример #4
0
def test_template_mapping_root():
    template = XMLTemplateParser("""
        <template>
        </template>
    """).parse()
    assert isinstance(template, Template)
    assert template.name is None
    assert template.children == ()
    assert template.parent is None
    assert template.absolute_address == 0
    assert template.offset == 0
    assert template.size == 0
    assert template.padding_before == 0
    assert template.padding_after == 0
    assert template.boundary == 0
    assert template.value == bytes()
Пример #5
0
def test_template_mapping_nested_1st_depth():
    template = XMLTemplateParser("""
        <template>
            <template>
            </template>
        </template>
    """).parse()
    assert isinstance(template.children[0], Template)
    assert template.children[0].name is None
    assert template.children[0].children == ()
    assert template.children[0].parent == template
    assert template.children[0].absolute_address == 0
    assert template.children[0].offset == 0
    assert template.children[0].size == 0
    assert template.children[0].padding_before == 0
    assert template.children[0].padding_after == 0
    assert template.children[0].boundary == 0
    assert template.children[0].value == bytes()
Пример #6
0
def test_size_with_children_and_uneven_padding():
    template = XMLTemplateParser("""
        <template name="template0">
            <layout name="layout0">
                <area name="area0" boundary="0x200">
                    <field name="field0" size="0x100"
                                        padding-before="0x100"
                                        padding-after="0x100">
                    </field>
                    <field name="field1" size="0x150"
                                        padding-before="0x100"
                                        padding-after="0x100">
                    </field>
                </area>
            </layout>
        </template>""").parse()
    assert template.layout0.area0.boundary == 0x200
    assert template.layout0.area0.size == 0x800
Пример #7
0
def test_size_aggregation_using_values_only():
    template = XMLTemplateParser("""
        <template name="template0">
            <layout name="layout0">
                <area name="area00">
                    <field name="field1" size="1"></field>
                    <field name="field2" size="1"></field>
                    <field name="field3" size="1"></field>
                    <field name="field4" size="1"></field>
                </area>
                <area name="area01">
                    <field name="field5" size="2"></field>
                    <field name="field6" size="2"></field>
                    <field name="field7" size="2"></field>
                    <field name="field8" size="2"></field>
                </area>
            </layout>
            <layout name="layout1">
                <area name="area10">
                    <field name="field9" size="4"></field>
                    <field name="field10" size="4"></field>
                    <field name="field11" size="4"></field>
                    <field name="field12" size="4"></field>
                </area>
                <area name="area11">
                    <field name="field13" size="8"></field>
                    <field name="field14" size="8"></field>
                    <field name="field15" size="8"></field>
                    <field name="field16" size="8"></field>
                </area>
            </layout>
        </template>""").parse()
    assert template.size == 60
    assert template.layout0.size == 12
    assert template.layout0.area00.size == 4
    assert template.layout0.area00.field1.size == 1
    assert template.layout0.area00.field2.size == 1
    assert template.layout0.area00.field3.size == 1
    assert template.layout0.area00.field4.size == 1
    assert template.layout0.area01.size == 8
    assert template.layout1.size == 48
    assert template.layout1.area10.size == 16
    assert template.layout1.area11.size == 32
def test_binding_at_stream_assignment():
    template = XMLTemplateParser("""
        <template name="template0">
            <layout name="layout0">
                <area name="area0">
                    <field name="field1_size" size="4"></field>
                    <field name="field1" size="{field1_size, byteorder=little}"></field>
                    <field name="field2" size="{field1_size, byteorder=big}"></field>
                </area>
            </layout>
        </template>""").parse()
    binalyzer = Binalyzer(template, io.BytesIO(bytes(4 * [0x0])))
    binalyzer.data = io.BytesIO(bytes([0x04, 0x00, 0x00, 0x00]))
    field1_size = find_by_attr(template, "field1_size")
    field1 = find_by_attr(template, "field1")
    field2 = find_by_attr(template, "field2")
    assert field1_size.size == 4
    assert field1_size.value == bytes([0x04, 0x00, 0x00, 0x00])
    assert field1.size == 0x4
    assert field2.size == 0x4000000
def test_template_reference_with_provider(binalyzer):
    data = io.BytesIO(bytes([0xE5, 0x8E, 0x26]))
    template = XMLTemplateParser(
        """
        <template name="template0">
            <layout name="layout0">
                <area name="area0">
                    <field name="field1_size" size="3"></field>
                    <field name="field1" size="{field1_size, provider=mock.ref_custom}"></field>
                </area>
            </layout>
        </template>""",
        binalyzer=binalyzer,
    ).parse()
    binalyzer = Binalyzer(template, data)
    field1_size = find_by_attr(template, "field1_size")
    field1 = find_by_attr(template, "field1")
    assert field1_size.size == 3
    assert field1_size.value == bytes([0xE5, 0x8E, 0x26])
    assert field1.size == 2526949
def test_field_cross_reference():
    data = io.BytesIO(bytes([0x04, 0x00, 0x00, 0x00]))
    template = XMLTemplateParser("""
        <template name="template0">
            <layout name="layout0">
                <area name="area0">
                    <field name="field1-size" size="4"></field>
                    <field name="field1" size="{field1-size, byteorder=little}"></field>
                    <field name="field2" size="{field1-size, byteorder=big}"></field>
                </area>
            </layout>
        </template>""").parse()
    binalyzer = Binalyzer(template, data)
    field1_size = find_by_attr(template, "field1-size")
    field1 = find_by_attr(template, "field1")
    field2 = find_by_attr(template, "field2")
    assert field1_size.size == 4
    assert field1_size.value == bytes([0x04, 0x00, 0x00, 0x00])
    assert field1.size == 0x4
    assert field2.size == 0x4000000
Пример #11
0
def test_namespaces():
    template_description = """
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<template xmlns:g="https://schemas.denisvasilik.com/glsp" xmlns:ns3="https://schemas.denisvasilik.com/baml" name="sprotty">
    <template g:height="52.0" g:id="571b4dc1-8c40-4bd8-8deb-56fe69918469" g:layout="vbox" name="parent" g:taskType="manual" g:type="task:manual" g:width="128.48332977294922" g:x="110.0" g:y="160.0">
        <template g:height="52.0" g:id="child-1" g:layout="vbox" name="child-1" g:taskType="manual" g:type="task:manual" g:width="129.31666564941406" g:x="110.0" g:y="280.0">
            <template g:height="52.0" g:id="child-2" g:layout="vbox" name="child-2" g:taskType="manual" g:type="task:manual" g:width="129.31666564941406" g:x="220.0" g:y="450.0">
                <template g:height="52.0" g:id="a6e900f2-6ef0-425e-98f7-e1113e79de76" g:layout="vbox" name="ManualTask4" g:taskType="manual" g:type="task:manual" g:width="198.89999389648438" g:x="190.0" g:y="680.0"/>
            </template>
            <template g:height="52.0" g:id="2e3e308d-c835-4b2f-93d5-e00d1d871350" g:layout="vbox" name="ManualTask3" g:taskType="manual" g:type="task:manual" g:width="198.89999389648438" g:x="-110.0" g:y="440.0">
                <template g:height="52.0" g:id="37d07a39-87dc-41d6-ba06-610d87f8c0b7" g:layout="vbox" name="child-5" g:taskType="manual" g:type="task:manual" g:width="129.31666564941406" g:x="-70.0" g:y="680.0"/>
            </template>
        </template>
    </template>
</template>
    """
    template = XMLTemplateParser(template_description).parse()
    assert template.name == 'sprotty'
    assert template.children[0].name == 'parent'
    assert template.children[0].children[0].name == 'child-1'
def test_get_siblings():
    template = XMLTemplateParser("""
        <template name="root" sizing="auto">
            <area name="child0" size="4"></area>
            <area name="child1" size="4"></area>
            <area name="child2" size="4"></area>
            <area name="child3" size="4"></area>
            <area name="child4" size="4"></area>
        </template>
    """).parse()

    expected_siblings = [
        template.child0,
        template.child1,
        template.child2,
        template.child3,
    ]

    actual_siblings = siblings(template.child4)

    assert expected_siblings == actual_siblings
Пример #13
0
def test_size_and_padding():
    template = XMLTemplateParser("""
        <template name="template0">
            <layout name="layout0">
                <area name="area0" padding-after="4">
                    <field name="field1" size="1"></field>
                    <field name="field2" size="1"></field>
                    <field name="field3" size="1"></field>
                    <field name="field4" size="1" padding-before="1"
                                                padding-after="2"></field>
                </area>
                <area name="area1" padding-before="4">
                    <field name="field5" size="2"></field>
                    <field name="field6" size="2"></field>
                    <field name="field7" size="2"></field>
                    <field name="field8" size="2"></field>
                </area>
            </layout>
        </template>""").parse()
    assert template.layout0.area0.field4.offset == 4
    assert template.layout0.area0.size == 7
    assert template.layout0.area1.offset == 15
Пример #14
0
def test_relative_offset_calculation():
    template = XMLTemplateParser("""
        <template name="template0">
            <layout name="layout0">
                <area name="area0">
                    <field size="0x100"></field>
                    <field size="0x200"></field>
                </area>
                <area name="area1">
                    <field size="0x300"></field>
                    <field size="0x400"></field>
                </area>
            </layout>
            <layout name="layout1">
                <area name="area2">
                    <field size="0x100"></field>
                    <field size="0x200"></field>
                </area>
                <area name="area3">
                    <field size="0x300"></field>
                    <field size="0x400"></field>
                </area>
            </layout>
        </template>""").parse()
    assert template.offset == 0
    assert template.absolute_address == 0
    assert template.layout0.offset == 0
    assert template.layout0.absolute_address == 0
    assert template.layout0.area0.offset == 0
    assert template.layout0.area0.absolute_address == 0
    assert template.layout0.area1.offset == 0x300
    assert template.layout0.area1.absolute_address == 0x300
    assert template.layout1.offset == 0xA00
    assert template.layout1.absolute_address == 0xA00
    assert template.layout1.area2.offset == 0x0
    assert template.layout1.area2.absolute_address == 0xA00
    assert template.layout1.area3.offset == 0x300
    assert template.layout1.area3.absolute_address == 0xD00
Пример #15
0
def test_hint_attribute_optional():
    template_description = """
        <template hint="optional"></template>
    """
    template = XMLTemplateParser(template_description).parse()
    assert template.hint == "optional"
Пример #16
0
def test_signature_attribute_value():
    template_description = """
        <template signature="0x11223344"></template>
    """
    template = XMLTemplateParser(template_description).parse()
    assert template.signature == bytes([0x11, 0x22, 0x33, 0x44])
Пример #17
0
def test_name_attribute_value():
    template_description = """
        <template name="root"></template>
    """
    template = XMLTemplateParser(template_description).parse()
    assert template.name == "root"
Пример #18
0
def test_plain_template():
    template_description = """
        <template></template>
    """
    template = XMLTemplateParser(template_description).parse()
    assert template
Пример #19
0
def test_sizing_attribute_stretch():
    template_description = """
        <template sizing="stretch"></template>
    """
    template = XMLTemplateParser(template_description).parse()
    assert isinstance(template.size_property, StretchSizeProperty)
Пример #20
0
def test_sizing_attribute_auto():
    template_description = """
        <template sizing="auto"></template>
    """
    template = XMLTemplateParser(template_description).parse()
    assert isinstance(template.size_property, AutoSizeValueProperty)
Пример #21
0
def test_addressing_mode_relative_value():
    template_description = """
        <template adressing-mode="relative"></template>
    """
    template = XMLTemplateParser(template_description).parse()
    assert isinstance(template.offset_property, RelativeOffsetValueProperty)