From 1ff695873f1dc9cf880007df2b9b0f17c63a1281 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 16 Jul 2014 23:44:35 +0300 Subject: [PATCH 1/7] Cursor image by Miss Mycroft, 'Released under the Release to Public Domain license' http://www.rw-designer.com/cursor-detail/61757 --- Tests/images/deerstalker.cur | Bin 0 -> 4286 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/deerstalker.cur diff --git a/Tests/images/deerstalker.cur b/Tests/images/deerstalker.cur new file mode 100644 index 0000000000000000000000000000000000000000..16e4bfa52e6c870feba0582df6812b668edf2ed3 GIT binary patch literal 4286 zcmeHJSxj727`{joTKj-jOVvby)>>-X#1|Wv)Im*4fxs{@Fw8K+Y|K9FGQ%<~Qn00z zrB-NC2BF3l($*IrTyPMONEm#u1vOf&vS^!-v=o$WxcC14=fD`+R46#{iJN?L)_eZ% zeE)KXVIE@qn2->LKJAY%Oc3_M5Fv0QJ25fw zhOarG#(@{w&yQFv1~8h^5Lz%<^q|vgz+}>cTAfO{BqWHyX3M)hG&H32B?r%fC#s;x z206JIkezFVtZXZ!XP6LXw5GG(570W1f^1rK1f2pBtw!!4AIe%5E*%dtExIa^;K`r2OiJ-3;%@& z&vPLytxoP}MJbe(JHVEo4QABeduOdy4KkU8`ar2tKw@G%gonQd3F3H&h&T+zCB^ey zU0qcepF7se!`1n@n`lsZtPJvOS&R0yDr#4yR#5Hbav5#KViDRsgt{nD6B*?ZD~yG@ z`r2P_-2B6W@f3>iTML(w(cgsir%tjJm8DSRuv7bby%vZM$o=JVDM%zFCsHT}p)dwi zDvV2v2@P4t`M9`PP+`0@InT1=Rs1G&FiqX4tn00u)E1<^r; zd1y4~(2fjsms0)pxSo}rLHCl_XlOh=P3ouj%(b@ouArvw1m@VHU2->_PK(f>-U`Zr z+@EMe^3rNGK}Mz(ELJ1U)k~Kz_F)ZQlkb;v#9Y|ce(}P%HQh*kPxLpN7yE>V0q>8s z5dC8Y6Y4|m{#ITN-6KBMF8QCtKhZb^eVmbLfjoOI zjT6Fy=uuc?pPQV#b6_Q#PcqCkToD1ur?D*&b@(!?QPOrw{$De+%pRBFo@@zSvH)tU~A&%BPQM?d@aWP;o z$e}Sp=E?Z|mgb-F`;FII^#ODcJk2m3+zA9rn%wmw-eYrbZ;y-QVrG^Fq_QM9bofnL zcf!J+gM$ZOftOxBfVD?Ne9yW%UBg$deEad}*vNL6|@!sBDBcsEK&Sq!dnKKPHk5-gVz1MJhw)I>~&*0Eim3PlN+ke&k-t$mXKLBnM z4;;}ITXx-b#e4Qrtc82W|91-y_}mEq;28jxDTO&kfCxnRBN&`xf|nrRv6f&G5#XN( crc{6k?q Date: Wed, 16 Jul 2014 23:45:18 +0300 Subject: [PATCH 2/7] Sanity test for CurImagePlugin.py --- Tests/test_file_cur.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Tests/test_file_cur.py diff --git a/Tests/test_file_cur.py b/Tests/test_file_cur.py new file mode 100644 index 000000000..5dc096968 --- /dev/null +++ b/Tests/test_file_cur.py @@ -0,0 +1,23 @@ +from helper import unittest, PillowTestCase + +from PIL import Image, CurImagePlugin + + +class TestFileCur(PillowTestCase): + + def test_sanity(self): + # Arrange + test_file = "Tests/images/deerstalker.cur" + + # Act + im = Image.open(test_file) + + # Assert + self.assertEqual(im.size, (32, 32)) + self.assertIsInstance(im, CurImagePlugin.CurImageFile) + + +if __name__ == '__main__': + unittest.main() + +# End of file From 9acbaa4aeecd7a6fed957a7e20c27cda5bd88caf Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 17 Jul 2014 00:12:54 +0300 Subject: [PATCH 3/7] Flake8 and fix typo --- PIL/CurImagePlugin.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/PIL/CurImagePlugin.py b/PIL/CurImagePlugin.py index 4cf2882e2..0178957ee 100644 --- a/PIL/CurImagePlugin.py +++ b/PIL/CurImagePlugin.py @@ -33,6 +33,7 @@ i32 = _binary.i32le def _accept(prefix): return prefix[:4] == b"\0\0\2\0" + ## # Image plugin for Windows Cursor files. @@ -48,7 +49,7 @@ class CurImageFile(BmpImagePlugin.BmpImageFile): # check magic s = self.fp.read(6) if not _accept(s): - raise SyntaxError("not an CUR file") + raise SyntaxError("not a CUR file") # pick the largest cursor in the file m = b"" @@ -58,14 +59,14 @@ class CurImageFile(BmpImagePlugin.BmpImageFile): m = s elif i8(s[0]) > i8(m[0]) and i8(s[1]) > i8(m[1]): m = s - #print "width", i8(s[0]) - #print "height", i8(s[1]) - #print "colors", i8(s[2]) - #print "reserved", i8(s[3]) - #print "hotspot x", i16(s[4:]) - #print "hotspot y", i16(s[6:]) - #print "bytes", i32(s[8:]) - #print "offset", i32(s[12:]) + # print "width", i8(s[0]) + # print "height", i8(s[1]) + # print "colors", i8(s[2]) + # print "reserved", i8(s[3]) + # print "hotspot x", i16(s[4:]) + # print "hotspot y", i16(s[6:]) + # print "bytes", i32(s[8:]) + # print "offset", i32(s[12:]) # load as bitmap self._bitmap(i32(m[12:]) + offset) @@ -73,7 +74,7 @@ class CurImageFile(BmpImagePlugin.BmpImageFile): # patch up the bitmap height self.size = self.size[0], self.size[1]//2 d, e, o, a = self.tile[0] - self.tile[0] = d, (0,0)+self.size, o, a + self.tile[0] = d, (0, 0)+self.size, o, a return From 84b13ff1ae8156e248d76a8e5637504056106666 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 17 Jul 2014 01:19:52 +0300 Subject: [PATCH 4/7] Created with ImageMagick: convert lena.ppm lena.dcx --- Tests/images/lena.dcx | Bin 0 -> 62138 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/lena.dcx diff --git a/Tests/images/lena.dcx b/Tests/images/lena.dcx new file mode 100644 index 0000000000000000000000000000000000000000..d05370be8e42bc69430ce6ced5f4757c700215b1 GIT binary patch literal 62138 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 Date: Thu, 17 Jul 2014 01:20:19 +0300 Subject: [PATCH 5/7] Tests for DcxImagePlugin.dcx --- Tests/test_file_dcx.py | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Tests/test_file_dcx.py diff --git a/Tests/test_file_dcx.py b/Tests/test_file_dcx.py new file mode 100644 index 000000000..9a6183651 --- /dev/null +++ b/Tests/test_file_dcx.py @@ -0,0 +1,45 @@ +from helper import unittest, PillowTestCase, lena + +from PIL import Image, DcxImagePlugin + +# Created with ImageMagick: convert lena.ppm lena.dcx +TEST_FILE = "Tests/images/lena.dcx" + + +class TestFileDcx(PillowTestCase): + + def test_sanity(self): + # Arrange + + # Act + im = Image.open(TEST_FILE) + + # Assert + self.assertEqual(im.size, (128, 128)) + self.assertIsInstance(im, DcxImagePlugin.DcxImageFile) + orig = lena() + self.assert_image_equal(im, orig) + + def test_tell(self): + # Arrange + im = Image.open(TEST_FILE) + + # Act + frame = im.tell() + + # Assert + self.assertEqual(frame, 0) + + def test_seek_too_far(self): + # Arrange + im = Image.open(TEST_FILE) + frame = 999 # too big on purpose + + # Act / Assert + self.assertRaises(EOFError, lambda: im.seek(frame)) + + +if __name__ == '__main__': + unittest.main() + +# End of file From 3c8f858aadbad93dc02aae611fd96e0ce8ecf02f Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 17 Jul 2014 01:21:56 +0300 Subject: [PATCH 6/7] flake8 --- PIL/DcxImagePlugin.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/PIL/DcxImagePlugin.py b/PIL/DcxImagePlugin.py index 631875e68..0940b3935 100644 --- a/PIL/DcxImagePlugin.py +++ b/PIL/DcxImagePlugin.py @@ -27,13 +27,15 @@ from PIL import Image, _binary from PIL.PcxImagePlugin import PcxImageFile -MAGIC = 0x3ADE68B1 # QUIZ: what's this value, then? +MAGIC = 0x3ADE68B1 # QUIZ: what's this value, then? i32 = _binary.i32le + def _accept(prefix): return i32(prefix) == MAGIC + ## # Image plugin for the Intel DCX format. From 1e24dcd3170193ff3485f6053a217cb000f27af3 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 17 Jul 2014 10:42:43 +0300 Subject: [PATCH 7/7] Check some pixel colors to ensure image is loaded properly --- Tests/test_file_cur.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tests/test_file_cur.py b/Tests/test_file_cur.py index 5dc096968..54bfe84fe 100644 --- a/Tests/test_file_cur.py +++ b/Tests/test_file_cur.py @@ -15,6 +15,10 @@ class TestFileCur(PillowTestCase): # Assert self.assertEqual(im.size, (32, 32)) self.assertIsInstance(im, CurImagePlugin.CurImageFile) + # Check some pixel colors to ensure image is loaded properly + self.assertEqual(im.getpixel((10, 1)), (0, 0, 0)) + self.assertEqual(im.getpixel((11, 1)), (253, 254, 254)) + self.assertEqual(im.getpixel((16, 16)), (84, 87, 86)) if __name__ == '__main__':