from __future__ import print_function from helper import PillowTestCase, hopper from PIL import TiffImagePlugin, Image from PIL.TiffImagePlugin import IFDRational from fractions import Fraction 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.assertTrue(xres._val is not None) self.assertTrue(xres.numerator is not None) self.assertTrue(xres.denominator is not None) self.assertTrue(yres._val is not None) self.assertTrue(xres and 1) self.assertTrue(xres and yres) def test_ifd_rational_save(self): for libtiff in (True, False): TiffImagePlugin.WRITE_LIBTIFF = libtiff im = hopper() out = self.tempfile('temp.tiff') res = IFDRational(301, 1) im.save(out, dpi=(res, res), compression='raw') reloaded = Image.open(out) self.assertEqual(float(IFDRational(301, 1)), float(reloaded.tag_v2[282]))