From 6d00b5ec4eb3fa2edd1583075ce722dd3ddc0077 Mon Sep 17 00:00:00 2001 From: Hans Lawrenz Date: Fri, 10 May 2013 15:43:15 -0400 Subject: [PATCH] Add some tests to help with porting. --- tests/__init__.py | 0 tests/python.bmp | Bin 0 -> 37446 bytes tests/test_biffrecords.py | 35 +++ tests/test_examples.py | 498 ++++++++++++++++++++++++++++++++++++++ tests/test_unicode.py | 52 ++++ tests/test_utils.py | 47 ++++ 6 files changed, 632 insertions(+) create mode 100644 tests/__init__.py create mode 100644 tests/python.bmp create mode 100644 tests/test_biffrecords.py create mode 100644 tests/test_examples.py create mode 100644 tests/test_unicode.py create mode 100644 tests/test_utils.py diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/python.bmp b/tests/python.bmp new file mode 100644 index 0000000000000000000000000000000000000000..bd1ba3fb1c111d68657b8a8a62190ef5b1cfef91 GIT binary patch literal 37446 zcmeHQ2Ut``*IpF_LB$qh`R&+^9V{Td_uhL)KzfxfML-lqMG+Mc6?8!ad)KHj#)^fG zfDJ(uv6s02dl_BVWdQ|A%=d7g$<5rkGjq>-+MFqiQmS%mXib+e?vwDJ3jWK$f8A(9 zaHrAw;r#%9@?TQ{Zger7uGGbWE)H~Ypo;@t9O&Xe7YDjH(8Yl+4s>y#ivwL8=;A;Z z2f8@W#epskG;u&TTS7la(qNC2QA-JLv&HrPbL`5N(94lB%#|_Oy-0h@RFP!C*((MN zi61z;d0H`G=(BlpM{|C|D)R8h)sudHe20@aPtN8>-1=I&ac8O@9!=FK*lqyOZ{TMJt>&~j(L7^9Zk3> zRa`%MYOKJZu;ds%Sf^dymbZl@^Ktn2=@% zl@_Lr0So=WvNGn%rA!n`9zQ#Nz_8`~{h)!%xOph!;^6~Vp@cD?`e0{BW_~vnO z5B?ezK&|%jx|ET@sILd0H-G$bF+DxZ-rh-1Z_M!FtaW*M_8dBBP`7T~uI$*ssIHE1 zvi3AJMFl7=(>5b{;D>u>Q7))GLnkFQDTA%kL=%1;70urdew!d79s?Euvx20ES;4Y4 z@C$_V^?_MQbMp*jrL}u^OEtC4!NCs>A7<3n-aB{@h%_Z7NBsILv(~7gLlqY;^fog) zvVQ%A)Ko}~asNJ}vXXJ<4wY`*y0JT*MqA`=rr~O6$Obctw|6)fHzi8(?^IfGT{wBz zHE@Af#Jv+=0h@v|hokV}?QP4$H?;@X;BMW?b{~`GUj_|=TtG0Rqy)Hb?%K6AB!uzs zp_!5r>dcuu+1<#9!cts}Ldb{$Qd&ysD%7%|fN|*(d#bEd5}QS%4Y@_%Y24JwSJLF= zkLmN>wh7H#KWYk$i;0Wr&&PJ}!NkJMaP{P#CMf8rqw@(D$ObwPeEBk?ynNU%zn~^1 z7ofna@^UHzEO^@-PD>?qb*kbEseTv?;)1?{*<_pF>w=ERnRKPD5P%N7N3yd3^f**kX}H8m|A9E?m&tWlxwm(vPj=k0Hegm%@b>AWsjsi1 zp|LzRmWc?U00(yLpeQE>>%nSV!6#C3!lmbGHkz(9K^S&8U9@7ojaJ4T77) zY-PTAOxk#SZz?)&JadLo{|H(}qt(%9!i?&Y));?ID>qk2*jQcNUEe@MOgzaiVE@V$c`M@5g8gEh?VYuhb;Rd|TIjBHvH%cEMTuxT zW58MEY_-PKW`n0=im!8$r{h{TJKQ(L-&$A>^FE(ve@G15@Klp5rEGUv!EG6g0%uyH_s^QZIf#Yo{WU=xPlu!WTh+jfyM?FqM`)WU(J&*(eX)ij zprIOM2ka<}b+phDUx1ok1{%;_J2iP%Z6yz5W5$Dr2wFg={+Qnm%bI=Hoa>0RG0cn zwA4%weq+qg!4Nmzq9!;4bmN8(MFmL8MMnk9K_{ptI(-V{iw}VVDAZgu&sA3yEQOw| za<&Y%(2uq?*c`O9bWbiQ)E+tMfaJHvu1uLiZ!aiVG6gz*^jz+tvhxS10t zGJF2U%((8ohSRu3`VQGNOMcB_v%wgFQR=qx6x^yme>-Ak(?q;U;Mh56ncjT0I_#8HX%tu&g+CufAy?PT`;fq9O z&JvqFM|kQqtg4Yh(2qqbTTM-WOG_kBj%9?Mk&#$Q0NG_bcV@Y|KFQB7%gkJL=FA*7 zw;7(E{+L%{DvjucHDOl5F=6y4B-nteh^uMPEWROPqcD~)izq8YaFYl zw>@KH$TI&0%97&ha$;(-GNziATO)^ADe`JBfAd*p1kWRGwA|)wF zU8TXl{?c&rBo?26F=nJn<0*nyCZNowuLt%7y-~yL5VhE zfXdrrpjq`%9%u%gx;6Qr(4cm|-o3s05Aq1LMo$kTWBlxhapN(P%-)_xGJk)@uQ?3GRM1;VfVoIfl2K84e(P57S#v~tLLH8{SPPjLsRhY<4`g+f@m-Eo z0TH2J?&#`?4jNOvjDDFnm1opoo-srCCXE1v%`e@%xkwy)BZUyFNlF-Hq;;6l)AUFE zNY~1Q`2{14v8Y&FLyjXx2yVD6_3Ik8Ywpb1(z-Y8CkivNXK6+LjHvZ5zFSjxww3+!vjL<{SkeQiTSX^|i z=q44+G`n6^*1f;q@ak^;(IZF9EzI#AO?nOg#gcL18!`SLUmwuZCe7bl0ezxp5JNfD zmgPt={_*Dp#s|g@lgMk?r|w-VO*al-C+870)pUPg3f&<-L}iJSh*`)0wJm|G&R#eV zjAdnI=y|M>oaviW9AUD_5uTwlFhVz=ArwYz*0hB&GJbicQI!86m9jI}>&or{Mal8Y zA3uJ4TKx$56pwiAu%MXXdWY6$ZQYiJ5?p&Qn9^tqH~1RXA8HQspTUSB5|&P3#8Q88 zX-oD<;>)ymz&`yV!pf_?gTh8%&Bgs;@rTSaB-7?-b%I}@F`-7@<08v5agv_s*k z7t;^DtbbO1_ImZD!h2VW39Rg#oIn2f<1<9+{{nsc0wzWlHcW- zHMchF10yEj=$zX9X@(JFB8ETHS0@}9g{Tu68p=v}OL=JT%a<=%-&R&uqPcoOI@^ee z2myf*74Oy5ph73f5mRrs$@9>EbBq8edvGQ1@IiP>uArbGQ2yr4o9yiD{QUgn_}h$(jMUWBKmYvm!-o&Hwzd~9US!31<;oTGU{JG$YzhgD7eXk!q{YwosBWj$_m>Mm^e^z zbyJXu=u{#r09zQ&Ik%RRhpjQG%x zohB2Pn2SXf{~G9e*B zO-)TsPR`!m-o?d*pPye^T3SLvLRD22kGK{uUhM4bj2%p-FlSDhI@Vt8U&ILYXayst zRC8k%qe4zj4#cOZsOaJ0;nj2@11vxXuM3++8A@`O z7z;~@&q1}$&{fE>6^xh~E1p`1Pa_^9)P{tF%%49W!h&M~9E_NvqM{_?#Kah;JtDkRzeepS zjTt?fsdXeHEG#S}Bm}$wC@Cq)h7odPVnqG*>(`@`g~`4gF;3p(i8Z3m#t3&ks2f+X zy&c9!dpA4vM|p(X7_w>HJq8N&V*^MY;c0*S?Kce#4QTJurAwi!2ogL!J)yDs`ue~B z{yS?c36Vv;X9+eRJMbaJ`uwx83I7Df?me|+q_GVlqAE>d0BDi;&M@#FX2nV^TV7C5 z(8R<9VCCiIfzjC5SXWmU0bW*C7HiF&O}lS!(QL6CFk<2BpTRhon|H#P(TuvstZ@z{ zM=t8D9V@kL`F{QSB_$;x96f*j{FyUnzz|%>z_qf~L_b0aOPZ_eCye*+&!098bvnuC zVA*_JFM%18CNdt>u*Nyyx#_EuG%o7sU1MV-8_jss)T9R1&6_u$JbCiS*Vnmo=U|nr zqoj_yCf|&)&DE8OaVFNKI}IbIR|X@Srpb@$*y0>ag(#RksRITen-wO+heBLNMn-t` zHALzOz>glq($10BuV14fGF0Ve>I#fl(Z$%&*%-+*8M?|I=Ty)M%x*ooK_M0{2u!kq zfiSPrEHlDl01w9WrEe z|6j*iDYHca!04@{0XZ&rcJ4fkSboPMJo49jvqZ{^zad^Y2@IcEDuqbH-D`sTCw&Ij9zl8z=%l!xmoZ_lS(gYh-?Xq2H&IS;jW77e9D>ySuFk*s$X+k?twB7_5qh?8hhxj?eb~hiT zM^q5rQbO=UqI6~j*ca=@2Y?`9r4c&Gn%Guyn9X4ts}q+a#3C3wY3m9cI4^GrjQC2? z##A^uCISCIhQhcy8W=H22Mt)10MA<&O8efDusqhq<>va$icdN3>9h|okvl|B5_FYS zxDdDQhtrX9VF)9!*wU#OPsmVVxwpAlc}C{gwJzA9fW;B5<9x>+R{bH)ugGrQi{sdW zGqfhJwh}m5@}&hcQ|h4UmH^{ZcHiIwmr(3`jmlXL+tP1=MNQ?91@P#{&ks@m+j8JxOvN^EvZQ7lQ-c67j^iS zv_b~`uqE<45puc!XR}ELM-FgO;^D*mRja_6fN7%aTgmcP9{{5%FBjCl|OG_#^$mNU;tu)akeSin6b>>m{uWA_1DOP6h|knJ^b$NA9tpnJ)Sen3eyYgf8zFpqHH5pEzqq*5b*w0{ zF3|Y*b@ZPugrd$ZlT~0v4JK zHHLQ**P(`2qRE|&w|xY6q!m$P46i{;DNR;0`+^rfxiiA2j!@gdws6G|F4UOdwRfQ# z+R&AZDdUA(hKLE|j!U_NbpEL31TQohqYvD&uP-HH0vSl5)v#iM8nz5se;4o{MdXj| zhZQoU4D9Y+6lyG~LARAnC=nyFg1CVl36CTJK9#;+bNjKhbzX0T^#7*Ko-TddP}T9d|DJ$=10FtEVL_V`BICEN2;Q?cH0NhYL3`J2NQ~+r%>AA|Yu82@ z6lN;a<|#kSRlUDQ?cPt6K$88RY5Cs1?G_~fdLKwKdwN`{B1@xuSNo3ocWNums%+~^ z+xE2=BUChLZM68KoGp*9;TK*86*-#ayW~rEh!v;FmS$*`@0Kgw&I(+nBtxw{OQ~$9 zLg^0R!Yh<0mt`t8JtB`LXh;(BC=oA7M}1UAA!?!_sVr5p4X^O6Hu(dLHXXot$jw`` zGF$5oePQv|_aFaWS9=NHJ@Tv^c+1{ASyY@_@#cw3^&tWi1i$_JgG=?nZS@7`o>zlN z_q#_LKfGB}d+}If#e$-(e}DW4=2X3HK--EpPtm;YJ@vO%lIt$dFWU0p-Sg!&=T1Mb z+}BVtuV@R(aUFeD(I(7}V1yOJ!zk5IzcYfoF28)3+fY2GFa@8ssm%ZI@$a<9*B`uV z++Kf!2tuSd6|eR^E4lr;4jJi^ZH5&&$OJz)RsZ4D^xGSece{HS_sx&5;vV|o4DJq9 z`*BwMwc;=bz9pM)WCHPj!fntUq>_pOhwJ^S!xdV_vFZTs z(A9PXe*^$LdHnuW^h4^W*;8+CsDAs5*gH6elJn2+9&M~Z=eUo%xfY*p9V7gF zWajEzKmT_4RaT79)xstXtbhN?p_`mliM3z; z_>a+@J^LFw_QA|~{uFS_h z>&dNvdnbThzakrgMomyl9P;7D@&nIGg^M;rvfz()#cp&6wZx-LX-3F{(-I}=U?3ie zi{>aw0F?JewfVPng~3u(8T=UyNG9ov&d8}k(#4kyAoT_aK4f{!9n|HCN zdlx*})4ZBQLq1aTa?T}B_9@opk%U+as%3q7Thxw(T_J%`wr^5Vpd-f`u}w*KY3FNX z%~m>T?F$iH&~n))D4jP-ymG}>Mq%~G>*cj+dAY+x4os3iI7RWFNE74^s#_fN@jK|@ zLlPoq$PW66Il?yq#QrP};sV{*=PP!JXy!;80^?CjudSmNq>UFV+?IX+>|amI?x67f z>o;4+EW{DA%(*Ifg|uUqV#ZV%Borc#5-KxO{?pr;@_3{w{3gp<0ePh3zp0;|tafO2 z3um5j9st|r*iHU^mqImxisFzw_Srf8vLkh@2;h*bBJXI*&^e%R(~#MXRn(s}{3|js zW2*EYL2;zQjSU$uYwO-TYXn0|cke@C@-H*WbE!cb7czK!_v#hef;prD;R672l?Kxo z(Q=zzIKu?<6^*IQ;`U+0&N4R8TR1Y2K1uT9-+wohRo>b{1tGW7=$rpf_~k=te8*M3 z=g{WiLdd**)_8qgTG7tjJNu8nX?V6}Ck5C(h1QMC5iBQWCl zM=Ka-DH5fE`sJ%xgQ`4b3*7f>+1*Upi408a`r1@vC{vv(eca9u`NPJp>-Z)hbABmh zs@2EOqFO=HHsne36OI9>kH_CVBfy#5h1wf53}`iBv`1lC5;`1ULep>}3+GtcVUKNL z1e1x@y{>=y;(iUN!as0{`}u$v0tf$a#?#U}C@Dxvhuv))I30OpYW}+3R4uk(Jr(o7 zoJn)&10G-1)jv3Q37O+IzW4<6Q*Wgs?Rf;PVVV497s&K0y@Id6xg(I;4uELV7RFr* zG!7Xr0ZA}M+%JT#+%j_hyB9BSZO+VBw}uP-BP9O)%hwdyj~>5&{hDBWcIPgv_(^d& zWCX7Qhl~oi&>UuqR>fI)FKTL0A!~s;{;i*EQSE)gnqyA-47lvSUegd_{R$(F(&1-) zVI9EOsy*UcfC*cJtD!7zt_n(!**QmvlxGU5Ko3FxpWz9BgI91+k1iL$-(r+$`nQUx zAu@fUI9xQd`Hqf<+Eu zeg8duv}oouIdqaSPW)}%(|3;>km*pL2uNfM==#=_ezsdnnYs;_A2;3;"hkjhjkhk")')) + + stream = BytesIO() + wb.save(stream) + md5 = hashlib.md5() + md5.update(stream.getvalue()) + self.assertEqual('2ce3745746c1b254f916623b92c3cec0', md5.hexdigest()) + + def test_hyperlink(self): + f = Font() + f.height = 20*72 + f.name = 'Verdana' + f.bold = True + f.underline = Font.UNDERLINE_DOUBLE + f.colour_index = 4 + + h_style = XFStyle() + h_style.font = f + + w = Workbook() + ws = w.add_sheet('F') + + ############## + ## NOTE: parameters are separated by semicolon!!! + ############## + + n = "HYPERLINK" + ws.write_merge(1, 1, 1, 10, Formula(n + '("http://www.irs.gov/pub/irs-pdf/f1000.pdf";"f1000.pdf")'), h_style) + ws.write_merge(2, 2, 2, 25, Formula(n + '("mailto:roman.kiseliov@gmail.com?subject=pyExcelerator-feedback&Body=Hello,%20Roman!";"pyExcelerator-feedback")'), h_style) + + stream = BytesIO() + w.save(stream) + md5 = hashlib.md5() + md5.update(stream.getvalue()) + self.assertEqual('420ff541deaad546519c8748118954d6', md5.hexdigest()) + + def test_image(self): + w = Workbook() + ws = w.add_sheet('Image') + ws.insert_bitmap(self.python_bmp, 2, 2) + ws.insert_bitmap(self.python_bmp, 10, 2) + + stream = BytesIO() + w.save(stream) + md5 = hashlib.md5() + md5.update(stream.getvalue()) + self.assertEqual('e3462afe1c0a38e1395c50e819d1b6cc', md5.hexdigest()) + + def test_img_chg_col_wid(self): + w = Workbook() + ws = w.add_sheet('Image') + + ws.write(0, 2, "chg wid: none") + ws.insert_bitmap(self.python_bmp, 2, 2) + + ws.write(0, 4, "chg wid: after") + ws.insert_bitmap(self.python_bmp, 2, 4) + ws.col(4).width = 20 * 256 + + ws.write(0, 6, "chg wid: before") + ws.col(6).width = 20 * 256 + ws.insert_bitmap(self.python_bmp, 2, 6) + + ws.write(0, 8, "chg wid: after") + ws.insert_bitmap(self.python_bmp, 2, 8) + ws.col(5).width = 8 * 256 + + ws.write(0, 10, "chg wid: before") + ws.col(10).width = 8 * 256 + ws.insert_bitmap(self.python_bmp, 2, 10) + + stream = BytesIO() + w.save(stream) + md5 = hashlib.md5() + md5.update(stream.getvalue()) + self.assertEqual('765cdbe8ae8e27a81ba54d07861bdce5', md5.hexdigest()) + + def test_merged(self): + fnt = Font() + fnt.name = 'Arial' + fnt.colour_index = 4 + fnt.bold = True + + borders = Borders() + borders.left = 6 + borders.right = 6 + borders.top = 6 + borders.bottom = 6 + + al = Alignment() + al.horz = Alignment.HORZ_CENTER + al.vert = Alignment.VERT_CENTER + + style = XFStyle() + style.font = fnt + style.borders = borders + style.alignment = al + + wb = Workbook() + ws0 = wb.add_sheet('sheet0') + ws1 = wb.add_sheet('sheet1') + ws2 = wb.add_sheet('sheet2') + + for i in range(0, 0x200, 2): + ws0.write_merge(i, i+1, 1, 5, 'test %d' % i, style) + ws1.write_merge(i, i, 1, 7, 'test %d' % i, style) + ws2.write_merge(i, i+1, 1, 7 + (i%10), 'test %d' % i, style) + + stream = BytesIO() + wb.save(stream) + md5 = hashlib.md5() + md5.update(stream.getvalue()) + self.assertEqual('1ec1ec7bc76911f3a100b6573711b818', md5.hexdigest()) + + def test_merged0(self): + wb = Workbook() + ws0 = wb.add_sheet('0') + + fnt = Font() + fnt.name = 'Arial' + fnt.colour_index = 4 + fnt.bold = True + + borders = Borders() + borders.left = 6 + borders.right = 6 + borders.top = 6 + borders.bottom = 6 + + style = XFStyle() + style.font = fnt + style.borders = borders + + ws0.write_merge(3, 3, 1, 5, 'test1', style) + ws0.write_merge(4, 10, 1, 5, 'test2', style) + ws0.col(1).width = 0x0d00 + + stream = BytesIO() + wb.save(stream) + md5 = hashlib.md5() + md5.update(stream.getvalue()) + self.assertEqual('b55f49cfd1fb786bd611ed5b02b9d16c', md5.hexdigest()) + + def test_merged1(self): + wb = Workbook() + ws0 = wb.add_sheet('0') + + fnt1 = Font() + fnt1.name = 'Verdana' + fnt1.bold = True + fnt1.height = 18*0x14 + + pat1 = Pattern() + pat1.pattern = Pattern.SOLID_PATTERN + pat1.pattern_fore_colour = 0x16 + + brd1 = Borders() + brd1.left = 0x06 + brd1.right = 0x06 + brd1.top = 0x06 + brd1.bottom = 0x06 + + fnt2 = Font() + fnt2.name = 'Verdana' + fnt2.bold = True + fnt2.height = 14*0x14 + + brd2 = Borders() + brd2.left = 0x01 + brd2.right = 0x01 + brd2.top = 0x01 + brd2.bottom = 0x01 + + pat2 = Pattern() + pat2.pattern = Pattern.SOLID_PATTERN + pat2.pattern_fore_colour = 0x01F + + fnt3 = Font() + fnt3.name = 'Verdana' + fnt3.bold = True + fnt3.italic = True + fnt3.height = 12*0x14 + + brd3 = Borders() + brd3.left = 0x07 + brd3.right = 0x07 + brd3.top = 0x07 + brd3.bottom = 0x07 + + fnt4 = Font() + + al1 = Alignment() + al1.horz = Alignment.HORZ_CENTER + al1.vert = Alignment.VERT_CENTER + + al2 = Alignment() + al2.horz = Alignment.HORZ_RIGHT + al2.vert = Alignment.VERT_CENTER + + al3 = Alignment() + al3.horz = Alignment.HORZ_LEFT + al3.vert = Alignment.VERT_CENTER + + style1 = XFStyle() + style1.font = fnt1 + style1.alignment = al1 + style1.pattern = pat1 + style1.borders = brd1 + + style2 = XFStyle() + style2.font = fnt2 + style2.alignment = al1 + style2.pattern = pat2 + style2.borders = brd2 + + style3 = XFStyle() + style3.font = fnt3 + style3.alignment = al1 + style3.pattern = pat2 + style3.borders = brd3 + + price_style = XFStyle() + price_style.font = fnt4 + price_style.alignment = al2 + price_style.borders = brd3 + price_style.num_format_str = '_(#,##0.00_) "money"' + + ware_style = XFStyle() + ware_style.font = fnt4 + ware_style.alignment = al3 + ware_style.borders = brd3 + + + ws0.merge(3, 3, 1, 5, style1) + ws0.merge(4, 10, 1, 6, style2) + ws0.merge(14, 16, 1, 7, style3) + ws0.col(1).width = 0x0d00 + + stream = BytesIO() + wb.save(stream) + md5 = hashlib.md5() + md5.update(stream.getvalue()) + self.assertEqual('335d9b34aa4cf170d7416b5313a3a260', md5.hexdigest()) + + def test_number_formats(self): + w = Workbook() + ws = w.add_sheet('Hey, Dude') + + fmts = [ + 'general', + '0', + '0.00', + '#,##0', + '#,##0.00', + '"$"#,##0_);("$"#,##', + '"$"#,##0_);[Red]("$"#,##', + '"$"#,##0.00_);("$"#,##', + '"$"#,##0.00_);[Red]("$"#,##', + '0%', + '0.00%', + '0.00E+00', + '# ?/?', + '# ??/??', + 'M/D/YY', + 'D-MMM-YY', + 'D-MMM', + 'MMM-YY', + 'h:mm AM/PM', + 'h:mm:ss AM/PM', + 'h:mm', + 'h:mm:ss', + 'M/D/YY h:mm', + '_(#,##0_);(#,##0)', + '_(#,##0_);[Red](#,##0)', + '_(#,##0.00_);(#,##0.00)', + '_(#,##0.00_);[Red](#,##0.00)', + '_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)', + '_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)', + '_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)', + '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)', + 'mm:ss', + '[h]:mm:ss', + 'mm:ss.0', + '##0.0E+0', + '@' + ] + + i = 0 + for fmt in fmts: + ws.write(i, 0, fmt) + + style = XFStyle() + style.num_format_str = fmt + + ws.write(i, 4, -1278.9078, style) + + i += 1 + + stream = BytesIO() + w.save(stream) + md5 = hashlib.md5() + md5.update(stream.getvalue()) + self.assertEqual('a87b0d3626f3ab3a2ece9bd03df1bf79', md5.hexdigest()) + +if __name__ == '__main__': + + unittest.main() diff --git a/tests/test_unicode.py b/tests/test_unicode.py new file mode 100644 index 0000000..197b648 --- /dev/null +++ b/tests/test_unicode.py @@ -0,0 +1,52 @@ +__author__ = 'hrwl' + +import hashlib +import six +import unittest + +from xlwt import Workbook + + +class UnicodeTestCase(unittest.TestCase): + def test_unicode(self): + book = Workbook(encoding='cp1251') + sheet = book.add_sheet('cp1251-demo') + sheet.write(0, 0, six.b('\xCE\xEB\xFF')) + + stream = six.BytesIO() + book.save(stream) + md5 = hashlib.md5() + md5.update(stream.getvalue()) + self.assertEqual('27dd1a8f898c84c58be1b6ce3e704371', md5.hexdigest()) + + def test_unicode1(self): + book = Workbook() + ws1 = book.add_sheet(six.u('\N{GREEK SMALL LETTER ALPHA}\N{GREEK SMALL LETTER BETA}\N{GREEK SMALL LETTER GAMMA}')) + + ws1.write(0, 0, six.u('\N{GREEK SMALL LETTER ALPHA}\N{GREEK SMALL LETTER BETA}\N{GREEK SMALL LETTER GAMMA}')) + ws1.write(1, 1, six.u('\N{GREEK SMALL LETTER DELTA}x = 1 + \N{GREEK SMALL LETTER DELTA}')) + + ws1.write(2, 0, six.u('A\u2262\u0391.')) # RFC2152 example + ws1.write(3, 0, six.u('Hi Mom -\u263a-!')) # RFC2152 example + ws1.write(4, 0, six.u('\u65E5\u672C\u8A9E')) # RFC2152 example + ws1.write(5, 0, six.u('Item 3 is \u00a31.')) # RFC2152 example + ws1.write(8, 0, six.u('\N{INTEGRAL}')) # RFC2152 example + + book.add_sheet(six.u('A\u2262\u0391.')) # RFC2152 example + book.add_sheet(six.u('Hi Mom -\u263a-!')) # RFC2152 example + one_more_ws = book.add_sheet(six.u('\u65E5\u672C\u8A9E')) # RFC2152 example + book.add_sheet(six.u('Item 3 is \u00a31.')) # RFC2152 example + + one_more_ws.write(0, 0, six.u('\u2665\u2665')) + + book.add_sheet(six.u('\N{GREEK SMALL LETTER ETA WITH TONOS}')) + + stream = six.BytesIO() + book.save(stream) + md5 = hashlib.md5() + md5.update(stream.getvalue()) + self.assertEqual('0049fc8cdd164385c45198d2a75a4155', md5.hexdigest()) + +if __name__ == '__main__': + unittest.main() + diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 0000000..68fe894 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,47 @@ +__author__ = 'hrwl' + +import unittest + +from xlwt.Utils import * + + +class UtilsTestCase(unittest.TestCase): + def test_col_by_name(self): + self.assertEqual(col_by_name('A'), 0) + self.assertEqual(col_by_name('AA'), 26) + + def test_cell_to_rowcoll(self): + x = cell_to_rowcol('AA7') + self.assertEqual(x, (6, 26, False, False)) + y = cell_to_rowcol('$A$9') + self.assertEqual(y, (8, 0, True, True)) + + def test_cell_to_rowcoll2(self): + row, col = cell_to_rowcol2('AA7') + self.assertEqual(col, 26) + self.assertEqual(row, 6) + + def test_rowcol_to_cell(self): + cell = rowcol_to_cell(5, 27) + self.assertEqual(cell, 'AB6') + cell = rowcol_to_cell(5, 27, True, True) + self.assertEqual(cell, '$AB$6') + + def test_rowcol_pair_to_cellrange(self): + cell = rowcol_pair_to_cellrange(5, 27, 9, 30) + self.assertEqual(cell, 'AB6:AE10') + + def test_cellrange_to_rowcol_pair(self): + x = cellrange_to_rowcol_pair('AB6:AE10') + self.assertEqual(x, (5, 27, 9, 30)) + + def test_cell_to_packed_rowcol(self): + x = cell_to_packed_rowcol('AA7') + self.assertEqual(x, (6, 49178)) + y = cell_to_packed_rowcol('$AA7') + self.assertEqual(y, (6, 32794)) + + + +if __name__ == '__main__': + unittest.main()