import pytest
from cramjam import File, Buffer
@pytest.mark.parametrize("Obj", (File, Buffer))
def test_obj_api(tmpdir, Obj):
if isinstance(Obj, File):
buf = File(str(tmpdir.join("file.txt")))
else:
buf = Buffer()
assert buf.write(b"bytes") == 5
assert buf.tell() == 5
assert buf.seek(0) == 0
assert buf.read() == b"bytes"
assert buf.seek(-1, 2) == 4 assert buf.read() == b"s"
assert buf.seek(-2, whence=1) == 3 assert buf.read() == b"es"
with pytest.raises(ValueError):
buf.seek(1, 3)
for out in (
b"12345",
bytearray(b"12345"),
File(str(tmpdir.join("test.txt"))),
Buffer(),
):
buf.seek(0)
expected = b"bytes"
buf.readinto(out)
if isinstance(out, File) or isinstance(out, Buffer):
out.seek(0)
assert out.read() == expected
elif isinstance(out, bytearray):
assert out == bytearray(expected)
else:
assert out == expected
buf.set_len(2)
buf.seek(0)
assert buf.read() == b"by"
buf.set_len(10)
buf.seek(0)
assert buf.read() == b"by\x00\x00\x00\x00\x00\x00\x00\x00"
buf.truncate()
buf.seek(0)
assert buf.read() == b""