mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-01 00:17:27 +03:00 
			
		
		
		
	Merge pull request #6968 from akx/pytest-style
Fix up some pytest style issues
This commit is contained in:
		
						commit
						1457d2c146
					
				|  | @ -177,13 +177,14 @@ class TestEnvVars: | |||
|         Image._apply_env_variables({"PILLOW_BLOCK_SIZE": "2m"}) | ||||
|         assert Image.core.get_block_size() == 2 * 1024 * 1024 | ||||
| 
 | ||||
|     def test_warnings(self): | ||||
|         pytest.warns( | ||||
|             UserWarning, Image._apply_env_variables, {"PILLOW_ALIGNMENT": "15"} | ||||
|         ) | ||||
|         pytest.warns( | ||||
|             UserWarning, Image._apply_env_variables, {"PILLOW_BLOCK_SIZE": "1024"} | ||||
|         ) | ||||
|         pytest.warns( | ||||
|             UserWarning, Image._apply_env_variables, {"PILLOW_BLOCKS_MAX": "wat"} | ||||
|         ) | ||||
|     @pytest.mark.parametrize( | ||||
|         "var", | ||||
|         ( | ||||
|             {"PILLOW_ALIGNMENT": "15"}, | ||||
|             {"PILLOW_BLOCK_SIZE": "1024"}, | ||||
|             {"PILLOW_BLOCKS_MAX": "wat"}, | ||||
|         ), | ||||
|     ) | ||||
|     def test_warnings(self, var): | ||||
|         with pytest.warns(UserWarning): | ||||
|             Image._apply_env_variables(var) | ||||
|  |  | |||
|  | @ -36,12 +36,10 @@ class TestDecompressionBomb: | |||
|         Image.MAX_IMAGE_PIXELS = 128 * 128 - 1 | ||||
|         assert Image.MAX_IMAGE_PIXELS == 128 * 128 - 1 | ||||
| 
 | ||||
|         def open(): | ||||
|         with pytest.warns(Image.DecompressionBombWarning): | ||||
|             with Image.open(TEST_FILE): | ||||
|                 pass | ||||
| 
 | ||||
|         pytest.warns(Image.DecompressionBombWarning, open) | ||||
| 
 | ||||
|     def test_exception(self): | ||||
|         # Set limit to trigger exception on the test file | ||||
|         Image.MAX_IMAGE_PIXELS = 64 * 128 - 1 | ||||
|  | @ -87,7 +85,8 @@ class TestDecompressionCrop: | |||
|         # same decompression bomb warnings on them. | ||||
|         with hopper() as src: | ||||
|             box = (0, 0, src.width * 2, src.height * 2) | ||||
|             pytest.warns(Image.DecompressionBombWarning, src.crop, box) | ||||
|             with pytest.warns(Image.DecompressionBombWarning): | ||||
|                 src.crop(box) | ||||
| 
 | ||||
|     def test_crop_decompression_checks(self): | ||||
|         im = Image.new("RGB", (100, 100)) | ||||
|  | @ -95,7 +94,8 @@ class TestDecompressionCrop: | |||
|         for value in ((-9999, -9999, -9990, -9990), (-999, -999, -990, -990)): | ||||
|             assert im.crop(value).size == (9, 9) | ||||
| 
 | ||||
|         pytest.warns(Image.DecompressionBombWarning, im.crop, (-160, -160, 99, 99)) | ||||
|         with pytest.warns(Image.DecompressionBombWarning): | ||||
|             im.crop((-160, -160, 99, 99)) | ||||
| 
 | ||||
|         with pytest.raises(Image.DecompressionBombError): | ||||
|             im.crop((-99909, -99990, 99999, 99999)) | ||||
|  |  | |||
|  | @ -263,13 +263,11 @@ def test_apng_chunk_errors(): | |||
|     with Image.open("Tests/images/apng/chunk_no_actl.png") as im: | ||||
|         assert not im.is_animated | ||||
| 
 | ||||
|     def open(): | ||||
|     with pytest.warns(UserWarning): | ||||
|         with Image.open("Tests/images/apng/chunk_multi_actl.png") as im: | ||||
|             im.load() | ||||
|         assert not im.is_animated | ||||
| 
 | ||||
|     pytest.warns(UserWarning, open) | ||||
| 
 | ||||
