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