mς SγΈEc@sœdZdklZdklZlZdklZlZdk l Z dfd„ƒYZ de fd„ƒYZ d e fd „ƒYZ d fd „ƒYZd S(s’Run tests against the iterator() interface for storages. Any storage that supports the iterator() method should be able to pass all these tests. (sMinPO(s zodb_pickles zodb_unpickle(sU64sp64(s TransactiontIteratorComparecBstZd„ZRS(Nc CsΫ|i} |i}|}x›t||dgƒD]ƒ\}}| |i |ƒxd|D]\}| |i|ƒ| |i |ƒ| |idƒ| t|iƒt|ƒƒ|d}qRWq/W| ||t|ƒƒ|iƒdS(Nti(tselft assertEqualteqt_oidtoidtval0tvaltzipttxnitertrevidstNonetrecitertrevidttidtrectversiont zodb_unpickletdatatMinPOtlentclose( RR R RRR RRRR((t9/data/zmath/zope/lib/python/ZODB/tests/IteratorStorage.pyt iter_verifys   (t__name__t __module__R(((RRstIteratorStoragecBsGtZd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(NcCs’|iiƒ|_}|i|dtdƒƒ}|i|d|dtdƒƒ}|i|d|dtdƒƒ}|ii ƒ}|i ||||gdƒdS(NRi Ri i ( Rt_storagetnew_oidRRt_dostoreRtrevid1trevid2trevid3titeratorR R(RRR R!RR ((RtcheckSimpleIteration-s !!cCsd|iiƒ|_}|i|dtdƒƒ}|iiƒ}|i ƒ|i t |i dƒdS(NRi i(RRRRRRRRR"R Rt assertRaisestIOErrort __getitem__(RRRR ((Rt checkClose7s  cCsF|iiƒpdSn|iƒ|iddƒ|iƒ|iddƒtƒ}|ii|ƒ|iid|ƒ|ii|ƒ|ii |ƒ|iddƒ|iƒ|iddƒtƒ}|ii|ƒ|ii dd|ƒ|ii|ƒ|ii |ƒ|ii ƒ}x|D]}x|D]}q4Wq'WdS(NRtaborttcommitR(RRtsupportsVersionsRt Transactionttt tpc_begint abortVersionttpc_votet tpc_finisht commitVersionR"R ttransR(RR,R2RR ((RtcheckVersionIterator>s2     c Cs#t|idƒpdSn|iiƒpdSn|iiƒ}|i|dtdƒƒ}|ii ƒ}|dd}t ƒ} |ii| ƒ|ii|| ƒ}|ii| ƒ|ii| ƒ|iiƒ}x|D]}x|D]}qλWqήW|i|i|ƒ|i|idƒdS(NtsupportsTransactionalUndoRi^itid(thasattrRRR4RRRRRtundoInfotinfoRR+R,R-tundotoidsR/R0R"titerttxnRRRR ( RR8R<RRR;R:RRR,((RtcheckUndoZombieNonVersionYs* cCs|iiƒ}|i|dtdƒƒ}|iiƒ}d}x+|D]#}|i |i hƒ|d7}qFW|i |dƒdS(NRii( RRRRRRRR"R;tcountR<Rt _extension(RR>R<RRR;((Rt%checkTransactionExtensionFromIteratorwscCs¦|iiƒ}tƒ}ttdƒƒ}zd|ii |ƒ|ii |dd|d|ƒ|ii |ƒ|ii ƒ}x|D]}qƒWWd|ii|ƒXdS(NitiR(RRRRR+R,t zodb_pickleRRR-tstoreR/R"tittxR0(RRRDR,RER((RtcheckIterationIntraTransactions   cCsζ|iiƒ}|i|ddƒ|ii|dƒ\}}}|i t |ƒt dƒƒt }xe|iiƒD]T}xK|D]C}|i|jo-|i|jo|i |i|ƒt}qqWqrW|p|idƒndS(NRi*Rs+Could not find transaction with matching id(RRRRRtloadExRRtverRRRtFalsetmatchR"R<RtTruetfail(RR<RHRRJRRR((Rt checkLoadEx˜s ( RRR#R'R3R=R@RFRM(((RR+s    tExtendedIteratorStoragecBstZd„ZRS(Nc CsZ|iiƒ|_}|i|dtdƒƒ}|i|d|dtdƒƒ}|i|d|dtdƒƒ}|i|d|dtdƒƒ}|ii ||ƒ}|i |||||gdƒ|ii |ƒ}|i |||gdƒ|ii d|ƒ}|i |||gdƒ|ii ||ƒ}|i |||gdƒtt|ƒt|ƒdƒ}|ii ||ƒ}|i |||gdƒtt|ƒdt|ƒdƒ}||jpt‚|ii ||ƒ}|i |||gdƒ|ii ||ƒ}|i |gdƒ|ii ||ƒ}|i ||gdƒdS( NRi Ri i iii(RRRRRRRRR R!trevid4R"R RR tp64tU64trevid3atrevid1atAssertionError( RRRRR R!RSRROR ((RtcheckExtendedIteration©s0!!! $(RRRU(((RRN§stIteratorDeepComparecBstZd„ZRS(Nc Csp|i}|iƒ} |iƒ}xt| |ƒD]ύ\}}||i |i ƒ||i |i ƒ||i |i ƒ||i|iƒ||i|iƒxit||ƒD]X\}}||i|iƒ||i |i ƒ||i|iƒ||i|iƒq¬W|it|iƒ|it|iƒq1W|it| iƒ|it|iƒ| iƒ|iƒdS(N(RRRtstorage1R"titer1tstorage2titer2R ttxn1ttxn2Rtstatustusert descriptionR?trec1trec2RRRR$t IndexErrortnextR( RRWRYR`RZR\RaR[RRX((RtcompareΡs,      (RRRd(((RRVΠsN(t__doc__tZODB.tests.MinPORtZODB.tests.StorageTestBaseRBRt ZODB.utilsRQRPt transactionR+RRRNRV( R+RPRBRRQRVRRRRN((Rt?s  |)