mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-30 23:47:27 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			200 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from __future__ import annotations
 | |
| 
 | |
| import pytest
 | |
| 
 | |
| from PIL import ContainerIO, Image
 | |
| 
 | |
| TEST_FILE = "Tests/images/dummy.container"
 | |
| 
 | |
| 
 | |
| def test_sanity() -> None:
 | |
|     dir(Image)
 | |
|     dir(ContainerIO)
 | |
| 
 | |
| 
 | |
| def test_isatty() -> None:
 | |
|     with open(TEST_FILE, "rb") as fh:
 | |
|         container = ContainerIO.ContainerIO(fh, 0, 0)
 | |
| 
 | |
|     assert container.isatty() is False
 | |
| 
 | |
| 
 | |
| def test_seekable() -> None:
 | |
|     with open(TEST_FILE, "rb") as fh:
 | |
|         container = ContainerIO.ContainerIO(fh, 0, 0)
 | |
| 
 | |
|     assert container.seekable() is True
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize(
 | |
|     "mode, expected_position",
 | |
|     (
 | |
|         (0, 33),
 | |
|         (1, 66),
 | |
|         (2, 100),
 | |
|     ),
 | |
| )
 | |
| def test_seek_mode(mode: int, 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_readable(bytesmode: bool) -> None:
 | |
|     with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
 | |
|         container = ContainerIO.ContainerIO(fh, 0, 120)
 | |
| 
 | |
|     assert container.readable() is True
 | |
| 
 | |
| 
 | |
| @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
 | |
|         assert container.seek(81) == 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
 | |
|         assert container.seek(81) == 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
 | |
|         assert container.seek(100) == 100
 | |
|         data = container.read()
 | |
| 
 | |
|         # Assert
 | |
|         if bytesmode:
 | |
|             data = data.decode()
 | |
|         assert data == ""
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize("bytesmode", (True, False))
 | |
| def test_readline(bytesmode: bool) -> None:
 | |
|     with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
 | |
|         container = ContainerIO.ContainerIO(fh, 0, 120)
 | |
| 
 | |
|         data = container.readline()
 | |
|         if bytesmode:
 | |
|             data = data.decode()
 | |
|         assert data == "This is line 1\n"
 | |
| 
 | |
|         data = container.readline(4)
 | |
|         if bytesmode:
 | |
|             data = data.decode()
 | |
|         assert data == "This"
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize("bytesmode", (True, False))
 | |
| def test_readlines(bytesmode: bool) -> None:
 | |
|     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)
 | |
| 
 | |
|         data = container.readlines()
 | |
|         if bytesmode:
 | |
|             data = [line.decode() for line in data]
 | |
|         assert data == expected
 | |
| 
 | |
|         assert container.seek(0) == 0
 | |
| 
 | |
|         data = container.readlines(2)
 | |
|         if bytesmode:
 | |
|             data = [line.decode() for line in data]
 | |
|         assert data == expected[:2]
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize("bytesmode", (True, False))
 | |
| def test_write(bytesmode: bool) -> None:
 | |
|     with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
 | |
|         container = ContainerIO.ContainerIO(fh, 0, 120)
 | |
| 
 | |
|         assert container.writable() is False
 | |
| 
 | |
|         with pytest.raises(NotImplementedError):
 | |
|             container.write(b"" if bytesmode else "")
 | |
|         with pytest.raises(NotImplementedError):
 | |
|             container.writelines([])
 | |
|         with pytest.raises(NotImplementedError):
 | |
|             container.truncate()
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize("bytesmode", (True, False))
 | |
| def test_iter(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 = []
 | |
|         for line in container:
 | |
|             data.append(line)
 | |
| 
 | |
|         # Assert
 | |
|         if bytesmode:
 | |
|             data = [line.decode() for line in data]
 | |
|         assert data == expected
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize("bytesmode", (True, False))
 | |
| def test_file(bytesmode: bool) -> None:
 | |
|     with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
 | |
|         container = ContainerIO.ContainerIO(fh, 0, 120)
 | |
| 
 | |
|         assert isinstance(container.fileno(), int)
 | |
|         container.flush()
 | |
|         container.close()
 |