mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-25 01:16:16 +03:00
Merge pull request #8095 from radarhere/type_hints_tests
This commit is contained in:
commit
4f4b0bc748
|
@ -1252,10 +1252,11 @@ def test_palette_save_L(tmp_path: Path) -> None:
|
|||
|
||||
im = hopper("P")
|
||||
im_l = Image.frombytes("L", im.size, im.tobytes())
|
||||
palette = bytes(im.getpalette())
|
||||
palette = im.getpalette()
|
||||
assert palette is not None
|
||||
|
||||
out = str(tmp_path / "temp.gif")
|
||||
im_l.save(out, palette=palette)
|
||||
im_l.save(out, palette=bytes(palette))
|
||||
|
||||
with Image.open(out) as reloaded:
|
||||
assert_image_equal(reloaded.convert("RGB"), im.convert("RGB"))
|
||||
|
|
|
@ -154,7 +154,7 @@ class TestFileJpeg:
|
|||
assert k > 0.9
|
||||
|
||||
def test_rgb(self) -> None:
|
||||
def getchannels(im: Image.Image) -> tuple[int, int, int]:
|
||||
def getchannels(im: JpegImagePlugin.JpegImageFile) -> tuple[int, int, int]:
|
||||
return tuple(v[0] for v in im.layer)
|
||||
|
||||
im = hopper()
|
||||
|
@ -443,7 +443,7 @@ class TestFileJpeg:
|
|||
assert_image(im1, im2.mode, im2.size)
|
||||
|
||||
def test_subsampling(self) -> None:
|
||||
def getsampling(im: Image.Image):
|
||||
def getsampling(im: JpegImagePlugin.JpegImageFile):
|
||||
layer = im.layer
|
||||
return layer[0][1:3] + layer[1][1:3] + layer[2][1:3]
|
||||
|
||||
|
|
|
@ -668,7 +668,8 @@ class TestFileLibTiff(LibTiffTestCase):
|
|||
pilim.save(buffer_io, format="tiff", compression=compression)
|
||||
buffer_io.seek(0)
|
||||
|
||||
assert_image_similar_tofile(pilim, buffer_io, 0)
|
||||
with Image.open(buffer_io) as saved_im:
|
||||
assert_image_similar(pilim, saved_im, 0)
|
||||
|
||||
save_bytesio()
|
||||
save_bytesio("raw")
|
||||
|
|
|
@ -25,6 +25,7 @@ from PIL import (
|
|||
from .helper import (
|
||||
assert_image_equal,
|
||||
assert_image_equal_tofile,
|
||||
assert_image_similar,
|
||||
assert_image_similar_tofile,
|
||||
assert_not_all_same,
|
||||
hopper,
|
||||
|
@ -193,7 +194,8 @@ class TestImage:
|
|||
with tempfile.TemporaryFile() as fp:
|
||||
im.save(fp, "JPEG")
|
||||
fp.seek(0)
|
||||
assert_image_similar_tofile(im, fp, 20)
|
||||
with Image.open(fp) as reloaded:
|
||||
assert_image_similar(im, reloaded, 20)
|
||||
|
||||
def test_unknown_extension(self, tmp_path: Path) -> None:
|
||||
im = hopper()
|
||||
|
|
|
@ -86,8 +86,8 @@ def test_fromarray() -> None:
|
|||
assert test("RGBX") == ("RGBA", (128, 100), True)
|
||||
|
||||
# Test mode is None with no "typestr" in the array interface
|
||||
wrapped = Wrapper(hopper("L"), {"shape": (100, 128)})
|
||||
with pytest.raises(TypeError):
|
||||
wrapped = Wrapper(test("L"), {"shape": (100, 128)})
|
||||
Image.fromarray(wrapped)
|
||||
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ def test_crop(mode: str) -> None:
|
|||
|
||||
|
||||
def test_wide_crop() -> None:
|
||||
def crop(*bbox: int) -> tuple[int, ...]:
|
||||
def crop(bbox: tuple[int, int, int, int]) -> tuple[int, ...]:
|
||||
i = im.crop(bbox)
|
||||
h = i.histogram()
|
||||
while h and not h[-1]:
|
||||
|
@ -27,23 +27,23 @@ def test_wide_crop() -> None:
|
|||
|
||||
im = Image.new("L", (100, 100), 1)
|
||||
|
||||
assert crop(0, 0, 100, 100) == (0, 10000)
|
||||
assert crop(25, 25, 75, 75) == (0, 2500)
|
||||
assert crop((0, 0, 100, 100)) == (0, 10000)
|
||||
assert crop((25, 25, 75, 75)) == (0, 2500)
|
||||
|
||||
# sides
|
||||
assert crop(-25, 0, 25, 50) == (1250, 1250)
|
||||
assert crop(0, -25, 50, 25) == (1250, 1250)
|
||||
assert crop(75, 0, 125, 50) == (1250, 1250)
|
||||
assert crop(0, 75, 50, 125) == (1250, 1250)
|
||||
assert crop((-25, 0, 25, 50)) == (1250, 1250)
|
||||
assert crop((0, -25, 50, 25)) == (1250, 1250)
|
||||
assert crop((75, 0, 125, 50)) == (1250, 1250)
|
||||
assert crop((0, 75, 50, 125)) == (1250, 1250)
|
||||
|
||||
assert crop(-25, 25, 125, 75) == (2500, 5000)
|
||||
assert crop(25, -25, 75, 125) == (2500, 5000)
|
||||
assert crop((-25, 25, 125, 75)) == (2500, 5000)
|
||||
assert crop((25, -25, 75, 125)) == (2500, 5000)
|
||||
|
||||
# corners
|
||||
assert crop(-25, -25, 25, 25) == (1875, 625)
|
||||
assert crop(75, -25, 125, 25) == (1875, 625)
|
||||
assert crop(75, 75, 125, 125) == (1875, 625)
|
||||
assert crop(-25, 75, 25, 125) == (1875, 625)
|
||||
assert crop((-25, -25, 25, 25)) == (1875, 625)
|
||||
assert crop((75, -25, 125, 25)) == (1875, 625)
|
||||
assert crop((75, 75, 125, 125)) == (1875, 625)
|
||||
assert crop((-25, 75, 25, 125)) == (1875, 625)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("box", ((8, 2, 2, 8), (2, 8, 8, 2), (8, 8, 2, 2)))
|
||||
|
|
|
@ -46,9 +46,9 @@ def test_sanity(filter_to_apply: ImageFilter.Filter, mode: str) -> None:
|
|||
|
||||
@pytest.mark.parametrize("mode", ("L", "I", "RGB", "CMYK"))
|
||||
def test_sanity_error(mode: str) -> None:
|
||||
im = hopper(mode)
|
||||
with pytest.raises(TypeError):
|
||||
im = hopper(mode)
|
||||
im.filter("hello")
|
||||
im.filter("hello") # type: ignore[arg-type]
|
||||
|
||||
|
||||
# crashes on small images
|
||||
|
|
|
@ -6,7 +6,7 @@ from .helper import hopper
|
|||
|
||||
|
||||
def test_extrema() -> None:
|
||||
def extrema(mode: str) -> tuple[int, int] | tuple[tuple[int, int], ...]:
|
||||
def extrema(mode: str) -> tuple[float, float] | tuple[tuple[int, int], ...]:
|
||||
return hopper(mode).getextrema()
|
||||
|
||||
assert extrema("1") == (0, 255)
|
||||
|
|
|
@ -247,7 +247,7 @@ def test_invalid_color_temperature() -> None:
|
|||
ImageCms.PyCMSError,
|
||||
match='Color temperature must be numeric, "invalid" not valid',
|
||||
):
|
||||
ImageCms.createProfile("LAB", "invalid")
|
||||
ImageCms.createProfile("LAB", "invalid") # type: ignore[arg-type]
|
||||
|
||||
|
||||
@pytest.mark.parametrize("flag", ("my string", -1))
|
||||
|
@ -256,7 +256,7 @@ def test_invalid_flag(flag: str | int) -> None:
|
|||
with pytest.raises(
|
||||
ImageCms.PyCMSError, match="flags must be an integer between 0 and "
|
||||
):
|
||||
ImageCms.profileToProfile(im, "foo", "bar", flags=flag)
|
||||
ImageCms.profileToProfile(im, "foo", "bar", flags=flag) # type: ignore[arg-type]
|
||||
|
||||
|
||||
def test_simple_lab() -> None:
|
||||
|
@ -588,11 +588,13 @@ def assert_aux_channel_preserved(
|
|||
)
|
||||
|
||||
# apply transform
|
||||
result_image: Image.Image | None
|
||||
if transform_in_place:
|
||||
ImageCms.applyTransform(source_image, t, inPlace=True)
|
||||
result_image = source_image
|
||||
else:
|
||||
result_image = ImageCms.applyTransform(source_image, t, inPlace=False)
|
||||
assert result_image is not None
|
||||
result_image_aux = result_image.getchannel(preserved_channel)
|
||||
|
||||
assert_image_equal(source_image_aux, result_image_aux)
|
||||
|
@ -650,6 +652,7 @@ def test_auxiliary_channels_isolated() -> None:
|
|||
)
|
||||
|
||||
# test conversion from aux-ful source
|
||||
test_image: Image.Image | None
|
||||
if transform_in_place:
|
||||
test_image = source_image.copy()
|
||||
ImageCms.applyTransform(test_image, test_transform, inPlace=True)
|
||||
|
@ -657,6 +660,7 @@ def test_auxiliary_channels_isolated() -> None:
|
|||
test_image = ImageCms.applyTransform(
|
||||
source_image, test_transform, inPlace=False
|
||||
)
|
||||
assert test_image is not None
|
||||
|
||||
# reference conversion from aux-less source
|
||||
reference_transform = ImageCms.buildTransform(
|
||||
|
|
|
@ -1083,8 +1083,8 @@ def test_line_horizontal() -> None:
|
|||
)
|
||||
|
||||
|
||||
@pytest.mark.xfail(reason="failing test")
|
||||
def test_line_h_s1_w2() -> None:
|
||||
pytest.skip("failing")
|
||||
img, draw = create_base_image_draw((20, 20))
|
||||
draw.line((5, 5, 14, 6), BLACK, 2)
|
||||
assert_image_equal_tofile(
|
||||
|
|
Loading…
Reference in New Issue
Block a user