Skip to content

Commit 7cff822

Browse files
authored
Merge pull request #6531 from Yay295/parametrize
2 parents 5e847b2 + 69de03b commit 7cff822

File tree

3 files changed

+268
-240
lines changed

3 files changed

+268
-240
lines changed

Tests/test_image_filter.py

Lines changed: 104 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -5,90 +5,109 @@
55
from .helper import assert_image_equal, hopper
66

77

8-
def test_sanity():
9-
def apply_filter(filter_to_apply):
10-
for mode in ["L", "RGB", "CMYK"]:
11-
im = hopper(mode)
12-
out = im.filter(filter_to_apply)
13-
assert out.mode == im.mode
14-
assert out.size == im.size
15-
16-
apply_filter(ImageFilter.BLUR)
17-
apply_filter(ImageFilter.CONTOUR)
18-
apply_filter(ImageFilter.DETAIL)
19-
apply_filter(ImageFilter.EDGE_ENHANCE)
20-
apply_filter(ImageFilter.EDGE_ENHANCE_MORE)
21-
apply_filter(ImageFilter.EMBOSS)
22-
apply_filter(ImageFilter.FIND_EDGES)
23-
apply_filter(ImageFilter.SMOOTH)
24-
apply_filter(ImageFilter.SMOOTH_MORE)
25-
apply_filter(ImageFilter.SHARPEN)
26-
apply_filter(ImageFilter.MaxFilter)
27-
apply_filter(ImageFilter.MedianFilter)
28-
apply_filter(ImageFilter.MinFilter)
29-
apply_filter(ImageFilter.ModeFilter)
30-
apply_filter(ImageFilter.GaussianBlur)
31-
apply_filter(ImageFilter.GaussianBlur(5))
32-
apply_filter(ImageFilter.BoxBlur(5))
33-
apply_filter(ImageFilter.UnsharpMask)
34-
apply_filter(ImageFilter.UnsharpMask(10))
35-
8+
@pytest.mark.parametrize(
9+
"filter_to_apply",
10+
(
11+
ImageFilter.BLUR,
12+
ImageFilter.CONTOUR,
13+
ImageFilter.DETAIL,
14+
ImageFilter.EDGE_ENHANCE,
15+
ImageFilter.EDGE_ENHANCE_MORE,
16+
ImageFilter.EMBOSS,
17+
ImageFilter.FIND_EDGES,
18+
ImageFilter.SMOOTH,
19+
ImageFilter.SMOOTH_MORE,
20+
ImageFilter.SHARPEN,
21+
ImageFilter.MaxFilter,
22+
ImageFilter.MedianFilter,
23+
ImageFilter.MinFilter,
24+
ImageFilter.ModeFilter,
25+
ImageFilter.GaussianBlur,
26+
ImageFilter.GaussianBlur(5),
27+
ImageFilter.BoxBlur(5),
28+
ImageFilter.UnsharpMask,
29+
ImageFilter.UnsharpMask(10),
30+
),
31+
)
32+
@pytest.mark.parametrize("mode", ("L", "RGB", "CMYK"))
33+
def test_sanity(filter_to_apply, mode):
34+
im = hopper(mode)
35+
out = im.filter(filter_to_apply)
36+
assert out.mode == im.mode
37+
assert out.size == im.size
38+
39+
40+
@pytest.mark.parametrize("mode", ("L", "RGB", "CMYK"))
41+
def test_sanity_error(mode):
3642
with pytest.raises(TypeError):
37-
apply_filter("hello")
38-
39-
40-
def test_crash():
41-
42-
# crashes on small images
43-
im = Image.new("RGB", (1, 1))
44-
im.filter(ImageFilter.SMOOTH)
43+
im = hopper(mode)
44+
im.filter("hello")
4545

46-
im = Image.new("RGB", (2, 2))
47-
im.filter(ImageFilter.SMOOTH)
4846

49-
im = Image.new("RGB", (3, 3))
47+
# crashes on small images
48+
@pytest.mark.parametrize("size", ((1, 1), (2, 2), (3, 3)))
49+
def test_crash(size):
50+
im = Image.new("RGB", size)
5051
im.filter(ImageFilter.SMOOTH)
5152

5253

