Skip to content

Commit

Permalink
UnitTest PyDecoder
Browse files Browse the repository at this point in the history
  • Loading branch information
wiredfool committed Mar 11, 2017
1 parent 40a94d4 commit d70de6e
Showing 1 changed file with 64 additions and 0 deletions.
64 changes: 64 additions & 0 deletions Tests/test_imagefile.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,5 +135,69 @@ def test_broken_datastream_without_errors(self):
finally:
ImageFile.LOAD_TRUNCATED_IMAGES = False


class MockPyDecoder(ImageFile.PyDecoder):
def decode(self, buffer):
#eof
return (-1, 0)

xoff, yoff, xsize, ysize = 10, 20, 100, 100
class MockImageFile(ImageFile.ImageFile):
def _open(self):
self.rawmode = 'RGBA'
self.mode = 'RGBA'
self.size = (200, 200)
self.tile = [("MOCK", (xoff, yoff, xoff+xsize, yoff+ysize), 32, None)]

class TestPyDecoder(PillowTestCase):

def get_decoder(self):
decoder = MockPyDecoder(None)

def closure(mode, *args):
decoder.__init__(mode, *args)
return decoder

Image.register_decoder('MOCK', closure)
return decoder

def test_setimage(self):
buf = BytesIO(b'\x00'*255)

im = MockImageFile(buf)
d = self.get_decoder()

im.load()

self.assertEqual(d.state.xoff, xoff)
self.assertEqual(d.state.yoff, yoff)
self.assertEqual(d.state.xsize, xsize)
self.assertEqual(d.state.ysize, ysize)


def test_negsize(self):
buf = BytesIO(b'\x00'*255)

im = MockImageFile(buf)
im.tile = [("MOCK", (xoff, yoff, -10, yoff+ysize), 32, None)]
d = self.get_decoder()

self.assertRaises(ValueError, im.load)

im.tile = [("MOCK", (xoff, yoff, xoff+xsize, -10), 32, None)]
self.assertRaises(ValueError, im.load)

def test_oversize(self):
buf = BytesIO(b'\x00'*255)

im = MockImageFile(buf)
im.tile = [("MOCK", (xoff, yoff, xoff+xsize + 100, yoff+ysize), 32, None)]
d = self.get_decoder()

self.assertRaises(ValueError, im.load)

im.tile = [("MOCK", (xoff, yoff, xoff+xsize, yoff+ysize + 100), 32, None)]
self.assertRaises(ValueError, im.load)

if __name__ == '__main__':
unittest.main()

0 comments on commit d70de6e

Please sign in to comment.