def test_from_stream(self): ae = self.assertEqual stream = ByteIStream(bytes([x for x in range(204)])) cp1 = ConsoleProps.from_stream(stream) cp2 = ConsoleProps.from_stream(stream, 0) for cp in (cp1, cp2): ae(cp.size, 0x03020100) ae(cp.sig, 0x07060504) ae(cp.fill_attributes, 0x0908) ae(cp.popup_fill_attributes, 0x0B0A) coord_data = b"\x0C\x0D\x0E\x0F" coord = COORD.from_stream(ByteIStream(coord_data)) ae(cp2.screen_buffer_size, coord) coord_data = b"\x10\x11\x12\x13" coord = COORD.from_stream(ByteIStream(coord_data)) ae(cp.window_size, coord) coord_data = b"\x14\x15\x16\x17" coord = COORD.from_stream(ByteIStream(coord_data)) ae(cp.window_origin, coord) ae(cp.font, 0x1B1A1918) ae(cp.input_buf_size, 0x1F1E1D1C) ae(cp.font_size, 0x23222120) ae(cp.font_family, 0x27262524) ae(cp.font_weight, 0x2B2A2928) face_name = bytes([x for x in range(0x2C, 0x6C)]) face_name = face_name.decode("utf_16_le") ae(cp.face_name, face_name) ae(cp.cursor_size, 0x6F6E6D6C) ae(cp.full_screen, 0x73727170) ae(cp.quick_edit, 0x77767574) ae(cp.insert_mode, 0x7B7A7978) ae(cp.auto_position, 0x7F7E7D7C) ae(cp.history_buf_size, 0x83828180) ae(cp.history_buf_count, 0x87868584) ae(cp.history_no_dup, 0x8B8A8988) color_table = [ 0x8F8E8D8C, 0x93929190, 0x97969594, 0x9B9A9998, 0x9F9E9D9C, 0xA3A2A1A0, 0xA7A6A5A4, 0xABAAA9A8, 0xAFAEADAC, 0xB3B2B1B0, 0xB7B6B5B4, 0xBBBAB9B8, 0xBFBEBDBC, 0xC3C2C1C0, 0xC7C6C5C4, 0xCBCAC9C8, ] ae(cp.color_table, color_table)
def test_make_blocks(self): ae = self.assertEqual # This will hold the entire stream of blocks. data = bytearray() # Make the ConsoleProps console_props_data = bytearray() # block size console_props_data.extend(b"\xCC\x00\x00\x00") # block signature console_props_data.extend(b"\x02\x00\x00\xA0") # fill attributes (bright green on black) console_props_data.extend(b"\x0A\x00") # popup fill attributes (bright red on bright green) console_props_data.extend(b"\xB4\x00") # screen buffer size (x,y) console_props_data.extend(b"\x64\x53\xEB\xFE") # window size (x,y) console_props_data.extend(b"\x41\x41\x42\x42") # window origin (x, y) console_props_data.extend(b"\xAD\xBA\x0D\xF0") # font console_props_data.extend(b"\xAA\xBB\xCC\xDD") # input_buf_size console_props_data.extend(b"\xFF\xFF\x00\x00") # Font size console_props_data.extend(b"\x10\x00\x00\x00") # Font family (modern) console_props_data.extend(b"\x30\x00\x00\x00") # Font weight (bold) console_props_data.extend(b"\x35\x19\x00\x00") # Face name face_name = "thisisnotthedatayouarelookingfor" console_props_data.extend(face_name.encode("utf_16_le")) # Cursor size (medium) console_props_data.extend(b"\x1A\x00\x00\x00") # Full screen (yes) console_props_data.extend(b"\x01\x00\x00\x00") # Quick edit (yes) console_props_data.extend(b"\x08\x00\x00\x00") # Insert mode (yes) console_props_data.extend(b"\x98\xBA\xDC\xFE") # Auto position (yes) console_props_data.extend(b"\x02\x00\x00\x00") # History buffer size console_props_data.extend(b"\xFF\x00\x00\x00") # Number of history buffers console_props_data.extend(b"\x04\x00\x00\x00") # HistoryNoDup (duplicates allowed) console_props_data.extend(b"\x03\x00\x00\x00") # Color table console_props_data.extend([(x % 256) for x in range(1000, 1064)]) console_props = \ ConsoleProps.from_stream(ByteIStream(console_props_data)) # Make the ConsoleFEProps console_fe_props_data = bytearray() console_fe_props_data.extend(b"\x0C\x00\x00\x00") # block size console_fe_props_data.extend(b"\x04\x00\x00\xA0") # block signature console_fe_props_data.extend( b"\x04\x04\x04\x00") # LCID (zh-TW_radstr) console_fe_props = \ ConsoleFEProps.from_stream(ByteIStream(console_fe_props_data)) # Make the DarwinProps darwin_props_data = bytearray() # block size darwin_props_data.extend(b"\x14\x03\x00\x00") # block signature darwin_props_data.extend(b"\x06\x00\x00\xA0") # Darwin data ANSI darwin_props_data.extend(b"".join([b"\x41" * 259, b"\x00"])) # Darwin data unicode darwin_props_data.extend(b"".join([b"\x41\x00" * 259, b"\x00\x00"])) darwin_props = DarwinProps.from_stream(ByteIStream(darwin_props_data)) # Make the EnvironmentProps environment_props_data = bytearray() # block size environment_props_data.extend(b"\x14\x03\x00\x00") # block signature environment_props_data.extend(b"\x01\x00\x00\xA0") # Target ANSI environment_props_data.extend(b"".join([b"\x41" * 259, b"\x00"])) # Target unicode environment_props_data.extend(b"\x41\x00" * 260) environment_props = EnvironmentProps.from_stream( ByteIStream(environment_props_data)) # Make the IconEnvironmentProps icon_environment_props_data = bytearray() # block size icon_environment_props_data.extend(b"\x14\x03\x00\x00") # block signature icon_environment_props_data.extend(b"\x07\x00\x00\xA0") # Target ANSI icon_environment_props_data.extend(b"".join([b"\x41" * 259, b"\x00"])) # Target unicode icon_environment_props_data.extend(b"\x41\x00" * 260) icon_environment_props = IconEnvironmentProps.from_stream( ByteIStream(icon_environment_props_data)) # Make the KnownFolderProps known_folder_props_data = bytearray() known_folder_props_data.extend(b"\x1C\x00\x00\x00") # block size known_folder_props_data.extend(b"\x0B\x00\x00\xA0") # block signature known_folder_props_data.extend([x for x in range(16)]) # kf_id known_folder_props_data.extend(b"\x01\x02\x03\x04") # offset known_folder_props = \ KnownFolderProps.from_stream(ByteIStream(known_folder_props_data)) # Make the PropertyStoreProps property_store_props_data = bytearray() # block size property_store_props_data.extend(b"\x10\x00\x00\x00") # block signature property_store_props_data.extend(b"\x09\x00\x00\xA0") # property store property_store_props_data.extend([x for x in range(32, 40)]) property_store_props = PropertyStoreProps.from_stream( ByteIStream(property_store_props_data)) # Make the ShimProps shim_props_data = bytearray() shim_props_data.extend(b"\x90\x00\x00\x00") # block size shim_props_data.extend(b"\x08\x00\x00\xA0") # block signature shim_props_data.extend(b"a\x00b\x00c\x00d\x00" * 17) # layer name shim_props = ShimProps.from_stream(ByteIStream(shim_props_data)) # Make the SpecialFolderProps special_folder_props_data = bytearray() special_folder_props_data.extend(b"\x10\x00\x00\x00") # block size special_folder_props_data.extend( b"\x05\x00\x00\xA0") # block signature special_folder_props_data.extend(b"\x53\x64\x53\x64") # sf_id special_folder_props_data.extend(b"\x32\x54\x76\x98") # offset special_folder_props = SpecialFolderProps.from_stream( ByteIStream(special_folder_props_data)) # Make the TrackerProps tracker_props_data = bytearray() tracker_props_data.extend(b"\x60\x00\x00\x00") # block size tracker_props_data.extend(b"\x03\x00\x00\xA0") # block signature tracker_props_data.extend(b"\x58\x00\x00\x00") # length tracker_props_data.extend(b"\x00\x00\x00\x00") # version tracker_props_data.extend(b"0123456789012345") # machine id tracker_props_data.extend([x for x in range(128, 160)]) # droid tracker_props_data.extend([x for x in range(160, 192)]) # droid birth tracker_props = \ TrackerProps.from_stream(ByteIStream(tracker_props_data)) # Make the VistaAndAboveIDListProps item1 = b"\x05\x00\x0A\x0B\x0C" item2 = b"\x03\x00\xFF" null_item = b"\x00\x00" id_list = b"".join([item1, item2, null_item]) vista_and_above_id_list_props_data = bytearray() # block size vista_and_above_id_list_props_data.extend(b"\x12\x00\x00\x00") # block signature vista_and_above_id_list_props_data.extend(b"\x0C\x00\x00\xA0") # id list vista_and_above_id_list_props_data.extend(id_list) vista_and_above_id_list_props = VistaAndAboveIDListProps.from_stream( ByteIStream(vista_and_above_id_list_props_data)) data = bytearray() data.extend(b"".join([ console_props_data, console_fe_props_data, darwin_props_data, environment_props_data, icon_environment_props_data, known_folder_props_data, property_store_props_data, shim_props_data, special_folder_props_data, tracker_props_data, vista_and_above_id_list_props_data ])) stream = ByteIStream(data) ref_properties = [ console_props, console_fe_props, darwin_props, environment_props, icon_environment_props, known_folder_props, property_store_props, shim_props, special_folder_props, tracker_props, vista_and_above_id_list_props ] test_properties = list(ExtraDataBlockFactory.make_blocks(stream)) ae(test_properties, ref_properties)
def test_make_blocks(self): ae = self.assertEqual # This will hold the entire stream of blocks. data = bytearray() # Make the ConsoleProps console_props_data = bytearray() # block size console_props_data.extend(b"\xCC\x00\x00\x00") # block signature console_props_data.extend(b"\x02\x00\x00\xA0") # fill attributes (bright green on black) console_props_data.extend(b"\x0A\x00") # popup fill attributes (bright red on bright green) console_props_data.extend(b"\xB4\x00") # screen buffer size (x,y) console_props_data.extend(b"\x64\x53\xEB\xFE") # window size (x,y) console_props_data.extend(b"\x41\x41\x42\x42") # window origin (x, y) console_props_data.extend(b"\xAD\xBA\x0D\xF0") # font console_props_data.extend(b"\xAA\xBB\xCC\xDD") # input_buf_size console_props_data.extend(b"\xFF\xFF\x00\x00") # Font size console_props_data.extend(b"\x10\x00\x00\x00") # Font family (modern) console_props_data.extend(b"\x30\x00\x00\x00") # Font weight (bold) console_props_data.extend(b"\x35\x19\x00\x00") # Face name face_name = "thisisnotthedatayouarelookingfor" console_props_data.extend(face_name.encode("utf_16_le")) # Cursor size (medium) console_props_data.extend(b"\x1A\x00\x00\x00") # Full screen (yes) console_props_data.extend(b"\x01\x00\x00\x00") # Quick edit (yes) console_props_data.extend(b"\x08\x00\x00\x00") # Insert mode (yes) console_props_data.extend(b"\x98\xBA\xDC\xFE") # Auto position (yes) console_props_data.extend(b"\x02\x00\x00\x00") # History buffer size console_props_data.extend(b"\xFF\x00\x00\x00") # Number of history buffers console_props_data.extend(b"\x04\x00\x00\x00") # HistoryNoDup (duplicates allowed) console_props_data.extend(b"\x03\x00\x00\x00") # Color table console_props_data.extend([(x % 256) for x in range(1000, 1064)]) console_props = \ ConsoleProps.from_stream(ByteIStream(console_props_data)) # Make the ConsoleFEProps console_fe_props_data = bytearray() console_fe_props_data.extend(b"\x0C\x00\x00\x00") # block size console_fe_props_data.extend(b"\x04\x00\x00\xA0") # block signature console_fe_props_data.extend(b"\x04\x04\x04\x00") # LCID (zh-TW_radstr) console_fe_props = \ ConsoleFEProps.from_stream(ByteIStream(console_fe_props_data)) # Make the DarwinProps darwin_props_data = bytearray() # block size darwin_props_data.extend(b"\x14\x03\x00\x00") # block signature darwin_props_data.extend(b"\x06\x00\x00\xA0") # Darwin data ANSI darwin_props_data.extend(b"".join([b"\x41" * 259, b"\x00"])) # Darwin data unicode darwin_props_data.extend(b"".join([b"\x41\x00" * 259, b"\x00\x00"])) darwin_props = DarwinProps.from_stream(ByteIStream(darwin_props_data)) # Make the EnvironmentProps environment_props_data = bytearray() # block size environment_props_data.extend(b"\x14\x03\x00\x00") # block signature environment_props_data.extend(b"\x01\x00\x00\xA0") # Target ANSI environment_props_data.extend(b"".join([b"\x41" * 259, b"\x00"])) # Target unicode environment_props_data.extend(b"\x41\x00" * 260) environment_props = EnvironmentProps.from_stream(ByteIStream( environment_props_data )) # Make the IconEnvironmentProps icon_environment_props_data = bytearray() # block size icon_environment_props_data.extend(b"\x14\x03\x00\x00") # block signature icon_environment_props_data.extend(b"\x07\x00\x00\xA0") # Target ANSI icon_environment_props_data.extend(b"".join([b"\x41" * 259, b"\x00"])) # Target unicode icon_environment_props_data.extend(b"\x41\x00" * 260) icon_environment_props = IconEnvironmentProps.from_stream( ByteIStream(icon_environment_props_data) ) # Make the KnownFolderProps known_folder_props_data = bytearray() known_folder_props_data.extend(b"\x1C\x00\x00\x00") # block size known_folder_props_data.extend(b"\x0B\x00\x00\xA0") # block signature known_folder_props_data.extend([x for x in range(16)]) # kf_id known_folder_props_data.extend(b"\x01\x02\x03\x04") # offset known_folder_props = \ KnownFolderProps.from_stream(ByteIStream(known_folder_props_data)) # Make the PropertyStoreProps property_store_props_data = bytearray() # block size property_store_props_data.extend(b"\x10\x00\x00\x00") # block signature property_store_props_data.extend(b"\x09\x00\x00\xA0") # property store property_store_props_data.extend([x for x in range(32, 40)]) property_store_props = PropertyStoreProps.from_stream( ByteIStream(property_store_props_data) ) # Make the ShimProps shim_props_data = bytearray() shim_props_data.extend(b"\x90\x00\x00\x00") # block size shim_props_data.extend(b"\x08\x00\x00\xA0") # block signature shim_props_data.extend(b"a\x00b\x00c\x00d\x00" * 17) # layer name shim_props = ShimProps.from_stream(ByteIStream(shim_props_data)) # Make the SpecialFolderProps special_folder_props_data = bytearray() special_folder_props_data.extend(b"\x10\x00\x00\x00") # block size special_folder_props_data.extend(b"\x05\x00\x00\xA0") # block signature special_folder_props_data.extend(b"\x53\x64\x53\x64") # sf_id special_folder_props_data.extend(b"\x32\x54\x76\x98") # offset special_folder_props = SpecialFolderProps.from_stream( ByteIStream(special_folder_props_data) ) # Make the TrackerProps tracker_props_data = bytearray() tracker_props_data.extend(b"\x60\x00\x00\x00") # block size tracker_props_data.extend(b"\x03\x00\x00\xA0") # block signature tracker_props_data.extend(b"\x58\x00\x00\x00") # length tracker_props_data.extend(b"\x00\x00\x00\x00") # version tracker_props_data.extend(b"0123456789012345") # machine id tracker_props_data.extend([x for x in range(128, 160)]) # droid tracker_props_data.extend([x for x in range(160, 192)]) # droid birth tracker_props = \ TrackerProps.from_stream(ByteIStream(tracker_props_data)) # Make the VistaAndAboveIDListProps item1 = b"\x05\x00\x0A\x0B\x0C" item2 = b"\x03\x00\xFF" null_item = b"\x00\x00" id_list = b"".join([item1, item2, null_item]) vista_and_above_id_list_props_data = bytearray() # block size vista_and_above_id_list_props_data.extend(b"\x12\x00\x00\x00") # block signature vista_and_above_id_list_props_data.extend(b"\x0C\x00\x00\xA0") # id list vista_and_above_id_list_props_data.extend(id_list) vista_and_above_id_list_props = VistaAndAboveIDListProps.from_stream( ByteIStream(vista_and_above_id_list_props_data) ) data = bytearray() data.extend(b"".join([ console_props_data, console_fe_props_data, darwin_props_data, environment_props_data, icon_environment_props_data, known_folder_props_data, property_store_props_data, shim_props_data, special_folder_props_data, tracker_props_data, vista_and_above_id_list_props_data ])) stream = ByteIStream(data) ref_properties = [ console_props, console_fe_props, darwin_props, environment_props, icon_environment_props, known_folder_props, property_store_props, shim_props, special_folder_props, tracker_props, vista_and_above_id_list_props ] test_properties = list(ExtraDataBlockFactory.make_blocks(stream)) ae(test_properties, ref_properties)