def test__init__(self): ae = self.assertEqual filename0 = join("data", "lnk", "shortcut_to_local_exe.lnk") filename1 = join("data", "lnk", "shortcut_to_mapped_exe.lnk") stream0 = RawIStream(filename0) stream1 = RawIStream(filename1) sl0 = ShellLink(stream0) sl1 = ShellLink(stream0, 0) sl2 = ShellLink(stream1) sl3 = ShellLink(stream1, 0) header0 = ShellLinkHeader.from_stream(stream0, 0) header1 = ShellLinkHeader.from_stream(stream1, 0) ae(sl0.header, header0) ae(sl1.header, header0) ae(sl2.header, header1) ae(sl3.header, header1) idlist0 = ITEMIDLIST.from_stream(stream0, 78) ae(sl0.idlist, idlist0) ae(sl1.idlist, idlist0) ae(sl2.idlist, None) ae(sl3.idlist, None) li0 = LinkInfo.from_stream(stream0, 285) li1 = LinkInfo.from_stream(stream1, 76) ae(sl0.link_info, li0) ae(sl1.link_info, li0) ae(sl2.link_info, li1) ae(sl3.link_info, li1) sds0 = StringDataSet( (StringData((16, 7, "comment")), StringData((52, 25, "..\\..\\..\\Windows\PING.EXE")), StringData((32, 15, "c:\\start-in-dir")), StringData((30, 14, "arg1 arg2 arg3")), StringData((68, 33, "%SystemRoot%\\system32\\SHELL32.dll")))) sds1 = StringDataSet( (None, None, StringData( (40, 19, "X:\\windows\\system32")), None, None)) ae(sl0.string_data, sds0) ae(sl1.string_data, sds0) ae(sl2.string_data, sds1) ae(sl3.string_data, sds1) edbs0 = list(ExtraDataBlockFactory.make_blocks(stream0, 549)) edbs1 = list(ExtraDataBlockFactory.make_blocks(stream1, 217)) ae(sl0.extra_data, edbs0) ae(sl1.extra_data, edbs0) ae(sl2.extra_data, edbs1) ae(sl3.extra_data, edbs1)
def test_from_stream(self): ae = self.assertEqual item1 = b"\x06\x00\x01\x02\x03\x04" item2 = b"\x05\x00\x05\x06\x07" item3 = b"\x04\x00\x08\x09" little_item = b"\x01\x00" big_item = b"\xFF\x00\x64\x53" null_item = b"\x00\x00" itemid1 = SHITEMID((6, 6, b"\x01\x02\x03\x04")) itemid2 = SHITEMID((5, 5, b"\x05\x06\x07")) itemid3 = SHITEMID((4, 4, b"\x08\x09")) little_itemid = SHITEMID((2, 1, None)) big_itemid = SHITEMID((4, 0xFF, b"\x64\x53")) null_itemid = SHITEMID((2, 0, None)) zero_itemid = SHITEMID((0, 0, None)) stream = ByteIStream(b"".join([item1, item2, item3, null_item])) list1 = ITEMIDLIST.from_stream(stream, max_bytes=stream.size) list2 = ITEMIDLIST.from_stream(stream, 0, max_bytes=stream.size) list3 = ITEMIDLIST.from_stream(stream, 0) ae(list1.mkid, [itemid1, itemid2, itemid3, null_itemid]) ae(list2.mkid, [itemid1, itemid2, itemid3, null_itemid]) ae(list3.mkid, [itemid1, itemid2, itemid3, null_itemid]) stream = ByteIStream(b"".join([item1, item2, item3, big_item])) list1 = ITEMIDLIST.from_stream(stream) ae(list1.mkid, [itemid1, itemid2, itemid3, big_itemid, zero_itemid]) stream = ByteIStream(b"".join([item1, little_item, item2])) list1 = ITEMIDLIST.from_stream(stream) ae(list1.mkid, [itemid1, little_itemid]) stream = ByteIStream(b"".join([item1, item2, item3])) list1 = ITEMIDLIST.from_stream(stream, max_bytes=13) list2 = ITEMIDLIST.from_stream(stream, 0, max_bytes=14) ae(list1.mkid, [itemid1, itemid2]) ae(list2.mkid, [itemid1, itemid2])
def test__init__(self): ae = self.assertEqual filename0 = join("data", "lnk", "shortcut_to_local_exe.lnk") filename1 = join("data", "lnk", "shortcut_to_mapped_exe.lnk") stream0 = RawIStream(filename0) stream1 = RawIStream(filename1) sl0 = ShellLink(stream0) sl1 = ShellLink(stream0, 0) sl2 = ShellLink(stream1) sl3 = ShellLink(stream1, 0) header0 = ShellLinkHeader.from_stream(stream0, 0) header1 = ShellLinkHeader.from_stream(stream1, 0) ae(sl0.header, header0) ae(sl1.header, header0) ae(sl2.header, header1) ae(sl3.header, header1) idlist0 = ITEMIDLIST.from_stream(stream0, 78) ae(sl0.idlist, idlist0) ae(sl1.idlist, idlist0) ae(sl2.idlist, None) ae(sl3.idlist, None) li0 = LinkInfo.from_stream(stream0, 285) li1 = LinkInfo.from_stream(stream1, 76) ae(sl0.link_info, li0) ae(sl1.link_info, li0) ae(sl2.link_info, li1) ae(sl3.link_info, li1) sds0 = StringDataSet(( StringData((16, 7, "comment")), StringData((52, 25, "..\\..\\..\\Windows\PING.EXE")), StringData((32, 15, "c:\\start-in-dir")), StringData((30, 14, "arg1 arg2 arg3")), StringData((68, 33, "%SystemRoot%\\system32\\SHELL32.dll")) )) sds1 = StringDataSet(( None, None, StringData((40, 19, "X:\\windows\\system32")), None, None )) ae(sl0.string_data, sds0) ae(sl1.string_data, sds0) ae(sl2.string_data, sds1) ae(sl3.string_data, sds1) edbs0 = list(ExtraDataBlockFactory.make_blocks(stream0, 549)) edbs1 = list(ExtraDataBlockFactory.make_blocks(stream1, 217)) ae(sl0.extra_data, edbs0) ae(sl1.extra_data, edbs0) ae(sl2.extra_data, edbs1) ae(sl3.extra_data, edbs1)