mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-25 09:26:16 +03:00
133 lines
3.1 KiB
Python
133 lines
3.1 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Literal
|
|
|
|
import pytest
|
|
|
|
from PIL import ContainerIO, Image
|
|
|
|
from .helper import hopper
|
|
|
|
TEST_FILE = "Tests/images/dummy.container"
|
|
|
|
|
|
def test_sanity() -> None:
|
|
dir(Image)
|
|
dir(ContainerIO)
|
|
|
|
|
|
def test_isatty() -> None:
|
|
with hopper() as im:
|
|
container = ContainerIO.ContainerIO(im, 0, 0)
|
|
|
|
assert container.isatty() is False
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"mode, expected_position",
|
|
(
|
|
(0, 33),
|
|
(1, 66),
|
|
(2, 100),
|
|
),
|
|
)
|
|
def test_seek_mode(mode: Literal[0, 1, 2], expected_position: int) -> None:
|
|
# Arrange
|
|
with open(TEST_FILE, "rb") as fh:
|
|
container = ContainerIO.ContainerIO(fh, 22, 100)
|
|
|
|
# Act
|
|
container.seek(33, mode)
|
|
container.seek(33, mode)
|
|
|
|
# Assert
|
|
assert container.tell() == expected_position
|
|
|
|
|
|
@pytest.mark.parametrize("bytesmode", (True, False))
|
|
def test_read_n0(bytesmode: bool) -> None:
|
|
# Arrange
|
|
with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
|
|
container = ContainerIO.ContainerIO(fh, 22, 100)
|
|
|
|
# Act
|
|
container.seek(81)
|
|
data = container.read()
|
|
|
|
# Assert
|
|
if bytesmode:
|
|
data = data.decode()
|
|
assert data == "7\nThis is line 8\n"
|
|
|
|
|
|
@pytest.mark.parametrize("bytesmode", (True, False))
|
|
def test_read_n(bytesmode: bool) -> None:
|
|
# Arrange
|
|
with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
|
|
container = ContainerIO.ContainerIO(fh, 22, 100)
|
|
|
|
# Act
|
|
container.seek(81)
|
|
data = container.read(3)
|
|
|
|
# Assert
|
|
if bytesmode:
|
|
data = data.decode()
|
|
assert data == "7\nT"
|
|
|
|
|
|
@pytest.mark.parametrize("bytesmode", (True, False))
|
|
def test_read_eof(bytesmode: bool) -> None:
|
|
# Arrange
|
|
with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
|
|
container = ContainerIO.ContainerIO(fh, 22, 100)
|
|
|
|
# Act
|
|
container.seek(100)
|
|
data = container.read()
|
|
|
|
# Assert
|
|
if bytesmode:
|
|
data = data.decode()
|
|
assert data == ""
|
|
|
|
|
|
@pytest.mark.parametrize("bytesmode", (True, False))
|
|
def test_readline(bytesmode: bool) -> None:
|
|
# Arrange
|
|
with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
|
|
container = ContainerIO.ContainerIO(fh, 0, 120)
|
|
|
|
# Act
|
|
data = container.readline()
|
|
|
|
# Assert
|
|
if bytesmode:
|
|
data = data.decode()
|
|
assert data == "This is line 1\n"
|
|
|
|
|
|
@pytest.mark.parametrize("bytesmode", (True, False))
|
|
def test_readlines(bytesmode: bool) -> None:
|
|
# Arrange
|
|
expected = [
|
|
"This is line 1\n",
|
|
"This is line 2\n",
|
|
"This is line 3\n",
|
|
"This is line 4\n",
|
|
"This is line 5\n",
|
|
"This is line 6\n",
|
|
"This is line 7\n",
|
|
"This is line 8\n",
|
|
]
|
|
with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
|
|
container = ContainerIO.ContainerIO(fh, 0, 120)
|
|
|
|
# Act
|
|
data = container.readlines()
|
|
|
|
# Assert
|
|
if bytesmode:
|
|
data = [line.decode() for line in data]
|
|
assert data == expected
|