53-
def test_modefilter():
54-
def modefilter(mode):
55-
im = Image.new(mode, (3, 3), None)
56-
im.putdata(list(range(9)))
57-
# image is:
58-
# 0 1 2
59-
# 3 4 5
60-
# 6 7 8
61-
mod = im.filter(ImageFilter.ModeFilter).getpixel((1, 1))
62-
im.putdata([0, 0, 1, 2, 5, 1, 5, 2, 0]) # mode=0
63-
mod2 = im.filter(ImageFilter.ModeFilter).getpixel((1, 1))
64-
return mod, mod2
65-
66-
assert modefilter("1") == (4, 0)
67-
assert modefilter("L") == (4, 0)
68-
assert modefilter("P") == (4, 0)
69-
assert modefilter("RGB") == ((4, 0, 0), (0, 0, 0))
70-
71-
72-
def test_rankfilter():
73-
def rankfilter(mode):
74-
im = Image.new(mode, (3, 3), None)
54+
@pytest.mark.parametrize(
55+
"mode, expected",
56+
(
57+
("1", (4, 0)),
58+
("L", (4, 0)),
59+
("P", (4, 0)),
60+
("RGB", ((4, 0, 0), (0, 0, 0))),
61+
),
62+
)
63+
def test_modefilter(mode, expected):
64+
im = Image.new(mode, (3, 3), None)
65+
im.putdata(list(range(9)))
66+
# image is:
67+
# 0 1 2
68+
# 3 4 5
69+
# 6 7 8
70+
mod = im.filter(ImageFilter.ModeFilter).getpixel((1, 1))
71+
im.putdata([0, 0, 1, 2, 5, 1, 5, 2, 0]) # mode=0
72+
mod2 = im.filter(ImageFilter.ModeFilter).getpixel((1, 1))
73+
assert (mod, mod2) == expected
74+
75+
76+
@pytest.mark.parametrize(
77+
"mode, expected",
78+
(
79+
("1", (0, 4, 8)),
80+
("L", (0, 4, 8)),
81+
("RGB", ((0, 0, 0), (4, 0, 0), (8, 0, 0))),
82+
("I", (0, 4, 8)),
83+
("F", (0.0, 4.0, 8.0)),
84+
),
85+
)
86+
def test_rankfilter(mode, expected):
87+
im = Image.new(mode, (3, 3), None)
88+
im.putdata(list(range(9)))
89+
# image is:
90+
# 0 1 2
91+
# 3 4 5
92+
# 6 7 8
93+
minimum = im.filter(ImageFilter.MinFilter).getpixel((1, 1))
94+
med = im.filter(ImageFilter.MedianFilter).getpixel((1, 1))
95+
maximum = im.filter(ImageFilter.MaxFilter).getpixel((1, 1))
96+
assert (minimum, med, maximum) == expected
97+
98+
99+
@pytest.mark.parametrize(
100+
"filter", (ImageFilter.MinFilter, ImageFilter.MedianFilter, ImageFilter.MaxFilter)
101+
)
102+
def test_rankfilter_error(filter):
103+
with pytest.raises(ValueError):
104+
im = Image.new("P", (3, 3), None)
75105
im.putdata(list(range(9)))
76106
# image is:
77107
# 0 1 2
78108
# 3 4 5
79109
# 6 7 8
80-
minimum = im.filter(ImageFilter.MinFilter).getpixel((1, 1))
81-
med = im.filter(ImageFilter.MedianFilter).getpixel((1, 1))
82-
maximum = im.filter(ImageFilter.MaxFilter).getpixel((1, 1))
83-
return minimum, med, maximum
84-
85-
assert rankfilter("1") == (0, 4, 8)
86-
assert rankfilter("L") == (0, 4, 8)
87-
with pytest.raises(ValueError):
88-
rankfilter("P")
89-
assert rankfilter("RGB") == ((0, 0, 0), (4, 0, 0), (8, 0, 0))
90-
assert rankfilter("I") == (0, 4, 8)
91-
assert rankfilter("F") == (0.0, 4.0, 8.0)
110+
im.filter(filter).getpixel((1, 1))
92111

93112

94113
def test_rankfilter_properties():
@@ -110,7 +129,8 @@ def test_kernel_not_enough_coefficients():
110129
ImageFilter.Kernel((3, 3), (0, 0))
111130

112131

113-
def test_consistency_3x3():
132+
@pytest.mark.parametrize("mode", ("L", "LA", "RGB", "CMYK"))
133+
def test_consistency_3x3(mode):
114134
with Image.open("Tests/images/hopper.bmp") as source:
115135
with Image.open("Tests/images/hopper_emboss.bmp") as reference:
116136
kernel = ImageFilter.Kernel(
@@ -125,14 +145,14 @@ def test_consistency_3x3():
125145
source = source.split() * 2
126146
reference = reference.split() * 2
127147

128-
for mode in ["L", "LA", "RGB", "CMYK"]:
129-
assert_image_equal(
130-
Image.merge(mode, source[: len(mode)]).filter(kernel),
131-
Image.merge(mode, reference[: len(mode)]),
132-
)
148+
assert_image_equal(
149+
Image.merge(mode, source[: len(mode)]).filter(kernel),
150+
Image.merge(mode, reference[: len(mode)]),
151+
)
133152

134153

135-
def test_consistency_5x5():
154+
@pytest.mark.parametrize("mode", ("L", "LA", "RGB", "CMYK"))
155+
def test_consistency_5x5(mode):
136156
with Image.open("Tests/images/hopper.bmp") as source:
137157
with Image.open("Tests/images/hopper_emboss_more.bmp") as reference:
138158
kernel = ImageFilter.Kernel(
@@ -149,8 +169,7 @@ def test_consistency_5x5():
149169
source = source.split() * 2
150170
reference = reference.split() * 2
151171

152-
for mode in ["L", "LA", "RGB", "CMYK"]:
153-
assert_image_equal(
154-
Image.merge(mode, source[: len(mode)]).filter(kernel),
155-
Image.merge(mode, reference[: len(mode)]),
156-
)
172+
assert_image_equal(
173+
Image.merge(mode, source[: len(mode)]).filter(kernel),
174+
Image.merge(mode, reference[: len(mode)]),
175+
)

0 commit comments

Comments
 (0)