mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-26 18:06:18 +03:00
4f185329f4
This adds a new test decorator: skip_unless_feature(). The argument is the same as passed to features.check(). If the feature is not supported, the test will be skipped. This removes several kinds of boilerplate copied and pasted around tests so test feature checking is handled and displayed more consistently. Refs #4193
61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
from fractions import Fraction
|
|
|
|
from PIL import Image, TiffImagePlugin, features
|
|
from PIL.TiffImagePlugin import IFDRational
|
|
|
|
from .helper import PillowTestCase, hopper
|
|
|
|
|
|
class Test_IFDRational(PillowTestCase):
|
|
def _test_equal(self, num, denom, target):
|
|
|
|
t = IFDRational(num, denom)
|
|
|
|
self.assertEqual(target, t)
|
|
self.assertEqual(t, target)
|
|
|
|
def test_sanity(self):
|
|
|
|
self._test_equal(1, 1, 1)
|
|
self._test_equal(1, 1, Fraction(1, 1))
|
|
|
|
self._test_equal(2, 2, 1)
|
|
self._test_equal(1.0, 1, Fraction(1, 1))
|
|
|
|
self._test_equal(Fraction(1, 1), 1, Fraction(1, 1))
|
|
self._test_equal(IFDRational(1, 1), 1, 1)
|
|
|
|
self._test_equal(1, 2, Fraction(1, 2))
|
|
self._test_equal(1, 2, IFDRational(1, 2))
|
|
|
|
def test_nonetype(self):
|
|
# Fails if the _delegate function doesn't return a valid function
|
|
|
|
xres = IFDRational(72)
|
|
yres = IFDRational(72)
|
|
self.assertIsNotNone(xres._val)
|
|
self.assertIsNotNone(xres.numerator)
|
|
self.assertIsNotNone(xres.denominator)
|
|
self.assertIsNotNone(yres._val)
|
|
|
|
self.assertTrue(xres and 1)
|
|
self.assertTrue(xres and yres)
|
|
|
|
def test_ifd_rational_save(self):
|
|
methods = (True, False)
|
|
if not features.check("libtiff"):
|
|
methods = (False,)
|
|
|
|
for libtiff in methods:
|
|
TiffImagePlugin.WRITE_LIBTIFF = libtiff
|
|
|
|
im = hopper()
|
|
out = self.tempfile("temp.tiff")
|
|
res = IFDRational(301, 1)
|
|
im.save(out, dpi=(res, res), compression="raw")
|
|
|
|
with Image.open(out) as reloaded:
|
|
self.assertEqual(
|
|
float(IFDRational(301, 1)), float(reloaded.tag_v2[282])
|
|
)
|