From dba7f0999858ad8e59ed0d861e4f2f545fd7a591 Mon Sep 17 00:00:00 2001 From: Sebastien Robin <seb@nexedi.com> Date: Thu, 1 Apr 2004 12:09:02 +0000 Subject: [PATCH] added unit test for CMFCategory git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@636 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/CMFCategory/tests/__init__.py | 5 + product/CMFCategory/tests/erp5_crm.zexp | Bin 0 -> 126471 bytes product/CMFCategory/tests/framework.py | 112 ++++++++ product/CMFCategory/tests/run_test_example.sh | 10 + product/CMFCategory/tests/runalltests.py | 29 ++ product/CMFCategory/tests/testCMFCategory.py | 249 ++++++++++++++++++ 6 files changed, 405 insertions(+) create mode 100755 product/CMFCategory/tests/__init__.py create mode 100755 product/CMFCategory/tests/erp5_crm.zexp create mode 100755 product/CMFCategory/tests/framework.py create mode 100755 product/CMFCategory/tests/run_test_example.sh create mode 100755 product/CMFCategory/tests/runalltests.py create mode 100755 product/CMFCategory/tests/testCMFCategory.py diff --git a/product/CMFCategory/tests/__init__.py b/product/CMFCategory/tests/__init__.py new file mode 100755 index 0000000000..4817854199 --- /dev/null +++ b/product/CMFCategory/tests/__init__.py @@ -0,0 +1,5 @@ +"""\ +Unit test package for CMFCategory + +To run all tests type 'python runalltests.py' +""" diff --git a/product/CMFCategory/tests/erp5_crm.zexp b/product/CMFCategory/tests/erp5_crm.zexp new file mode 100755 index 0000000000000000000000000000000000000000..974f5f9f92dfb8195f9d69bfefa3cf74f127ffe4 GIT binary patch literal 126471 zcmeIb33MFCc_$8Va1QWr@+JrlL4p{N#KlY0Es`Pyil<044N-zdL!f~kaWI3L>ER&< zws##HQ7FmR#&Hrmb`o2F?^B7BIJ+CI?X^S4rjIzL9begfyX*I|$A91d?R&fL|6lJ{ z-F0<WO;1mwhtxhnewHxbuez(cy1uWz`mVlsbo^`;{^!L5N38!=)s4jCTHo1RcB(LG z<_C|SJG+1I(d=YlR?nD&hYR^sM$hNR^x3&|($rD4)+W(bnJ9AF9GpirajnfHEfe|6 zsZ1g@g=!~IU0iF==4O(aR6c2@vYEt{lztV}yNKyj-b4*r)102mLmTU7Bl~Gx64kXx z0q)uK_^JQ!a+B7<I-7;jr*+(2^8|`&t%>ZV=k!T4k<3jRsVh2aiE9n^V;}r6YK?16 zXQ315PtQ#1s7-5UKh0Cgxw%wk2DO{!6IyM;%;`GnU{@bFhC1U~%i%E~=LgT6vHn1- zwR-yJ8hqI*7{^+zNzcvgPfX@!6WPmXomOk6%(RZyYmp=8PN5CjIyU&ZY|c!k6Xx|f z>j^eapiObD`HV1Os7tHEL(FE-W-V&}6+2};GwRkl#io?JMb}m*#5>ceh_Qz`_!G1> zZYZC=2S3JYHo~jf+~w(X_9~v>Z4+p_*2SPHvQ!e2>0~}{zqQ^8v_o6Vnp{fe^~5Bs zo|$a!I_jH1u;A))`V6cD)UQSJg-hAoR4QXF4YU)+&8|#NTFYfFX&PwP1lp~wOU&i6 zb9&Cap2!=z&R_5Vf2w~#gGHWd2tQSmFezwQYp2UOHb&R@h}M{xH4~}Klzt8EVK+W7 ziuT40;a%^;w`)z1LDKo%&n`IlQ*@xnNbbRxu4m5)4~4l8rq`apgA?dptv$i!mfrh5 ze(#^5`-|NB0etT$zc-$|2Pe=&T3uo?TgaH`VRn}TC(t8tElQU2Nj)<IZ4YU6<gdfd zJLR&leveF`N3~7t?(kZZ>Fi7*r{@c4GjUnJj*d>CV=(x1b`lmfd0i<zj~<K9qtUol zgV#AauGQtu9A>n~jkU(X!aO<=H;x<lM{mJIC$)`I7qhx)WT)^FJT-w%!_#E1X7n67 z6Q4k5VL?r1bIIB3=n1VcIhjrr^1v?W9LS5jehHm7(HIPgtsOd_8k>oOKSvje%;%f% zEb!s5o7f8whBH2ap42u=<0VsKCNIIXU7SEq!CE15iuV6B@BbHQqDcSG;Ql)ju+GSw z;`fkGBv4`=J!?N-aspk_YR_2nF`3M38`xm-DO2aq4TGJUKsww_zXq}|k7Y3(%QPR$ zFVRequ^2Fx!XTBT)_<!%Fc19f5UABEfy#FYEeZ=UV<ur|$)VbL*dE||U}`4y>$PUW zq<9m_qXrW-PM-C*Lq*S6l7Eaa^KqDoD2kpwhnnV5b6l%8v)MFWLs6qa>&WS_slon` zDCE+KY!1^~jCxCcw>pQ^rZtO=QM<NY9O95T{0=RuU&CmEEb-2<j>f90i*)OaefTAN z>s|E{Jo#G3gB{D}W(V=VV5e=sd$IL5pS!r$nm4mKeJTN4R~Dq^464<l$IqV`ICyaX zy#phtPHQe?QUK|AvFWJ(`0#L4tH~s1b=X{6r?crPJ!j27?C*KhsI8haVaIHohCXfK z(?qwbX078S-XmjEddz-4Pz9i^YAv?RqgJhR%t-0E-1WraoNk(#<fH*FxNQO^i>%EK zSep%O;GJ5nHg;^_Anc#fnOwFoXZOEm0yfY3NA>9>NEEa#X}ym1&eyR)Yf4-K0iD3l zl}8)nljn^j%*x=SM+VPN=2CN@$s7h8<|iLL4Q&qP^QoB()@kxlv?+_a=3ytTOC<9% zu)ezI(U$xrCQ)J_QMPi4(j!WgZMxBB!UkAp4LFZ_=g|&h-302>>aoIdDSHjY;US|r z*euhwJncVGqt)4)1lp-pX$?d<$)jB$5qHP6Mv!btYx_q7T0Nff!*H8H>$!)FIEcex ze)kc|rZ-;sfAHqCL0&%e4tx2{tgWifmY`_AR&(~u`7v}rtA}@CiQ{{;D#F%qTYGWV z{ySKl9(S+icNdpu3%rkfaz;;FNu~?%YA}Cm8?d;^Wne!5YHBJ8D>yNoOr`ZH&;sLQ zh8|00<_c!aro~Jk&?{o>ib2$n*BY}|V1=co;LeTnC<+SaRCX35Ng|icnsohE;RnNF z7t}$R@VdO724xUdZj}~gbDc*m@VhCQP6Icj3$w5eT7l4}Po*r8&8Tg-S>8;V2{M1} zKp@&&2gY)`#q5@<*okjJ2z*GZf!dPSv8ZLYU1QVm$gmi;7<4Vr>WtLXl%4^N5gvn% zY(4y_$%9A%#j#3TjR!4_b0Z*4FfrEh$GX)fAhaaY*382$VD-=iwDy^F_7c2{qzOCl zrGg1_xf#d}^p2oX!i7^d119E@u&?IP7N9lZB~E7{h6!Zytw-Mq1ej|4kf;a#t|xau z+u%pzBq)cLiU`aD)0f7_3e*dK+BYTqu>%Ml^wsml0_;`A_5{3O^C%80*5Z(U&Ko-! z3-1CJ2F{{N!GOrZgG4D9!hBUnmg&emFq6?Vf%a;((0?w8_Gwi{^NDJBA9`xWFwy=K zwMO(rwb3$x4j8Qy=pF+k+d%^sgVCWioVB*EjE?R#I#0m!T}@4aDs>+yHLEAk{RYUi z2aL5^8`&o81&QC$gT}fORmOTy&w$%%$E+j5!&=kn>}(8_wOkU^wMR^J2sW-6-8_dC zu)|u-x&Id{VkUYNWC4&L!?F_{)#|K2bac!FT}x{M<PfZ_D=G6j8r2%e-@ih~P4u{Z z;rYv{bQ+z|8jfW_4&dROG|{QJwhk^O@^=haXU@oG^f8zf(7GDOewF@}ML=gvtar8Z zw#Sm!tX5BG5%?3GGtqh7*f4>{3^>wg1}sMdmY=bC0$nh=VJ5dspf|<iM!&YIuMdrz z=*hV8umS(Q2!nrASjSIc;?ugpPA)fI`R|}DX<L}+!<%FQw(@Ll@RX$`9!u%zDfEn1 zXa7VAtV7u=Z8Dp^oYFyaYC3!L-1#%76DN;@EKC|(;XU-g`>xOFAY$@5x&-gBc^39s z#<G(WXbKcq>o}r=5XGAHw25Yt1}t#{*0s@lqTAS^)nGnBh5@VAfQ6WXg=nu2^qldW zi7qD#AU~3z#G&*&nuTQt?Lbf&AfOBoN(RUwIF?nBwN+(+P=Rwtl>s6H7EzS}qQL-( zV1O(zfb03p!r#EV2Jor@>}dc;8o-HsbnrKDm_07wA13nuyDjpoo`FSJa#n#Q$gFa? zuQl1S(H1hb<1KJQq92hH0;<ao{@V2qT3xsV#}DTLaE;c^uf#`2e0Eq1ihzN&xb^dB zL)?hMF`>m+0~6)Ccq7c&7U}XKXAhf<&av55f<hK~_J7zDQ2jBOfK6;!S+<ZdP#6b~ z(9>(R)_fR_v+OsY0(i-=Q1JPxmTu9J7pAc7!*#x@XXmR1yech&M&skZd*6xo(_IB` zRM>{l<bJ$n@ni~{pKa5KyfBRo9B!*bE4NCt;f{zgqn%%dEgLY0%y`j>o2j(B)$?eL zw#vMO)=pqchJDaj4|)zggl&LjzEKpio07&_Q;WjOr?0RpZZy092Q8e&fz51i&;Ae8 z9XH(5y#+={RxL~}S+zUhrMc!9)+jl{k{5KM%09KgT#>8#;41f&0ryiw4!Q0$y-Y9j zGS^c7HR{4^-Dw81#KdL;jyK)b;@&ckVt8>kz~bHvFGkUND=hGCvcRpw(U8NiX5Fy| z*7tvL9yngKN5AR=@X&Ykz@c~q?<2>WlOQ|c$k8W0*WEjHD8|2X_Ncn?%2z9M_V}v3 zPV1^*ovxfc@?e?<1$pJ{foB1Www1Go;_Tt{6nLIL);WY~qB6%2GM*VYHiFGbc^IiX z^(zxBMdT=gPb$X><OJe*8aXsI1y<GkIoo$|8mr*f^VUJcI%qtB4;tsVIy`~S(}Tts z2$aZdDuXnwK0dsAWcS{Fbisu42T<XxGOk5NhKJFUaQJYXGroqN@}Utw%{1Z(tU)=> z8P90#XU;u#==AaPhsKW6(?&u*Z9EId4}OZ+0D8J&>q*ih1*j6v*FI^0fn$mvEcAIa zU7>>oRncy|@^!EiYu!v;7EWPfhfW?nZy&-8t;zaD&I~D-A^!)HuMw@Q!Uq$p7kD1h z+ecxslzOac=VS460M@hdS-Dnwa_%~KEHd|j6;vODHGbCe^V#<4c>kcN#SPlt5<$j2 zWnFdd=o8w}^J9Yo07h!?s45Oq+hhgPa++?(3TCgRVD6YleN@5RE-9E+>$taqX|?GG z1+(XvaDa+^_+@+Q8sI=*wu0F(dp%)0N7>2g#w*{%C#N3O+B$D0GgHajl(oF_U_fj- zZ+VjJ<z}6!xQ)4y+L)u-Cg_G5wUV|VNj#sLgF_pb$(#79{u}TUfD^!R*C^&|(MSze zAaEnsoYdj`-=@``vrI(oAP2yB2gaEWfUpgqQ+FDwSC?m~UXw*@=i$Uf4b}Mc3x?_q ziYFod)Q$W(Zh{*bo}&>D#Gacj{1o_Lx!EOLthd@NyB4-MTnjPFSFn}%3ao2-=#h1s zOCD|4>S2(U$FP?V>04-rYe;=~NVU)uMg>d9KG5EH<!@2H^bU67rrySL$2%hibb9w; z@G*|WjR9lO7}EHX+XG~9>)PaY7zp?gfivOUYTGjQ0lpt_aUKuA9oXaD0}T%18(=EF zujLs)_X7DoN^Sx&ws2auxcdQlKt!hL-uECN58=L|N5Q6@wqM%AaN9L-JzcswhHMe@ z2(&+h?}Q&oTofj?+S%<6L%SoiU8iub>Et!L#iP*TsMRyJ;2p~8NxSo7aO17Q1(a{V zv1NJRZ8k!W!R4d015Z9X4lN(2E!QdTJc-SfC!p0y+zQXB_+Yeuvf58UyVJNG9%qYn zH*Wqu1K?Qzxu4<*Xw?q(zuZ(dlgU5?hwU&p2OgI58ugBh5$}j5-S7fmpWg<}0eCCw zoUL)ZLW{hsC;7$S0ShO-Sa``#;VTtGV-DgQuiU~WPmeRvGyFL%Yp0Lb_ADRMcTrOD zK$q~alnZ8(U-~^Tin`?`xc{DDKC<a~>`(5P0E_6Eq|uHIqQ)b}VdGKbF>v{xFiz=4 z=LDEW&n2-*{c_wGHuf0%jC+iGjr)xU^@78jmIiN{xFTFjeU^{w`zRxgD~rd)yk2wI ztKjgKBEegl)9N47!9|@+Bk)?n;<6dr<URZV6>txNguR0A@8I^Uy!qduYp&+kt!W~G z49|lN?akb0@f)H!ZC+P9SKnfyw`xV%=xx03AEJLIO~yaBdMBQjw`+}-DGob<&~IuA zN%#(ax4%d4l<u~G@1`;y{?<Ht!FbCA`fX}Bya9$oJV#9Ky~ywUBlMDMj$VfQGDGz@ zZ8ak@344Vf<p8uaQ90mR8rc36j!IxK5PxBKDzyd(G=O*w@Xt4D8^DGfn=MQl#Lam% znUBpt*g<9xd((3|Dx|PSKLZ}jX|Nz;!*B0#%ORS|$0!^FPhBjNCAT1#Hy1>YXms8R zbfZ^T{!E8Q5StSk%pB}Du)l#@-r>h&{yOZ#6#RAAc}aX?*k{RHtJqoDHkHalVBqxx z9HMNO7j|2!Jb2iH8HHBVD~|n`^@R7pbX=u%UNs<AB|n#(!~rWh#P2}d9(G}Jza(~E zQuiqKSVn2@cGs5M(&g_2SBUK<j0t=GR%W;E0iN5&d2YMNbG^h*xWfeZBlQ!4#~w73 zR`6a~4jMSLbvV6sJDuJdXz1|Pzy+J&|6M@e4FBy0e~~pr;t$$|0|G!Xclm!ffBYkY zNVigFlR@X%1c$wq>p$YYp}!$4cVLC(ERJ1aIg8<av7DzW7y=g(HnF+z2%O_$b6K#K zrct?E81=)2z?EfsVL2DwBwTdOHx~(7Md@v;y^y(_fp|#4q*t#EKAA1VY#X0G6-#Df zAYW%8xF%`F@D2pq4QwV>unjgZKzNPU?$=mGoX(x!)S}a=9GHjk1BS7!Dfc4Joek86 zT+;4e+SzLHu<|ALGIyX3-pp$9spoYZc|*4_QSo&hg+k^g+p?-)Bj7a_dH{cKnn1hw zZU!8(<wP}$ZrD8!yOq3~mEt45+x-$kxl8VLL(bi981HsgoC)+pq9HgRev9zo^a>xw zDxh4xLHLjvf5PTEE3)fubKNgO=eoZoT=%SRu3I^_2?20#=wll(4u`;Ljx*bFh_N+O z(<vNbsbDzRI~>~_Y;}RpY(Kx_XSQz>e*2McesfteOKY4h*uF8F%v=W>Dh}nX*EV5w z6DAeBT~jeYV;GHDXsEg+x2!a2F=d~VkP852Er{YAgaB}rfhFqKz|x{c@e?GNHK$cu zeaLz!ONYjfiH$sisLf%CX`i=}2AL%Wn^YW@7|W<)JH0HU3XPS<Mis&Kf^|+}d%*@2 zW_!UpCJju+#uJsr1=~(Y95ObXG+M?N>s?{nNelf+vJ|ks$?P$pa;ohyIOv<(V{pW` zXw$(_-_$;XgTCE5EkwxLnryFRTi?M<GJRl@fn`fWxBEqt3?v6y`CPk9$OWV(nSptn z@CQ-X<aE}2BnyEDIKK$2NNC6zF$;E=jVB^@h`@;{17^b35#j0>{C_LpR>Um)ZH<=L zWri)^ks}V5YpFlOu~4OKGJBm`Do)67T83aGEJB)&3jV8z<K^1ycL<+P_~&!M=}?-< z@4Pj%5gS1*7Z(^ow_)y{N=;cuRZFtqQ>=x?$nj_S4DR6D)_K$hFP8BwHjz5`7AJgg z3o2%7k_mztnpsdWOAB0#nVN7hW@yI6n5AV4D&}n!KVv=@xefC-<5<k$%2TVH*+DrJ zGr7xxirL%Ew7}#x)Akf|ZEa(`yB&BJ+`W`{cZj^(M|d}GLeekg-JSE01ZA`Xx52~` z9<H^PDBA4|cL&CViQ(byaEWa|g**cII|hbSYovr>ZJ}T%XDlm#o-^Amo7rmqKVUWw zKio=QlokH~e6x}lb$9ck6#nEpkRb&rEUFBtrX$4f{wvs&iv%eGe?yKGNm1p&i4V{m zsRylWp(wu-ddSLVuS-IK3JAG+M60_1X*Go$I%J~5R!HCx91{2_-&rTnQ5q6>jHVtv zW}?xgm|gT!blgYO-{UOm?*we-&ZxhWTJw=Jr^gN*8MD)iPLY5=kk~Z6=rl+z9`F~1 zfIlfY_Y4j9JIhRJPt2op6^iSF+4r3=^j)HOyy9Q+aE3~h);(4Z7}!X^a=;K(o-z&? zKEhu@Jag0^vI3KJ&*Mh-a*i9ooeoDb{4V>r@IAt{IALlfdIF9P4&8qxdP36u1=o`@ z3M>Spoan-}(uONyj00{7?7ICv;hH@wT(c4Y;XW~!h&d7+wysFUka<T)%zxc+&<_X) zWqotdO7MeS<HXmV^agRd@(|pRS;v{Mrr;hpsX3fM6^(ho<?BjXlgo;E_&dUW=@s@{ ziFv@q=-hF%Zj-Mv_Q(;{9x?~ge9*hidp`-C_kKutZ?|vWTZw#FiG090da>ep9U*gH z?FA?UrB@~jVmSw|zb{*DT;ZJ+-m!T{k-roI*N72BE$5Ocs8|}yXD3tObf^sb@F0U9 z-|--#9})J;_};o!PHiivHh0LnBhfDe78LD;yl&y$Rvd4Kt~maq&3#qlz<s4+i+t3g zh~jb*Lr{dmE-?x9Bdq)1c;%O*ADoyHLO%mmKcut;ul_b<Cv4*Z;3^@<AtA!5kHE+A z3o?!?;f!Nfv2j2NO^;FhoQy&XXB2GKk3%6qHswDfojeszCvDcFiUl)yS3f0PJq=xj zQrNK>ZfMtdJ!Vys79Q&#NMBdOd92+<-k_C*?ePkKLWc2tIKvn!G7MVI!DA#pCL_U7 z?;)_(8fzrLK}TqX3S8J)cmcQX%#+i!ZPk-YRS$RKqBOL)yHzq|7cNJ$+bTz62Wi>$ z4tGJGkfYrY6rxeqShwyn3?*nTpL3L;`9u5h8&AS?ms{hI7mTT;1!L;G3&zwl)oigE zHTd(V!q-g1Y;>upOw$A|QEwNOiPEAnEv%?aD=8||<|-=FUS3g|jx6e&hnnlOsLYyq zwAQ<*%sT$8tI+zm(I}QY*nopyaM25~wiv1B!>iFOM({^XxCo-9?FY|UCHS)$QlUoc zqy%xMHse09V&CmtBU|K>H8DrYnypsJ8mQoImAAK6&Ndpcxm~E*+{;23cR&bZ9}i)K z>g@b;68%N0FzhtZE?y7@>Q0j~Hj6c&v^!^O5I+e?X&B-SYtb-n=vW>jxGAr9vj<Yo z_d1Hj?{l`_Z_UsFdUsNnW}o=3?llfT95__6(Ba!AIdmUXNP(}2>@)TQJ&G$bSXq=- zq3{O)dyrzyfWhZoOuHn`LjXODA$&WQ3Pp<1*i>$-C$(p6vcrZ*YR>G_T24Ws{}eA% zbc~D!>YGBHbDWz>3(V|OFOTDJL6H^sIE)pFaPM<eTRBPED@y8+iZb?;czEwfaT&Xv z(l`DD^bDa|(6cl0={$7qBRFLYF4yS%d*)GJfR<2=#vV%1S|H=l3JPr7??HSpS03p_ zX!jIuhsWtIsq-{|@R^c*ywuDy&`J?!n1GTx&$5y_Nm5ehl5|5}MrN@Nmyv07&z4n4 zrbtO0_QjGLi}kp|3|uTkx8qNhxED24;-;+GfS!{$?lQha;EyzK-iYgTJLFylH) zmR}S_bDp8Xh|gmV-_6Npd48iNWJ-fA;46GAq$~V3&FHE%OU?y(4c|z)gs<~Uqv&~Q z1aHO{(hp($#ypybT;B=w7USt84gq~@9KPmr$~a>@VT>6UjBx`hD?)jnw;73~5uL#0 zXznrYGafJ=qP2irg?|3IccGuR^Rcy{-;~Do4m>spw6{NR@lJ?qcNY3t5DNYL7BBSk zf>7w^w|Nh(=mzdVuy4GG@9z+2FY)GW=w(;)cj4w(!U{6&-TZ=f^d5YHTM)k2nqX3( z=Y3*<o`0dNwDUXj=>5jd3G}<P(#{8<(oRu{@O!-f4)pud4E_OhPV4S0R@=H&WTgm* zUAAW>a%`mth%>Pa934eI#lSL17U7!%_@Bs15fG?65`JZ?H%J_ehw>J(ef4!w1Z1%% zY}@K$#OA}A`@vFB@<>{(K68{#V7T+ild4STWtEa6NsIWqSol*O)|Vdb&tl?|1aj&k zPM2gUi8xi#9a-W^m=t6Can2-7O~eV4j<idhHp$a2ao!~RK9&7RMeDm*j!%2ybV;77 zjFTm!g*o{27<?Dc`b3Zw1=I9gVRnuZij<UNS)DjxQpoDGa-mtKD9(juiJdr4!S!Vm zoDZ$a>cn5eQYLP~x3TQJ%N@newosLhl#Yyp(W0LlEq01Vi(Mq|a<>Uzm!o-?@Uh+@ zTA7D@b!r&wZIFfuv2J#nv$MYVh@FiIsFj5P|J|T9ixwZW2WMJ=fx>y+K4TwzIx7i9 z@2a6F&uXj0BzX<?_Y~oyQwJa~qQgS0x54Q5K&IAe{xKuy6TZ&`Ia980{v0G<UV`Z& z$)ERHrFW$&dgaF=sIspO{9>45Tw{xp$U8xl_)Dn}4iTkg$Vy$WH$+`8W<(2n1Fv8` zA%1#{1>K-MQ!@Ddx8l0pu87w?a5^no<!iB)aOFz9p_St*?8If2iT%I6-q7NfI~^*t zSV#D6rQXm=y&?SF)0KKdplezwBcQN`U2kZy`)<`6TC690{vqGmuIP~|t?u6WBlAkV zA?xI<I+?E28xn20aQX~TZ-^_go8iD+G74zeStJZc0Qj{s)1xXsn%bVus+Dggtb8j0 zo1@B7f?dHNAs<WY&gOoV$<9_dWPY*hj_bkj(OvvcB;|X5T(JhNgv`4`=7k89kQuM` zF+Bqo>$@B+zql!=!3fS3yoQcwhK<^cw^Exgn=Z^|R=yhy^?%`u3)o@vI{j|2B5-V_ zHlL5$e2W`bYV%p8iLo0BY6e!>B?3iR*ksGXNW!-g;s`r_J)Y7-cWm<tzu33!a5cZ7 zi|sojP(#o@#EjX<>B{T;8}7Kyk29j+pU6rn%oW@B>(ln_BS`#>Rtj^G92g=ir7%}K z#N`^tl(`Zi?3H3_`|Gk4=3)!k>sCr(u5eAcTqA}pzhO&ZF18X5dcpVMY{f#nVj*^0 zh<SQ#$lFfcW4UZ$u2L3a?hRcR)B@}?WN>}iA%ks%F~7aSm@BzCugfBt4TmPp)RmO^ zE1&)wSjf$fLh^hrb*W&cAkKcbfpY+$9LK3-rZ5d@r3LT>4H|<c4ozqr%Ox{;T(}1f z8^b0V(fJ1t!OAFp)^`ssL?D0Gmvi?Tw6Aom!+vM1!vP%Y;FG)8qI=?o>-vM90m1Er zyWj4cyWP3CrOl#m^jLlJAv7xoh<?rx=Ku*QGgkVK^{H&AKO*GI;M^Zo2olZ%YQa@I z;JfB?;L|a)IfPSzqQd94aWW9gIl|vgBcI!r^M7b|5sprDCnn+CANzCLQ2f@;yV>GS z*p9J$o2`&<)5G&^wu$*R+eyAnuZh5_awVBAzz2`|<`I0ms1<^Uz`P8JHjT%!keUum znMeIb$Arky5HSdk4QV#@4_wN{h8~K-2e$1{LdY<k04BClX>d3awCX-l%d%eVYC4Xr z7tWHMLBo&iWS}bN$Jn4}>tk&E{;MG-(Qt(??ZqtV`bY^6PwF5nxl$Q-<t$n5S+ZzN zgOJtX*J)+k#U7h?s_t^pzQq_B$1||4hEU<GlU6u;RG&^lO`vm7tdG|>Tii-|yQ?Jv z7q^g6oD1if>#b*o(pIc!-(olEq4M<s7dMlxCc}A{^{y9amE*BK&Bvdvi*$)g5{9s5 z+G&@^aHgQMBHrRA(pQD~#4e|$s)uLwe`9f@@XS2n99P0Dq_I*nc*;siwrikOv+oLW zofAsUSS{=VT(#rH%P=l(Abo|pdZ6myNvQwjn%;G!D;#MM!mC_OUnOCG%N8N<#d^}+ z-7PS=xP}blQaDe&&h^yfly_Zt@U^7JyI#_Av6GA>Z00?WOT9TO!Y;19Gq2mK$fV+3 zsg~sku4P$gSF(k4_q8V4Yn8FwH;?wmji|BKXfgJ{xtKONAXKoFO5vh=pn~PS|52!5 z8A+1&T#Zkuo6hF4Q-w)0KZr{u4vuBB>A@pVy<jGryN;^0=EKRn&VF-20Rv1-W(ye; z)l%g=^1@e9U0jPE9?R)^e(<E8nSm6odaaK9)c|U`7Ae3M)cE*A@A}{{t&bRmBT-{w z)=bzHADa06zJ|+GwvhXsIb;2SqFO!uvjyL=Her4Jwv}J@b@;ZnAv9~p%{mf^<YXe9 zolK?^IoR*>i3IAHN1fWL=jPDr3ABdRvRVtZtZ)g)b!>juTSY1GjHKX*wIOb-SN+d) zS7KmADPh8)D5c?^%q|!f$?u1$Ba0CGiCr@Ya+=H_nf?<Ec2VWX3tuBw<>4y#Ji+&& z={%9^;_wfYu7lScV{f#EP1^@=;8)4+a@?NnI=Bn@v))8dQMK_26aGO_I)ty=L#Y0k z{~^>Ln$D$AK}SO8FXGNU*J7R4z(!q<-)O_3S>3)*1AmB@P-EN>n_9(B8xCbm{OyT6 zVykQ6kzQC`a?_ea`IL@Y_#IzHt<Gj`xbwQBg<KX4*zLUGyHJO-VJB|bd@6fg&kUS_ zwFAtunm2zpTH|cK)@pucQipHPAJ0rdd&CN&E{vYX1yRKZv+AMNTg_p>e6fA-J$SK+ zE%8FLUfO2z(mr^DtecOBFO9rryl%*!;=184?L@UO^|jV7I=gl7%bvh`_>0a_1N`lr zhDJ<rJZTgt>|vTtR9oY1rsI9l9&cn9jMsCKz|hztaSE&K)eKZ3tp$S$$SC^Z_<GTx z(g5XdPbG7ciP3B(3l_^p)0S4z$H#BI^?g)YHG#BJ$&%)I6g3(rPz#kKtsqB;Y-(d~ z{nfYQ6~mZ}h_nvQs@9qjq#<80ul^=pFhWyny-+F4R!Zd6cfd+<%a9FBhHS*E3>Vp< z@(jx5wvejnlrOs^%4UhuEm5{el$b=>Dp7hQ$~K9zU83|#lpPYKPol_A+Ap=)DN%Mw zl-&|#K%xvvlp%>SEKx=z${vZbSEB4QtsQH>#+dW~-B>>O5@DUAcZYSJ43Bl*8Ju+% ze6r4OmCZV>ly&G{)TK$J%`&N5CP9s9_q}2=X{$`?kxAQR(sr5DE0f^k@a{qM$)vbU z>X%77WzsI0v|A<($fQA;G$fOTWzvXD+9Q+p$|S~9T+N_N1*!v4dhpS#lKWBTn32+R zx$B9;IVez^NlwBU4)04;>PP9uvhc_btlGFV$7Uw=EiK5>y;~l?`JYzZpt~84N>}Y> zZS$xd?`9ozH|ylP8QYQ;9_a(Vl6JGTd^cN%HydF$gN@0~7G8KHjumO4skJX*y?YaA z7gV3<Vq)xNd&XD&w8Ar9L<9JzFZ}U-I%mt&0A2_##(vwU7`sun7;B<jkCopp&GB=y z^Cy(X7aMPJ{){<)Zgu|basJ%q{JGuvv)B1^hx2Ej^Cx(l#ZmP;f9`bt+~xea+xc_A z`E$_u6Y4{W9f2!K{5j(MxySi)uk$ApF}BJ~#Y^Oa?;?9P{=&rF5HFUXh(3Pb(N552 z&6Ek&@ntUh7lSYQmwYbzm&;!CQS#=<QLamK5jMLC-EIQ7Zk_jtxd~g{gdR5m>I^#X zvE5DRbrW{D34Lw?Yz5An_PYr?-Gp6k!frQVz)cu*6NcP`VK-sKP1xfm>~$01%LdM8 z+3zO6M<tvs?y(i(gX{=;FWX4oO?d0m73QsC8%gXN9}bD9-W8muEZc*RqvU(a=BZBd zA{<taE=@_^tR{D>$y?Oqn3}v*P3}>Xx2eh7)#P3^d54<ZrzXeM<bE}Ir<%M=P2R00 z52(q5YVwepJgg><sL6ZO<h^P#+Yp`BBDyhx5sc{F(-mgkVtO~(7|##C{ojYe#0#TZ zP$pg&z2IwOTo@fI&BV6e?X<{o-TOU6WZos~+k20FB`n?hy+LO?^6LA1&35F~e^Gk2 zi&)>NDVJN{D1}?!D1}?!D1}?!D1}?!D1}?!D1}?!D1}?!D1}?!D1}?!D1}?!D1}?! zD1}?!D1}?!D1}?!D1}?!D1}?!D1}?!D1}?!D1}?!D1}?!D1}?!D1}?!D1}?!D1}Ka zX1}HaEAr~wZPuyk1A*nX`pOQP)5PBW>Td?S>>cDXUrwYd+SxnFRb@DlBIgTJ+<UVy zdZ29Yjb-1beymp)$Plu=rpeQfwJ>^LNk0~Ghp_H{tDJeOw&x8jF6CUcieA-6u39YP zQ6DQLr}VUyFu`1A3!_zKPr4Qb|Av{$SkAWwW{VkZQ8~@5H`GLj9S`vhJ@)Ie-_Q%B z`(OK?wb~;_DkJ(BU%OH6grNrT-@#Wfbv-s!h~YKgNGC1w+KVXabh9;qTeKPc(T^wR zAPAnB<|41X1nxwKL#`ECwt)|EESb8R%-}uAwu(hwds+4&qSYo^WBc#cQkMN~G96{G zY*D}OYws%gHWYr}SE&opm#nFw11FBWs&DvzkCCJBT|Tz#Bd@(X$Xl#Aoy|Gk-g}C? zJxj6)@9w?wyF+azYPVlV2YoK$WvL3~g}g7&3wfEW312THLI+MvP33M-<P=@*Wki## z@-;@XL4l4;p6sLk7ftkJGImZcWN<nPTRRJ*Zz^}~z_;B_C9h{qQ^((4CARC)r%TGq z(F<hEq3mc+m0S?c9SwB;aux&Gn<B5imt6H_{}bJDI$OA+Lukdokz`t*%4WcR%qRSU z6&~bi!W07)tgw#Gv)T0Zj1GqA*fB^InoOqh;^beLFE#m~tA{xG7p|2#`EUdXF!`WE z*;iFhz~p<**fL`rN}O%agm<<*81%HYFnX`A)7HZ1J*7`u_Sx2w>-0zqIwE;R_lhgs zI{?Pkc}ZkStt~%62_tXqzTj`o6-Ku(TJ1ZG?xgUtiiOcFjIIh2Mz=5;DJzUlxvbQ2 zbx}c|T~7?N3!^O+n8{Y(GkMC_OtuA^$@YrPq@d5UnSAWmWKo{=zqrL$QUjq_;z0pI zysWc89nl$HBdTBI@zB<M<mShHzo`$6*J{-GR&32jZhj)jn~L20WLa;@VdGb?b#e-E zhmdOR#7>T*4TtQL%0?A&lZx1-B5qa@yH&(3Dq>7U+^Qn>sEFHC#O*3#uZp-sMeI`% z<0@jminvon+@&J!RuKnO#6cBtNJSi05l2+SJtlQdy+)2lHB}*U)~9@P)|;FAzFnHL zJ{^p+J`*-)IS=L%gROTkn0SWYs1?UHd0<^0*k%u`+XLI;fyF$qtsYp92e!=v+wOt& zdSE*|us#ng?t%4tU^_jqT^`tO4{X2#8}z`2Jg{L8Y{UZ-<N*!d40EUbtZ#Yn?>_XU z-!Cl>J{L?Ld_HV>K<sXkAaLxowr$R})7nJWPHPigJFQK0?X))0wbR-}*G_8_T|2E! zbnUb@(Y4dsMAuGh6J0y4O?2(FHqo`y+C<k*YZF~Ntxa_8v^LST)7nJWPHPigJFQK0 z?X))0wbR-}*G_8_T|2E!bnUb@QQ)kXZ5=r>72;0&1>c<YAMYK$TAH)I7>u*N6gFp3 zJGI1GP%e1}ENnxT5=)HP8#NVmlakt{q{2s975D8{Qnx6nF(q}YlG>xBZc|dXE2+Io z>JBBfPf3j{sr^doP9=4hlDb<-9Z*sSmDC|6by!IqQBnn-qqb(ubIcj)ZFHed9GoxY zaKzxeBO>u}(h*&vkapzoEWSp=y>h|%d^wpz@r$4SC(7u{3!%LEYEWxh<mR9HvZh6D z{#j{jnk#mJZmxC+<q&q&@GVmy@-0&!@-0&!@-0&!@-0&!@-0&!@-0&!@-0&!@-0&! z@-0&!@-0&!@-0&!@-0&!@-0&!@-0&!@-0&!@-0&!@-0&!@-0&!@-0&!@-0&!@-0&! z?qMfZfw)&iWML4N!;XbOyhfvkJ{6n;T^7>F%`f}jX<z*Rf9DS<0~WUy{dusR_AkoX zY0I#X+V0At`z?7DmQR!Kw<4AAw<4AAw<4AAw<4AAw<4AAw<4AAw<4AAw<4AAw<4AA zw<4AAw<4AAw<4AAw<4AAw<4AAw<4AAw<4AAw<4AAw<4AAw<4AAw<4AAw<4AAw<4AA zw<4AAw<2{9+l58yUL|#(lDePUqliN=@~#kh_b+|(?n}OS_bb78_pd6&yOy6wVqMop ziDOClDU`e^Oys9ffhcXMxTUnEVxqLAVxqLAVxqLAVxqLAVxqLAVxqLAVxqLAVxqLA zVxqLAVxqLAVxqLAVxqLAVxqLAVxqLAVxqLAVxqLAVxqLAVxqLAVxqLAVxqLAVxqLA zVxqLAV&XpcK8uM0ds06)&J*&fP}|WopfTH93|6D91q({Fr8w79$L5<V;Eo&j&H7`$ z+;L9^Vf}^Ci<M%1G3tc5<3^t*GkH&FLUdu&s$$^E_Ec9|(R|J1Gr?vuQK^|^Q8#=V zpCVq(Q~npb_&%^#lik(j(p<P;l6RC2{*HVd6O}q3FEnvMcv;IjE-qZS67;yZaN(-2 z<Kn`FLh0k89ekk*5@N9!7v{;_&)(g+e>%Lme{1l$f1A&_e~aI_SB6vZ$-hRpD(RoA zRBsb=m$D}}r;Q#Y9llNMkkmnuBjT-4@3zMZ*OM7B9E?Ypjox2&NS|mRf=DAWo=^hy z9w{?c3<8))_r4+`Y3TWAbvakDILcMzs<M(1APy+lWvzk6NXp}v7g)M5O6qQxcNs*T z1Q;X4mIRp)h%E_r*{1@H@zcRN`%JLQJ{xF^p9|L6=Yw7Lg+OEcVzAD>6zsBB?aNl- zx*|-W_ZE)zM{?PuDMsB!ZcUXd6LF$LJs5AT@Litca7!-|C0`FEvSy&7nULjhYg&$! zx3V1SPwMu4d78tm89B`XYNJ6(x05Neki;>>P*;THMBFmaT4(wMR24z%VZab5oSlIb zj}5$S3JRe)QY|(?+b+2Axolz9y76Y-_&L<=Y`g^;#~?4`Tp^F^U~J`0FGCr2$9=a! z)9ujoyq>!RO?!FMG}_^8+6PVJPzL3EI(sFF3edWrw}y|?J6rF9*1KWAV^HhGY78Gz zpfizyubDVTF$9f=VJ5W8xg<_@8R2cSxKO$nT)o#s`%JXoPFy%ZV)<_VDOsptBre>V zE4lqCGD&X!85x4FEs&OkyZPmEt|Dnnk(+-W=HsG3kNX$)5LV%0j6Qk1@el;q&nEF& zXPQss7OrOJ9Vsrpe!FDiVLd(L%>Ihp%BuqEwT4GQ<(f_AF7uL!kz0`9<XlvCb;V<; zOgfpF63ZsuDyYjQS|R;n*~D8{6tdt6t@Sa8{h!hYaN#5C!CBRz$Sv!9B0if{2`_rG za7~}Rlr7|Dgu00j|7TE?9eiNdO$6Kd6@5mmn|SM*s&1mza5i~8KLAxwksvv)D<lVG zew{DqFbOfvgwKNvadh5;3nJB>FQoF2)Ub^<Y;Dldc4xz0TC;Hn<<!3{XTg*B^vKPx zgt_3~9B9G+l|6*&e*X&|_M$oWa{rBTmpk6nY9Gt#lTgZ$&UEA!lxcL%G)dd5J8mY^ zAe(va*R8h{+0h!#!q;mGGs!eQ=26-FR>d;LTUz~CA!o^PVMlwLyrZG@CfZ=j=8e<@ zH(t&gXIlP~<f<~Y{ENXZn+P<<XM%N>2z1$nE5R<i8tk$Hxy;vgM&H_nw+8F%ZNV;k zOOP>+-fv%3{Rl8}zzijqCwF1=0pBL!bAo-Qm?w8(^ub_;%!evv$dqjt+@kpic?-ux z!RQ?iBi{}zFP1@rO8i?>_FZdMhxV2tw|~d?Tl&U(fB4rW{q48kALK1XZvSpsZ^=h? z20J`S{<;k$1dVv%;A}KR4_X^F4{(zg*yROo_5!=Tz%5>2%nRJ=1@?G>+q}T-USO{m zxWfzV^8({uV80i*(+k|?1@86&2fV;RFL1~U9QFc7yg(j_cT2B;jQD_W8PPHFz4w=v z5x*BqM*M#0GJ@Jg{KyE}Rw*MWsFV>DRLTenDrE!(l`?{YN*O^xrHr7UQbtfvDI+MT zlo1qE$_NT7WdsG4GJ=9i89_m%jG&-WMo>^GBPghp5foI)2ns4?1O=5cf`UpJK|!UA zprBGlP*9K&(-n{rf8bk2L~=j>erXx;!C*4tL!rwEY7g}zBWPQtjG&-WMo>^GBPghp z5foI)2ns4?1O=5cf`UpJK|!UAprBGlP*5o&D5#VX6jaIx3Myp;1(h;_f=U@dL8XkK zpi)LqP$?rQsFV>DRLTenDrE!(l`?{YN*O^xK}O6}Kt}wbZyE8P(cg)bmJuHgCL=x) zx{RQH5I-`4wpGdq3Myp;1(h;_f=U@dL8XkKpi)LqP$?rQsFV>DRLTenDrE!(l`?{Y zN*O^xrHr7UQbtfvDI+MTlo1qE$_NT7WdsG4GJ=9i89_m%jG&-WMo>^GBPghp5fl_; zgh6D)V2JjJKk_Xj+I^ih{y3P7_>-_@1owYRLSmzAkYLWzjhYv_$rJ7JL^pe)-Ja+c zPc-I<ZuLZaJkf2Q=yp%E*Aw00iS~J-aZj}06W!^F?(#%;d!hrL=%6P$<cSV@q9dND zAU#qQ&@evgTYB^h>3hX&&XL<63no2Y30r!wfCx!=C=8Y~ctWXRP*AC1P*AC1P*AC1 zP*AC1P*AC1P*AC1P*AC1P*AC1P*AC1P*AC1P*AC1P*AC1P*AC1P*AC1P*AC1P*AC1 zP*AC1P*AC1P*AC1P*AC1P*AC1P*AC1P*AC1P*9K&&s9LfSoAF;p1=1)e^mMuvJ^~4 zd^~I!!2_WrA)(MASk#nK!(gaV!(gaV!(gaV!(gaV!(gaV!(gaV!(gaV!(gaV!(gaV z!(gaV!(gaV!(gaV!(gaV!(gaV!(gaV!(gaV!(gaV!(gaV!(gaV!(gaV!(gaV!(gaV z!(gaV!(gZ&JuchQBl5pOJfD2RxAf@LqA!(}9-j;*Jw6q-^q`TElI)-rwFGx538LiH zwq%S~+mbO}ZA->@wJjOr)wX1eSKE>?UTsUpc(pAV<JGogj91%|F<xy;#(1?Y8RONq zWQ<qak}+OwOU8J$Eg9q0wq%S~+mbO}ZA->@wJjOr)wX1eSKE>?UTsUpc(pAV6C^>p z0+Qg<z9qrifBFp{*38cYlLVg)T@sMMXFrmFG*wChf+-~d!IYAKU`k0qFr_3Qm{JlD zOeqNnrj!H(Q%VAYDJ22Hl#+m8N=ZO4r6eGjQW6kMDG3OslmrA*N&<o@B>};dl7L`J zNkA~ABp{el5)e!&2?(Z?1OyW#!7MpZjE1Nae9pHdxbEvj@%dnq;0s|(0wJ$K5(b-O zqb1LR*r<8Jo4nyJZ+Npe-0cl-@rGmG@K$fQ#~a?}4R7~`d%fWu-f*8c3}K&MFSOqq z-suhR@`iVN!vo&%pf^0^4G(+6Bi^teS27i_RD995T-oW%n)#(*a^=;q<qFS$lEjL_ zQo+)tl$HvHDlHWZRaz<-s<c!vRB5STsM1owP^G1Up-M{yLzR{ahAJ%;3{_ex7^<{X zFjQ%&V5rhk!BC~8f}u)F1w)mV3Wh2z6%18cDj2G?R4`O&sbHwmQo&HArGlYKO9ev( z>5(PUBh1L|KlLp=-ucaQ{iQ7xe-=!7d^v3C!BQe6;i2$_(DX^AFNA_hUkC-2z7Ps3 zeIXQ7`a&qE^o3AR=?kHt(icKOr7whnN?!;CmA()PDt#doRQf_FsPu(UQ0WVypwbsY zL8UK*f=XWq1(m)K3Mzde6jb^`D5&&>P*CX$p`g+iLP0@B%-J%c>N{|9VcDhLIVCI! z!YYwNBSCRxD3<1pORTayZm6*;Bx*Nch&p8&F~p3lQTRnIhE4cya?omqzlBo+ZpJtJ z7Wl=Ox0NKfw2>spTZlZ~xBNezm^_PnVkxlr33-+)e#8cr$cmq_j^wK1CzR4r@so-f zr}!c2X;LYESe`eEAD5(tS~EhjKjA^G#GO|9Y&jy{zZv48^Ur;Y_xIfYQnIvo|BGPa z{V&TB@5&-c>d&hPFIN)uUCy%#u9i8(6R9_9-uR{xcvlI0a|yh=1iqyN9xH)wErIux zz_*pax0k?sOW-?7;C&_VcnQ3}1irHbzN-Yjy97Q^0v{}a50$`&OW-3V@I58)y(RE{ zC2(G*@K&A(wh$`--~Nhk!S*gcRYY(9RWQN!FDoV3_%<cUHJ1&>l51>JlZ<LkSTd?P zVacfGge9Yz6PAo>PFOOkIbq4D=7c4qniH0cYED=(sySiFsOE$vqnZ<zjA~9;GO9UY z$*AUpC8L@XmW*mnSTd?PVacfGge9Yz6PAo>PFOOkIbq4D=7c4qniJmRwz)asz25LX zZ&;9Bq%dR+3a*s-Dh%mJR^|mE&wlLa{ZuPkRzb+f?SB=tC}HIGzxGv>Fmn5^OBW?{ zeLp}Y%UIzVwKQU|S{gA}EsYqgmPQO#OCtuWr4fVG(ul!oX~bZ)G-9w?8ZlTcjTo$! zMhsR<BL=Ib5rfszh{0-U#9*~FVz62oF<32)7_62?3|31c2CJnJgVoZA!D?y5VD{w% zei~(;Pq;<OiQFv#^wh1lzAq#J^jdHM^ly9$ps$7^fS46PEr1xT7C;PE3m^uo1rUSP z0*JwC0mNXn0AjFO05MoCfEcV6Knzw3AO@=i5QEhMh{0+B#9*}mVz62OF<32t7_1gR z3|0#u2CD@SgVh3v!D<1-V6^~Zuv!2ym<u3A;sS_NPpVnQ7nEF8e<HWP=KJ*avai$I z*Mptj{%xgBZ`5=so!wl{2TN%sW=6^RAcB(fK?Eh|g9u8_2N9H<4<aZzA4E`cK8T>? zd=Np&`5=Ol^Fah9=Yt4J&Ib{coDU)>IUht&az2Ql<a`i8$@w6HlJh|XCFg?(O3nun zl$;MDC^;WQP;x$qpyYfI!9DJpGa|Ux3*6@g3TH4<h^-b^v<p~wY&mDJUj5&HHzXD4 z8^KkeZ~9b${-$gds7GNZcURx+()_gA?5kC`uU1=pwTk&_wbfUv9$&4t`D(S@SF2uM zt#<fo)#s~K+*hl9U#)ifYPHK(tKGg@4ftv`=&RL`uU5mpT8;Q>wZ~Vhy}nv8jZJb) zQpIiI;s0!#-K*~lE;e0?+rq>D#kb=2gVYNbsMIW$I=k@je+{CzEj;|+Dy6uIE?ruv zF>;H1B%|g{!Dn(g8_>n@&fqtLZ$RJjxdHuc*&C26oX^r9;9pjKW+^1kfl48H4pa)s zbD&a4o&%La@*JoXlIK9BkUR$}h2%L<DJ0K<N+Ed;R0_#+pi)Sl1C>JZ9H<nM=Rl>9 zJO?U;<T+3&B+r3LA$bl|3dwVzQb?Wyl|u3ys1%atK=-(d7dX(po+uOCELemJ?8vR_ z#7}ycd=2{hKYNQx>}C2Iz8zf5e8;DlxmC89QTZBJad)+;kHKnFAA{AVJ_f5zeGFEc z`WUP>^)Xm&>SM6l)W=}8sgJ>GQy+uXralI%O??bjoB9~6HuW)BZR%sN+SJEjwW*K6 zYEvJB)uuiMt4)0jR-5`5tTy#ASZ(TKu-eqeU?zWfd>R)(&l3T(?e6F~PaOH^iI4=) zcY_O{@A(u!-!EGLxss%<UBmulgp}eaU{Z>sfJrHi0w$$63Ye7QC}2{Gqku^%jshm7 zI0~4Q;wWHJilcx@DUJdrr8o+hl;S90Qi`L1Nhyv3CZ#wEn3UouU{Z>sfJrHi0w$$6 z3Ye7QC}2{Gqk!$vim$=F9vG7vB#xDe4ES(~EixkiJGjVj9Wq-RrhOkW-<^8yWhya> z9Wq-RW`Z0tTN{i@9Wv?nUwnB7NVKrpJ3v6ScYuIu?*IYS-T?xty#oYPdj|-p_6`tG z?HwSX+B-l%wReDkYVQC6)!qRDs=WgQRC@;qsP+yJQ0*NcpxQe?K(%*(fNJjm0oC3C z0;;_O1XOzm2&ncB5O9QjFaFk>ZD~;D_?Tvi>;v|x9~>rcf362d=F{)-SaJF6gF84b zpM6mW0`sj1`bHW-{~JVq!5=dV=qPXrqsZ+a_!dU*^%X(?cR_?v<n|9MC5+gomP$z@ z`1be^eOHn+5<y8CiJ&BnL{O4OA}C2C5tO8n2ujjO1SM%Cf|4{6K}i~kpd^h%P?AO> zC`ls`l%$aeO43LKC21srk~9)QNg9cuB#lH+l13sZNh1-Iq>%_p(ntg)U!@32zDg04 ze3c?7`6@+F@KutJS=U5^i=gG0ihub(U-~gsh?Z%?`TO8Us2}+}LftO=2(`}XtHdwC z-ZHwhqR{5zP<L@?OK~Vx9NJnO>M0IwD-LZh4)qp?b`*#DibL_@P=9e~XK`p(acFmO zXrMSWSR5KE4h<KFMv6mwibH#gL;R#<uS<GTirgaKT&uYdTrx<?$&Y<2C-3$ZNA;6n z%E>=eN;#oQpro6)j<Hw{kncB2Ri*??sxl>Dk_kq@BomB)NhTNplT0uICYfLaOfta; zm}G(xFv$cXV3G+&z$6olfJr780h3HH0w$SY1WYo)2$*Do5irRFBVdvVM!+N!jDSfd z7y*+^Fajo-U<6Du!3daSf)Oyu1S4Sk+~yep6Z8-A9m$&U;8JEe`p3CX_WwF0{o|*> z^^c$V)IWY+w*KLARpWQS&Zd&9+JQ>0Y6mL0svW50s&=4~tJ;A|u4)G=xvCwg<f?X{ zlB?Q*O0H@LD!Hm1sN|}4ppvWFfl97w2P(O$9jN50cA%20+JQ>0Y6mL0svW50s&=4~ ztJ;A|u4)G=xvCwg<f?X{OqJo^JLcNV+lZ;<p}QkzzA1cWbeZRzUj&ykzw{|*{;_O1 z<BAi<?}dIxT4_O{pwfauL8S$Sf=UYt1(g;Q3Mwrq6jWMJD5$icP*7<>p`g-&LP4bk zg@Q^83I&xG6bdRWC=^s$P$;Ohpioe0L7|}1f<i&11%-l23kn6578D99EhrRJT2Lsc zw4hLsi4$hOrP2hx0!{43WqmVy^g(h}nO{18D9B~-4dei0jNE>Iu+Dxr*kvCGG{)Zx z*4gg|yX+4Fjq!uQI{Q$t%l<IX7(X1WvyTM3?2iJC@sERb_9wwE`)Hssek@pLuLQen zG0+&7f_3)sV3&O&&=@}%tg}xAyX@0}#`u|FoqaagWuFT)#?J@q><hsz`(mImekoXI zuLis9PXmqd&w_RK<zScnd7v@=MX=8PGT3Eb2{gvP3f9@b40hSS3U=AQ4tCjJlgrA{ z1S7X!3)b1c33l061C8-(fv);`up$22V3&O(*k#`gcG=&M%gTAzkb)HGs{a~fh>&O$ z<g&=^o53#oR<O(dmRwfOJVtJRJ6LDm33l17Kx6!Fu+F|0?6U6%7$Zb02D*xTIlHQ? zvn#|T279s}1Q=uF_TL5T?1#ZF`}<&*{V3RFx5;JY@yw3{UG<Y-L;Qzem;E%@Wj_mc z+0V&k<;~+Sf_3)GV3+-4d1L&w>mPKmaH){DV+>zBa4g6eUOY(Fz{z)jy}aqHp3A55 zrk<J9QMK02ewwF}b91T83|eKP$Z2zM9@S{k#AG&OCQ}(bhid1+-yheS&*Wy3nN&V$ zrm`7SuQktQb7nG~Ft5+)dDLK{#>um}>{MaW%nu$tcXt2aquI&Ate!Ck4;S)qqkMi$ zpPfr5O+AX8SIP7kTu4dBO?@_sqNmTHrg<C<P;X|l=|pM@MU4inIj6&AsVjP-kV~T$ zZG+hJkYiY_T2#M=;Y8ld;b&?a`&D~Y)y1RZXRR5GJR7xVvZe_hX(Jo(kyFQxWOMo; z9#eh{`i2==dn`F=W^>mu?RaK7o13*ColjF-TRojhn|jWgEqGKi8MWFfn4&tZ8BZc6 zr{E8mvi2!5B^F_DCN+&3sNb^DHNjD>Ap!lvT;~xUYlAiJ@lSjRPfw3D@IzKpahOr9 zT_(1e<`ev0e~4P+hO%9oquqzWS)p#%;b`{})LEq6YDc?2!X6A|ziS=s{ur$*(r&$@ z-JhThMcQq2wEHO9RHR)Ov@^BlnRNCNEa_xAoxO@STW_&jtDm!%HQJ)p;DwE1TAS4( zF_p?s7V>$_4_mb=t$x~GFsMgsO-@ZY7Uni>jdhJa<ytG-Cr~e}_d`=tIbadALu)>q z%v_EgnzX}i`n1}kv&mE%#kI(><Tcc<HIC_Nea^^cbhJ~~+UXLT)y<@}{Ln6~9S<|+ z=zq5s$pJeJJbvR#+V5#Cso7b5Dh0flxRTPZqCu@aD{!|>9MU=xumlt7>?F)dE}Pc# zi3A#+M<d#*=jPC!3A9(MJ#!U{h<(YtwhC^)-?fMjXiZakelnMuvxLSy+Iy%_h)pIl zF(PAPrhd(gnMTsIsF(DZ&1|MV6~m%qCf0Y}%z<Dj<bW~;jR*0+XyatT%wpDrQKqlQ z%v>^)$5Lhr?wHFKW(@eR4)@Vx+3DCU%yDu?hf6^KWoPn(eIRFTAq%W!i-zhRU^hP; z20~QkFi|=*KsWjfh!9k(HDxb7r%#&p)YfSYbGcMDmol%T`V&#-EH%JVsx?z)T1Smq z{bM>za59aeS{<w|ywsXF1Aht&10HiurP$GHb9gb~#!)RQ{KD+7)n7^FQ<vcGQ0Lxy zYi(MMwF=s`MtCDrDXW(b7)8^Zo|{csH_8KRYc&_}Vp&Zi@5etuEY_8ov1T%3FjE;5 zq^aL2t37L7pqw!4lcpg|Sgk#%@@I@#>#KWTPiyQ^kR7RXUcJUX5z-o~pCY}KKWQH! zjCt^NG-(Z|;BlrvjHqYr;~~vj1D5MnHzlWS&8h5EYWjN2){ZRU3c82LuEcp$y{i)Q z7$xjVq?CVtZ5*Q_TRoN5N6bUu*+#ZCpptVbNjl=es>Vsm726x0E6mQ7A?WJP<fcHU zSI^pFNDHtIK45`6DSyg{_pbUtC8jL!YU?<a%wP@RNERL}m4OYq$OOI;(gZe53O$uS zi^Q2(nGGZGEH)gmPc}v7?qea%T}>JetO1rDbta}^>3K>H_?(WQ9&z1GtHC-csBJs! zbL4&7-%P|C96{%YWM#RI9M#7^LH(bXm)&=-vTu5Z966XEni1=oI&7VphzhN+<YNyg zyOtiCDh~YVsjJyo_S5$$hd{T(1RP&LDP)gMJ>xhBba`*QU)e9+J3yySfUUx^V+h?- zcYbEs-N%*PJ7%7Ueg5z?2I1<mdmky?J7!5yc=BP;2#V*HJ&f(jVN7S!uocnsa~@B> z%V_p%kQGgWbqIAB^;(B$K1yVB*sRnEbbMf4?K-fo(ORx%bC;*#{GXUK!2X5SYE^|x zajo-=a6XQKrd5Cg)H(yqUh55Pw%Ra{HiB)zXfRqdqJi1QAcuX5Ubx9<8~Z1)L@~S6 z;J072b==7FFnP<jOEH^8t=52z0oaBGnnlm#Tpn93VEJB8B;ikHkIE$Qd&L&B`s2gH zQJ3keL2D(Gk1bi2;i{3IQE>$Xm7xF|@+?C^bOLO4#8A)*h61ORrS16eNVJF@t=+<8 zV@roML}qU3)EdFua?DyC@J5RmTGqHtm}^b6PHVw40tTLI*KOm;dUzUzO=W}DWZ6_m zCmW#+T$jox@_I4{3k4siH(8@<BY?dMFJ-TxE{krNUp7DflFIzjt#vr$S_0cYz}&<w zfH7DVwgvEF{WRL@PY3N$*(bIM7O{)<GiZC<P`2xJv@_6-BJKJd?NU%hOntw8N4w|H z&LZu0Ioe%DyNk3NfOaMrt}qu5so8VbX;*=m^-)+O`Isn7WA?V5M|+4F2<DfZHaEhY zhpy_^+5MHF<=aOQg*D@1Jqk<B3S|C))k9{g>-8~H#SK3f>*qq6s(^-{i}l2ZT3J2b zmPTbPF8DYmmS3tP<i+}INOM+4hE?w2=VE<|EU@jbj|Jv!skm6532DNXVX3%S{~VdK zEftxwvaLI<?7VHc!juQbi}kZ1&798zV-+=FU#!1Ort8T{Ojj#8H0swtN65@z70j;{ zd*kt0tU~Cy7<f<|TUL=NOouduohhqhP?QCCZ%NiIWqgFq%AV+|J8~ws><08?0@9!K zJp(U!d8fmzUMCahc^m{N>Gt}vyWOkoRy>m=ru6A#A#K_M{TNmt`SWMUK<>)v7`U5s ze+LhSR*x6!)1+tTXJmp{M0S^c12*H(sh5tXT}Fqo&gg{yuU6};n+<Z<jN;ggY=)i| zyYVq|i*?M5&4cn!j+q;UgKmDvc}Wi(FcTYv17;*aVrFXI35#+02h1XY57vRr&ndG` zamuWhPnkk^M3rzH!gX#)K*Z8B*dgjiPj6NohoZu9V|*!rTH=PXU8|$rv$*txvR%8Q zT@rN^Y1ip!cL}X7(r%5T-6UFDq}@74yD3QhRF7|iqn(b87Ru+?<Y+gIx{9>h>}WTG zx{I{i;%H}}Sdn&H9qm%6r${^T7(2f796rV>p93FbO&nF>2<_;z)+sZRz+z%Xl72;S z$4;lcVV7uc*j>!tFc8=3Y^FqmCLB@SmWE-qrD4QrY1pH(H0&*6Y1qdt4g1xWh674V z!#zp^&cS(fuVuiwZvw&RK<!A62S}vHgPKc7J>)!WKkRwfeuTzcEInfj=<3(|VS9Y( zYDoH3z*vi=1evLdM5k0B)?(>OND~(D$UVOFESa&2#9C0-S(r!e@ufmYa~AZ-J-(DA zlU9)!fdJO8qu9@*uzrm%nIX+pjpa&O_6cWv=@OZ`ipVk=KUQXpKrQ&U%@Oqk=0lpm zDlu-X-5od9LF2|c>7jdkX_Cy;TF~SCsBUFN+ELCd+f-rA)gJX+<?hs6G1J8O(iE8` z9OeG{nI%64o$;m6Ow;}%0EAg1wZW_RR&v(LmikfqTpl}%19z1cobjcwY}8SEbO|d+ zI6&mi67_)Wsl*g6!zR{h+r(l+F$mfK<CvON!!lbpFsoh3y}=zWwnRN66;(ZQx-|*@ zZHjg0>?@SpX;{YVIx?*CCylyD;+0r-bXO>Q(i-eZixt@z!m?b~+XLHEezemP^^#QN zWI*+fJmxq5OReU7QT`0eP+gCQlz<rb@>d%5kzlua=sRm8jTB3TGhdfOQa$SNR+=cJ z0?Zfr7H-uv%-8bl=P{)j74i(g-f4xPFst?W68Q#r)g86k!x_w0yQ(S`!bTpJst`1U zZOJ74Rw{6iMDXC#jvZh^{R87mdD8X8WxwCms`o3r)7%~FiTa!Fw9^6fIP#2@^0qh@ z5Y_Vd%cNeXN<BE~o@qzCXX<9EFz3)MoN*5IFQt~fe7C8V?+|%nx<m5^rtYOmg?*Ba zEx}E9JKj5ST~}53vFWw}9ZNo~ZQ#@D2A@_p__SOG;qBC$MXlhy*p0Qra%1()<2W%p zTC!8&#zOtzzxqt8!+-VPY_5vD1~0i{{wv6cb0+Q9sgiaf`Pt!4fKS2*&Z$NiAazbH zqNqO&qe<nQYIZn7mf&87vYjKVcj@Cet5@01k=48O37pldZ0E@8UHT->>Q%OLWc4n6 z3TO2y+c~m&mp+ZNdX?>PR<B9pN;hZ?XDzh=5?wd)B-~9T3Aan(r`dc$NW$&5yfpSL zAeOR7RA_7hM^m!&+a6c??KZ9H2;`;G?A+}%8@Jca#@!)i<Mt`DaUt>EiX0^a>6dbE zcUozdSpBi0@OCMEF}vr{faQxBoB&r6@x=@iU(5(|H0^OZVfMZr^KJJr-wz3zudYa> z5<RzAlUl~P<pNG|RUVMP6p|hu)B&_)3&8(tl5Lm17}A6Vb^wuNl<EPH$e|zes6nA@ zGjrQXIER(YKU?}jNVDfNBu+A6kz}H3Tq`K_$qUGx-buGhpATuu%1FAErj4Y3RW{C- zYQVmu2|X=;p9^W)f?NJbzFuV#lb2y|Za7K<H<dfWXG5B}<ye|Y0o2N_H)^Z!zus(j zhk7IZOi0rf+{sPrmR8uFW$Pa7m`ZD`R?5Ibv$^EV&?Q<Gw!#mLkBWk^=kvr6QYm|Y zBWX(L_j48QmmJHf6lO2@v!vfUZ+ZC)>3J45>*X0}`@Ae5wjsh!8Bv)7c7i#e7t8^@ zU=E<i{#~{mfYmZPNGr@8hOsWIC>fde7Y~e*r!T9l;fn`p&AQMAa*&p@3+;{vPLM~# zF#yrSV>w;V51!OBGo}F*%Ie5pByashm0ii`#e=jyUTEVu_zN<Q@a{;<>V<Gew^{1{ E025s|<NyEw literal 0 HcmV?d00001 diff --git a/product/CMFCategory/tests/framework.py b/product/CMFCategory/tests/framework.py new file mode 100755 index 0000000000..c36e5abb81 --- /dev/null +++ b/product/CMFCategory/tests/framework.py @@ -0,0 +1,112 @@ +############################################################################## +# +# ZopeTestCase +# +# COPY THIS FILE TO YOUR 'tests' DIRECTORY. +# +# This version of framework.py will use the SOFTWARE_HOME +# environment variable to locate Zope and the Testing package. +# +# If the tests are run in an INSTANCE_HOME installation of Zope, +# Products.__path__ and sys.path with be adjusted to include the +# instance's Products and lib/python directories respectively. +# +# If you explicitly set INSTANCE_HOME prior to running the tests, +# auto-detection is disabled and the specified path will be used +# instead. +# +# If the 'tests' directory contains a custom_zodb.py file, INSTANCE_HOME +# will be adjusted to use it. +# +# If you set the ZEO_INSTANCE_HOME environment variable a ZEO setup +# is assumed, and you can attach to a running ZEO server (via the +# instance's custom_zodb.py). +# +############################################################################## +# +# The following code should be at the top of every test module: +# +# import os, sys +# if __name__ == '__main__': +# execfile(os.path.join(sys.path[0], 'framework.py')) +# +# ...and the following at the bottom: +# +# if __name__ == '__main__': +# framework() +# +############################################################################## + +__version__ = '0.2.1' + +# Save start state +# +__SOFTWARE_HOME = os.environ.get('SOFTWARE_HOME', '') +__INSTANCE_HOME = os.environ.get('INSTANCE_HOME', '') + +if __SOFTWARE_HOME.endswith(os.sep): + __SOFTWARE_HOME = os.path.dirname(__SOFTWARE_HOME) + +if __INSTANCE_HOME.endswith(os.sep): + __INSTANCE_HOME = os.path.dirname(__INSTANCE_HOME) + +# Find and import the Testing package +# +if not sys.modules.has_key('Testing'): + p0 = sys.path[0] + if p0 and __name__ == '__main__': + os.chdir(p0) + p0 = '' + s = __SOFTWARE_HOME + p = d = s and s or os.getcwd() + while d: + if os.path.isdir(os.path.join(p, 'Testing')): + zope_home = os.path.dirname(os.path.dirname(p)) + # Do not add the parent directory into the path list. + # Why did the author put it? -yo + if 0: + sys.path[:1] = [p0, os.pardir, p, zope_home] + else: + sys.path[:1] = [p0, p, zope_home] + break + p, d = s and ('','') or os.path.split(p) + else: + print 'Unable to locate Testing package.', + print 'You might need to set SOFTWARE_HOME.' + sys.exit(1) + +import Testing, unittest +execfile(os.path.join(os.path.dirname(Testing.__file__), 'common.py')) + +# Include ZopeTestCase support +# +if 1: # Create a new scope + + p = os.path.join(os.path.dirname(Testing.__file__), 'ZopeTestCase') + + if not os.path.isdir(p): + print 'Unable to locate ZopeTestCase package.', + print 'You might need to install ZopeTestCase.' + sys.exit(1) + + ztc_common = 'ztc_common.py' + ztc_common_global = os.path.join(p, ztc_common) + + f = 0 + if os.path.exists(ztc_common_global): + execfile(ztc_common_global) + f = 1 + if os.path.exists(ztc_common): + execfile(ztc_common) + f = 1 + + if not f: + print 'Unable to locate %s.' % ztc_common + sys.exit(1) + + +# Debug +# +print 'SOFTWARE_HOME: %s' % os.environ.get('SOFTWARE_HOME', 'Not set') +print 'INSTANCE_HOME: %s' % os.environ.get('INSTANCE_HOME', 'Not set') + diff --git a/product/CMFCategory/tests/run_test_example.sh b/product/CMFCategory/tests/run_test_example.sh new file mode 100755 index 0000000000..deb684687f --- /dev/null +++ b/product/CMFCategory/tests/run_test_example.sh @@ -0,0 +1,10 @@ +export INSTANCE_HOME=/home/$USER/zope +export SOFTWARE_HOME=/usr/lib/zope/lib/python/ +export COPY_OF_INSTANCE_HOME=$INSTANCE_HOME +export COPY_OF_SOFTWARE_HOME=$SOFTWARE_HOME + +dir="`dirname $0`" +if test -n "$dir"; then + cd $dir +fi +python runalltests.py diff --git a/product/CMFCategory/tests/runalltests.py b/product/CMFCategory/tests/runalltests.py new file mode 100755 index 0000000000..3a0d03daaf --- /dev/null +++ b/product/CMFCategory/tests/runalltests.py @@ -0,0 +1,29 @@ +# +# Runs all tests in the current directory +# +# Execute like: +# python runalltests.py +# +# Alternatively use the testrunner: +# python /path/to/Zope/utilities/testrunner.py -qa +# + +import os, sys +if __name__ == '__main__': + execfile(os.path.join(sys.path[0], 'framework.py')) + +import unittest +TestRunner = unittest.TextTestRunner +suite = unittest.TestSuite() + +tests = os.listdir(os.curdir) +tests = [n[:-3] for n in tests if n.startswith('test') and n.endswith('.py')] + +for test in tests: + m = __import__(test) + if hasattr(m, 'test_suite'): + suite.addTest(m.test_suite()) + +if __name__ == '__main__': + TestRunner().run(suite) + diff --git a/product/CMFCategory/tests/testCMFCategory.py b/product/CMFCategory/tests/testCMFCategory.py new file mode 100755 index 0000000000..a386df44b9 --- /dev/null +++ b/product/CMFCategory/tests/testCMFCategory.py @@ -0,0 +1,249 @@ +############################################################################## +# +# Copyright (c) 2004 Nexedi SARL and Contributors. All Rights Reserved. +# Sebastien Robin <seb@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + + + +# +# Skeleton ZopeTestCase +# + +from random import randint + +import os, sys +if __name__ == '__main__': + execfile(os.path.join(sys.path[0], 'framework.py')) + +# Needed in order to have a log file inside the current folder +os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log') +os.environ['EVENT_LOG_SEVERITY'] = '-300' + +from Testing import ZopeTestCase +from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase +from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager +from zLOG import LOG +import time + +class TestCMFCategory(ERP5TypeTestCase): + + # Different variables used for this test + run_all_test = 1 + id1 = '1' + region1 = 'europe/west/france' + region2 = 'europe/west/germany' + region_list = [region1, region2] + + def getBusinessTemplateList(self): + """ + Return the list of business templates. + + the business template crm give the following things : + modules: + - person + - organisation + base categories: + - region + - subordination + + /organisation + """ + return ('erp5_crm',) + #return () + + def getCategoriesTool(self): + return getattr(self.getPortal(), 'portal_categories', None) + + def getPersonModule(self): + return getattr(self.getPortal(), 'person', None) + + def getOrganisationModule(self): + return getattr(self.getPortal(), 'organisation', None) + + def getPortalId(self): + return self.getPortal().getId() + + def testHasEverything(self, quiet=0, run=run_all_test): + # Test if portal_synchronizations was created + if not run: return + if not quiet: + ZopeTestCase._print('\nTest Has Everything ') + LOG('Testing... ',0,'testHasEverything') + self.failUnless(self.getCategoriesTool()!=None) + self.failUnless(self.getPersonModule()!=None) + self.failUnless(self.getOrganisationModule()!=None) + + def afterSetUp(self, quiet=1, run=1): + self.login() + portal = self.getPortal() + portal.portal_types.constructContent(type_name='Person Module', + container=portal, + id='person') + portal.portal_types.constructContent(type_name='Organisation Module', + container=portal, + id='organisation') + person_module = self.getPersonModule() + p1 = person_module.newContent(id=self.id1) + organisation_module = self.getOrganisationModule() + o1 = organisation_module.newContent(id=self.id1) + portal_categories = self.getCategoriesTool() + # This set the acquisition for region + for bc in ('region', ): + if not hasattr(portal_categories, bc): + addBaseCategory(portal_categories, bc) + portal_categories[bc].setAcquisitionBaseCategoryList('subordination',) + portal_categories[bc].setAcquisitionPortalTypeList(['Address', 'Organisation', 'Person']) + portal_categories[bc].setAcquisitionMaskValue(1) + portal_categories[bc].setAcquisitionCopyValue(0) + portal_categories[bc].setAcquisitionAppendValue(0) + portal_categories[bc].setAcquisitionObjectIdList(['default_address']) + + + def login(self, quiet=0, run=run_all_test): + uf = self.getPortal().acl_users + uf._doAddUser('seb', '', ['Manager'], []) + user = uf.getUserById('seb').__of__(uf) + newSecurityManager(None, user) + + def testSingleCategory(self, quiet=0, run=run_all_test): + # Test if a single category is working + if not run: return + if not quiet: + ZopeTestCase._print('\nTest Single Category ') + LOG('Testing... ',0,'testSingleCategory') + p1 = self.getPersonModule()._getOb(self.id1) + p1.setRegion(self.region1) + self.assertEqual(p1.getRegion(),self.region1) + self.assertEqual(p1.getDefaultRegion(),self.region1) + self.assertEqual(p1.getRegionList(),[self.region1]) + + def testMultipleCategory(self, quiet=0, run=run_all_test): + # Test if multiple categories are working + if not run: return + if not quiet: + ZopeTestCase._print('\nTest Multiple Category ') + LOG('Testing... ',0,'testMultipleCategory') + portal = self.getPortal() + region_value_list = [portal.portal_categories.resolveCategory(self.region1), + portal.portal_categories.resolveCategory(self.region2)] + p1 = self.getPersonModule()._getOb(self.id1) + p1.setRegion(self.region_list) + self.assertEqual(p1.getRegion(),self.region1) + self.assertEqual(p1.getDefaultRegion(),self.region1) + self.assertEqual(p1.getRegionList(),self.region_list) + + def testCategoryValue(self, quiet=0, run=run_all_test): + # Test if we can get categories values + if not run: return + if not quiet: + ZopeTestCase._print('\nTest Category Value ') + LOG('Testing... ',0,'testCategoryValue') + portal = self.getPortal() + region_value = portal.portal_categories.resolveCategory(self.region1) + p1 = self.getPersonModule()._getOb(self.id1) + p1.setRegion(self.region_list) + self.assertEqual(p1.getRegionValue(),region_value) + + def testReturnNone(self, quiet=0, run=run_all_test): + # Test if we getCategory return None if the cat is '' or None + if not run: return + if not quiet: + ZopeTestCase._print('\nTest Return None ') + LOG('Testing... ',0,'testReturnNone') + portal = self.getPortal() + p1 = self.getPersonModule()._getOb(self.id1) + p1.setRegion(None) + self.assertEqual(p1.getRegion(),None) + p1.setRegion('') + self.assertEqual(p1.getRegion(),None) + + def testSingleAcquisition(self, quiet=0, run=run_all_test): + # Test if the acquisition for a single value is working + if not run: return + if not quiet: + ZopeTestCase._print('\nTest Single Acquisition ') + LOG('Testing... ',0,'testSingleAcquisition') + portal = self.getPortal() + o1 = self.getOrganisationModule()._getOb(self.id1) + p1 = self.getPersonModule()._getOb(self.id1) + o1.setRegion(self.region1) + p1.setSubordinationValue(o1) + self.assertEqual(p1.getRegion(),self.region1) + self.assertEqual(p1.getDefaultRegion(),self.region1) + self.assertEqual(p1.getRegionList(),[self.region1]) + + def testListAcquisition(self, quiet=0, run=run_all_test): + # Test if the acquisition for a single value is working + if not run: return + if not quiet: + ZopeTestCase._print('\nTest List Acquisition ') + LOG('Testing... ',0,'testListAcquisition') + portal = self.getPortal() + o1 = self.getOrganisationModule()._getOb(self.id1) + p1 = self.getPersonModule()._getOb(self.id1) + o1.setRegion(self.region_list) + p1.setSubordinationValue(o1) + test = p1.getSubordinationValue() + LOG('Testing... getSubordinationValue',0,test) + sub = p1.getSubordinationValue() + self.assertEqual(sub,o1) + p1.immediateReindexObject() + output = '' + result = portal.erp5_sql_connection.manage_test('select path from catalog') + for line in result: + output += '\n%s' % line['path'] + LOG('sql result',0,output) + o_uid = p1.getUid() + output = '' + result = portal.erp5_sql_connection.manage_test('select * from category where uid=%s' % o_uid) + cat_uid = '' + for line in result: + output += '\n%s' % line['uid'] + output += '\n%s' % line['category_uid'] + cat_uid = line['category_uid'] + LOG('sql2 result',0,output) + result = portal.erp5_sql_connection.manage_test('select * from catalog where uid=%s' % cat_uid) + output = '' + for line in result: + output += '\n%s' % line['path'] + LOG('sql3 result',0,output) + self.assertEqual(p1.getRegion(),self.region1) + self.assertEqual(p1.getDefaultRegion(),self.region1) + self.assertEqual(p1.getRegionList(),self.region_list) + + + + + +if __name__ == '__main__': + framework() +else: + import unittest + def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(TestCMFCategory)) + return suite + -- 2.30.9