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']
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']
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
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']
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