mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-05-29 10:13:09 +03:00
Tests.helper cleanup
This commit is contained in:
parent
113a72633a
commit
cf1f8b0498
|
@ -2,17 +2,15 @@
|
||||||
|
|
||||||
from __future__ import division
|
from __future__ import division
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
from .helper import PillowTestCase, unittest
|
from .helper import PillowTestCase, is_win32, unittest
|
||||||
|
|
||||||
min_iterations = 100
|
min_iterations = 100
|
||||||
max_iterations = 10000
|
max_iterations = 10000
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform.startswith("win32"), "requires Unix or macOS")
|
@unittest.skipIf(is_win32(), "requires Unix or macOS")
|
||||||
class TestImagingLeaks(PillowTestCase):
|
class TestImagingLeaks(PillowTestCase):
|
||||||
def _get_mem_usage(self):
|
def _get_mem_usage(self):
|
||||||
from resource import getpagesize, getrusage, RUSAGE_SELF
|
from resource import getpagesize, getrusage, RUSAGE_SELF
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import sys
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
from .helper import PillowTestCase, unittest
|
from .helper import PillowTestCase, is_win32, unittest
|
||||||
|
|
||||||
# Limits for testing the leak
|
# Limits for testing the leak
|
||||||
mem_limit = 1024 * 1048576
|
mem_limit = 1024 * 1048576
|
||||||
|
@ -13,7 +12,7 @@ codecs = dir(Image.core)
|
||||||
test_file = "Tests/images/rgb_trns_ycbc.jp2"
|
test_file = "Tests/images/rgb_trns_ycbc.jp2"
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform.startswith("win32"), "requires Unix or macOS")
|
@unittest.skipIf(is_win32(), "requires Unix or macOS")
|
||||||
class TestJpegLeaks(PillowTestCase):
|
class TestJpegLeaks(PillowTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
if "jpeg2k_encoder" not in codecs or "jpeg2k_decoder" not in codecs:
|
if "jpeg2k_encoder" not in codecs or "jpeg2k_decoder" not in codecs:
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import sys
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
from .helper import PillowTestCase, hopper, unittest
|
from .helper import PillowTestCase, hopper, is_win32, unittest
|
||||||
|
|
||||||
iterations = 5000
|
iterations = 5000
|
||||||
|
|
||||||
|
@ -15,7 +14,7 @@ valgrind --tool=massif python test-installed.py -s -v Tests/check_jpeg_leaks.py
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform.startswith("win32"), "requires Unix or macOS")
|
@unittest.skipIf(is_win32(), "requires Unix or macOS")
|
||||||
class TestJpegLeaks(PillowTestCase):
|
class TestJpegLeaks(PillowTestCase):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -368,6 +368,14 @@ def on_ci():
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def is_win32():
|
||||||
|
return sys.platform.startswith("win32")
|
||||||
|
|
||||||
|
|
||||||
|
def is_pypy():
|
||||||
|
return hasattr(sys, "pypy_translation_info")
|
||||||
|
|
||||||
|
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
IMCONVERT = os.environ.get("MAGICK_HOME", "")
|
IMCONVERT = os.environ.get("MAGICK_HOME", "")
|
||||||
if IMCONVERT:
|
if IMCONVERT:
|
||||||
|
|
|
@ -4,9 +4,7 @@ import sys
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
from .helper import PillowTestCase, unittest
|
from .helper import PillowTestCase, is_pypy, unittest
|
||||||
|
|
||||||
is_pypy = hasattr(sys, "pypy_version_info")
|
|
||||||
|
|
||||||
|
|
||||||
class TestCoreStats(PillowTestCase):
|
class TestCoreStats(PillowTestCase):
|
||||||
|
@ -87,7 +85,7 @@ class TestCoreMemory(PillowTestCase):
|
||||||
stats = Image.core.get_stats()
|
stats = Image.core.get_stats()
|
||||||
self.assertGreaterEqual(stats["new_count"], 1)
|
self.assertGreaterEqual(stats["new_count"], 1)
|
||||||
self.assertGreaterEqual(stats["allocated_blocks"], 64)
|
self.assertGreaterEqual(stats["allocated_blocks"], 64)
|
||||||
if not is_pypy:
|
if not is_pypy():
|
||||||
self.assertGreaterEqual(stats["freed_blocks"], 64)
|
self.assertGreaterEqual(stats["freed_blocks"], 64)
|
||||||
|
|
||||||
def test_get_blocks_max(self):
|
def test_get_blocks_max(self):
|
||||||
|
@ -108,7 +106,7 @@ class TestCoreMemory(PillowTestCase):
|
||||||
if sys.maxsize < 2 ** 32:
|
if sys.maxsize < 2 ** 32:
|
||||||
self.assertRaises(ValueError, Image.core.set_blocks_max, 2 ** 29)
|
self.assertRaises(ValueError, Image.core.set_blocks_max, 2 ** 29)
|
||||||
|
|
||||||
@unittest.skipIf(is_pypy, "images are not collected")
|
@unittest.skipIf(is_pypy(), "images are not collected")
|
||||||
def test_set_blocks_max_stats(self):
|
def test_set_blocks_max_stats(self):
|
||||||
Image.core.reset_stats()
|
Image.core.reset_stats()
|
||||||
Image.core.set_blocks_max(128)
|
Image.core.set_blocks_max(128)
|
||||||
|
@ -123,7 +121,7 @@ class TestCoreMemory(PillowTestCase):
|
||||||
self.assertEqual(stats["freed_blocks"], 0)
|
self.assertEqual(stats["freed_blocks"], 0)
|
||||||
self.assertEqual(stats["blocks_cached"], 64)
|
self.assertEqual(stats["blocks_cached"], 64)
|
||||||
|
|
||||||
@unittest.skipIf(is_pypy, "images are not collected")
|
@unittest.skipIf(is_pypy(), "images are not collected")
|
||||||
def test_clear_cache_stats(self):
|
def test_clear_cache_stats(self):
|
||||||
Image.core.reset_stats()
|
Image.core.reset_stats()
|
||||||
Image.core.clear_cache()
|
Image.core.clear_cache()
|
||||||
|
@ -153,7 +151,7 @@ class TestCoreMemory(PillowTestCase):
|
||||||
self.assertGreaterEqual(stats["allocated_blocks"], 16)
|
self.assertGreaterEqual(stats["allocated_blocks"], 16)
|
||||||
self.assertGreaterEqual(stats["reused_blocks"], 0)
|
self.assertGreaterEqual(stats["reused_blocks"], 0)
|
||||||
self.assertEqual(stats["blocks_cached"], 0)
|
self.assertEqual(stats["blocks_cached"], 0)
|
||||||
if not is_pypy:
|
if not is_pypy():
|
||||||
self.assertGreaterEqual(stats["freed_blocks"], 16)
|
self.assertGreaterEqual(stats["freed_blocks"], 16)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,16 @@
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
from PIL import Image, ImageFile, JpegImagePlugin
|
from PIL import Image, ImageFile, JpegImagePlugin
|
||||||
|
|
||||||
from .helper import PillowTestCase, cjpeg_available, djpeg_available, hopper, unittest
|
from .helper import (
|
||||||
|
PillowTestCase,
|
||||||
|
cjpeg_available,
|
||||||
|
djpeg_available,
|
||||||
|
hopper,
|
||||||
|
is_win32,
|
||||||
|
unittest,
|
||||||
|
)
|
||||||
|
|
||||||
codecs = dir(Image.core)
|
codecs = dir(Image.core)
|
||||||
|
|
||||||
|
@ -654,7 +660,7 @@ class TestFileJpeg(PillowTestCase):
|
||||||
self.assertNotIn("photoshop", im.info)
|
self.assertNotIn("photoshop", im.info)
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipUnless(sys.platform.startswith("win32"), "Windows only")
|
@unittest.skipUnless(is_win32(), "Windows only")
|
||||||
class TestFileCloseW32(PillowTestCase):
|
class TestFileCloseW32(PillowTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
if "jpeg_encoder" not in codecs or "jpeg_decoder" not in codecs:
|
if "jpeg_encoder" not in codecs or "jpeg_decoder" not in codecs:
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
import sys
|
|
||||||
import zlib
|
import zlib
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
from PIL import Image, ImageFile, PngImagePlugin
|
from PIL import Image, ImageFile, PngImagePlugin
|
||||||
from PIL._util import py3
|
from PIL._util import py3
|
||||||
|
|
||||||
from .helper import PillowLeakTestCase, PillowTestCase, hopper, unittest
|
from .helper import PillowLeakTestCase, PillowTestCase, hopper, is_win32, unittest
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from PIL import _webp
|
from PIL import _webp
|
||||||
|
@ -650,7 +649,7 @@ class TestFilePng(PillowTestCase):
|
||||||
self.assert_image_similar(im, expected, 0.23)
|
self.assert_image_similar(im, expected, 0.23)
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform.startswith("win32"), "requires Unix or macOS")
|
@unittest.skipIf(is_win32(), "requires Unix or macOS")
|
||||||
class TestTruncatedPngPLeaks(PillowLeakTestCase):
|
class TestTruncatedPngPLeaks(PillowLeakTestCase):
|
||||||
mem_limit = 2 * 1024 # max increase in K
|
mem_limit = 2 * 1024 # max increase in K
|
||||||
iterations = 100 # Leak is 56k/iteration, this will leak 5.6megs
|
iterations = 100 # Leak is 56k/iteration, this will leak 5.6megs
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
import logging
|
import logging
|
||||||
import sys
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
from PIL import Image, TiffImagePlugin, features
|
from PIL import Image, TiffImagePlugin, features
|
||||||
from PIL._util import py3
|
from PIL._util import py3
|
||||||
from PIL.TiffImagePlugin import RESOLUTION_UNIT, X_RESOLUTION, Y_RESOLUTION
|
from PIL.TiffImagePlugin import RESOLUTION_UNIT, X_RESOLUTION, Y_RESOLUTION
|
||||||
|
|
||||||
from .helper import PillowTestCase, hopper, unittest
|
from .helper import PillowTestCase, hopper, is_win32, unittest
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -612,7 +611,7 @@ class TestFileTiff(PillowTestCase):
|
||||||
im.load()
|
im.load()
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipUnless(sys.platform.startswith("win32"), "Windows only")
|
@unittest.skipUnless(is_win32(), "Windows only")
|
||||||
class TestFileTiffW32(PillowTestCase):
|
class TestFileTiffW32(PillowTestCase):
|
||||||
def test_fd_leak(self):
|
def test_fd_leak(self):
|
||||||
tmpfile = self.tempfile("temp.tif")
|
tmpfile = self.tempfile("temp.tif")
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
from __future__ import division
|
from __future__ import division
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from PIL import Image, ImageDraw, ImageFont, features
|
from PIL import Image, ImageDraw, ImageFont, features
|
||||||
|
|
||||||
from .helper import PillowLeakTestCase, unittest
|
from .helper import PillowLeakTestCase, is_win32, unittest
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform.startswith("win32"), "requires Unix or macOS")
|
@unittest.skipIf(is_win32(), "requires Unix or macOS")
|
||||||
class TestTTypeFontLeak(PillowLeakTestCase):
|
class TestTTypeFontLeak(PillowLeakTestCase):
|
||||||
# fails at iteration 3 in master
|
# fails at iteration 3 in master
|
||||||
iterations = 10
|
iterations = 10
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from PIL._util import py3
|
from PIL._util import py3
|
||||||
|
|
||||||
from .helper import PillowTestCase, hopper, unittest
|
from .helper import PillowTestCase, hopper, is_win32, unittest
|
||||||
|
|
||||||
|
|
||||||
class TestImage(PillowTestCase):
|
class TestImage(PillowTestCase):
|
||||||
|
@ -150,9 +149,7 @@ class TestImage(PillowTestCase):
|
||||||
im.paste(0, (0, 0, 100, 100))
|
im.paste(0, (0, 0, 100, 100))
|
||||||
self.assertFalse(im.readonly)
|
self.assertFalse(im.readonly)
|
||||||
|
|
||||||
@unittest.skipIf(
|
@unittest.skipIf(is_win32(), "Test requires opening tempfile twice")
|
||||||
sys.platform.startswith("win32"), "Test requires opening tempfile twice"
|
|
||||||
)
|
|
||||||
def test_readonly_save(self):
|
def test_readonly_save(self):
|
||||||
temp_file = self.tempfile("temp.bmp")
|
temp_file = self.tempfile("temp.bmp")
|
||||||
shutil.copy("Tests/images/rgb32bf-rgba.bmp", temp_file)
|
shutil.copy("Tests/images/rgb32bf-rgba.bmp", temp_file)
|
||||||
|
|
|
@ -3,7 +3,7 @@ import sys
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
from .helper import PillowTestCase, hopper, on_ci, unittest
|
from .helper import PillowTestCase, hopper, is_win32, on_ci, unittest
|
||||||
|
|
||||||
# CFFI imports pycparser which doesn't support PYTHONOPTIMIZE=2
|
# CFFI imports pycparser which doesn't support PYTHONOPTIMIZE=2
|
||||||
# https://github.com/eliben/pycparser/pull/198#issuecomment-317001670
|
# https://github.com/eliben/pycparser/pull/198#issuecomment-317001670
|
||||||
|
@ -333,7 +333,7 @@ class TestCffi(AccessTest):
|
||||||
|
|
||||||
class TestEmbeddable(unittest.TestCase):
|
class TestEmbeddable(unittest.TestCase):
|
||||||
@unittest.skipIf(
|
@unittest.skipIf(
|
||||||
not sys.platform.startswith("win32") or on_ci(),
|
not is_win32() or on_ci(),
|
||||||
"Failing on AppVeyor / GitHub Actions when run from subprocess, not from shell",
|
"Failing on AppVeyor / GitHub Actions when run from subprocess, not from shell",
|
||||||
)
|
)
|
||||||
def test_embeddable(self):
|
def test_embeddable(self):
|
||||||
|
|
|
@ -9,7 +9,7 @@ from io import BytesIO
|
||||||
|
|
||||||
from PIL import Image, ImageDraw, ImageFont, features
|
from PIL import Image, ImageDraw, ImageFont, features
|
||||||
|
|
||||||
from .helper import PillowTestCase, unittest
|
from .helper import PillowTestCase, is_pypy, is_win32, unittest
|
||||||
|
|
||||||
FONT_PATH = "Tests/fonts/FreeMono.ttf"
|
FONT_PATH = "Tests/fonts/FreeMono.ttf"
|
||||||
FONT_SIZE = 20
|
FONT_SIZE = 20
|
||||||
|
@ -464,10 +464,7 @@ class TestImageFont(PillowTestCase):
|
||||||
with self.assertRaises(UnicodeEncodeError):
|
with self.assertRaises(UnicodeEncodeError):
|
||||||
font.getsize(u"’")
|
font.getsize(u"’")
|
||||||
|
|
||||||
@unittest.skipIf(
|
@unittest.skipIf(sys.version.startswith("2") or is_pypy(), "requires CPython 3.3+")
|
||||||
sys.version.startswith("2") or hasattr(sys, "pypy_translation_info"),
|
|
||||||
"requires CPython 3.3+",
|
|
||||||
)
|
|
||||||
def test_unicode_extended(self):
|
def test_unicode_extended(self):
|
||||||
# issue #3777
|
# issue #3777
|
||||||
text = u"A\u278A\U0001F12B"
|
text = u"A\u278A\U0001F12B"
|
||||||
|
@ -504,7 +501,7 @@ class TestImageFont(PillowTestCase):
|
||||||
name = font.getname()
|
name = font.getname()
|
||||||
self.assertEqual(("FreeMono", "Regular"), name)
|
self.assertEqual(("FreeMono", "Regular"), name)
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform.startswith("win32"), "requires Unix or macOS")
|
@unittest.skipIf(is_win32(), "requires Unix or macOS")
|
||||||
def test_find_linux_font(self):
|
def test_find_linux_font(self):
|
||||||
# A lot of mocking here - this is more for hitting code and
|
# A lot of mocking here - this is more for hitting code and
|
||||||
# catching syntax like errors
|
# catching syntax like errors
|
||||||
|
@ -550,7 +547,7 @@ class TestImageFont(PillowTestCase):
|
||||||
font_directory + "/Duplicate.ttf", "Duplicate"
|
font_directory + "/Duplicate.ttf", "Duplicate"
|
||||||
)
|
)
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform.startswith("win32"), "requires Unix or macOS")
|
@unittest.skipIf(is_win32(), "requires Unix or macOS")
|
||||||
def test_find_macos_font(self):
|
def test_find_macos_font(self):
|
||||||
# Like the linux test, more cover hitting code rather than testing
|
# Like the linux test, more cover hitting code rather than testing
|
||||||
# correctness.
|
# correctness.
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
import sys
|
|
||||||
|
|
||||||
from PIL import Image, ImageShow
|
from PIL import Image, ImageShow
|
||||||
|
|
||||||
from .helper import PillowTestCase, hopper, on_ci, on_github_actions, unittest
|
from .helper import PillowTestCase, hopper, is_win32, on_ci, on_github_actions, unittest
|
||||||
|
|
||||||
|
|
||||||
class TestImageShow(PillowTestCase):
|
class TestImageShow(PillowTestCase):
|
||||||
|
@ -37,7 +35,7 @@ class TestImageShow(PillowTestCase):
|
||||||
ImageShow._viewers.pop(0)
|
ImageShow._viewers.pop(0)
|
||||||
|
|
||||||
@unittest.skipUnless(
|
@unittest.skipUnless(
|
||||||
on_ci() and not (sys.platform == "win32" and on_github_actions()),
|
on_ci() and not (is_win32() and on_github_actions()),
|
||||||
"Only run on CIs; hangs on Windows on GitHub Actions",
|
"Only run on CIs; hangs on Windows on GitHub Actions",
|
||||||
)
|
)
|
||||||
def test_show(self):
|
def test_show(self):
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
import sys
|
|
||||||
|
|
||||||
from PIL import ImageWin
|
from PIL import ImageWin
|
||||||
|
|
||||||
from .helper import PillowTestCase, hopper, unittest
|
from .helper import PillowTestCase, hopper, is_win32, unittest
|
||||||
|
|
||||||
|
|
||||||
class TestImageWin(PillowTestCase):
|
class TestImageWin(PillowTestCase):
|
||||||
|
@ -32,7 +30,7 @@ class TestImageWin(PillowTestCase):
|
||||||
self.assertEqual(wnd2, 50)
|
self.assertEqual(wnd2, 50)
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipUnless(sys.platform.startswith("win32"), "Windows only")
|
@unittest.skipUnless(is_win32(), "Windows only")
|
||||||
class TestImageWinDib(PillowTestCase):
|
class TestImageWinDib(PillowTestCase):
|
||||||
def test_dib_image(self):
|
def test_dib_image(self):
|
||||||
# Arrange
|
# Arrange
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
import ctypes
|
import ctypes
|
||||||
import sys
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
from PIL import Image, ImageWin
|
from PIL import Image, ImageWin
|
||||||
|
|
||||||
from .helper import PillowTestCase, hopper
|
from .helper import PillowTestCase, hopper, is_win32
|
||||||
|
|
||||||
# see https://github.com/python-pillow/Pillow/pull/1431#issuecomment-144692652
|
# see https://github.com/python-pillow/Pillow/pull/1431#issuecomment-144692652
|
||||||
|
|
||||||
if sys.platform.startswith("win32"):
|
if is_win32():
|
||||||
import ctypes.wintypes
|
import ctypes.wintypes
|
||||||
|
|
||||||
class BITMAPFILEHEADER(ctypes.Structure):
|
class BITMAPFILEHEADER(ctypes.Structure):
|
||||||
|
|
|
@ -5,14 +5,12 @@ import subprocess
|
||||||
import sys
|
import sys
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from .helper import on_github_actions, unittest
|
from .helper import is_pypy, is_win32, on_github_actions, unittest
|
||||||
|
|
||||||
|
|
||||||
class TestMain(TestCase):
|
class TestMain(TestCase):
|
||||||
@unittest.skipIf(
|
@unittest.skipIf(
|
||||||
sys.platform == "win32"
|
is_win32() and is_pypy() and on_github_actions(),
|
||||||
and hasattr(sys, "pypy_translation_info")
|
|
||||||
and on_github_actions(),
|
|
||||||
"Failing on Windows on GitHub Actions running PyPy",
|
"Failing on Windows on GitHub Actions running PyPy",
|
||||||
)
|
)
|
||||||
def test_main(self):
|
def test_main(self):
|
||||||
|
|
|
@ -2,7 +2,7 @@ import sys
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
from .helper import PillowTestCase, unittest
|
from .helper import PillowTestCase, is_win32, unittest
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import numpy
|
import numpy
|
||||||
|
@ -10,7 +10,7 @@ except ImportError:
|
||||||
numpy = None
|
numpy = None
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform.startswith("win32"), "Win32 does not call map_buffer")
|
@unittest.skipIf(is_win32(), "Win32 does not call map_buffer")
|
||||||
class TestMap(PillowTestCase):
|
class TestMap(PillowTestCase):
|
||||||
def test_overflow(self):
|
def test_overflow(self):
|
||||||
# There is the potential to overflow comparisons in map.c
|
# There is the potential to overflow comparisons in map.c
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
|
||||||
|
|
||||||
from PIL import GifImagePlugin, Image, JpegImagePlugin
|
from PIL import GifImagePlugin, Image, JpegImagePlugin
|
||||||
|
|
||||||
|
@ -7,6 +6,7 @@ from .helper import (
|
||||||
PillowTestCase,
|
PillowTestCase,
|
||||||
cjpeg_available,
|
cjpeg_available,
|
||||||
djpeg_available,
|
djpeg_available,
|
||||||
|
is_win32,
|
||||||
netpbm_available,
|
netpbm_available,
|
||||||
unittest,
|
unittest,
|
||||||
)
|
)
|
||||||
|
@ -17,7 +17,7 @@ TEST_GIF = "Tests/images/hopper.gif"
|
||||||
test_filenames = ("temp_';", 'temp_";', "temp_'\"|", "temp_'\"||", "temp_'\"&&")
|
test_filenames = ("temp_';", 'temp_";', "temp_'\"|", "temp_'\"||", "temp_'\"&&")
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform.startswith("win32"), "requires Unix or macOS")
|
@unittest.skipIf(is_win32(), "requires Unix or macOS")
|
||||||
class TestShellInjection(PillowTestCase):
|
class TestShellInjection(PillowTestCase):
|
||||||
def assert_save_filename_check(self, src_img, save_func):
|
def assert_save_filename_check(self, src_img, save_func):
|
||||||
for filename in test_filenames:
|
for filename in test_filenames:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user