From 0fa0173893d66fc1a55b4e2b027a7bf8b91c662c Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 13 Oct 2013 17:47:22 +0300 Subject: [PATCH] Issue #18919: Added tests for the sunau module. Unified and extended tests for audio modules: aifc, sunau and wave. --- Lib/test/audiodata/pluck-pcm16.aiff | Bin 0 -> 13506 bytes Lib/test/audiodata/pluck-pcm16.au | Bin 0 -> 13252 bytes Lib/test/audiodata/pluck-pcm16.wav | Bin 0 -> 13370 bytes Lib/test/audiodata/pluck-pcm24.aiff | Bin 0 -> 20120 bytes Lib/test/audiodata/pluck-pcm24.wav | Bin 0 -> 19984 bytes Lib/test/audiodata/pluck-pcm32.aiff | Bin 0 -> 26734 bytes Lib/test/audiodata/pluck-pcm32.au | Bin 0 -> 26480 bytes Lib/test/audiodata/pluck-pcm32.wav | Bin 0 -> 26598 bytes Lib/test/audiodata/pluck-pcm8.aiff | Bin 0 -> 6892 bytes Lib/test/audiodata/pluck-pcm8.au | Bin 0 -> 6638 bytes Lib/test/audiodata/pluck-pcm8.wav | Bin 0 -> 6756 bytes Lib/test/audiodata/pluck-ulaw.aifc | Bin 0 -> 6910 bytes Lib/test/audiodata/pluck-ulaw.au | Bin 0 -> 6638 bytes Lib/test/audiotests.py | 218 +++++++++++++++ Lib/test/test_aifc.py | 398 ++++++++++++++++++++-------- Lib/test/test_sunau.py | 107 ++++++++ Lib/test/test_wave.py | 131 ++++++--- Misc/NEWS | 3 + 18 files changed, 719 insertions(+), 138 deletions(-) create mode 100644 Lib/test/audiodata/pluck-pcm16.aiff create mode 100644 Lib/test/audiodata/pluck-pcm16.au create mode 100644 Lib/test/audiodata/pluck-pcm16.wav create mode 100644 Lib/test/audiodata/pluck-pcm24.aiff create mode 100644 Lib/test/audiodata/pluck-pcm24.wav create mode 100644 Lib/test/audiodata/pluck-pcm32.aiff create mode 100644 Lib/test/audiodata/pluck-pcm32.au create mode 100644 Lib/test/audiodata/pluck-pcm32.wav create mode 100644 Lib/test/audiodata/pluck-pcm8.aiff create mode 100644 Lib/test/audiodata/pluck-pcm8.au create mode 100644 Lib/test/audiodata/pluck-pcm8.wav create mode 100644 Lib/test/audiodata/pluck-ulaw.aifc create mode 100644 Lib/test/audiodata/pluck-ulaw.au create mode 100644 Lib/test/audiotests.py create mode 100644 Lib/test/test_sunau.py diff --git a/Lib/test/audiodata/pluck-pcm16.aiff b/Lib/test/audiodata/pluck-pcm16.aiff new file mode 100644 index 0000000000000000000000000000000000000000..6c8c40d14092893a4b4af626f6caf5c8c826017d GIT binary patch literal 13506 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 Sc_W7FgxYhTfS>2TI`IF$J<(PG literal 0 HcmV?d00001 diff --git a/Lib/test/audiodata/pluck-pcm16.wav b/Lib/test/audiodata/pluck-pcm16.wav new file mode 100644 index 0000000000000000000000000000000000000000..cb8627def9fd84ecd4607b122ac744bae1668ecb GIT binary patch literal 13370 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 bO21IF*@U5Hm}JYeR^U^{UbZ~1`v3YLx4`Os literal 0 HcmV?d00001 diff --git a/Lib/test/audiodata/pluck-pcm32.aiff b/Lib/test/audiodata/pluck-pcm32.aiff new file mode 100644 index 0000000000000000000000000000000000000000..46ac0373f6abbc7454a53b536daa27589857604c GIT binary patch literal 26734 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 literal 0 HcmV?d00001 diff --git a/Lib/test/audiodata/pluck-pcm32.au b/Lib/test/audiodata/pluck-pcm32.au new file mode 100644 index 0000000000000000000000000000000000000000..92ee5965e40197bd2a086841f37f0d7ca681a03b GIT binary patch literal 26480 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/Lib/test/audiodata/pluck-pcm8.aiff b/Lib/test/audiodata/pluck-pcm8.aiff new file mode 100644 index 0000000000000000000000000000000000000000..5de4f3b2d879bae0a41710cea4d0b1aad9309124 GIT binary patch literal 6892 zcmZ{pX{;pIRmbmEb!+Rr`}OkHd9&CvV>=!@j^hN| zs#o3BzjyBW|IfL%svdsq^Pfeiw)wy#4?q0iW1oe;Q63S5tR~VX`%^w3IaGj4gKKMOlT5iQ|F zPl%t&-@$w8E#_{vT)3lrruYvRnrALqBTZ(7gk z9b?rxZ=B>G=2$yzp3DAe_D&P?^E43OANj2hZKAac_4W!~uGa6{+G`ix@5QfS6NhL? zJ{B*_8FW8wX}6{>WS=UYDSb5eq0D#8=QLBlXe{W5)rZx9pEAAdncP%rQhSZb_@A7W z)<-tk+G2fug|Aqv4{mik8Sh`vKU0Geas}NVN79$SP1e;D=Eckx@_$|I=DwCbV|;^u zoWEk!^#cEliut|fboNX>Oy8-$%KZ2h_rKeBZKhXO>MP59MOi($CA!Q%Pk*2i)np6g zW?7T<_{*rn4(Xezk7Zvg{3P>S>aX;Bl&`8U>sNG(e^O0rH=B25|GaQ9^Pq8F*^8Il z7urWRX6kDzSC`oeS-X2X-3!7kvt~mrMFl5tLA30d5aT~QR=@6Kg*>}m90i6 zTslJbNsq-yk>>H-5Aq`Yxb+hMl=7R}i^f^~*VMaIq<=WY3xAml%zM~bu{>ICU0FY} zR9!m1vT-f5m2DsOR5r@~qV!S$S$Vn^PTQ6KsDIBW7fI%s$MZicUd((RyoPy|i>_sb0UdZbD@q3P6qg9p3yth z9<`4RrbD6(QiqGHm6wX2$+(8kz6=@tM{d$5XhumH$8#?gUQFGk@c1=nsa@aDmkuv> z>gP7l-bDXEl+%L3YW1aw4Xc7iqo94HAsSP?`9M?pnM&E8e7<~pZo+8N$LO5$Q>8&Z zhmSC%-;}#r{845~ot5XDbHJoa2N$E&^ILXvVt61f8Bu9_@;}R0%tA~C{k_?34)MRAunmPMoEtkJp@8G-RJMkOj9J(LfOR-+f_sc)d#oBSX;k?maSeIAl7u5R2?cH|X znMYMilv`7;Ro*f5FxBa87S}Udna*68H-a*r%^!Sq+R5Ll`Qo7e(P&M+5+9PEW@*zZ zhP9VUyT(!EId3)3uDJ{ISF-i1JN2IFAEeV6ROwEit-N6fuh?+b^m=w9-I)=^w44kM z7LHt=+05OfsD9c0i06o(O9OpcolEhun0~dqXwJsk@ZH@v>dniumnZ8RjmtI`^Za0r zReRHy%CGajUEGS7=u&1Q-J8ax0zKf~l)ZU-W-&D>vx7qW#83_2L_>N~Kan$Q(d;|5 z3uZAYbl0|CTUxzTzIgB6Pb^fN>gI)-Rdti&8;>%*WO%w_p-TgbQ2FR$Sq#7Zp%+h z49iQ|x8=2#v0`4qOZu+vRjt~zb<{n^4u_RRg8Rko{N~NQDqgj&W@n1`Rpuw@^g`)% z8V;tmLGPuvu0|_I8+m`3E$ZC5H9emT^2^p+(NaTM$t=(nwZ%m#J9Qv?EI29;pu(DP zTe*$=#*x8{+9+I_Feg4%zO9m~)N`+(cDJ@=tSzm+T5qn;cV?redQo@u!^SNso?bIv z7w3XHXt}jZwV-@^@veL|zn6Mhth5VT zrH$ss>l;hkh2BlEP#3fvbwa&eFI!FH_4v(}y;@w#UgLd4^;VhY5oNkxqGas=Ir(E;Z_-vQ$)V8DDU+$jY#l6EKqipe2#^_Og&v_g-eJCq4?Re8m|);1gY=AdzDZ@puL6@~C7?V&V1pckzUd$a%c+F+@$K4lkl zQepGy`TV42VL2RZZ#%o%piGZcYe($qHQkG5!V_#h(=%TW-|d8rYy&se_trX5m{T=v zLmOH+ z6=?2ae74=%;k&%qYi{-Ih-+L6u@jQGz)LBjtvc^qTV9Mdiq5oEsOhunlvd!X63J1g z)$K%{smxXm9W<*g(y*B~ryeWkN}KY0b8R!&VQs(L9@v6##v|!@ILh);hMRltg|#aS z{dLQoN>?W{(^^%{P)bAW*}Y!h4-}ITD3Yv3%g6#x;vs54sF|w zKwTvgt{aCbt(Y^@1Ak%l(v{r};#YFhQxlV^A~!LS5enVWVBiOY=JRv2l}e1dJ=Zby znW?Esi8eM@>btw6k?%R90M4OI05c3VJzvPA18=Q<`O^BP7i9}mQ?+t2V``KLSVy?t zZ~)`M>Fo4Ot)e2kGjfYtF$*Drs%&D9S5|B~Q@4JpfR;D&HRW*^{9*trvJy)5vq*LEr+-|pI4-IUuPa@7J zihMsnT+gR6Ea=y-U0&U75K+uls_98Sp{6)i0%nKZ?$C~qmZ{84S94M}Tsur_^ZD6y z94&ROHu_DaL%MytB?Hb?hJwhGikdgFO6aU^UtZtarEXC#m5dsz!pEEoHVQhOuI*x) zDNIdQCt|)A*%ELyWQUjeP(h_eK|r@DQI~`_-oC}n~fc1Sfu$Z zuh5z{k+L*GyrA1@+XE`nsamaEjZ+O`$9a5^PivvP>MZwzp4G*jz22r9qKu+52lp{i zN?K77;cDmdc5{b!VWnWQ5~&&0Oit%W1pRJn)MZ{uEte*$DBpl$$&-UhO%3IeQy++a zswcbKy^WEG^HgU;(ji1CYb7;`R|gAwogKZM^$dk%X(d(5mNY9Sp)-JKpAAe|OixUZ zVk>3CxDKclC5%^`Ykk>E^+azIm@+C7jrC}oGNsCkJV0xsrB;7eYg)F7FhrWJW-Dq= zXi+%okJ_Yb_&K$dV}*9cwsQKMKEWfj=5F*+H`NWho4qX?hefQi4(m`An0fA#4R5tO zXz->!U=dN(Y`UDOC`Dn#*mZ`GG2PChlBs4onPEDYnzf3CV4K0#0CmiE(BAB953pZA zjJ1`n!eLpN;Xd67*8BY?Yw|AjC{e9cF*5`++e0m-Mf%KF ziD_DSwIoX@D|kN^u5KGnE;Nx%`>JJ3rZQQa?rVE8@U%hL*=sZ#aVKTdpofM`)pDkp zip_zt7q#uU!`isZMyfDWE6oeCi1V@8XHleknwtqy!a+S^s5K*L4Bpr`2z_!?xaKL))_>iY?VJu;rRC>^So1P!8yjyF4x6^rm8CE@Ho9cX~mW_t?;ZzK3Ij8X7Tuqr+P`2&pS=YI8>o;krP< z2C|4{>#nL(1?h0bEKpA>s6kH9%%P)%X5Zs`*yr5N}F$FcEH z9frV+eHDJIGQo$u&0LJ)I3fWLSO`o+C{if*Ra;SEiNQ!7W~l)|B$F_iqV!o0PLaY6 zhVE!2hbr`Z#}S?qYS8v$SVnY|5!_&iV;rd=jWl5(N-(2Jpx8_SA_XR+Ln=uMm^xG8 z^B%$QlTiqIJF%_WV&po)rGX|mmdt^X*i_L}Ox( znOt$84@r!q8;t_n6(eO7kGxUj5}!w0BH}Ty0*!HukW^zDbE%J+gh9Kf7?>EwtWlRl z1cZY)xdOj|Um)oT2OP6vvJnzzvKTHX;*h!lV!Cj_$n}^@ZzELq1i(Fk_+ulYVQatSb&`p zCNw%Q5+R@tRADq`s=!3R#MhY^R2nluc~AHelq0Ag1>k@&Q$~Km6bTapHL1^iCZ^GK zCbUz?Km@*0fT}{gU>}^gDN)IXwe<}qPE0*k-VwfllKKD>dMHo?M4BkifJvx;bSHfu z{0qwaIO#m0gaMD4G6V|+36lXcjNCCZQ3=uyDkWk=DFP*gF(+=~@D}5qvd@gJGvOv8 zFa^Z9&qM(QCXOOtdLk0Bc#oO%P+-Qul)xmwWN;Kym;hm8;42>|-7Er?d=W(mbP}Ne zPmP(O0F^$-1QT6nN?^ugrb-o{!*Xk!Q3k{D#~o6DN`4%P8%(Huh?4*lS^)f$_`QrK zOi&&Ki-4JoUV#k(6PDPpF)#>p)Wl8WjD{k)tcoGh8_XC=-~&u>{+J1)2mb))gUqD! zC)A`*0TX&tqSBZdCCoU$AvEkzLJ3@Ff|UCzfo;Z2nD)j@m`EYoB<6i42IUjxenyiq zqJ1Vfb)Ojm6C5h!uQJIECIuz|rUV})aguT8Pu!HK6vPQrLWhb&1kA*t5oC0qxvzXO z`f;2Dsyu0c;G|z=!Uf;hp}+*H_&>}$NFsQy z^T-$dgRm{@VT0Nmpo`X_0Z=ZgufMd-*NkiJ5N3S$rJEr4&J}|btA!uF6XO>KWO>-j0px z>FNIF&;0-VGpir^-QWH)La2dI^EO-wLRU)JmB>${N7z;EE%lT1+nA>R5j{V<)NdUO zyRYu%JLAq5cH^VUc-{YM>?T^g6PKc=;{Qs1U0!1!(_hMewmho;;li`ktL2}`|6Fcd zc&E^{e$~*7E9PhOe_HzY{Kt*k>JYETe{Y{ZUfhdzzO$vZr|pk#)w<~*aQ`?S2}KNq zmwZlqOa3xGRv$2riuKB)^{e$~EB{!sa=&jLT3fjr#uv0@UeUi~eWUodg{O@k-y);r zt4^hVzMFR5*p4@&%?Gz1?2d*x?<-R=n2gNt6 zXZ4Y>V_i3%;XlT)_9gRL@sEm+nV4Uvk@%V$4nELDog3T3ExOs-q)t6KceN-VBOYOH034LC|CE~7?l&JV{z>I#;bX>i zPtDLiYv ztjEf;$}Q~`UFT1$4XtH9Q~bxubHz`XhsrHE^q(7+_a53h*u1%k!Mt*~GMx#V|AVz< zHnk%b%BPa`_{sR96pZS{T(NYu@GDlLzXhh$zG)!sDRo6F8b4Wlz53UsCrm|oEuDG) zIq-L%*mT-&ZzkKy?#l5c$Ca+}T=A`Z-SF8_`q5|*G=mQ(F=kvf*GgY0K9qadcwYTI z!%qQ79V$Ywh#x?d@B;Calc!5oDu$yZ%Dewi@Ip zFec}R?(nj`923RPU8wFfUaWq);2R}*;ylG?%If7kDrm6X`iS6z9SZB^~*4dR~5t zIl5dxjq&n3jn@qkRC``W-!AUuM=PS5 zmy6N4%Ej9&-O_!E8rGc;2A=qiG|;EiGdW%t%dgZo%+*wzy?gZfcK`P3?ZxfA-fahq zHGZzdnv>;Q_1Dy?Q{7M7v|ZTCPnL15LeKj574JV-*~l%*qFot2GE?I>(2PE#KTN8bw_vT9r^o6X7MM)eJPI4*Y7b-ZD9&Do;bX!48R zW%K^o@*O=F)&}LH2PQ@FuF};XDSV_>TM}p9ZGKnN{AO=-?~RRjZ=36vx_EX&?(>@U zPrKTCHX4l7E?9h#MOOPpb#z?){S{-m&f$SE^4n))wjV zdhInD+e-(K@AjK_ldVg=a=6JhbZ$MEUn@oBP3z61-BY#->vT&Ua8WBRoh@FDF3Gc~ z(h>fkv{&A{Xs@ch%B=-+;luTZ8o9=H>18w=xAu)rd*_wy{_fgnHR-E2bx*%wJdor0 zj`5m!x1VlTHnfg1X1G{hI$OOYFGfo!e-PM5x!uzKntRUjTen(K{o(54sa1yNA;`3__B5obkZy0Nx!p|V1Yf{g6L{q!I=YM~2_ z%7xxaC$G@U=uu_C+)-Zk?+wjfxo`Jw9q*2exSe%hd?vhi{ zNrSEB*UF2Uh2_jXIPi`%yG}1QTNj<>jvgc{@gr=lFfm_?-yOxhVh{Irk2|9zE~%R4 z5<68;Q(Lei_15go&VHNkExIk!Y_c=jYObzpiil=M$CCl}%F6lX*$ZfKPZMdK9mcFVkX%((2iF8MU z@hAyQWwmksoY@?Zp2LDO>g9T=)|J=$oo;lSM9OJ?2<)^~2*Iocy(qqMxVu$ZfI6BC)B*mrF^j0i24YDH>0F&(v3z zmKG)2>uzly9l358cy0vmp-g}o$C_TQ6!KBf*}i>iw;LqI%FHB3M`s#-@CnY)FYx=Y&7$Wd_m1|tVGO-$K#okAg$0?S#Fi2?Ds1)@&;{b z3poqsG>FEdp);c*pKG=1%`|sRoV1M3@ntQRcfHMNG_l5bbUf+$F)AoJ^Y9cCrKVLC z5$}v{AM_9T7)}Z%tC5z`ER=MPL^K@_oG}Y>YQ475MCBeVmNGe~wA5I(y=_}ea}zl} znC!VCEmNJ%$cPZ7uGQ2e-Lcn?M~C{b7#IpE(nhXTtZ7zCV$X(cpV_9Y<`))7b&zvl zTxZpW5~o|E7IKN?}TBq$jvQ0^Rx!7r*3$~IVr&Pgtxqk#EOo`! zY$KmrDwK-I8nUBUIQlpm9QBU-Xj%xU98+86dd0NNL>uG7U_3zsWk9AZREcR?Wwj=2 zs3`a}6~68mUMV(_L#L``EanPDoS$mPG72<19v%1ky>ygwXf#1HrfMbA%%!HS94A93 z9kC%EGglP`44+qI6_-e;b_ zn3C7coXoj;4-Z2zV`DUCHV<@UYCMlhxFqwo77<Iw*m`)_@1!~S5A`vdIf0WKPvNW+mcnnYthVKWc<9!?EvXv7SS5g*_vroMEj!#y>I`vL_U$Rd`b`>IYA zq@ywtXd)F@AP%2b&Jt{b34M~1?*NFVb74O0@OKJ~b-L`JGZ zQ6ZfeuI{NCV}#=}k$8d_s$c`|B#1gem}#iOXH_Qn zj1QTQQJN+s;t`9%M1&%R@<4SI6^xycm|`VhiM`iUDl zzHk*cbpto?Nyrl}5eXQS0!?v>kW^Eea;eWv!l2z#3?_y#Yt$zRfy6VWMEPuV8^pjgi?6Wxv8C+m<24(Oc=RIU|B$g>Nqnob!Y%)g1}6I z2!je2KMiOI^_ZloCvErwBZUW%nVOjt;>0Xs5mY9Ec{D+eK+!T2M&UuuBo^6>3O|++ z2}KYEA|Rm(rW8RslYtc9H#t^M&6tHyo(NWw2^AHC0^j0*NkQ~U3T8H=ehh0cOv4yV z45ktz=wmbK&rJ+DqDVb4A<_g)452eHDVQly!Q@a2A@RUWPs~KbB$8nqCLs=Csl+IW zgp>LyOoGfzl9?F3)d5q03B?NIH^51VfXrv60=_q|zbs3Bl6>Dp&@q%4C$Vr-FEgQ> zGE)IHt0oK;8Zrry5~{;W5@14?nwtrj36=eBuOGX;iYkAreI3; zo(VM*f(s=?H84}Cb2>Lwm<6B2b2H4$1ik@_5>RDGBPAjU97#`2nUeo!BFMa$o1Ai( z>I5>Sf~vyX0;sJN2?>o?L~sno5nLcs1WX#k)&Y@5sep2V03b^W6cQnj9ax1YrV1tk z6Q7zGvNSg#OMwUzSdNhWB!UW({?@k06F zEc02GLO5H$XX31==b86JC}2sw&x9TdihxM7<;5UQLIq5B*7u=)A@d>5I!`QNz;jc^ zP(o2=GBD%BpPN~hve7dbJ(!>h8iSZs6Nmp|-cwG@D*LdP9;2tqwCyEAxoK=tVH1v1@HjC~swp#}nz9)MRc2;_;rV-Jwm$L6&V=C~m;z$WG7l#w_(LgF z*oi42&dfZS(FAhwo(Y-H%xnqF<9wfqG83`{4ovP`%1k(-oj!*To|;hN>8UyIQP9F* mr_0Q&FTdYB%{-`?nMwG4CI;~bW;{0`^H5O;M3TT^>Hh%TX4YE( literal 0 HcmV?d00001 diff --git a/Lib/test/audiodata/pluck-pcm8.wav b/Lib/test/audiodata/pluck-pcm8.wav new file mode 100644 index 0000000000000000000000000000000000000000..bb28cb8aa671050294436b01e5ffd586ae14acbb GIT binary patch literal 6756 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 D#5wot literal 0 HcmV?d00001 diff --git a/Lib/test/audiodata/pluck-ulaw.aifc b/Lib/test/audiodata/pluck-ulaw.aifc new file mode 100644 index 0000000000000000000000000000000000000000..3085cf097fb18a839a3ae5b9a47bd75cdef5f8a5 GIT binary patch literal 6910 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 literal 0 HcmV?d00001 diff --git a/Lib/test/audiotests.py b/Lib/test/audiotests.py new file mode 100644 index 00000000000..3e18df14c8f --- /dev/null +++ b/Lib/test/audiotests.py @@ -0,0 +1,218 @@ +from test.test_support import findfile, TESTFN, unlink +import unittest +import array +import io +import pickle +import sys +import base64 + +def fromhex(s): + return base64.b16decode(s.replace(' ', '')) + +def byteswap2(data): + a = array.array('h', data) + a.byteswap() + return a.tostring() + +def byteswap3(data): + ba = bytearray(data) + ba[::3] = data[2::3] + ba[2::3] = data[::3] + return bytes(ba) + +def byteswap4(data): + a = array.array('i', data) + a.byteswap() + return a.tostring() + + +class AudioTests: + close_fd = False + + def setUp(self): + self.f = self.fout = None + + def tearDown(self): + if self.f is not None: + self.f.close() + if self.fout is not None: + self.fout.close() + unlink(TESTFN) + + def check_params(self, f, nchannels, sampwidth, framerate, nframes, + comptype, compname): + self.assertEqual(f.getnchannels(), nchannels) + self.assertEqual(f.getsampwidth(), sampwidth) + self.assertEqual(f.getframerate(), framerate) + self.assertEqual(f.getnframes(), nframes) + self.assertEqual(f.getcomptype(), comptype) + self.assertEqual(f.getcompname(), compname) + + params = f.getparams() + self.assertEqual(params, + (nchannels, sampwidth, framerate, nframes, comptype, compname)) + + dump = pickle.dumps(params) + self.assertEqual(pickle.loads(dump), params) + + +class AudioWriteTests(AudioTests): + + def create_file(self, testfile): + f = self.fout = self.module.open(testfile, 'wb') + f.setnchannels(self.nchannels) + f.setsampwidth(self.sampwidth) + f.setframerate(self.framerate) + f.setcomptype(self.comptype, self.compname) + return f + + def check_file(self, testfile, nframes, frames): + f = self.module.open(testfile, 'rb') + try: + self.assertEqual(f.getnchannels(), self.nchannels) + self.assertEqual(f.getsampwidth(), self.sampwidth) + self.assertEqual(f.getframerate(), self.framerate) + self.assertEqual(f.getnframes(), nframes) + self.assertEqual(f.readframes(nframes), frames) + finally: + f.close() + + def test_write_params(self): + f = self.create_file(TESTFN) + f.setnframes(self.nframes) + f.writeframes(self.frames) + self.check_params(f, self.nchannels, self.sampwidth, self.framerate, + self.nframes, self.comptype, self.compname) + f.close() + + def test_write(self): + f = self.create_file(TESTFN) + f.setnframes(self.nframes) + f.writeframes(self.frames) + f.close() + + self.check_file(TESTFN, self.nframes, self.frames) + + def test_incompleted_write(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + f = self.create_file(testfile) + f.setnframes(self.nframes + 1) + f.writeframes(self.frames) + f.close() + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + self.check_file(testfile, self.nframes, self.frames) + + def test_multiple_writes(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + f = self.create_file(testfile) + f.setnframes(self.nframes) + framesize = self.nchannels * self.sampwidth + f.writeframes(self.frames[:-framesize]) + f.writeframes(self.frames[-framesize:]) + f.close() + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + self.check_file(testfile, self.nframes, self.frames) + + def test_overflowed_write(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + f = self.create_file(testfile) + f.setnframes(self.nframes - 1) + f.writeframes(self.frames) + f.close() + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + self.check_file(testfile, self.nframes, self.frames) + + +class AudioTestsWithSourceFile(AudioTests): + + @classmethod + def setUpClass(cls): + cls.sndfilepath = findfile(cls.sndfilename, subdir='audiodata') + + def test_read_params(self): + f = self.f = self.module.open(self.sndfilepath) + #self.assertEqual(f.getfp().name, self.sndfilepath) + self.check_params(f, self.nchannels, self.sampwidth, self.framerate, + self.sndfilenframes, self.comptype, self.compname) + + def test_close(self): + testfile = open(self.sndfilepath, 'rb') + f = self.f = self.module.open(testfile) + self.assertFalse(testfile.closed) + f.close() + self.assertEqual(testfile.closed, self.close_fd) + testfile = open(TESTFN, 'wb') + fout = self.module.open(testfile, 'wb') + self.assertFalse(testfile.closed) + with self.assertRaises(self.module.Error): + fout.close() + self.assertEqual(testfile.closed, self.close_fd) + fout.close() # do nothing + + def test_read(self): + framesize = self.nchannels * self.sampwidth + chunk1 = self.frames[:2 * framesize] + chunk2 = self.frames[2 * framesize: 4 * framesize] + f = self.f = self.module.open(self.sndfilepath) + self.assertEqual(f.readframes(0), b'') + self.assertEqual(f.tell(), 0) + self.assertEqual(f.readframes(2), chunk1) + f.rewind() + pos0 = f.tell() + self.assertEqual(pos0, 0) + self.assertEqual(f.readframes(2), chunk1) + pos2 = f.tell() + self.assertEqual(pos2, 2) + self.assertEqual(f.readframes(2), chunk2) + f.setpos(pos2) + self.assertEqual(f.readframes(2), chunk2) + f.setpos(pos0) + self.assertEqual(f.readframes(2), chunk1) + with self.assertRaises(self.module.Error): + f.setpos(-1) + with self.assertRaises(self.module.Error): + f.setpos(f.getnframes() + 1) + + def test_copy(self): + f = self.f = self.module.open(self.sndfilepath) + fout = self.fout = self.module.open(TESTFN, 'wb') + fout.setparams(f.getparams()) + i = 0 + n = f.getnframes() + while n > 0: + i += 1 + fout.writeframes(f.readframes(i)) + n -= i + fout.close() + fout = self.fout = self.module.open(TESTFN, 'rb') + f.rewind() + self.assertEqual(f.getparams(), fout.getparams()) + self.assertEqual(f.readframes(f.getnframes()), + fout.readframes(fout.getnframes())) + + def test_read_not_from_start(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + with open(self.sndfilepath, 'rb') as f: + testfile.write(f.read()) + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + f = self.module.open(testfile, 'rb') + try: + self.assertEqual(f.getnchannels(), self.nchannels) + self.assertEqual(f.getsampwidth(), self.sampwidth) + self.assertEqual(f.getframerate(), self.framerate) + self.assertEqual(f.getnframes(), self.sndfilenframes) + self.assertEqual(f.readframes(self.nframes), self.frames) + finally: + f.close() diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py index 62b3d180184..d1e2cdccbd2 100644 --- a/Lib/test/test_aifc.py +++ b/Lib/test/test_aifc.py @@ -1,118 +1,168 @@ -from test.test_support import findfile, run_unittest, TESTFN +from test.test_support import findfile, TESTFN, unlink, run_unittest import unittest +from test import audiotests import os import io - +import sys +import struct import aifc -class AIFCTest(unittest.TestCase): +class AifcPCM8Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = aifc + sndfilename = 'pluck-pcm8.aiff' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 1 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = audiotests.fromhex("""\ + 02FF 4B00 3104 8008 CB06 4803 BF01 03FE B8FA B4F3 29EB 1AE6 \ + EDE4 C6E2 0EE0 EFE0 57E2 FBE8 13EF D8F7 97FB F5FC 08FB DFFB \ + 11FA 3EFB BCFC 66FF CF04 4309 C10E 5112 EE17 8216 7F14 8012 \ + 490E 520D EF0F CE0F E40C 630A 080A 2B0B 510E 8B11 B60E 440A \ + """) + close_fd = True - def setUp(self): - self.f = self.fout = None - self.sndfilepath = findfile('Sine-1000Hz-300ms.aif') - def tearDown(self): - if self.f is not None: - self.f.close() - if self.fout is not None: - try: - self.fout.close() - except (aifc.Error, AttributeError): - pass - try: - os.remove(TESTFN) - except OSError: - pass +class AifcPCM16Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = aifc + sndfilename = 'pluck-pcm16.aiff' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 2 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = audiotests.fromhex("""\ + 022EFFEA 4B5D00F6 311804EA 80E10840 CBE106B1 48A903F5 BFE601B2 036CFE7B \ + B858FA3E B4B1F34F 299AEBCA 1A5DE6DA EDFAE491 C628E275 0E09E0B5 EF2AE029 \ + 5758E271 FB35E83F 1376EF86 D82BF727 9790FB76 F5FAFC0F 0867FB9C DF30FB43 \ + 117EFA36 3EE5FB5B BC79FCB1 66D9FF5D CF150412 431D097C C1BA0EC8 512112A1 \ + EEE21753 82071665 7FFF1443 8004128F 49A20EAF 52BB0DBA EFB40F60 CE3C0FBF \ + E4B30CEC 63430A5C 08C80A20 2BBB0B08 514A0E43 8BCF1139 B6F60EEB 44120A5E \ + """) + close_fd = True + +class AifcPCM24Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = aifc + sndfilename = 'pluck-pcm24.aiff' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 3 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = audiotests.fromhex("""\ + 022D65FFEB9D 4B5A0F00FA54 3113C304EE2B 80DCD6084303 \ + CBDEC006B261 48A99803F2F8 BFE82401B07D 036BFBFE7B5D \ + B85756FA3EC9 B4B055F3502B 299830EBCB62 1A5CA7E6D99A \ + EDFA3EE491BD C625EBE27884 0E05A9E0B6CF EF2929E02922 \ + 5758D8E27067 FB3557E83E16 1377BFEF8402 D82C5BF7272A \ + 978F16FB7745 F5F865FC1013 086635FB9C4E DF30FCFB40EE \ + 117FE0FA3438 3EE6B8FB5AC3 BC77A3FCB2F4 66D6DAFF5F32 \ + CF13B9041275 431D69097A8C C1BB600EC74E 5120B912A2BA \ + EEDF641754C0 8207001664B7 7FFFFF14453F 8000001294E6 \ + 499C1B0EB3B2 52B73E0DBCA0 EFB2B20F5FD8 CE3CDB0FBE12 \ + E4B49C0CEA2D 6344A80A5A7C 08C8FE0A1FFE 2BB9860B0A0E \ + 51486F0E44E1 8BCC64113B05 B6F4EC0EEB36 4413170A5B48 \ + """) + close_fd = True + + +class AifcPCM32Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = aifc + sndfilename = 'pluck-pcm32.aiff' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 4 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = audiotests.fromhex("""\ + 022D65BCFFEB9D92 4B5A0F8000FA549C 3113C34004EE2BC0 80DCD680084303E0 \ + CBDEC0C006B26140 48A9980003F2F8FC BFE8248001B07D92 036BFB60FE7B5D34 \ + B8575600FA3EC920 B4B05500F3502BC0 29983000EBCB6240 1A5CA7A0E6D99A60 \ + EDFA3E80E491BD40 C625EB80E27884A0 0E05A9A0E0B6CFE0 EF292940E0292280 \ + 5758D800E2706700 FB3557D8E83E1640 1377BF00EF840280 D82C5B80F7272A80 \ + 978F1600FB774560 F5F86510FC101364 086635A0FB9C4E20 DF30FC40FB40EE28 \ + 117FE0A0FA3438B0 3EE6B840FB5AC3F0 BC77A380FCB2F454 66D6DA80FF5F32B4 \ + CF13B980041275B0 431D6980097A8C00 C1BB60000EC74E00 5120B98012A2BAA0 \ + EEDF64C01754C060 820700001664B780 7FFFFFFF14453F40 800000001294E6E0 \ + 499C1B000EB3B270 52B73E000DBCA020 EFB2B2E00F5FD880 CE3CDB400FBE1270 \ + E4B49CC00CEA2D90 6344A8800A5A7CA0 08C8FE800A1FFEE0 2BB986C00B0A0E00 \ + 51486F800E44E190 8BCC6480113B0580 B6F4EC000EEB3630 441317800A5B48A0 \ + """) + close_fd = True + + +class AifcULAWTest(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = aifc + sndfilename = 'pluck-ulaw.aifc' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 2 + framerate = 11025 + nframes = 48 + comptype = 'ulaw' + compname = '' + frames = audiotests.fromhex("""\ + 022CFFE8 497C0104 307C04DC 8284083C CB84069C 497C03DC BE8401AC 036CFE74 \ + B684FA24 B684F344 2A7CEC04 19FCE704 EE04E504 C584E204 0E3CE104 EF04DF84 \ + 557CE204 FB24E804 12FCEF04 D784F744 9684FB64 F5C4FC24 083CFBA4 DF84FB24 \ + 11FCFA24 3E7CFB64 BA84FCB4 657CFF5C CF84041C 417C093C C1840EBC 517C12FC \ + EF0416FC 828415FC 7D7C13FC 828412FC 497C0EBC 517C0DBC F0040F3C CD840FFC \ + E5040CBC 617C0A3C 08BC0A3C 2C7C0B3C 517C0E3C 8A8410FC B6840EBC 457C0A3C \ + """) + if sys.byteorder != 'big': + frames = audiotests.byteswap2(frames) + close_fd = True + + +class AifcMiscTest(audiotests.AudioTests, unittest.TestCase): def test_skipunknown(self): #Issue 2245 #This file contains chunk types aifc doesn't recognize. - self.f = aifc.open(self.sndfilepath) + self.f = aifc.open(findfile('Sine-1000Hz-300ms.aif')) - def test_params(self): - f = self.f = aifc.open(self.sndfilepath) - self.assertEqual(f.getnchannels(), 2) - self.assertEqual(f.getsampwidth(), 2) - self.assertEqual(f.getframerate(), 48000) - self.assertEqual(f.getnframes(), 14400) - self.assertEqual(f.getcomptype(), 'NONE') - self.assertEqual(f.getcompname(), 'not compressed') - self.assertEqual(f.getparams(), (2, 2, 48000, 14400, 'NONE', 'not compressed')) + def test_write_markers_values(self): + fout = aifc.open(io.BytesIO(), 'wb') + self.assertEqual(fout.getmarkers(), None) + fout.setmark(1, 0, 'foo1') + fout.setmark(1, 1, 'foo2') + self.assertEqual(fout.getmark(1), (1, 1, 'foo2')) + self.assertEqual(fout.getmarkers(), [(1, 1, 'foo2')]) + fout.initfp(None) - def test_read(self): - f = self.f = aifc.open(self.sndfilepath) - self.assertEqual(f.tell(), 0) - self.assertEqual(f.readframes(2), '\x00\x00\x00\x00\x0b\xd4\x0b\xd4') - f.rewind() - pos0 = f.tell() - self.assertEqual(pos0, 0) - self.assertEqual(f.readframes(2), '\x00\x00\x00\x00\x0b\xd4\x0b\xd4') - pos2 = f.tell() - self.assertEqual(pos2, 2) - self.assertEqual(f.readframes(2), '\x17t\x17t"\xad"\xad') - f.setpos(pos2) - self.assertEqual(f.readframes(2), '\x17t\x17t"\xad"\xad') - f.setpos(pos0) - self.assertEqual(f.readframes(2), '\x00\x00\x00\x00\x0b\xd4\x0b\xd4') - - def test_write(self): - f = self.f = aifc.open(self.sndfilepath) + def test_read_markers(self): fout = self.fout = aifc.open(TESTFN, 'wb') - fout.aifc() - fout.setparams(f.getparams()) - for frame in range(f.getnframes()): - fout.writeframes(f.readframes(1)) + fout.aiff() + fout.setparams((1, 1, 1, 1, 'NONE', '')) + fout.setmark(1, 0, 'odd') + fout.setmark(2, 0, 'even') + fout.writeframes('\x00') fout.close() - fout = self.fout = aifc.open(TESTFN, 'rb') - f.rewind() - self.assertEqual(f.getparams(), fout.getparams()) - self.assertEqual(f.readframes(5), fout.readframes(5)) - - def test_compress(self): - f = self.f = aifc.open(self.sndfilepath) - fout = self.fout = aifc.open(TESTFN, 'wb') - fout.aifc() - fout.setnchannels(f.getnchannels()) - fout.setsampwidth(f.getsampwidth()) - fout.setframerate(f.getframerate()) - fout.setcomptype('ULAW', 'foo') - for frame in range(f.getnframes()): - fout.writeframes(f.readframes(1)) - fout.close() - self.assertLess( - os.stat(TESTFN).st_size, - os.stat(self.sndfilepath).st_size*0.75, - ) - fout = self.fout = aifc.open(TESTFN, 'rb') - f.rewind() - self.assertEqual(f.getparams()[0:3], fout.getparams()[0:3]) - self.assertEqual(fout.getcomptype(), 'ULAW') - self.assertEqual(fout.getcompname(), 'foo') - # XXX: this test fails, not sure if it should succeed or not - # self.assertEqual(f.readframes(5), fout.readframes(5)) - - def test_close(self): - class Wrapfile(object): - def __init__(self, file): - self.file = open(file, 'rb') - self.closed = False - def close(self): - self.file.close() - self.closed = True - def __getattr__(self, attr): return getattr(self.file, attr) - testfile = Wrapfile(self.sndfilepath) - f = self.f = aifc.open(testfile) - self.assertEqual(testfile.closed, False) - f.close() - self.assertEqual(testfile.closed, True) - testfile = open(TESTFN, 'wb') - fout = aifc.open(testfile, 'wb') - self.assertFalse(testfile.closed) - with self.assertRaises(aifc.Error): - fout.close() - self.assertTrue(testfile.closed) - fout.close() # do nothing + f = self.f = aifc.open(TESTFN, 'rb') + self.assertEqual(f.getmarkers(), [(1, 0, 'odd'), (2, 0, 'even')]) + self.assertEqual(f.getmark(1), (1, 0, 'odd')) + self.assertEqual(f.getmark(2), (2, 0, 'even')) + self.assertRaises(aifc.Error, f.getmark, 3) class AIFCLowLevelTest(unittest.TestCase): @@ -127,7 +177,7 @@ class AIFCLowLevelTest(unittest.TestCase): self.assertEqual(read_written(x, 'float'), x) for x in (float('NaN'), float('Inf')): self.assertEqual(read_written(x, 'float'), aifc._HUGE_VAL) - for x in (b'', b'foo', b'a' * 255): + for x in ('', 'foo', 'a' * 255): self.assertEqual(read_written(x, 'string'), x) for x in (-0x7FFFFFFF, -1, 0, 1, 0x7FFFFFFF): self.assertEqual(read_written(x, 'long'), x) @@ -139,7 +189,7 @@ class AIFCLowLevelTest(unittest.TestCase): self.assertEqual(read_written(x, 'ushort'), x) def test_read_raises(self): - f = io.BytesIO(b'\x00') + f = io.BytesIO('\x00') self.assertRaises(EOFError, aifc._read_ulong, f) self.assertRaises(EOFError, aifc._read_long, f) self.assertRaises(EOFError, aifc._read_ushort, f) @@ -148,13 +198,149 @@ class AIFCLowLevelTest(unittest.TestCase): def test_write_long_string_raises(self): f = io.BytesIO() with self.assertRaises(ValueError): - aifc._write_string(f, b'too long' * 255) + aifc._write_string(f, 'too long' * 255) + + def test_wrong_open_mode(self): + with self.assertRaises(aifc.Error): + aifc.open(TESTFN, 'wrong_mode') + + def test_read_wrong_form(self): + b1 = io.BytesIO('WRNG' + struct.pack('>L', 0)) + b2 = io.BytesIO('FORM' + struct.pack('>L', 4) + 'WRNG') + self.assertRaises(aifc.Error, aifc.open, b1) + self.assertRaises(aifc.Error, aifc.open, b2) + + def test_read_no_comm_chunk(self): + b = io.BytesIO('FORM' + struct.pack('>L', 4) + 'AIFF') + self.assertRaises(aifc.Error, aifc.open, b) + + def test_read_wrong_compression_type(self): + b = 'FORM' + struct.pack('>L', 4) + 'AIFC' + b += 'COMM' + struct.pack('>LhlhhLL', 23, 0, 0, 0, 0, 0, 0) + b += 'WRNG' + struct.pack('B', 0) + self.assertRaises(aifc.Error, aifc.open, io.BytesIO(b)) + + def test_read_wrong_marks(self): + b = 'FORM' + struct.pack('>L', 4) + 'AIFF' + b += 'COMM' + struct.pack('>LhlhhLL', 18, 0, 0, 0, 0, 0, 0) + b += 'SSND' + struct.pack('>L', 8) + '\x00' * 8 + b += 'MARK' + struct.pack('>LhB', 3, 1, 1) + f = aifc.open(io.BytesIO(b)) + self.assertEqual(f.getmarkers(), None) + + def test_read_comm_kludge_compname_even(self): + b = 'FORM' + struct.pack('>L', 4) + 'AIFC' + b += 'COMM' + struct.pack('>LhlhhLL', 18, 0, 0, 0, 0, 0, 0) + b += 'NONE' + struct.pack('B', 4) + 'even' + '\x00' + b += 'SSND' + struct.pack('>L', 8) + '\x00' * 8 + f = aifc.open(io.BytesIO(b)) + self.assertEqual(f.getcompname(), 'even') + + def test_read_comm_kludge_compname_odd(self): + b = 'FORM' + struct.pack('>L', 4) + 'AIFC' + b += 'COMM' + struct.pack('>LhlhhLL', 18, 0, 0, 0, 0, 0, 0) + b += 'NONE' + struct.pack('B', 3) + 'odd' + b += 'SSND' + struct.pack('>L', 8) + '\x00' * 8 + f = aifc.open(io.BytesIO(b)) + self.assertEqual(f.getcompname(), 'odd') + + def test_write_params_raises(self): + fout = aifc.open(io.BytesIO(), 'wb') + wrong_params = (0, 0, 0, 0, 'WRNG', '') + self.assertRaises(aifc.Error, fout.setparams, wrong_params) + self.assertRaises(aifc.Error, fout.getparams) + self.assertRaises(aifc.Error, fout.setnchannels, 0) + self.assertRaises(aifc.Error, fout.getnchannels) + self.assertRaises(aifc.Error, fout.setsampwidth, 0) + self.assertRaises(aifc.Error, fout.getsampwidth) + self.assertRaises(aifc.Error, fout.setframerate, 0) + self.assertRaises(aifc.Error, fout.getframerate) + self.assertRaises(aifc.Error, fout.setcomptype, 'WRNG', '') + fout.aiff() + fout.setnchannels(1) + fout.setsampwidth(1) + fout.setframerate(1) + fout.setnframes(1) + fout.writeframes('\x00') + self.assertRaises(aifc.Error, fout.setparams, (1, 1, 1, 1, 1, 1)) + self.assertRaises(aifc.Error, fout.setnchannels, 1) + self.assertRaises(aifc.Error, fout.setsampwidth, 1) + self.assertRaises(aifc.Error, fout.setframerate, 1) + self.assertRaises(aifc.Error, fout.setnframes, 1) + self.assertRaises(aifc.Error, fout.setcomptype, 'NONE', '') + self.assertRaises(aifc.Error, fout.aiff) + self.assertRaises(aifc.Error, fout.aifc) + + def test_write_params_singles(self): + fout = aifc.open(io.BytesIO(), 'wb') + fout.aifc() + fout.setnchannels(1) + fout.setsampwidth(2) + fout.setframerate(3) + fout.setnframes(4) + fout.setcomptype('NONE', 'name') + self.assertEqual(fout.getnchannels(), 1) + self.assertEqual(fout.getsampwidth(), 2) + self.assertEqual(fout.getframerate(), 3) + self.assertEqual(fout.getnframes(), 0) + self.assertEqual(fout.tell(), 0) + self.assertEqual(fout.getcomptype(), 'NONE') + self.assertEqual(fout.getcompname(), 'name') + fout.writeframes('\x00' * 4 * fout.getsampwidth() * fout.getnchannels()) + self.assertEqual(fout.getnframes(), 4) + self.assertEqual(fout.tell(), 4) + + def test_write_params_bunch(self): + fout = aifc.open(io.BytesIO(), 'wb') + fout.aifc() + p = (1, 2, 3, 4, 'NONE', 'name') + fout.setparams(p) + self.assertEqual(fout.getparams(), p) + fout.initfp(None) + + def test_write_header_raises(self): + fout = aifc.open(io.BytesIO(), 'wb') + self.assertRaises(aifc.Error, fout.close) + fout = aifc.open(io.BytesIO(), 'wb') + fout.setnchannels(1) + self.assertRaises(aifc.Error, fout.close) + fout = aifc.open(io.BytesIO(), 'wb') + fout.setnchannels(1) + fout.setsampwidth(1) + self.assertRaises(aifc.Error, fout.close) + + def test_write_header_comptype_raises(self): + for comptype in ('ULAW', 'ulaw', 'ALAW', 'alaw', 'G722'): + fout = aifc.open(io.BytesIO(), 'wb') + fout.setsampwidth(1) + fout.setcomptype(comptype, '') + self.assertRaises(aifc.Error, fout.close) + fout.initfp(None) + + def test_write_markers_raises(self): + fout = aifc.open(io.BytesIO(), 'wb') + self.assertRaises(aifc.Error, fout.setmark, 0, 0, '') + self.assertRaises(aifc.Error, fout.setmark, 1, -1, '') + self.assertRaises(aifc.Error, fout.setmark, 1, 0, None) + self.assertRaises(aifc.Error, fout.getmark, 1) + fout.initfp(None) + + def test_write_aiff_by_extension(self): + sampwidth = 2 + fout = self.fout = aifc.open(TESTFN + '.aiff', 'wb') + fout.setparams((1, sampwidth, 1, 1, 'ULAW', '')) + frames = '\x00' * fout.getnchannels() * sampwidth + fout.writeframes(frames) + fout.close() + f = self.f = aifc.open(TESTFN + '.aiff', 'rb') + self.assertEqual(f.getcomptype(), 'NONE') + f.close() def test_main(): - run_unittest(AIFCTest) - run_unittest(AIFCLowLevelTest) - + run_unittest(AifcPCM8Test, AifcPCM16Test, AifcPCM16Test, AifcPCM24Test, + AifcPCM32Test, AifcULAWTest, + AifcMiscTest, AIFCLowLevelTest) if __name__ == "__main__": - unittest.main() + test_main() diff --git a/Lib/test/test_sunau.py b/Lib/test/test_sunau.py new file mode 100644 index 00000000000..64cbebdcfb1 --- /dev/null +++ b/Lib/test/test_sunau.py @@ -0,0 +1,107 @@ +from test.test_support import TESTFN, run_unittest +import unittest +from test import audiotests +import sys +import sunau + + +class SunauPCM8Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = sunau + sndfilename = 'pluck-pcm8.au' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 1 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = audiotests.fromhex("""\ + 02FF 4B00 3104 8008 CB06 4803 BF01 03FE B8FA B4F3 29EB 1AE6 \ + EDE4 C6E2 0EE0 EFE0 57E2 FBE8 13EF D8F7 97FB F5FC 08FB DFFB \ + 11FA 3EFB BCFC 66FF CF04 4309 C10E 5112 EE17 8216 7F14 8012 \ + 490E 520D EF0F CE0F E40C 630A 080A 2B0B 510E 8B11 B60E 440A \ + """) + + +class SunauPCM16Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = sunau + sndfilename = 'pluck-pcm16.au' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 2 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = audiotests.fromhex("""\ + 022EFFEA 4B5C00F9 311404EF 80DB0844 CBE006B0 48AB03F3 BFE601B5 0367FE80 \ + B853FA42 B4AFF351 2997EBCD 1A5AE6DC EDF9E492 C627E277 0E06E0B7 EF29E029 \ + 5759E271 FB34E83F 1377EF85 D82CF727 978EFB79 F5F7FC12 0864FB9E DF30FB40 \ + 1183FA30 3EEAFB59 BC78FCB4 66D5FF60 CF130415 431A097D C1BA0EC7 512312A0 \ + EEE11754 82071666 7FFE1448 80001298 49990EB7 52B40DC1 EFAD0F65 CE3A0FBE \ + E4B70CE6 63490A57 08CC0A1D 2BBC0B09 51480E46 8BCB113C B6F60EE9 44150A5A \ + """) + + +class SunauPCM32Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = sunau + sndfilename = 'pluck-pcm32.au' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 4 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = audiotests.fromhex("""\ + 022D65BCFFEB9D92 4B5A0F8000FA549C 3113C34004EE2BC0 80DCD680084303E0 \ + CBDEC0C006B26140 48A9980003F2F8FC BFE8248001B07D92 036BFB60FE7B5D34 \ + B8575600FA3EC920 B4B05500F3502BC0 29983000EBCB6240 1A5CA7A0E6D99A60 \ + EDFA3E80E491BD40 C625EB80E27884A0 0E05A9A0E0B6CFE0 EF292940E0292280 \ + 5758D800E2706700 FB3557D8E83E1640 1377BF00EF840280 D82C5B80F7272A80 \ + 978F1600FB774560 F5F86510FC101364 086635A0FB9C4E20 DF30FC40FB40EE28 \ + 117FE0A0FA3438B0 3EE6B840FB5AC3F0 BC77A380FCB2F454 66D6DA80FF5F32B4 \ + CF13B980041275B0 431D6980097A8C00 C1BB60000EC74E00 5120B98012A2BAA0 \ + EEDF64C01754C060 820700001664B780 7FFFFFFF14453F40 800000001294E6E0 \ + 499C1B000EB3B270 52B73E000DBCA020 EFB2B2E00F5FD880 CE3CDB400FBE1270 \ + E4B49CC00CEA2D90 6344A8800A5A7CA0 08C8FE800A1FFEE0 2BB986C00B0A0E00 \ + 51486F800E44E190 8BCC6480113B0580 B6F4EC000EEB3630 441317800A5B48A0 \ + """) + + +class SunauULAWTest(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = sunau + sndfilename = 'pluck-ulaw.au' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 2 + framerate = 11025 + nframes = 48 + comptype = 'ULAW' + compname = 'CCITT G.711 u-law' + frames = audiotests.fromhex("""\ + 022CFFE8 497C00F4 307C04DC 8284083C CB84069C 497C03DC BE8401AC 036CFE74 \ + B684FA24 B684F344 2A7CEC04 19FCE704 EE04E504 C584E204 0E3CE104 EF04DF84 \ + 557CE204 FB24E804 12FCEF04 D784F744 9684FB64 F5C4FC24 083CFBA4 DF84FB24 \ + 11FCFA24 3E7CFB64 BA84FCB4 657CFF5C CF84041C 417C09BC C1840EBC 517C12FC \ + EF0416FC 828415FC 7D7C13FC 828412FC 497C0EBC 517C0DBC F0040F3C CD840FFC \ + E5040CBC 617C0A3C 08BC0A3C 2C7C0B3C 517C0E3C 8A8410FC B6840EBC 457C0A3C \ + """) + if sys.byteorder != 'big': + frames = audiotests.byteswap2(frames) + + +def test_main(): + run_unittest(SunauPCM8Test, SunauPCM16Test, SunauPCM16Test, + SunauPCM32Test, SunauULAWTest) + +if __name__ == "__main__": + test_main() diff --git a/Lib/test/test_wave.py b/Lib/test/test_wave.py index 02f5fae4df3..b7ba8918ec1 100644 --- a/Lib/test/test_wave.py +++ b/Lib/test/test_wave.py @@ -1,45 +1,112 @@ from test.test_support import TESTFN, run_unittest -import os -import wave import unittest +from test import audiotests +import wave -nchannels = 2 -sampwidth = 2 -framerate = 8000 -nframes = 100 -class TestWave(unittest.TestCase): +class WavePCM8Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = wave + sndfilename = 'pluck-pcm8.wav' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 1 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = audiotests.fromhex("""\ + 827F CB80 B184 0088 4B86 C883 3F81 837E 387A 3473 A96B 9A66 \ + 6D64 4662 8E60 6F60 D762 7B68 936F 5877 177B 757C 887B 5F7B \ + 917A BE7B 3C7C E67F 4F84 C389 418E D192 6E97 0296 FF94 0092 \ + C98E D28D 6F8F 4E8F 648C E38A 888A AB8B D18E 0B91 368E C48A \ + """) - def setUp(self): - self.f = None - def tearDown(self): - if self.f is not None: - self.f.close() - try: - os.remove(TESTFN) - except OSError: - pass +class WavePCM16Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = wave + sndfilename = 'pluck-pcm16.wav' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 2 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = audiotests.fromhex("""\ + 022EFFEA 4B5C00F9 311404EF 80DC0843 CBDF06B2 48AA03F3 BFE701B2 036BFE7C \ + B857FA3E B4B2F34F 2999EBCA 1A5FE6D7 EDFCE491 C626E279 0E05E0B8 EF27E02D \ + 5754E275 FB31E843 1373EF89 D827F72C 978BFB7A F5F7FC11 0866FB9C DF30FB42 \ + 117FFA36 3EE4FB5D BC75FCB6 66D5FF5F CF16040E 43220978 C1BC0EC8 511F12A4 \ + EEDF1755 82061666 7FFF1446 80001296 499C0EB2 52BA0DB9 EFB70F5C CE400FBC \ + E4B50CEB 63440A5A 08CA0A1F 2BBA0B0B 51460E47 8BCB113C B6F50EEA 44150A59 \ + """) + frames = audiotests.byteswap2(frames) - def test_it(self): - self.f = wave.open(TESTFN, 'wb') - self.f.setnchannels(nchannels) - self.f.setsampwidth(sampwidth) - self.f.setframerate(framerate) - self.f.setnframes(nframes) - output = '\0' * nframes * nchannels * sampwidth - self.f.writeframes(output) - self.f.close() - self.f = wave.open(TESTFN, 'rb') - self.assertEqual(nchannels, self.f.getnchannels()) - self.assertEqual(sampwidth, self.f.getsampwidth()) - self.assertEqual(framerate, self.f.getframerate()) - self.assertEqual(nframes, self.f.getnframes()) - self.assertEqual(self.f.readframes(nframes), output) +class WavePCM24Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = wave + sndfilename = 'pluck-pcm24.wav' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 3 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = audiotests.fromhex("""\ + 022D65FFEB9D 4B5A0F00FA54 3113C304EE2B 80DCD6084303 \ + CBDEC006B261 48A99803F2F8 BFE82401B07D 036BFBFE7B5D \ + B85756FA3EC9 B4B055F3502B 299830EBCB62 1A5CA7E6D99A \ + EDFA3EE491BD C625EBE27884 0E05A9E0B6CF EF2929E02922 \ + 5758D8E27067 FB3557E83E16 1377BFEF8402 D82C5BF7272A \ + 978F16FB7745 F5F865FC1013 086635FB9C4E DF30FCFB40EE \ + 117FE0FA3438 3EE6B8FB5AC3 BC77A3FCB2F4 66D6DAFF5F32 \ + CF13B9041275 431D69097A8C C1BB600EC74E 5120B912A2BA \ + EEDF641754C0 8207001664B7 7FFFFF14453F 8000001294E6 \ + 499C1B0EB3B2 52B73E0DBCA0 EFB2B20F5FD8 CE3CDB0FBE12 \ + E4B49C0CEA2D 6344A80A5A7C 08C8FE0A1FFE 2BB9860B0A0E \ + 51486F0E44E1 8BCC64113B05 B6F4EC0EEB36 4413170A5B48 \ + """) + frames = audiotests.byteswap3(frames) + + +class WavePCM32Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = wave + sndfilename = 'pluck-pcm32.wav' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 4 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = audiotests.fromhex("""\ + 022D65BCFFEB9D92 4B5A0F8000FA549C 3113C34004EE2BC0 80DCD680084303E0 \ + CBDEC0C006B26140 48A9980003F2F8FC BFE8248001B07D92 036BFB60FE7B5D34 \ + B8575600FA3EC920 B4B05500F3502BC0 29983000EBCB6240 1A5CA7A0E6D99A60 \ + EDFA3E80E491BD40 C625EB80E27884A0 0E05A9A0E0B6CFE0 EF292940E0292280 \ + 5758D800E2706700 FB3557D8E83E1640 1377BF00EF840280 D82C5B80F7272A80 \ + 978F1600FB774560 F5F86510FC101364 086635A0FB9C4E20 DF30FC40FB40EE28 \ + 117FE0A0FA3438B0 3EE6B840FB5AC3F0 BC77A380FCB2F454 66D6DA80FF5F32B4 \ + CF13B980041275B0 431D6980097A8C00 C1BB60000EC74E00 5120B98012A2BAA0 \ + EEDF64C01754C060 820700001664B780 7FFFFFFF14453F40 800000001294E6E0 \ + 499C1B000EB3B270 52B73E000DBCA020 EFB2B2E00F5FD880 CE3CDB400FBE1270 \ + E4B49CC00CEA2D90 6344A8800A5A7CA0 08C8FE800A1FFEE0 2BB986C00B0A0E00 \ + 51486F800E44E190 8BCC6480113B0580 B6F4EC000EEB3630 441317800A5B48A0 \ + """) + frames = audiotests.byteswap4(frames) + def test_main(): - run_unittest(TestWave) + run_unittest(WavePCM8Test, WavePCM16Test, WavePCM24Test, WavePCM32Test) if __name__ == '__main__': test_main() diff --git a/Misc/NEWS b/Misc/NEWS index 1500b15e960..4d45d3400ac 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -302,6 +302,9 @@ IDLE Tests ----- +- Issue #18919: Added tests for the sunau module. Unified and extended tests + for audio modules: aifc, sunau and wave. + - Issue #18792: Use "127.0.0.1" or "::1" instead of "localhost" as much as possible, since "localhost" goes through a DNS lookup under recent Windows versions.