Merge pull request #64 from kmike/master

Testing improvements and better Python 3.x support
This commit is contained in:
Alex Clark ☺ 2013-03-05 12:11:07 -08:00
commit 001a1521cb
13 changed files with 49 additions and 41 deletions

View File

@ -541,7 +541,11 @@ class Image:
if bytes is str:
# Declare tostring as alias to tobytes
def tostring(self, *args, **kw):
warnings.warn('tostring() is deprecated. Please call tobytes() instead.', DeprecationWarning)
warnings.warn(
'tostring() is deprecated. Please call tobytes() instead.',
DeprecationWarning,
stacklevel=2,
)
return self.tobytes(*args, **kw)
##
@ -1813,7 +1817,11 @@ def frombytes(mode, size, data, decoder_name="raw", *args):
if bytes is str:
# Declare fromstring as an alias for frombytes
def fromstring(*args, **kw):
warnings.warn('fromstring() is deprecated. Please call frombytes() instead.', DeprecationWarning)
warnings.warn(
'fromstring() is deprecated. Please call frombytes() instead.',
DeprecationWarning,
stacklevel=2
)
return frombytes(*args, **kw)
##

View File

@ -205,10 +205,10 @@ class ImageFile(Image.Image):
break
else:
raise IndexError(ie)
if not s: # truncated jpeg
self.tile = []
if LOAD_TRUNCATED_IMAGES:
break
else:
@ -226,7 +226,7 @@ class ImageFile(Image.Image):
self.fp = None # might be shared
if (t == 0 or not LOAD_TRUNCATED_IMAGES) and not self.map and e < 0:
if (not LOAD_TRUNCATED_IMAGES or t == 0) and not self.map and e < 0:
# still raised if decoder fails to return anything
raise_ioerror(e)

View File

@ -269,6 +269,11 @@ class ImageFileDirectory(collections.MutableMapping):
def __iter__(self):
return itertools.chain(self.tags.__iter__(), self.tagdata.__iter__())
def items(self):
keys = list(self.__iter__())
values = [self[key] for key in keys]
return zip(keys, values)
# load primitives
load_dispatch = {}

View File

@ -91,5 +91,6 @@ if skipped:
print(skipped)
if failure:
print("***", tests(failure), "of", (success + failure), "failed.")
sys.exit(1)
else:
print(tests(success), "passed.")

View File

@ -12,7 +12,7 @@ assert PIL.Image.VERSION[:3] == '1.1'
# Create an image and do stuff with it.
im = PIL.Image.new("1", (100, 100))
assert (im.mode, im.size) == ('1', (100, 100))
assert len(im.tobytes() if py3 else im.tostring()) == 1300
assert len(im.tobytes()) == 1300
# Create images in all remaining major modes.
im = PIL.Image.new("L", (100, 100))

View File

@ -177,3 +177,8 @@ def test_truncated_jpeg():
assert_no_exception(lambda: test(4))
assert_no_exception(lambda: test(8))
assert_exception(IOError, lambda: test(10))
def test_exif():
im = Image.open("Tests/images/pil_sample_rgb.jpg")
info = im._getexif()
assert_equal(info[305], 'Adobe Photoshop CS Macintosh')

View File

@ -0,0 +1,10 @@
from tester import *
from PIL import Image
def test_sanity():
im1 = lena()
im2 = Image.frombytes(im1.mode, im1.size, im1.tobytes())
assert_image_equal(im1, im2)

View File

@ -1,16 +0,0 @@
from tester import *
from PIL import Image
def test_sanity():
im1 = lena()
im2 = None
if py3:
im2 = Image.frombytes(im1.mode, im1.size, im1.tobytes())
else:
im2 = Image.fromstring(im1.mode, im1.size, im1.tostring())
assert_image_equal(im1, im2)

View File

@ -3,5 +3,5 @@ from tester import *
from PIL import Image
def test_sanity():
data = lena().tobytes() if py3 else lena().tostring()
data = lena().tobytes()
assert_true(isinstance(data, bytes))

View File

@ -16,7 +16,7 @@ def test_pack():
if py3:
return list(im.tobytes("raw", rawmode))
else:
return [ord(c) for c in im.tostring("raw", rawmode)]
return [ord(c) for c in im.tobytes("raw", rawmode)]
assert_equal(pack("1", "1"), [128])
assert_equal(pack("1", "1;I"), [0])
@ -53,10 +53,10 @@ def test_unpack():
if py3:
data = bytes(range(1,bytes_+1))
im = Image.frombytes(mode, (1, 1), data, "raw", rawmode, 0, 1)
else:
data = ''.join(chr(i) for i in range(1,bytes_+1))
im = Image.fromstring(mode, (1, 1), data, "raw", rawmode, 0, 1)
im = Image.frombytes(mode, (1, 1), data, "raw", rawmode, 0, 1)
return im.getpixel((0, 0))
@ -67,7 +67,7 @@ def test_unpack():
if py3:
im = Image.frombytes(mode, (8, 1), bytes([value]), "raw", rawmode, 0, 1)
else:
im = Image.fromstring(mode, (8, 1), chr(value), "raw", rawmode, 0, 1)
im = Image.frombytes(mode, (8, 1), chr(value), "raw", rawmode, 0, 1)
return tuple(im.getdata())

View File

@ -79,18 +79,15 @@ def test_basic():
basic("I")
def test_tostring():
def test_tobytes():
def tostring(mode):
if py3:
return Image.new(mode, (1, 1), 1).tobytes()
else:
return Image.new(mode, (1, 1), 1).tostring()
def tobytes(mode):
return Image.new(mode, (1, 1), 1).tobytes()
assert_equal(tostring("L"), b"\x01")
assert_equal(tostring("I;16"), b"\x01\x00")
assert_equal(tostring("I;16B"), b"\x00\x01")
assert_equal(tostring("I"), b"\x01\x00\x00\x00")
assert_equal(tobytes("L"), b"\x01")
assert_equal(tobytes("I;16"), b"\x01\x00")
assert_equal(tobytes("I;16B"), b"\x00\x01")
assert_equal(tobytes("I"), b"\x01\x00\x00\x00")
def test_convert():

View File

@ -144,12 +144,9 @@ def assert_image_equal(a, b, msg=None):
failure(msg or "got mode %r, expected %r" % (a.mode, b.mode))
elif a.size != b.size:
failure(msg or "got size %r, expected %r" % (a.size, b.size))
elif py3 and a.tobytes() != b.tobytes():
elif a.tobytes() != b.tobytes():
failure(msg or "got different content")
# generate better diff?
elif not py3 and a.tostring() != b.tostring():
failure(msg or "got different content")
# same complaint?
else:
success()

View File

@ -9,3 +9,4 @@ envlist = py26, py27, py32, py33, pypy
[testenv]
commands =
{envpython} selftest.py
{envpython} Tests/run.py --installed