cpython: 94813eab5a58 (original) (raw)
Mercurial > cpython
changeset 88735:94813eab5a58
Issue #19990: Added tests for the imghdr module. Based on patch by Claudiu Popa. [#19990]
Serhiy Storchaka storchaka@gmail.com | |
---|---|
date | Sun, 26 Jan 2014 23:52:57 +0200 |
parents | 58b0f3e1ddf8(current diff)fde9e9832749(diff) |
children | 6f217456b9ba |
files | Lib/test/test_sundry.py Misc/NEWS |
diffstat | 14 files changed, 147 insertions(+), 4 deletions(-)[+] [-] Lib/test/imghdrdata/python.bmp 0 Lib/test/imghdrdata/python.gif 0 Lib/test/imghdrdata/python.jpg 0 Lib/test/imghdrdata/python.pbm 3 Lib/test/imghdrdata/python.pgm 0 Lib/test/imghdrdata/python.png 0 Lib/test/imghdrdata/python.ppm 0 Lib/test/imghdrdata/python.ras 0 Lib/test/imghdrdata/python.sgi 0 Lib/test/imghdrdata/python.tiff 0 Lib/test/imghdrdata/python.xbm 6 Lib/test/test_imghdr.py 131 Lib/test/test_sundry.py 2 Misc/NEWS 9 |
line wrap: on
line diff
new file mode 100644
index 0000000000000000000000000000000000000000..675f95191a45fdb3ae845996d6871b86286f848a
GIT binary patch
literal 1162
zc$|HbYe<t(7{_O;Nc$2K!O30M5401Y)+l-;@sNJ5TYPIXdjlErJ+XVC9O<bh-smi
z7G6kmVV0F$G}Br7AxX(hD>72(!tz6fyd=ClJ?HhT-a+nRzYk6Iln#UzoRr-RtmVX
zAce>}ikrY+AS4aicP?;zxP?-alv832u^wE=jC5!caw*Od6t;XL2|QsbyI!4dyL1F zFfh3)lyCU2*16Uo8<7Y^iD(ct5{Yc0{beg|{D(n0u{av?ie-Yv0enXR){iVsi|Pgn zupNzvT%9+~uuS}WfT(GJov#6igOtw;mch0h@kQK
RRR1K(K<YJ&Ak&9DwN0Oy!O
z#{|F@ItTU@^j_N#KV&VvPXH1_dI!G%I2^K(uh#JA_KvMKdq+UOyDeA2opvK6UxG
z=E<{Ka%4<nb`<gJGwlF;hYIJA;v6A3N8s4f90bu7+ezFXeyd0|bt7K^&ABqrhx#7K
znp?O_9I5EohYlmpv4iK>F!;+xX6P<WU^<K9q3whmst<{+B*LSgezs+NW0};?{Stm
zMDiRoPtBup9dws!;AWu;t{;zsOX=bs^)8=e>=_U({r?r}q1nTVw=6>(+tIOkjLS2j
z|AG-7l<kJwB?(|HP(o{7EHq|ELv4lxEks3CM|*PYLb8y@3V-z${w03>gg9Qd7V
zsA>=Noj1V!vs&mnr3Ob94Ovm#c?Z;?($4@W&>@==W!i4T%Gh}urdPEA(hj20YO
zH08k{)p7cLGH767CrbWnw3PpT@NZd2
RIOvO(vhNhk}ZF6Ulsuh2~y57y=WF&
z>oOyq&LiHg-Y?1G4lj$Vye#OO@p5&(&tl--yCaL1+}OWaU^|$;*=1{>($w|%oNk`W
XqBtJfF^g-*Vwl=ANew+K<nR9ji1N86
new file mode 100644
index 0000000000000000000000000000000000000000..96fd9fef76b10899807d3724c97335f35a03743a
GIT binary patch
literal 610
zc${<hbhEHb6krfw_?E)(dbh;ueTttCO8q)6S-N+|1&bL4{7~Bul)bK%Kr<h|1YTh zzpVTBlK%h8djBu$zdma6;<)Yq%Lf0i82r6z_WzpsugjMIuUq
T4kWF9UbXvw!|KgB
zS|L%|K9>4rkKs$oc<mm%n$t{@?Tdf8Y1-J-9V=HjRj+ccS?yfA*12|_OYK^h
zy0xzL>)jeQxHW8aYux1CxXGh=i$}{=kJfFTt=qlYcY3w$^6uE})49i|YmaaDKA1r
ze!U0$dk+Tm9}b#$?EnA&4AcgSKUo+V7ZJ&|8slhCZ?zQCZ=a5XS1g#=H@2a8ZhX9
z)PSOjfqg|oYEx=rRFIFGgL!jLQ26my4}MZ%_C{7ds2nX{qtyJ}#C<mKIZck`rS>
z1Kb^KOqZvsD@&#(#fJoVZ7|($n5rxJU={SlEZT2gVIO1Q;&PQ&+U~J=VniBcQ;Pe
z)z?v1la=D;U3={r*1+{r@=p|Ko
N&l3MX2co1;
z5A(i0&j0%|>;LN<ql9*|v<YVE6HPNFnPpBk%ba4KG0i+{nq|&3i=63}xihWuXImA_
zu?C^JHih$Six=1yFS0FJXjihxu5__|*;0p!Weydh3vl&WW-qp7ASF37>k)Z}EB
u^k7=d4^2P3cUBn3;hN{veVc*TTYN
cJ9T2YqZ5<SOO<IWKWsR_(5t}C%EVv|0Io9gE&u=k
new file mode 100644
index 0000000000000000000000000000000000000000..21222c09f5a71d9d86a0323e49ebc5da6639b22f
GIT binary patch
literal 543
zc%1ux<NpH&0WUXCHwH#VMg|aM_<x(hnSq%J1VAJ+5U{YZfB**@8!HN
z4?hnVHy<}AC$AtcAHRTrpa2(-kg$+|Fpw<(GK3MNlbMABs8N8MlUsmf@c#gVAP0j0
zg8(z55(ASUBeNjm|04yV5cGjb{1BkxQYM+BMT!7(8VxuMkb)kS=l*+gawrtL^utN zfT~2%H8U
<0fm(XfvQ=VSrMX)OoGfTtZa%5LWZJZiH#5c-(uilW&}EeS&+e=L1fvb
zEaEd&xD1pOqKa8nEXUFb>FV2H<_*u8=op{3RxC}#2pA=S4vz?wZ+4R}$^6SrX
zmy0(p4VS5xc$tx+w%HjrQlCenfI;dRc5dg0xvRhTJvR#(ybaiv@y0yEpwOUbgM7O^DLXw={db;d)fDt@)cR0$^OH?OUFbgEZ%GRs&b)Xw%Qj}a
z^XBVSsSz71}b*!PuX$#<KYYz%>x(y?Y3chU=zZ=W$(@EkZ0<@^X^Yc5NS#h?%feI
jL&Kc4v#2uRiBV_%;ikUjK|QY&diPaG%CoPn|9=wzUksC{
new file mode 100644 --- /dev/null +++ b/Lib/test/imghdrdata/python.pbm @@ -0,0 +1,3 @@ +P4 +16 16 +�������[�a_�X������?�� \ No newline at end of file
new file mode 100644
index 0000000000000000000000000000000000000000..8349f2a53a9be1d895a561cc0fd31f91d7d42b33
GIT binary patch
literal 269
zc$^C<uWu=Ff
bGBxF50D|V)s?z+-L<SgW_+M6#laAomlo#b@BtiMDjWs1XDe)<Z
z5Po}0eN{<*c4{J!fA8ichSr8^u;#?XNQPV2FEKPiH77(eoVtGb0z+LzabBVxNaulT
zS1z1os3^%#V7T+-(f!*ufZUS|B?US9_ntwyrw%aWW@j)wdko@UJbUWYOt76m?vcX>
m_Uzm_3scO?735L_ujg3_2RkzC*l0F7tWtMb#xj7HUIz!yJVLD
new file mode 100644
index 0000000000000000000000000000000000000000..1a987f79fcd248a94fcd1c45934136919cc0ffdd
GIT binary patch
literal 1020
zc%17D@N?(olHyuVBq!ia0vp^0wB!63?wyl
GbL!Lb6AYF9SoB8UsT^3j@P1pisjL
z28L1t28LG&3=CE?7#PG0=IjczVPIf98sHP+3RK|Nd%&x0mrdb3^NeW>sKBrPh)>sk
zkJfF@wQFrl7Fy;^GfSHQkqVl4?C)K#pI7aGY@>vBAo=&I8IUy1m;@x>oCBFmN{A4 z&=sQo(P7uWHywctx5iCo=@WsBPY?6{zRdc2TH3jGos5z9*T?yv4@x<dF19UR1e85A zO9;&|FOJ*3K5Fv%kk;#cim!J|9Gi
<00REr^F!u-ykP(9vgO}PoE4#9+-|ri%0Vo zm%6nM70Z3P_Wb|<-?e_dW916Fl0{bev&}N6c(!hLYuM;iy~?h1v30>*^Q>tWIn(
n
z4|;d(cBuvGT4r0kz%qB{|3{$#{fB)z_jt5y1qRgrd1(VIr?_b8FaOT=eWEvNt2 z%>Q53^=jYg-nhxRX0?6U(*M^j{-0O=|19zU<M99YegEHf
hQvP|9O@FuXFxCPyBz|
zTupx|7T>ZfZCrY{eK+s|GwY<%liLsyZpay_5ZTL{|l=BZ&>}m0%WL7@?>BF
XsC
z$S;^-{oC)8xS2H^Me7zUT)ceMDi4Xh-<!C$Iloo;?%!d%Eyl+^@7rsResC9f4?5R z
B46M?<x}xMH|yqD}kU=fr(RCNJs9wgA6O9&zbKxs;y<6TrK2(7zq>tZD36Dc6W(l
z-n|qQLtiz9777Cnqp4xh>o9fg?>U%#2N=qo=E{v$s1vy_Hi%MNM`2l4HdMO_ecs
zZ1&XrVaojYvB^ncUqO{yL|RyxpG|;5xJyWnqW*pbt7Qg!C&Z^Xib}vqWRI>!s)2
zJ6&x0MBVi(rX;UewQl9q@BopJM(3gSFZ_A4LE%!==y#Ss6K5>#{Sih9zC-)Vyv
zJ3Bw;)r|Wx0jwL7#O@U%X<Ct?dunB^54EPGD|ctHQvtfNq6m<+??FE7H=eFWaiGP
z{;lRS$7E;s;X_A7A60GV3|{8feWnw!Ivg+!eon_Ux0nZKZ|@|?*9B@aytl
A4A
zccp=oa#^L&VC9E0M!!Lh?11Vl2ohYqEsNoU}RuuqHAENYh)H;WME}#X=QA#ZD3?&
nVDNhudpU}R-29Zxv`S131_lrf2j90X10_yRS3j3^P6<r_zOa#I
new file mode 100644
index 0000000000000000000000000000000000000000..7d9cdb3215877b4604de4c177fc81ebb645b8290
GIT binary patch
literal 781
zc$^C<1#c;Ff
bGBxF5KmvZf2fW&Lc{Fcvsaxw%vD~Io_WSJ2He1>YtR4x|6S|X zJ65i+D_LZfKie#G3Lf>It=ruiHab<WvMXI|T
<=?YZ_Mde*H&$y7qgtZgZ|(Yg@9=
zGH04u+60T7=|IJp>Vqa8^Y1{_6+m)RCCu{taQ4CT4|551QyIw!9+5y=C
z{fB)z_jt5ygY2%KE&A&WR%bjQh(3;|1HPASIvNI-|l^2XK#Qxdk)0erWunUir<b z{eR2p|26afmvw<$ulAkpjhmcnR@;{?HOrhVZRm>Z+DC_7|K4=
f87G82Trjpom-J zCWy1m(kBABpC0D@eVO(DS>pf4;s5XZ{=e-6R;>5
yvpCx(m(ywd)|xmND}F`Z)jp
z>zx13;fkIAU$=xP{(na1^Fb+dWX*w#AFA3g&?P1yY>!|8d0s
+hLRVhrHbZC|k zTG+xBzc_CD
l!k4Lt3xDZbt<0Yt}Uqbmlfhnnp2|GL%x%Le1r-|}lOF!w11r8^
o_5TV`u^KQfLHvjde7s=)>$2tFOZp(iXJmdImpm{Xi!(?90AMB#tN;K2
new file mode 100644
index 0000000000000000000000000000000000000000..130e96f817ed9dd45f411f2f93e0749a4b33ba49
GIT binary patch
literal 1056
zc$|fkYe-XJ7{^aHsQeO(z;cz6MMPzZ?xJqG&CTWJj36rNL-nE5EDbd>)2^l&Vp=Js
zi8hTVRlVW?o7^Bqf<?MMer;SbnI8L&D+T^UiZ@gxUi?4(B}YZ_oRG&)F77$_0+& z=7<Dx+;qBd)3^z$!B*Td9DnK|%qQ+5Hm@Er2kZE#{ncg4q;kK>M6qBkY62_ckp}3p zuR)u61rceLP$ZvUPJO@s
RnrU!ui(^f@kQv+RgWzYJwcIrDYYpEr(^XDfM9V=a1I
zYtDDu4YDon#@|4I<?%T*mV}F)C%S@%(T}3ANSFQ(hejRx584`IGQ<^Wp+T5Q3Lhf
zi;^q(zDw+cprcKcdvFfyI)_@4(sVAm~mt%S
j7%o6U<?F9y}KVSjg>V}10MKHTh
zIMXa<zUh;>O3KWKCzUZbk=7P|du}9G54=_aJza#k1u$DxMR0rID8$^2d=sm$>+8O
ztTkGx$MzdXuyflply&7H#(qC#a!UU5)(b=P2H1U5eeMHhSjx@o^t7d
$s9?Er>0
z0Ur{8cY4uXO>QtRJPTmI-Dk+XA!Xhw54GI+HIxQ;Qi0FDu7O;&<N{stwx6vF*uK(Y
zvh2JjgT9gUDvS4gyzWkNH<N4gaYH1Raj5N*ER5FAB!Y-2BHZi$bzNUNHBQgdFsG+&
zh11g<<n%Q9GqO7>Wo&jJF_oA_%q3)Ae{60n&5fYBYk=;hY^F|}v65Ic!MDr{1ESkc
z?knalV}A#BUNO{{i}Pj>Q^xVF-@BuMtan|@G@l7?UMJ8bk5IdsgOmAdz
G;c`Ow7
QsTbeBkx&tf#lCO-0gtGr{r^
new file mode 100644
index 0000000000000000000000000000000000000000..ffe9081c7a5b67ed14285041fd0650f4010bc36d
GIT binary patch
literal 1967
zc%1E&Z%kWN7{=ejZ7D4pYMBwG{#oqiV%+9%6v;{QVJEi&KMVG+=sajlTH*2V8F?= z?S&R_{~J)528J@MB07<&%sDpQKCE#lDjSO<8;P5l``{MSxTHBg_s<r?XTRxferccQ zyw7{jIrrSM8OBH;Gd?;}FHZko|Dj8M?7AG_2VpP@t
X@U0Zm|>C_N2$!A@|7$Z!XM
zHngBt0E@s=pc700oFTmnNFagC0<a#u3oapN18YG$YSTd;aUjO_sC>}C%_wE7MUfW
z9()dx$gKby!5-8bKCee=&w7E%mbhXd<d>0Qw%Vdbj-zo
x#0=9q7a2F@L%hWCDZs
zxfmx3)}
QV1Y)KHgGHo;LrZRwjF%{<rg48fFd4y!o3oeZ!O2W75bnE8}MQ7<6RZ
zonKbzDZDpBexell<9dqo>qqp8n4J1yGI63u6{U{li>-HB6w%>JBso95WtBxq1ygzs
zl(KVYPyaZ{PpZOSUi9!{owvpQqQHN%W7nL{QKz0z}1?$|XDAlL=L<lM{=q5K@{k
z+hX8hG5;ZU56i@$z=N0cmxIUC<jT&AbF(MDJ$iV2yjRs5ZG|*A6%G|V}Xw{
z$h^!}Qkz?JTK_b1c1<pBZE4J#yV-$F$lgao{nd4378d8D zKCXX1*uq41A4x7}5t%qU%80f%HPqAPi^
2pB@l{&Eommuk_(?O1NJTA2l&RF&pf%>?O0Bvb55O>_SAr$+g%
zB1J07U3RfGH{lX>wS$&(itdepQ>Wld^YUcyJfJuo+Ft3YXbfF1!dfI_@7#B9>&8
z)LvETF16?CD0CquaE!M{g0H+3SfL7qP}mc1pIsIPk%Hdpxi_V&PJDKa=0h=-7In
zw^DpAiBtu>zWULMvXWH=WV5hUFoyEtL?QdP4$}tH5=%=nV;E|>>WP%aeQEJcWifr
zJY@xJDZC6k#IZF|WSkUv%;)up&LY7s<q=oc71}tz1q@PCj_JobZ&<IBzwmWeKs=G
z-z&tV2vvB4$s7;F*h<-n2n;3ucKyyPOWe9wwe*e_=ejYg;tj+T8HG5D3$SUz9%4 z;}hef!-IWq3b8P)tzsqcf?t_<*vpeF#7xvhexKLvbl3~+cATLu+R@q8+E}}(HV{zc zH(!qp_jm8?iNzqJw6(8)V1GO=@Q^o0J^tFRsE1M85LF!fBtGzVcT5om9ujX?13vB% zONz8WCzn^Q1rG6%p?$qK14}a1fWHbWEiO=NwzY@1HosV-iX&f+4)1@bTM?m=D*
rp
Iccy^U-?u$(jQ{`u
new file mode 100644
index 0000000000000000000000000000000000000000..39d0bfcec02533ade8934a8796aebb8990c9d389
GIT binary patch
literal 1326
zc$|HdeJs^c7{9uUM6MbHl^I&)nrAPwLGGx?Ef@vs$+NQT=g4LPHA?l}IyDW2lC^
z$Zb+8tw>&qKT=r|X=&Jc+0E9=+HcwJo}P1@d;ON+<kxNIp;i|^E}TvzuyfDa~4>c z3l_Af((cyqGY@7|r|v*-UJC>sYXZL
S2(YP$_iXwj51qD%{O&PCy=H*(FdcYv7;J
z06wX;;F)+4aM_9N@y}kcn?DIZ$VIw4*WB<;G1?Cypk%7yc}h>Am_5jdFql!b*jSl zdPQ!FR+drUBu%c=d1}t<ypyXa%Xk&ap3laX_dkp-?SY8m4xlyXlA0SqmR<+a!__9% z$ivibFuV)revSB_#IbcuSs$p+c7p2kT~o~%-&C_vZu^Sb(O&@*5dh<IFpPN4;Mg(p zTo=sMe3Mu6B~#5F2^Ab;qrW^?7Q=WDz-upn;q4?JS$NTX2rXy>#qsM9aP%rN7up?m zD&xsjuzEwuxlQ#c4;kLbIT-b(EWFr6_>ho-HqKbH=fQFvInM8sDUF8DNgRCG4=}w4 z;C&>(TZ~It7i1m5@YI1Ldn<Bpj2df}xJB&!Ih}eN^vM7p
K$t2sfmR_3H<0;-AnQc
z%+#jJ(i=D*tQp4<bL;_R<B*Nwv92bTsJBL(jsET^E7S&*AIgKzej1SJ^iSNI^}Wu z
mPPl`VM=l{#tPsdzaRuM5slm<tXud++d9BgK>8N3~i<{8RLQ4hFbf#ciAuz#Zh()
z*;j<!Lca%gUV$hHi)Von{>gtE3Q4uO9u@vT{+5P+}VLuW8GEa99;G#IsWhaVdt@i
z<r&28Uy1TYtz+w^W{WwP(KMEkba=K1ZSn^(jt?_7Ph`n#a%|STc^jcfumt;!SeLEP
zoX(L@VxEs3v&p_In4OPW$^6NJgy+8%Z4u2=DDW3rP+N@q2cT_<_7wWZ^75H0f9@x+
z9@UbQ&!5cRMS8)rK{f4bs;lX|MnkXWt5f_^I(D#$q3dx{>YtXCk&v3=l98y<2z~?E
CRNDst
new file mode 100644 --- /dev/null +++ b/Lib/test/imghdrdata/python.xbm @@ -0,0 +1,6 @@ +#define python_width 16 +#define python_height 16 +static char python_bits[] = {
- 0xDF, 0xFE, 0x8F, 0xFD, 0x5F, 0xFB, 0xAB, 0xFE, 0xB5, 0x8D, 0xDA, 0x8F,
- 0xA5, 0x86, 0xFA, 0x83, 0x1A, 0x80, 0x0D, 0x80, 0x0D, 0x80, 0x0F, 0xE0,
- 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xFC, 0xFF, 0xFF, };
new file mode 100644 --- /dev/null +++ b/Lib/test/test_imghdr.py @@ -0,0 +1,131 @@ +import imghdr +import io +import os +import unittest +import warnings +from test.support import findfile, TESTFN, unlink + +TEST_FILES = (
- ('python.png', 'png'),
- ('python.gif', 'gif'),
- ('python.bmp', 'bmp'),
- ('python.ppm', 'ppm'),
- ('python.pgm', 'pgm'),
- ('python.pbm', 'pbm'),
- ('python.jpg', 'jpeg'),
- ('python.ras', 'rast'),
- ('python.sgi', 'rgb'),
- ('python.tiff', 'tiff'),
- ('python.xbm', 'xbm')
+) + +class UnseekableIO(io.FileIO):
+ +class TestImghdr(unittest.TestCase):
- @classmethod
- def setUpClass(cls):
cls.testfile = findfile('python.png', subdir='imghdrdata')[](#l12.36)
with open(cls.testfile, 'rb') as stream:[](#l12.37)
cls.testdata = stream.read()[](#l12.38)
- def test_data(self):
for filename, expected in TEST_FILES:[](#l12.44)
filename = findfile(filename, subdir='imghdrdata')[](#l12.45)
self.assertEqual(imghdr.what(filename), expected)[](#l12.46)
with open(filename, 'rb') as stream:[](#l12.47)
self.assertEqual(imghdr.what(stream), expected)[](#l12.48)
with open(filename, 'rb') as stream:[](#l12.49)
data = stream.read()[](#l12.50)
self.assertEqual(imghdr.what(None, data), expected)[](#l12.51)
self.assertEqual(imghdr.what(None, bytearray(data)), expected)[](#l12.52)
- def test_register_test(self):
def test_jumbo(h, file):[](#l12.55)
if h.startswith(b'eggs'):[](#l12.56)
return 'ham'[](#l12.57)
imghdr.tests.append(test_jumbo)[](#l12.58)
self.addCleanup(imghdr.tests.pop)[](#l12.59)
self.assertEqual(imghdr.what(None, b'eggs'), 'ham')[](#l12.60)
- def test_file_pos(self):
with open(TESTFN, 'wb') as stream:[](#l12.63)
stream.write(b'ababagalamaga')[](#l12.64)
pos = stream.tell()[](#l12.65)
stream.write(self.testdata)[](#l12.66)
with open(TESTFN, 'rb') as stream:[](#l12.67)
stream.seek(pos)[](#l12.68)
self.assertEqual(imghdr.what(stream), 'png')[](#l12.69)
self.assertEqual(stream.tell(), pos)[](#l12.70)
- def test_bad_args(self):
with self.assertRaises(TypeError):[](#l12.73)
imghdr.what()[](#l12.74)
with self.assertRaises(AttributeError):[](#l12.75)
imghdr.what(None)[](#l12.76)
with self.assertRaises(TypeError):[](#l12.77)
imghdr.what(self.testfile, 1)[](#l12.78)
with self.assertRaises(AttributeError):[](#l12.79)
imghdr.what(os.fsencode(self.testfile))[](#l12.80)
with open(self.testfile, 'rb') as f:[](#l12.81)
with self.assertRaises(AttributeError):[](#l12.82)
imghdr.what(f.fileno())[](#l12.83)
- def test_invalid_headers(self):
for header in (b'\211PN\r\n',[](#l12.86)
b'\001\331',[](#l12.87)
b'\x59\xA6',[](#l12.88)
b'cutecat',[](#l12.89)
b'000000JFI',[](#l12.90)
b'GIF80'):[](#l12.91)
self.assertIsNone(imghdr.what(None, header))[](#l12.92)
- def test_string_data(self):
with warnings.catch_warnings():[](#l12.95)
warnings.simplefilter("ignore", BytesWarning)[](#l12.96)
for filename, _ in TEST_FILES:[](#l12.97)
filename = findfile(filename, subdir='imghdrdata')[](#l12.98)
with open(filename, 'rb') as stream:[](#l12.99)
data = stream.read().decode('latin1')[](#l12.100)
with self.assertRaises(TypeError):[](#l12.101)
imghdr.what(io.StringIO(data))[](#l12.102)
with self.assertRaises(TypeError):[](#l12.103)
imghdr.what(None, data)[](#l12.104)
- def test_missing_file(self):
with self.assertRaises(FileNotFoundError):[](#l12.107)
imghdr.what('missing')[](#l12.108)
- def test_closed_file(self):
stream = open(self.testfile, 'rb')[](#l12.111)
stream.close()[](#l12.112)
with self.assertRaises(ValueError) as cm:[](#l12.113)
imghdr.what(stream)[](#l12.114)
stream = io.BytesIO(self.testdata)[](#l12.115)
stream.close()[](#l12.116)
with self.assertRaises(ValueError) as cm:[](#l12.117)
imghdr.what(stream)[](#l12.118)
- def test_unseekable(self):
with open(TESTFN, 'wb') as stream:[](#l12.121)
stream.write(self.testdata)[](#l12.122)
with UnseekableIO(TESTFN, 'rb') as stream:[](#l12.123)
with self.assertRaises(io.UnsupportedOperation):[](#l12.124)
imghdr.what(stream)[](#l12.125)
- def test_output_stream(self):
with open(TESTFN, 'wb') as stream:[](#l12.128)
stream.write(self.testdata)[](#l12.129)
stream.seek(0)[](#l12.130)
with self.assertRaises(OSError) as cm:[](#l12.131)
imghdr.what(stream)[](#l12.132)
--- a/Lib/test/test_sundry.py +++ b/Lib/test/test_sundry.py @@ -6,7 +6,7 @@ import unittest class TestUntestedModules(unittest.TestCase): def test_untested_modules_can_be_imported(self):
untested = ('bdb', 'encodings', 'formatter', 'imghdr',[](#l13.7)
untested = ('bdb', 'encodings', 'formatter',[](#l13.8) 'nturl2path', 'tabnanny')[](#l13.9) with support.check_warnings(quiet=True):[](#l13.10) for name in untested:[](#l13.11)
--- a/Misc/NEWS +++ b/Misc/NEWS @@ -152,9 +152,15 @@ IDLE Tests ----- +- Issue #19990: Added tests for the imghdr module. Based on patch by
- Issue #20358: Tests for curses.window.overlay and curses.window.overwrite no longer specify min{row,col} > max{row,col}. +- Issue #19804: The test_find_mac test in test_uuid is now skipped if the
- Issue #19886: Use better estimated memory requirements for bigmem tests. Tools/Demos @@ -551,9 +557,6 @@ IDLE Tests ----- -- Issue #19804: The test_find_mac test in test_uuid is now skipped if the
- ifconfig executable is not available. -
- Issue #20055: Fix test_shutil under Windows with symlink privileges held. Patch by Vajrasky Kok.