m &Ec@sdZdkZdkZdkZeidklZdkZdkZdk Z dk l Z dk l Z dklZdklZdklZdklZd klZd klZd klZdkZd klZd klZdk l!Z!dk"l#Z#dZ$e$Z%dZ&dk'l(Z)de)fdYZ(dfdYZ*de*ei+fdYZ,de*ei+fdYZ-dei.fdYZ/de/fdYZ0de/fd YZ1d!e/fd"YZ2d#e3fd$YZ4d%efd&YZ5d'ei+fd(YZ6d)ei.fd*YZ7d+ei+fd,YZ8d-ei.fd.YZ9d/ei+fd0YZ:d1ei+fd2YZ;d3fd4YZ<d5ei+fd6YZ=d7Z>e?d8joei@d9d:ndS(;sN Unittests for Catalog. $Id: testCatalog.py 71169 2006-11-17 20:11:22Z lra $ N(schain(ssetSecurityManager(snoSecurityManager(s Unauthorized(sImplicit(s Vocabulary(sCatalog(s CatalogError(sDB(s DemoStorage(s FieldIndex(s KeywordIndex(sLexicon(s TextIndexcCsktiitt}|i}|i}tii}||dtZdZdZdZdZdZdZRS(NcCsRtd}|iid||it|iidttdddS(NRsadd field index failed( t FieldIndextidxRR taddIndexR0t isinstancetindexesttype(RR4((R ttestAddFieldIndexhs  cCsjtd}|iid||iid}tdddt}|i t |t |ddS(NRsadd text index failed( t TextIndexR4RR R5R7tiR"tLexicontteR0R6R8(RR4R;R=((R ttestAddTextIndexos  cCsXtd}|iid||iid}|it|t tdddS(NRsadd kw index failed( t KeywordIndexR4RR R5R7R;R0R6R8(RR4R;((R ttestAddKeywordIndexvs  cCsXtd}|iid||iid|i|iiiddjddS(NRisdel index failed( R3R4RR R5tdelIndexR0R7R((RR4((R ttestDelFieldIndex}s  cCsXtd}|iid||iid|i|iiiddjddS(NRisdel index failed( R:R4RR R5RAR0R7R((RR4((R ttestDelTextIndexs  cCsXtd}|iid||iid|i|iiiddjddS(NRisdel index failed( R?R4RR R5RAR0R7R((RR4((R ttestDelKeywordIndexs  (RRR9R>R@RBRCRD(((R R2gs      tzdummycBstZdZdZRS(NcCs ||_dS(N(tnumR(RRF((R RscCs d|iS(Ns%d(RRF(R((R ttitles(RRRRG(((R REs t zdummyFalsecBstZdZRS(NcCstS(N(tFalse(R((R t __nonzero__s(RRRJ(((R RHst dummyLenFailcBstZdZdZRS(NcCsti||||_dS(N(RERRRFtfail(RRFRL((R RscCs|iddS(Ns__len__() was called(RRL(R((R t__len__s(RRRRM(((R RKs tdummyNonzeroFailcBstZdZdZRS(NcCsti||||_dS(N(RERRRFRL(RRFRL((R RscCs|iddS(Ns__nonzero__() was called(RRL(R((R RJs(RRRRJ(((R RNs tFakeTraversalErrorcBstZdZRS(s$fake traversal exception for testing(RRt__doc__(((R ROs t fakeparentcBs&tZdZeZedZRS(NcCs ||_dS(N(tdR(RRR((R RscCs9|ii||}||ijot|n|S(N(RRRtgettpathtdefaulttresulttmarkerRO(RRTRURV((R tunrestrictedTraverses(RRRtobjectRWRX(((R RQs  t TestZCatalogcBs}tZdZdZdZdZdZdZdZdZ d Z d Z d Z d Z d ZRS(NcCsdkl}|d|_|i|i_|iidd|iidd|_h|_ xRt d|iD]>}t |}||i t|<|ii|t|qsWdS(N(sZCatalogRRGR?i i(tProducts.ZCatalog.ZCatalogtZCatalogRR t _resolve_numt resolve_pathR5R%tupperRRtrangetxREtobtstrtcatalog_object(RRbRaR\((R R!s    cCs |i|S(N(RRRRF(RRF((R R]scCs8dkl}dkl}dkl}|||dS(N(s verifyClass(s IZCatalog(sZCatalog(tInterface.Verifyt verifyClasstProducts.ZCatalog.IZCatalogt IZCatalogR[R\(RRhRfR\((R ttest_z2interfacess   cCs8dkl}dkl}dkl}|||dS(N(s IZCatalog(sZCatalog(s verifyClass(tProducts.ZCatalog.interfacesRhR[R\tzope.interface.verifyRf(RRhRfR\((R ttest_z3interfacess   cCs=t|id}|ii|}|i|d|dS(NiRG(RcRR_ttestNumR tgetMetadataForUIDtdataR&(RRmRo((R ttestGetMetadataForUIDscCsAt|id}|ii|}|i|dd|dS(NiRGi(RcRR_RmR tgetIndexDataForUIDRoR&(RRmRo((R ttestGetIndexDataForUIDscCslhddddg<}|ii|}|it|d|ii|}|it|ddS(NRGt5t6t7i(tqueryRR t searchResultstsrR&tlentsearch(RRvRx((R t testSearchs cCs |iitdd|iid}|i|dd|iitdddd|iid}|i|dd|iitdddd|iid}|i|dd|iitdd|iid}|i|dddS(Nit1RGitupdate_metadatait2(RR RdRERnRoR&(RRo((R ttestUpdateMetadatascCsMd|id_|iidh|iid}|i|dddS(Ni't0RG(RRRRFR t reindexIndexRnRoR&(RRo((R t testReindexIndexDoesntDoMetadatascCs|id}t|}||it|<|ii|t|d|_ |ii dh|idd}|i dt |dS(Nii'RGt9999(RR_tfalse_idRHRbRRRcR RdRFRRVt assertEqualsRy(RRbRVR((R ttestReindexIndexesFalses   cCshtd|i|ids    cCsxtdD]}tidd}|d}xq|iidhd||f<dd<D]B}|i }|i ||jo ||jd|i ||fq]Wq WdS( Niii NRRvR`smin:maxs %d vs [%d,%d]( R`R;RRtmtnRR RwRRtsizeR0(RR;RRRR((R ttestRangeSearchLs  . (RRR!R(((R R<s t TestMergecBsGtZdZdZdZdZdZdZdZRS(NcCstidddd}g|_xtdD]}t}|idt d|idt d|idt d||_t d|_ xEtd D]7}t |}|d j|_|i|t|qW|ii|q.WdS( NRRiiRFtbigRGi?i i(Rt vocabularyRtcatalogsR`R;RtcatR5R3R:RERRRRRctappend(RRR;RR((R R!Zs       cCsdkl}g}|iD]}||iddq~}g}||dtdtD]}||i qZ~}g}t |D]}||i q~}|it|t|dS(N(s mergeResultst_mergeit has_sort_keysR(R+t mergeResultsRRRRRwtresultsRIRtgetRIDt merged_ridstchaintexpectedR&R(RRRRRRRR((R ttestNoFilterOrSortks  09-c Csdkl} g}|iD]}||iddddq~}g}| |dtdt D]}||i q`~}t t|}g}|D]\}} }|| q~}|i||dS(N(s mergeResultsRRFRiRR(R+RRRRRRwRtTrueRIRRRRRRtsortkeyRtgetitemR&( RRRRRRRRRRR((R ttestSortedOnlyss  69*c Csdkl} g}|iD]}||iddddq~}g}| |dtdtD]}||i q`~}t t |}|ig}|D]\}} }|| q~}|i||dS(N(s mergeResultsRRFRiRR(R+RRRRRRwRRRRRRRRRRRRR&( RRRRRRRRRRR((R ttestSortReverse}s 69 *c Csdkl} g}|iD]%}||iddddddq~}g}| |dtd t D]}||i qf~}t t|}g}|D]\}} }|| q~}|i||dS( N(s mergeResultsRRFRiRiRR(R+RRRRRRwRRRIRRRRRRRRRR&( RRRRRRRRRRR((R t testLimitSorts  <9*c Csdkl} g}|iD]}||iddddq~}g}| |dtdt D]}||i q`~} t t|}g}|D]\}\}} } }|| q~}|i| |dS(N(s mergeResultsRGs 4 or 5 or 6RiRR(R+RRRRRRwRRRIRRRRRRRtnscoretscoreRRR&( RRRRRRRRRRRRR((R t testScoreds  693c Csdkl} g}|iD]}||iddddq~}g}| |dtdt D]}||i q`~}t t|}g}|D]\}} }|| q~}|i||dS(N(s mergeResultsRRRiRR(R+RRRRRRwRRRIRRRRRRRRRR&( RRRRRRRRRRR((R ttestSmallIndexSorts  69*( RRR!RRRRRR(((R RWs   tPickySecurityManagercBs&tZgdZdZdZRS(NcCs ||_dS(N(tbadnamesR(RR((R RscCsdS(Ni((Rtvalue((R t validateValuescCs(||ijodSnt|dS(Ni(tnameRRt Unauthorized(Rtaccessedt containerR R((R tvalidates(RRRRR (((R Rs  tTestZCatalogGetObjectcBstZdZdZdZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZRS(Ncs]dkl}|d}|iddtdd_|_||i_dS(N(sZCatalogRRR3RcsS(N(R((R(R ts(R[R\RR5RRtgetPhysicalRootR(RRRR\((RR R!s    cCs)t|idj o|indS(N(tnoSecurityManagerRt _old_flagR"t_restore_getObject_flag(R((R R#scCs&dkl}|i|_||_dS(N(s CatalogBrains(tProducts.ZCatalogt CatalogBrainstGETOBJECT_RAISESRRtflag(RRR((R t_init_getObject_flags  cCsdkl}|i|_dS(N(s CatalogBrains(RRRRR(RR((R Rs cCsw|i}|i}td|_|i|i|id}|i|i d|i|i i ddS(NRbis/ob( RRRRRbRdRwRR&tgetPatht getObjecttgetId(RRRR((R ttest_getObject_founds  cCsdkl}|it|i}|i}td|_|i |i|i d}|`|i |t tf|idS(N(sNotFoundRbi(t zExceptionstNotFoundRRRRRRRbRdRwRR-tAttributeErrortKeyErrorR(RRRRR((R t&test_getObject_missing_raises_NotFounds    cCsdkl}|it|i}|i}td|_td|i_ |i |ii |i d}t }t||i|iidt dg}t||it|it dg}t||i}|i|dj|i|iddS(N(sNotFoundtfoldRbi(RRRRRRRRR"RbRdRwRRtpickySecurityManagertsetSecurityManagerR&RRR-R tfailIfR"(RRRRbRRR#((R t-test_getObject_restricted_raises_Unauthorizeds&         cCsn|it|i}|i}td|_|i|i|id}|`|i |i ddS(NRbi( RRRIRRRRbRdRwRR&RR"(RRRR((R t#test_getObject_missing_returns_Nones   cCs|it|i}|i}td|_td|i_|i|ii|i d}t }t ||i|iidt dg}t ||i|idt dg}t ||i}|i|dj|i|iddS(NR"Rbi(RRRIRRRR"RbRdRwRRR#R$R&RRR"R%(RRbRRR#R((R t&test_getObject_restricted_returns_None s$        cCsw|i}|i}td|_|i|i|id}|i|i d|i|i i ddS(NRbis/ob( RRRRRbRdRwRR&Rt_unrestrictedGetObjectR(RRRR((R t test_unrestrictedGetObject_found%s  cCs|i}|i}td|_td|i_|i|ii|id}t }t ||i |i idt dg}t ||i |i idt dg}t ||i |i iddS(NR"Rbi(RRRRR"RbRdRwRRR#R$R&R)R(RRRR#R((R t%test_unrestrictedGetObject_restricted/s      cCsdkl}|it|i}|i}td|_|i |i|i d}|`|i |t tf|idS(N(sNotFoundRbi(RRRRRRRRRbRdRwRR-RR R)(RRRRR((R t2test_unrestrictedGetObject_missing_raises_NotFoundEs    cCsn|it|i}|i}td|_|i|i|id}|`|i |i ddS(NRbi( RRRIRRRRbRdRwRR&R)R"(RRRR((R t/test_unrestrictedGetObject_missing_returns_NoneRs   (RRR"RR!R#RRRR!R&R'R(R*R+R,R-(((R Rs       cCsti}|itit|itit|itit|itit|itit |itit |itit |S(N( tunittestt TestSuitetsuitetaddTestt makeSuiteR$R2RZRRRR(R0((R t test_suite^s t__main__t defaultTestR3(ARPR.tTestingtZope2tstartupt itertoolsRRtExtensionClasstOFS.ApplicationRt AccessControl.SecurityManagementR$Rt AccessControlR t AcquisitiontImplicitRRR+RR,tZODB.DBRtZODB.DemoStorageRR t,Products.PluginIndexes.FieldIndex.FieldIndexR3t0Products.PluginIndexes.KeywordIndex.KeywordIndexR?t(Products.PluginIndexes.TextIndex.LexiconR<t*Products.PluginIndexes.TextIndex.TextIndexR:RR Rt OFS.FolderRRRtTestCaseR$R2tBaseRERHRKRNR RORQRZRRRRRRRR3Rtmain(,RRRRR.RRR$RRR$RNRR7RR?RRKRRRR3R3R2R,RHR?RRRER RRQRR:RROR<R:R6RR R RZ((R t?s^                           0Q