def test_mode_wt_newline(newline: Optional[str], data: bytes) -> None: fileobj = BytesIO() with xz_open(fileobj, "wt", newline=newline) as xzfile: xzfile.writelines(["a\n", "b\n"]) assert lzma.decompress(fileobj.getvalue()) == data
def test_mode_wt_encoding(encoding: str, data: str) -> None: fileobj = BytesIO() with xz_open(fileobj, "wt", check=0, encoding=encoding) as xzfile: xzfile.write(data) assert fileobj.getvalue() == bytes.fromhex( "fd377a585a000000ff12d9410200210116000000742fe5a301000bd0b5c3b1cf" "b2d0bed4baceb50000011c0c5da447cf06729e7a010000000000595a" )
def test_mode_rt_encoding(encoding: str, expected: str) -> None: fileobj = BytesIO( bytes.fromhex( "fd377a585a000000ff12d9410200210116000000742fe5a301000bd0b5c3b1cf" "b2d0bed4baceb50000011c0c5da447cf06729e7a010000000000595a" ) ) with xz_open(fileobj, "rt", encoding=encoding) as xzfile: assert xzfile.read() == expected
def test_mode_rt_newline(newline: Optional[str], expected: List[str]) -> None: fileobj = BytesIO( bytes.fromhex( "fd377a585a000000ff12d9410200210116000000742fe5a3010007610a620d63" "0d0a64000001180840a546ac06729e7a010000000000595a" ) ) with xz_open(fileobj, "rt", newline=newline) as xzfile: assert xzfile.readlines() == expected
def test_mode_rt() -> None: fileobj = BytesIO(STREAM_BYTES) with xz_open(fileobj, "rt") as xzfile: assert xzfile.mode == "rt" assert xzfile.stream_boundaries == [0] assert xzfile.block_boundaries == [0, 10] assert xzfile.read() == "♥ utf8 ♥\n" assert xzfile.seek(9) == 9 assert xzfile.read() == "♥\n"
def test_mode_rb() -> None: fileobj = BytesIO(STREAM_BYTES) with xz_open(fileobj, "rb") as xzfile: assert xzfile.mode == "r" assert len(xzfile) == 13 assert xzfile.stream_boundaries == [0] assert xzfile.block_boundaries == [0, 10] assert xzfile.read() == b"\xe2\x99\xa5 utf8 \xe2\x99\xa5\n" assert xzfile.seek(9) == 9 assert xzfile.read() == b"\xe2\x99\xa5\n"
def test_mode_wt_encoding_errors(errors: Optional[str], data: Optional[bytes]) -> None: fileobj = BytesIO() with xz_open(fileobj, "wt", errors=errors) as xzfile: if data is None: xzfile.write("X") # to avoid having an empty file with pytest.raises(ValueError): xzfile.write("en\udc01co\udc0di\udc03ng") else: xzfile.write("en\udc01co\udc02di\udc03ng") if data is not None: assert lzma.decompress(fileobj.getvalue()) == data
def test_mode_rt_file(tmp_path: Path) -> None: file_path = tmp_path / "file.xz" file_path.write_bytes(STREAM_BYTES) with file_path.open("rb") as fin: with xz_open(fin, "rt") as xzfile: assert xzfile.stream_boundaries == [0] assert xzfile.block_boundaries == [0, 10] assert xzfile.fileno() == fin.fileno() assert xzfile.read() == "♥ utf8 ♥\n" assert xzfile.seek(9) == 9 assert xzfile.read() == "♥\n"
def test_mode_wt_check() -> None: fileobj = BytesIO() with xz_open(fileobj, "wt", check=1) as xzfile: assert xzfile.mode == "wt" xzfile.write("α") xzfile.change_stream() xzfile.check = 4 xzfile.write("β") xzfile.change_stream() xzfile.write("γ") xzfile.change_stream() xzfile.write("δ") assert fileobj.getvalue() == TEST_MODE_W_CHECK_BYTES
def test_mode_wb_check() -> None: fileobj = BytesIO() with xz_open(fileobj, "wb", check=1) as xzfile: assert xzfile.mode == "w" xzfile.write(b"\xce\xb1") xzfile.change_stream() xzfile.check = 4 xzfile.write(b"\xce\xb2") xzfile.change_stream() xzfile.write(b"\xce\xb3") xzfile.change_stream() xzfile.write(b"\xce\xb4") assert fileobj.getvalue() == TEST_MODE_W_CHECK_BYTES
def test_mode_rt_encoding_errors( errors: Optional[str], expected: Optional[str] ) -> None: fileobj = BytesIO( bytes.fromhex( "fd377a585a000000ff12d9410200210116000000742fe5a301000a656e99636f" "986469976e67000000011b0b39a7621e06729e7a010000000000595a" ) ) with xz_open(fileobj, "rt", errors=errors) as xzfile: if expected is None: with pytest.raises(ValueError): xzfile.read() else: assert xzfile.read() == expected
def test_mode_wb_preset() -> None: fileobj = BytesIO() with xz_open(fileobj, "wb", check=1) as xzfile: xzfile.write(b"\xce\xb1") xzfile.change_block() xzfile.preset = 9 xzfile.write(b"\xce\xb2") xzfile.change_block() xzfile.write(b"\xce\xb3") xzfile.change_block() xzfile.write(b"\xce\xb4") xzfile.change_stream() xzfile.write(b"\xce\xb5") xzfile.change_block() xzfile.write(b"\xce\xb6") xzfile.change_stream() xzfile.write(b"\xce\xb7") xzfile.change_block() xzfile.write(b"\xce\xb8") assert fileobj.getvalue() == TEST_MODE_W_PRESET_BYTES
def test_mode_wb_filters() -> None: fileobj = BytesIO() with xz_open(fileobj, "wb", check=1) as xzfile: xzfile.write(b"\xce\xb1") xzfile.change_block() xzfile.filters = [{"id": 3, "dist": 1}, {"id": 33}] xzfile.write(b"\xce\xb2") xzfile.change_block() xzfile.write(b"\xce\xb3") xzfile.change_block() xzfile.write(b"\xce\xb4") xzfile.change_stream() xzfile.write(b"\xce\xb5") xzfile.change_block() xzfile.write(b"\xce\xb6") xzfile.change_stream() xzfile.write(b"\xce\xb7") xzfile.change_block() xzfile.write(b"\xce\xb8") assert fileobj.getvalue() == TEST_MODE_W_FILTERS_BYTES
def test_mode_wt_filters() -> None: fileobj = BytesIO() with xz_open(fileobj, "wt", check=1) as xzfile: xzfile.write("α") xzfile.change_block() xzfile.filters = [{"id": 3, "dist": 1}, {"id": 33}] xzfile.write("β") xzfile.change_block() xzfile.write("γ") xzfile.change_block() xzfile.write("δ") xzfile.change_stream() xzfile.write("ε") xzfile.change_block() xzfile.write("ζ") xzfile.change_stream() xzfile.write("η") xzfile.change_block() xzfile.write("θ") assert fileobj.getvalue() == TEST_MODE_W_FILTERS_BYTES
def test_mode_wt_preset() -> None: fileobj = BytesIO() with xz_open(fileobj, "wt", check=1) as xzfile: xzfile.write("α") xzfile.change_block() xzfile.preset = 9 xzfile.write("β") xzfile.change_block() xzfile.write("γ") xzfile.change_block() xzfile.write("δ") xzfile.change_stream() xzfile.write("ε") xzfile.change_block() xzfile.write("ζ") xzfile.change_stream() xzfile.write("η") xzfile.change_block() xzfile.write("θ") assert fileobj.getvalue() == TEST_MODE_W_PRESET_BYTES
def test_mode_rb_encoding() -> None: fileobj = BytesIO(STREAM_BYTES) with pytest.raises(ValueError): xz_open(fileobj, "rb", encoding="latin1")
def test_custom_strategy(mode: str) -> None: fileobj = BytesIO(STREAM_BYTES) strategy = Mock() with xz_open(fileobj, mode, block_read_strategy=strategy) as xzfile: assert xzfile.block_read_strategy == strategy
def test_default_strategy(mode: str) -> None: fileobj = BytesIO(STREAM_BYTES) with xz_open(fileobj, mode) as xzfile: assert isinstance(xzfile.block_read_strategy, RollingBlockReadStrategy)
def test_mode_invalid(mode: str) -> None: fileobj = BytesIO(STREAM_BYTES) with pytest.raises(ValueError) as exc_info: xz_open(fileobj, mode) assert str(exc_info.value) == f"Invalid mode: {mode}"
def test_mode_rb_encoding_errors() -> None: fileobj = BytesIO(STREAM_BYTES) with pytest.raises(ValueError): xz_open(fileobj, "rb", errors="ignore")
def test_mode_rb_newline() -> None: fileobj = BytesIO(STREAM_BYTES) with pytest.raises(ValueError): xz_open(fileobj, "rb", newline="\n")