|     with Image.open("Tests/images/apng/chunk_actl_after_idat.png") as im: | ||||
|         assert not im.is_animated | ||||
| 
 | ||||
|  | @ -287,21 +285,17 @@ def test_apng_chunk_errors(): | |||
| 
 | ||||
| 
 | ||||
| def test_apng_syntax_errors(): | ||||
|     def open_frames_zero(): | ||||
|     with pytest.warns(UserWarning): | ||||
|         with Image.open("Tests/images/apng/syntax_num_frames_zero.png") as im: | ||||
|             assert not im.is_animated | ||||
|             with pytest.raises(OSError): | ||||
|                 im.load() | ||||
| 
 | ||||
|     pytest.warns(UserWarning, open_frames_zero) | ||||
| 
 | ||||
|     def open_frames_zero_default(): | ||||
|     with pytest.warns(UserWarning): | ||||
|         with Image.open("Tests/images/apng/syntax_num_frames_zero_default.png") as im: | ||||
|             assert not im.is_animated | ||||
|             im.load() | ||||
| 
 | ||||
|     pytest.warns(UserWarning, open_frames_zero_default) | ||||
| 
 | ||||
|     # we can handle this case gracefully | ||||
|     exception = None | ||||
|     with Image.open("Tests/images/apng/syntax_num_frames_low.png") as im: | ||||
|  | @ -316,13 +310,11 @@ def test_apng_syntax_errors(): | |||
|             im.seek(im.n_frames - 1) | ||||
|             im.load() | ||||
| 
 | ||||
|     def open(): | ||||
|     with pytest.warns(UserWarning): | ||||
|         with Image.open("Tests/images/apng/syntax_num_frames_invalid.png") as im: | ||||
|             assert not im.is_animated | ||||
|             im.load() | ||||
| 
 | ||||
|     pytest.warns(UserWarning, open) | ||||
| 
 | ||||
| 
 | ||||
