mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-11 17:56:18 +03:00
Merge pull request #6870 from hugovk/parametrize
Tests: Convert internal check() functions to use parametrize
This commit is contained in:
commit
50f7888e3a
|
@ -158,39 +158,42 @@ def test_optimize():
|
|||
assert test_bilevel(1) == 799
|
||||
|
||||
|
||||
def test_optimize_correctness():
|
||||
# 256 color Palette image, posterize to > 128 and < 128 levels
|
||||
# Size bigger and smaller than 512x512
|
||||
@pytest.mark.parametrize(
|
||||
"colors, size, expected_palette_length",
|
||||
(
|
||||
# These do optimize the palette
|
||||
(256, 511, 256),
|
||||
(255, 511, 255),
|
||||
(129, 511, 129),
|
||||
(128, 511, 128),
|
||||
(64, 511, 64),
|
||||
(4, 511, 4),
|
||||
# These don't optimize the palette
|
||||
(128, 513, 256),
|
||||
(64, 513, 256),
|
||||
(4, 513, 256),
|
||||
),
|
||||
)
|
||||
def test_optimize_correctness(colors, size, expected_palette_length):
|
||||
# 256 color Palette image, posterize to > 128 and < 128 levels.
|
||||
# Size bigger and smaller than 512x512.
|
||||
# Check the palette for number of colors allocated.
|
||||
# Check for correctness after conversion back to RGB
|
||||
def check(colors, size, expected_palette_length):
|
||||
# make an image with empty colors in the start of the palette range
|
||||
im = Image.frombytes(
|
||||
"P", (colors, colors), bytes(range(256 - colors, 256)) * colors
|
||||
)
|
||||
im = im.resize((size, size))
|
||||
outfile = BytesIO()
|
||||
im.save(outfile, "GIF")
|
||||
outfile.seek(0)
|
||||
with Image.open(outfile) as reloaded:
|
||||
# check palette length
|
||||
palette_length = max(i + 1 for i, v in enumerate(reloaded.histogram()) if v)
|
||||
assert expected_palette_length == palette_length
|
||||
# Check for correctness after conversion back to RGB.
|
||||
|
||||
assert_image_equal(im.convert("RGB"), reloaded.convert("RGB"))
|
||||
# make an image with empty colors in the start of the palette range
|
||||
im = Image.frombytes(
|
||||
"P", (colors, colors), bytes(range(256 - colors, 256)) * colors
|
||||
)
|
||||
im = im.resize((size, size))
|
||||
outfile = BytesIO()
|
||||
im.save(outfile, "GIF")
|
||||
outfile.seek(0)
|
||||
with Image.open(outfile) as reloaded:
|
||||
# check palette length
|
||||
palette_length = max(i + 1 for i, v in enumerate(reloaded.histogram()) if v)
|
||||
assert expected_palette_length == palette_length
|
||||
|
||||
# These do optimize the palette
|
||||
check(256, 511, 256)
|
||||
check(255, 511, 255)
|
||||
check(129, 511, 129)
|
||||
check(128, 511, 128)
|
||||
check(64, 511, 64)
|
||||
check(4, 511, 4)
|
||||
|
||||
# These don't optimize the palette
|
||||
check(128, 513, 256)
|
||||
check(64, 513, 256)
|
||||
check(4, 513, 256)
|
||||
assert_image_equal(im.convert("RGB"), reloaded.convert("RGB"))
|
||||
|
||||
|
||||
def test_optimize_full_l():
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import pytest
|
||||
|
||||
from PIL import Image, ImageMode
|
||||
|
||||
from .helper import hopper
|
||||
|
@ -49,23 +51,25 @@ def test_sanity():
|
|||
assert m.typestr == "|u1"
|
||||
|
||||
|
||||
def test_properties():
|
||||
def check(mode, *result):
|
||||
signature = (
|
||||
Image.getmodebase(mode),
|
||||
Image.getmodetype(mode),
|
||||
Image.getmodebands(mode),
|
||||
Image.getmodebandnames(mode),
|
||||
)
|
||||
assert signature == result
|
||||
|
||||
check("1", "L", "L", 1, ("1",))
|
||||
check("L", "L", "L", 1, ("L",))
|
||||
check("P", "P", "L", 1, ("P",))
|
||||
check("I", "L", "I", 1, ("I",))
|
||||
check("F", "L", "F", 1, ("F",))
|
||||
check("RGB", "RGB", "L", 3, ("R", "G", "B"))
|
||||
check("RGBA", "RGB", "L", 4, ("R", "G", "B", "A"))
|
||||
check("RGBX", "RGB", "L", 4, ("R", "G", "B", "X"))
|
||||
check("CMYK", "RGB", "L", 4, ("C", "M", "Y", "K"))
|
||||
check("YCbCr", "RGB", "L", 3, ("Y", "Cb", "Cr"))
|
||||
@pytest.mark.parametrize(
|
||||
"mode, expected_base, expected_type, expected_bands, expected_band_names",
|
||||
(
|
||||
("1", "L", "L", 1, ("1",)),
|
||||
("L", "L", "L", 1, ("L",)),
|
||||
("P", "P", "L", 1, ("P",)),
|
||||
("I", "L", "I", 1, ("I",)),
|
||||
("F", "L", "F", 1, ("F",)),
|
||||
("RGB", "RGB", "L", 3, ("R", "G", "B")),
|
||||
("RGBA", "RGB", "L", 4, ("R", "G", "B", "A")),
|
||||
("RGBX", "RGB", "L", 4, ("R", "G", "B", "X")),
|
||||
("CMYK", "RGB", "L", 4, ("C", "M", "Y", "K")),
|
||||
("YCbCr", "RGB", "L", 3, ("Y", "Cb", "Cr")),
|
||||
),
|
||||
)
|
||||
def test_properties(
|
||||
mode, expected_base, expected_type, expected_bands, expected_band_names
|
||||
):
|
||||
assert Image.getmodebase(mode) == expected_base
|
||||
assert Image.getmodetype(mode) == expected_type
|
||||
assert Image.getmodebands(mode) == expected_bands
|
||||
assert Image.getmodebandnames(mode) == expected_band_names
|
||||
|
|
Loading…
Reference in New Issue
Block a user