|
33 | 33 | skip_unless_feature, |
34 | 34 | ) |
35 | 35 |
|
| 36 | +# name, pixel size |
| 37 | +image_modes = ( |
| 38 | + ("1", 1), |
| 39 | + ("L", 1), |
| 40 | + ("LA", 4), |
| 41 | + ("La", 4), |
| 42 | + ("P", 1), |
| 43 | + ("PA", 4), |
| 44 | + ("F", 4), |
| 45 | + ("I", 4), |
| 46 | + ("I;16", 2), |
| 47 | + ("I;16L", 2), |
| 48 | + ("I;16B", 2), |
| 49 | + ("I;16N", 2), |
| 50 | + ("RGB", 4), |
| 51 | + ("RGBA", 4), |
| 52 | + ("RGBa", 4), |
| 53 | + ("RGBX", 4), |
| 54 | + ("BGR;15", 2), |
| 55 | + ("BGR;16", 2), |
| 56 | + ("BGR;24", 3), |
| 57 | + ("CMYK", 4), |
| 58 | + ("YCbCr", 4), |
| 59 | + ("HSV", 4), |
| 60 | + ("LAB", 4), |
| 61 | +) |
| 62 | + |
| 63 | +image_mode_names = [name for name, _ in image_modes] |
| 64 | + |
36 | 65 |
|
37 | 66 | class TestImage: |
38 | | - @pytest.mark.parametrize( |
39 | | - "mode", |
40 | | - ( |
41 | | - "1", |
42 | | - "P", |
43 | | - "PA", |
44 | | - "L", |
45 | | - "LA", |
46 | | - "La", |
47 | | - "F", |
48 | | - "I", |
49 | | - "I;16", |
50 | | - "I;16L", |
51 | | - "I;16B", |
52 | | - "I;16N", |
53 | | - "RGB", |
54 | | - "RGBX", |
55 | | - "RGBA", |
56 | | - "RGBa", |
57 | | - "BGR;15", |
58 | | - "BGR;16", |
59 | | - "BGR;24", |
60 | | - "CMYK", |
61 | | - "YCbCr", |
62 | | - "LAB", |
63 | | - "HSV", |
64 | | - ), |
65 | | - ) |
| 67 | + @pytest.mark.parametrize("mode", image_mode_names) |
66 | 68 | def test_image_modes_success(self, mode: str) -> None: |
67 | 69 | Image.new(mode, (1, 1)) |
68 | 70 |
|
@@ -1042,6 +1044,35 @@ def test_close_graceful(self, caplog: pytest.LogCaptureFixture) -> None: |
1042 | 1044 | assert im.fp is None |
1043 | 1045 |
|
1044 | 1046 |
|
| 1047 | +class TestImageBytes: |
| 1048 | + @pytest.mark.parametrize("mode", image_mode_names) |
| 1049 | + def test_roundtrip_bytes_constructor(self, mode: str) -> None: |
| 1050 | + im = hopper(mode) |
| 1051 | + source_bytes = im.tobytes() |
| 1052 | + |
| 1053 | + reloaded = Image.frombytes(mode, im.size, source_bytes) |
| 1054 | + assert reloaded.tobytes() == source_bytes |
| 1055 | + |
| 1056 | + @pytest.mark.parametrize("mode", image_mode_names) |
| 1057 | + def test_roundtrip_bytes_method(self, mode: str) -> None: |
| 1058 | + im = hopper(mode) |
| 1059 | + source_bytes = im.tobytes() |
| 1060 | + |
| 1061 | + reloaded = Image.new(mode, im.size) |
| 1062 | + reloaded.frombytes(source_bytes) |
| 1063 | + assert reloaded.tobytes() == source_bytes |
| 1064 | + |
| 1065 | + @pytest.mark.parametrize(("mode", "pixelsize"), image_modes) |
| 1066 | + def test_getdata_putdata(self, mode: str, pixelsize: int) -> None: |
| 1067 | + im = Image.new(mode, (2, 2)) |
| 1068 | + source_bytes = bytes(range(im.width * im.height * pixelsize)) |
| 1069 | + im.frombytes(source_bytes) |
| 1070 | + |
| 1071 | + reloaded = Image.new(mode, im.size) |
| 1072 | + reloaded.putdata(im.getdata()) |
| 1073 | + assert_image_equal(im, reloaded) |
| 1074 | + |
| 1075 | + |
1045 | 1076 | class MockEncoder(ImageFile.PyEncoder): |
1046 | 1077 | pass |
1047 | 1078 |
|
|
0 commit comments