| @pytest.mark.parametrize( | ||||
|     "test_file", | ||||
|  |  | |||
|  | @ -28,7 +28,8 @@ def test_unclosed_file(): | |||
|         im = Image.open(TEST_FILE) | ||||
|         im.load() | ||||
| 
 | ||||
|     pytest.warns(ResourceWarning, open) | ||||
|     with pytest.warns(ResourceWarning): | ||||
|         open() | ||||
| 
 | ||||
| 
 | ||||
| def test_closed_file(): | ||||
|  |  | |||
|  | @ -36,7 +36,8 @@ def test_unclosed_file(): | |||
|         im = Image.open(static_test_file) | ||||
|         im.load() | ||||
| 
 | ||||
|     pytest.warns(ResourceWarning, open) | ||||
|     with pytest.warns(ResourceWarning): | ||||
|         open() | ||||
| 
 | ||||
| 
 | ||||
| def test_closed_file(): | ||||
|  |  | |||
|  | @ -36,7 +36,8 @@ def test_unclosed_file(): | |||
|         im = Image.open(TEST_GIF) | ||||
|         im.load() | ||||
| 
 | ||||
|     pytest.warns(ResourceWarning, open) | ||||
|     with pytest.warns(ResourceWarning): | ||||
|         open() | ||||
| 
 | ||||
| 
 | ||||
| def test_closed_file(): | ||||
|  | @ -1087,7 +1088,8 @@ def test_rgb_transparency(tmp_path): | |||
|     im = Image.new("RGB", (1, 1)) | ||||
|     im.info["transparency"] = b"" | ||||
|     ims = [Image.new("RGB", (1, 1))] | ||||
|     pytest.warns(UserWarning, im.save, out, save_all=True, append_images=ims) | ||||
|     with pytest.warns(UserWarning): | ||||
|         im.save(out, save_all=True, append_images=ims) | ||||
| 
 | ||||
|     with Image.open(out) as reloaded: | ||||
|         assert "transparency" not in reloaded.info | ||||
|  |  | |||
|  | @ -212,12 +212,10 @@ def test_save_append_images(tmp_path): | |||
| def test_unexpected_size(): | ||||
|     # This image has been manually hexedited to state that it is 16x32 | ||||
|     # while the image within is still 16x16 | ||||
|     def open(): | ||||
|     with pytest.warns(UserWarning): | ||||
|         with Image.open("Tests/images/hopper_unexpected.ico") as im: | ||||
|             assert im.size == (16, 16) | ||||
| 
 | ||||
|     pytest.warns(UserWarning, open) | ||||
| 
 | ||||
| 
 | ||||
| def test_draw_reloaded(tmp_path): | ||||
|     with Image.open(TEST_ICO_FILE) as im: | ||||
|  |  | |||
|  | @ -32,7 +32,8 @@ def test_unclosed_file(): | |||
|         im = Image.open(TEST_IM) | ||||
|         im.load() | ||||
| 
 | ||||
|     pytest.warns(ResourceWarning, open) | ||||
|     with pytest.warns(ResourceWarning): | ||||
|         open() | ||||
| 
 | ||||
| 
 | ||||
| def test_closed_file(): | ||||
|  |  | |||
|  | @ -42,7 +42,8 @@ def test_unclosed_file(): | |||
|         im = Image.open(test_files[0]) | ||||
|         im.load() | ||||
| 
 | ||||
|     pytest.warns(ResourceWarning, open) | ||||
|     with pytest.warns(ResourceWarning): | ||||
|         open() | ||||
| 
 | ||||
| 
 | ||||
| def test_closed_file(): | ||||
|  |  | |||
|  | @ -27,7 +27,8 @@ def test_unclosed_file(): | |||
|         im = Image.open(test_file) | ||||
|         im.load() | ||||
| 
 | ||||
|     pytest.warns(ResourceWarning, open) | ||||
|     with pytest.warns(ResourceWarning): | ||||
|         open() | ||||
| 
 | ||||
| 
 | ||||
| def test_closed_file(): | ||||
|  |  | |||
|  | @ -25,7 +25,8 @@ def test_unclosed_file(): | |||
|         im = Image.open(TEST_FILE) | ||||
|         im.load() | ||||
| 
 | ||||
|     pytest.warns(ResourceWarning, open) | ||||
|     with pytest.warns(ResourceWarning): | ||||
|         open() | ||||
| 
 | ||||
| 
 | ||||
| def test_closed_file(): | ||||
|  |  | |||
|  | @ -29,11 +29,9 @@ def test_sanity(codec, test_path, format): | |||
| 
 | ||||
| @pytest.mark.skipif(is_pypy(), reason="Requires CPython") | ||||
| def test_unclosed_file(): | ||||
|     def open(): | ||||
|     with pytest.warns(ResourceWarning): | ||||
|         TarIO.TarIO(TEST_TAR_FILE, "hopper.jpg") | ||||
| 
 | ||||
|     pytest.warns(ResourceWarning, open) | ||||
| 
 | ||||
| 
 | ||||
| def test_close(): | ||||
|     with warnings.catch_warnings(): | ||||
|  |  | |||
|  | @ -163,7 +163,9 @@ def test_save_id_section(tmp_path): | |||
| 
 | ||||
|     # Save with custom id section greater than 255 characters | ||||
|     id_section = b"Test content" * 25 | ||||
|     pytest.warns(UserWarning, lambda: im.save(out, id_section=id_section)) | ||||
|     with pytest.warns(UserWarning): | ||||
|         im.save(out, id_section=id_section) | ||||
| 
 | ||||
|     with Image.open(out) as test_im: | ||||
|         assert test_im.info["id_section"] == id_section[:255] | ||||
| 
 | ||||
|  |  | |||
|  | @ -61,7 +61,8 @@ class TestFileTiff: | |||
|             im = Image.open("Tests/images/multipage.tiff") | ||||
|             im.load() | ||||
| 
 | ||||
|         pytest.warns(ResourceWarning, open) | ||||
|         with pytest.warns(ResourceWarning): | ||||
|             open() | ||||
| 
 | ||||
|     def test_closed_file(self): | ||||
|         with warnings.catch_warnings(): | ||||
|  | @ -231,7 +232,8 @@ class TestFileTiff: | |||
|     def test_bad_exif(self): | ||||
|         with Image.open("Tests/images/hopper_bad_exif.jpg") as i: | ||||
|             # Should not raise struct.error. | ||||
|             pytest.warns(UserWarning, i._getexif) | ||||
|             with pytest.warns(UserWarning): | ||||
|                 i._getexif() | ||||
| 
 | ||||
|     def test_save_rgba(self, tmp_path): | ||||
|         im = hopper("RGBA") | ||||
|  |  | |||
|  | @ -252,7 +252,8 @@ def test_empty_metadata(): | |||
|     head = f.read(8) | ||||
|     info = TiffImagePlugin.ImageFileDirectory(head) | ||||
|     # Should not raise struct.error. | ||||
|     pytest.warns(UserWarning, info.load, f) | ||||
|     with pytest.warns(UserWarning): | ||||
|         info.load(f) | ||||
| 
 | ||||
| 
 | ||||
| def test_iccprofile(tmp_path): | ||||
|  | @ -418,11 +419,12 @@ def test_too_many_entries(): | |||
|     ifd = TiffImagePlugin.ImageFileDirectory_v2() | ||||
| 
 | ||||
|     #    277: ("SamplesPerPixel", SHORT, 1), | ||||
|     ifd._tagdata[277] = struct.pack("hh", 4, 4) | ||||
|     ifd._tagdata[277] = struct.pack("<hh", 4, 4) | ||||
|     ifd.tagtype[277] = TiffTags.SHORT | ||||
| 
 | ||||
|     # Should not raise ValueError. | ||||
|     pytest.warns(UserWarning, lambda: ifd[277]) | ||||
|     with pytest.warns(UserWarning): | ||||
|         assert ifd[277] == 4 | ||||
| 
 | ||||
| 
 | ||||
| def test_tag_group_data(): | ||||
|  |  | |||
|  | @ -29,7 +29,10 @@ class TestUnsupportedWebp: | |||
|             WebPImagePlugin.SUPPORTED = False | ||||
| 
 | ||||
|         file_path = "Tests/images/hopper.webp" | ||||
|         pytest.warns(UserWarning, lambda: pytest.raises(OSError, Image.open, file_path)) | ||||
|         with pytest.warns(UserWarning): | ||||
|             with pytest.raises(OSError): | ||||
|                 with Image.open(file_path): | ||||
|                     pass | ||||
| 
 | ||||
|         if HAVE_WEBP: | ||||
|             WebPImagePlugin.SUPPORTED = True | ||||
|  |  | |||
|  | @ -351,7 +351,8 @@ def test_rotated_transposed_font(font, orientation): | |||
|     assert bbox_b[3] == 20 + bbox_a[2] - bbox_a[0] | ||||
| 
 | ||||
|     # text length is undefined for vertical text | ||||
|     pytest.raises(ValueError, draw.textlength, word) | ||||
|     with pytest.raises(ValueError): | ||||
|         draw.textlength(word) | ||||
| 
 | ||||
| 
 | ||||
| @pytest.mark.parametrize( | ||||
|  | @ -872,25 +873,23 @@ def test_anchor_invalid(font): | |||
|     d.font = font | ||||
| 
 | ||||
|     for anchor in ["", "l", "a", "lax", "sa", "xa", "lx"]: | ||||
|         pytest.raises(ValueError, lambda: font.getmask2("hello", anchor=anchor)) | ||||
|         pytest.raises(ValueError, lambda: font.getbbox("hello", anchor=anchor)) | ||||
|         pytest.raises(ValueError, lambda: d.text((0, 0), "hello", anchor=anchor)) | ||||
|         pytest.raises(ValueError, lambda: d.textbbox((0, 0), "hello", anchor=anchor)) | ||||
|         pytest.raises( | ||||
|             ValueError, lambda: d.multiline_text((0, 0), "foo\nbar", anchor=anchor) | ||||
|         ) | ||||
|         pytest.raises( | ||||
|             ValueError, | ||||
|             lambda: d.multiline_textbbox((0, 0), "foo\nbar", anchor=anchor), | ||||
|         ) | ||||
|         with pytest.raises(ValueError): | ||||
|             font.getmask2("hello", anchor=anchor) | ||||
|         with pytest.raises(ValueError): | ||||
|             font.getbbox("hello", anchor=anchor) | ||||
|         with pytest.raises(ValueError): | ||||
|             d.text((0, 0), "hello", anchor=anchor) | ||||
|         with pytest.raises(ValueError): | ||||
|             d.textbbox((0, 0), "hello", anchor=anchor) | ||||
|         with pytest.raises(ValueError): | ||||
|             d.multiline_text((0, 0), "foo\nbar", anchor=anchor) | ||||
|         with pytest.raises(ValueError): | ||||
|             d.multiline_textbbox((0, 0), "foo\nbar", anchor=anchor) | ||||
|     for anchor in ["lt", "lb"]: | ||||
|         pytest.raises( | ||||
|             ValueError, lambda: d.multiline_text((0, 0), "foo\nbar", anchor=anchor) | ||||
|         ) | ||||
|         pytest.raises( | ||||
|             ValueError, | ||||
|             lambda: d.multiline_textbbox((0, 0), "foo\nbar", anchor=anchor), | ||||
|         ) | ||||
|         with pytest.raises(ValueError): | ||||
|             d.multiline_text((0, 0), "foo\nbar", anchor=anchor) | ||||
|         with pytest.raises(ValueError): | ||||
|             d.multiline_textbbox((0, 0), "foo\nbar", anchor=anchor) | ||||
| 
 | ||||
| 
 | ||||
| @pytest.mark.parametrize("bpp", (1, 2, 4, 8)) | ||||
|  |  | |||
|  | @ -360,37 +360,20 @@ def test_anchor_invalid_ttb(): | |||
|     d.font = font | ||||
| 
 | ||||
|     for anchor in ["", "l", "a", "lax", "xa", "la", "ls", "ld", "lx"]: | ||||
|         pytest.raises( | ||||
|             ValueError, lambda: font.getmask2("hello", anchor=anchor, direction="ttb") | ||||
|         ) | ||||
|         pytest.raises( | ||||
|             ValueError, lambda: font.getbbox("hello", anchor=anchor, direction="ttb") | ||||
|         ) | ||||
|         pytest.raises( | ||||
|             ValueError, lambda: d.text((0, 0), "hello", anchor=anchor, direction="ttb") | ||||
|         ) | ||||
|         pytest.raises( | ||||
|             ValueError, | ||||
|             lambda: d.textbbox((0, 0), "hello", anchor=anchor, direction="ttb"), | ||||
|         ) | ||||
|         pytest.raises( | ||||
|             ValueError, | ||||
|             lambda: d.multiline_text( | ||||
|                 (0, 0), "foo\nbar", anchor=anchor, direction="ttb" | ||||
|             ), | ||||
|         ) | ||||
|         pytest.raises( | ||||
|             ValueError, | ||||
|             lambda: d.multiline_textbbox( | ||||
|                 (0, 0), "foo\nbar", anchor=anchor, direction="ttb" | ||||
|             ), | ||||
|         ) | ||||
|         with pytest.raises(ValueError): | ||||
|             font.getmask2("hello", anchor=anchor, direction="ttb") | ||||
|         with pytest.raises(ValueError): | ||||
|             font.getbbox("hello", anchor=anchor, direction="ttb") | ||||
|         with pytest.raises(ValueError): | ||||
|             d.text((0, 0), "hello", anchor=anchor, direction="ttb") | ||||
|         with pytest.raises(ValueError): | ||||
|             d.textbbox((0, 0), "hello", anchor=anchor, direction="ttb") | ||||
|         with pytest.raises(ValueError): | ||||
|             d.multiline_text((0, 0), "foo\nbar", anchor=anchor, direction="ttb") | ||||
|         with pytest.raises(ValueError): | ||||
|             d.multiline_textbbox((0, 0), "foo\nbar", anchor=anchor, direction="ttb") | ||||
|     # ttb multiline text does not support anchors at all | ||||
|     pytest.raises( | ||||
|         ValueError, | ||||
|         lambda: d.multiline_text((0, 0), "foo\nbar", anchor="mm", direction="ttb"), | ||||
|     ) | ||||
|     pytest.raises( | ||||
|         ValueError, | ||||
|         lambda: d.multiline_textbbox((0, 0), "foo\nbar", anchor="mm", direction="ttb"), | ||||
|     ) | ||||
|     with pytest.raises(ValueError): | ||||
|         d.multiline_text((0, 0), "foo\nbar", anchor="mm", direction="ttb") | ||||
|     with pytest.raises(ValueError): | ||||
|         d.multiline_textbbox((0, 0), "foo\nbar", anchor="mm", direction="ttb") | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user