示例#1
0
def test_list_of_strings_composite():
    buf = (
        '\x01\x00\x00\x00\x27\x00\x00\x00'  # ptr<cmp>
        '\x10\x00\x00\x00\x00\x00\x01\x00'  # TAG: 4 items, data=0, ptrs=1
        '\x0d\x00\x00\x00\x12\x00\x00\x00'  # ptr item 1
        '\x0d\x00\x00\x00\x1a\x00\x00\x00'  # ptr item 2
        '\x0d\x00\x00\x00\x22\x00\x00\x00'  # ptr item 3
        '\x0d\x00\x00\x00\x2a\x00\x00\x00'  # ptr item 4
        'A'
        '\x00\x00\x00\x00\x00\x00\x00'  # A
        'B'
        'C'
        '\x00\x00\x00\x00\x00\x00'  # BC
        'D'
        'E'
        'F'
        '\x00\x00\x00\x00\x00'  # DEF
        'G'
        'H'
        'I'
        'J'
        '\x00\x00\x00\x00')  # GHIJ
    blob = Struct.from_buffer(buf, 0, data_size=0, ptrs_size=1)
    lst = blob._read_list(0, TextItemType(Types.text))
    assert list(lst) == ['A', 'BC', 'DEF', 'GHIJ']
示例#2
0
def test_TextItem_far_pointer():
    seg0 = b('\x01\x00\x00\x00\x26\x00\x00\x00'  # ptrlist
             '\x0d\x00\x00\x00\x12\x00\x00\x00'  # ptr item 1
             '\x0d\x00\x00\x00\x1a\x00\x00\x00'  # ptr item 2
             '\x0d\x00\x00\x00\x22\x00\x00\x00'  # ptr item 3
             '\x02\x00\x00\x00\x01\x00\x00\x00'  # far ptr, segment=1, offset=0
             'A'
             '\x00\x00\x00\x00\x00\x00\x00'  # A
             'B'
             'C'
             '\x00\x00\x00\x00\x00\x00'  # BC
             'D'
             'E'
             'F'
             '\x00\x00\x00\x00\x00')  # DEF
    #
    seg1 = b('\x01\x00\x00\x00\x2a\x00\x00\x00'  # ptr item 4
             'G'
             'H'
             'I'
             'J'
             '\x00\x00\x00\x00')  # GHIJ
    #
    buf = MultiSegment(seg0 + seg1, segment_offsets=(0, len(seg0)))
    blob = Struct.from_buffer(buf, 0, data_size=0, ptrs_size=1)
    lst = blob._read_list(0, TextItemType(Types.text))
    assert list(lst) == [b'A', b'BC', b'DEF', b'GHIJ']
示例#3
0
def test_alloc_list_of_strings():
    builder = Builder(0, 1)
    builder.alloc_list(0, TextItemType(Types.text), ['A', 'BC', 'DEF', 'GHIJ'])
    buf = builder.build()
    expected_buf = (
        '\x01\x00\x00\x00\x26\x00\x00\x00'  # ptrlist
        '\x0d\x00\x00\x00\x12\x00\x00\x00'  # ptr item 1
        '\x0d\x00\x00\x00\x1a\x00\x00\x00'  # ptr item 2
        '\x0d\x00\x00\x00\x22\x00\x00\x00'  # ptr item 3
        '\x0d\x00\x00\x00\x2a\x00\x00\x00'  # ptr item 4
        'A'
        '\x00\x00\x00\x00\x00\x00\x00'  # A
        'B'
        'C'
        '\x00\x00\x00\x00\x00\x00'  # BC
        'D'
        'E'
        'F'
        '\x00\x00\x00\x00\x00'  # DEF
        'G'
        'H'
        'I'
        'J'
        '\x00\x00\x00\x00')  # GHIJ
    assert buf == expected_buf
示例#4
0
def test_list_of_text():
    buf = b('\x01\x00\x00\x00\x26\x00\x00\x00'   # ptrlist
           '\x0d\x00\x00\x00\x12\x00\x00\x00'   # ptr item 1
           '\x0d\x00\x00\x00\x1a\x00\x00\x00'   # ptr item 2
           '\x0d\x00\x00\x00\x22\x00\x00\x00'   # ptr item 3
           '\x0d\x00\x00\x00\x2a\x00\x00\x00'   # ptr item 4
           'A' '\x00\x00\x00\x00\x00\x00\x00'   # A
           'B' 'C' '\x00\x00\x00\x00\x00\x00'   # BC
           'D' 'E' 'F' '\x00\x00\x00\x00\x00'   # DEF
           'G' 'H' 'I' 'J' '\x00\x00\x00\x00')  # GHIJ
    blob = Struct.from_buffer(buf, 0, data_size=0, ptrs_size=1)
    lst = blob._read_list(0, TextItemType(Types.text))
    assert list(lst) == [b'A', b'BC', b'DEF', b'GHIJ']
示例#5
0
 def test_copy_from_list_of_text(self):
     buf = SegmentBuilder()
     pos = buf.allocate(8)
     item_type = TextItemType(Types.text)
     buf.copy_from_list(pos, item_type, [b'A', b'BC', b'DEF', b'GHIJ'])
     s = buf.as_string()
     expected_buf = b('\x01\x00\x00\x00\x26\x00\x00\x00'   # ptrlist
                      '\x0d\x00\x00\x00\x12\x00\x00\x00'   # ptr item 1
                      '\x0d\x00\x00\x00\x1a\x00\x00\x00'   # ptr item 2
                      '\x0d\x00\x00\x00\x22\x00\x00\x00'   # ptr item 3
                      '\x0d\x00\x00\x00\x2a\x00\x00\x00'   # ptr item 4
                      'A' '\x00\x00\x00\x00\x00\x00\x00'   # A
                      'B' 'C' '\x00\x00\x00\x00\x00\x00'   # BC
                      'D' 'E' 'F' '\x00\x00\x00\x00\x00'   # DEF
                      'G' 'H' 'I' 'J' '\x00\x00\x00\x00')  # GHIJ
     assert s == expected_buf