def test_full_data_encode_is_equal(game_enum): # The json data may be missing if we're running using a Pyinstaller binary # Setup data_dir = game_enum.data_path.joinpath("json_data") if not data_dir.is_dir() and get_data_path().joinpath( "binary_data", f"{game_enum.value}.bin").is_file(): pytest.skip("Missing json-based data") json_database = data_reader.read_split_file(data_dir) b = io.BytesIO() binary_data.encode(json_database, b) b.seek(0) decoded_database = binary_data.decode(b) # Run assert decoded_database == json_database comparable_json = _comparable_dict(json_database) comparable_binary = _comparable_dict(decoded_database) for a, b in zip(comparable_json, comparable_binary): assert a == b assert comparable_binary == comparable_json
def test_simple_round_trip(): b = io.BytesIO() binary_data.encode(sample_data, b) b.seek(0) decoded = binary_data.decode(b) assert decoded == sample_data
def test_complex_encode(test_files_dir): with test_files_dir.joinpath("prime_data_as_json.json").open( "r") as data_file: data = json.load(data_file) b = io.BytesIO() # Run binary_data.encode(data, b) # Whenever the file format changes, we can use the following line to force update our test file # test_files_dir.joinpath("prime_data_as_binary.bin").write_bytes(b.getvalue()); assert False # Assert assert test_files_dir.joinpath( "prime_data_as_binary.bin").read_bytes() == b.getvalue()
def test_full_file_round_trip(game): # Setup json_database_path = get_data_path().joinpath("json_data", f"{game.value}.json") if not json_database_path.exists(): pytest.skip("Missing database") with json_database_path.open("r") as json_file: original_data = json.load(json_file) # Run 1 output_io = io.BytesIO() binary_data.encode(original_data, output_io) # Run 2 output_io.seek(0) final_data = binary_data.decode(output_io) # Assert assert final_data == original_data
def test_full_data_encode_is_equal(): # The prime2.json may be missing if we're running using a Pyinstaller binary # Setup json_database_file = get_data_path().joinpath("json_data", "prime2.json") with json_database_file.open("r") as open_file: json_database = json.load(open_file) b = io.BytesIO() binary_data.encode(json_database, b) b.seek(0) decoded_database = binary_data.decode(b) # Run assert json_database == decoded_database comparable_json = _comparable_dict(json_database) comparable_binary = _comparable_dict(decoded_database) assert comparable_json == comparable_binary
def test_simple_round_trip(): sample_data = { "game": "prime2", "resource_database": { "items": [], "energy_tank_item_index": 0, "item_percentage_index": 0, "multiworld_magic_item_index": 0, "events": [], "tricks": [], "damage": [], "versions": [], "misc": [], "requirement_template": {}, }, "starting_location": { "world_asset_id": 1006255871, "area_asset_id": 1655756413 }, "initial_states": { "Default": [] }, "victory_condition": { "type": "and", "data": [] }, "dock_weakness_database": { "door": [], "portal": [], "morph_ball": [], }, "worlds": [], } b = io.BytesIO() binary_data.encode(sample_data, b) b.seek(0) decoded = binary_data.decode(b) assert decoded == sample_data
def export_as_binary(data: dict, output_binary: Path): with output_binary.open("wb") as x: # type: BinaryIO binary_data.encode(data, x)