a 4êdgt*ã@sŒdZddlZddlZddlZddlZddlZddlZddlmZ ddl m Z ddl m Z e jZdd„ZGdd„dejƒZed krˆe ¡dS) zATest script for the dumbdbm module Original by Roger E. Masse éN)Úsupport)Úpartialc Cs4dD]*}zt t|¡Wqty,Yq0qdS)N©ú.dirú.datú.bak)ÚosÚunlinkÚ_fnameÚOSError)Úext©r ú./usr/local/lib/python3.9/test/test_dbm_dumb.pyÚ _delete_filess  rc@s&eZdZddddddddd d d d d dd d¡diZdd„Ze ee dƒd¡dd„ƒZ dd„Z dd„Z dd„Z dd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Zdd?„Zd@dA„Ze e j!dB¡dCdD„ƒZ"dEdF„Z#dGdH„Z$dIS)JÚDumbDBMTestCaseó0óóasPython:óbs ProgrammingócstheódswayófsGuidoógsintendedõüúutf-8ó!cCsnt t td¡¡H}| t| ¡ƒg¡|jD]}|j|||<q.|  |¡Wdƒn1s`0YdS)NÚc) Ú contextlibÚclosingÚdumbdbmÚopenr Ú assertEqualÚlistÚkeysÚ_dictÚ read_helper)ÚselfÚfÚkeyr r rÚtest_dumbdbm_creation#s  z%DumbDBMTestCase.test_dumbdbm_creationÚumaskztest needs os.umask()c Csžz.t d¡}t tdd¡}| ¡Wt |¡n t |¡0d}tjdkrNd}ddl}t td¡}| |  |j ¡|¡t td ¡}| |  |j ¡|¡dS) NériŸiÚposixi¶rrr) rr*rr r ÚcloseÚnameÚstatr!ÚS_IMODEÚst_mode)r&Z old_umaskr'Z expected_moder/Ústr r rÚtest_dumbdbm_creation_mode*s   z*DumbDBMTestCase.test_dumbdbm_creation_modecCs6t t¡}d|d<| |dd¡| ¡| ¡dS)Nrr)rr r r!r-©r&r'r r rÚtest_close_twice?s  z DumbDBMTestCase.test_close_twicecCs~| ¡t t td¡¡P}d|jd<|d<| |¡| |  dd¡d¡| |dd¡Wdƒn1sp0YdS)NÚwsindentedróxxxófoo) Úinit_dbrrrr r r$r%r!Ú setdefaultr4r r rÚtest_dumbdbm_modificationFs  z)DumbDBMTestCase.test_dumbdbm_modificationc Cs"| ¡t t td¡¡ò}| |¡| tjd¡d|d<Wdƒn1sR0Y| tjd¡|d=Wdƒn1s†0Y|  |  d¡|j d¡|  |  dd¡d¡|  |  d¡¡|  t¡|dWdƒn1sô0YWdƒn1s0YdS)NÚrz'The database is opened for reading onlyóxrrr7r8)r9rrrr r r%ÚassertRaisesRegexÚerrorr!Úgetr$Z assertIsNoneÚ assertRaisesÚKeyErrorr4r r rÚtest_dumbdbm_readOs  ÿ&ÿ$ z!DumbDBMTestCase.test_dumbdbm_readcCsF| ¡t t t¡¡}| |¡}Wdƒn1s80YdS©N)r9rrrr r Ú keys_helper)r&r'r#r r rÚtest_dumbdbm_keys`sz!DumbDBMTestCase.test_dumbdbm_keyscCsHt t t¡¡$}d|d<| d|¡Wdƒn1s:0YdS)Nóhelloó1)rrrr r ÚassertInr4r r rÚtest_write_containsesz#DumbDBMTestCase.test_write_containscCs„t t t¡¡ }d|d<d|d<Wdƒn1s60Yt t t¡¡ }| |dd¡Wdƒn1sv0YdS)NrGrHóhello2)rrrr r r!r4r r rÚtest_write_write_readjs &z%DumbDBMTestCase.test_write_write_readcCsZ| ¡t t td¡¡,}| |d|jd d¡¡Wdƒn1sL0YdS)Nr<rr) r9rrrr r r!r$Úencoder4r r rÚ test_str_readrszDumbDBMTestCase.test_str_readcCs¼| ¡t t t¡¡ }d|d<d|d<Wdƒn1s>0Yt t td¡¡N}| d|¡| |d d¡|j d d¡¡| |dd¡Wdƒn1s®0YdS) NrrÚaÚ1r<rrHr) r9rrrr r rIr!rMr$r4r r rÚtest_str_write_containsws& ÿz'DumbDBMTestCase.test_str_write_containscCst t t¡¡ }d|d<d|d<Wdƒn1s60Yt tdd¡}| ¡}Wdƒn1sn0Ytjdkr|  dd ¡}n |  d d¡}t tdd ¡}|  |¡Wdƒn1sÌ0Yt t¡}|  |dd¡|  |dd¡dS) NrGrHrKó2rÚrbÚ ó s Úwb) rrrr r ÚioÚreadrÚlinesepÚreplaceÚwriter!)r&r'ÚfileÚdatar r rÚtest_line_endings‚s&&  ( z!DumbDBMTestCase.test_line_endingscCs0| |¡}|jD]}| |j|||¡qdSrD)rEr$r!)r&r'r#r(r r rr%˜s  zDumbDBMTestCase.read_helpercCsPt t td¡¡*}|jD]}|j|||<qWdƒn1sB0YdS©NÚn)rrrr r r$©r&r'Úkr r rr9s zDumbDBMTestCase.init_dbcCs*t| ¡ƒ}t|j ¡ƒ}| ||¡|SrD)Úsortedr#r$r!)r&r'r#Zdkeysr r rrE¢s  zDumbDBMTestCase.keys_helperc Csddl}i}tdƒD]}t t t¡¡~}tdƒD]d}| d¡}| ¡dkrd||vr˜||=||=q4| d¡| d¡}|||<|||<|  |||¡q4Wdƒn1s®0Yt t t¡¡>}t dd „|  ¡Dƒƒ}t |  ¡ƒ}|  ||¡Wdƒq1s0YqdS) NréédZ abcdefghijklmgš™™™™™É?)rrri'css |]\}}| d¡|fVqdS)zlatin-1N)rM)Ú.0rbÚvr r rÚ ¼rz.DumbDBMTestCase.test_random..) ÚrandomÚrangerrrr r ÚchoiceÚ randranger!rcÚitems) r&riÚdÚdummyr'rbrgZexpectedZgotr r rÚ test_randomªs$   0 zDumbDBMTestCase.test_randomcCs®t td¡}d|d<Wdƒn1s*0Yt td¡&}| t| ¡ƒdg¡Wdƒn1sl0Y| tj¡| ¡Wdƒn1s 0YdS)Nrzcontext managerzdumbdbm context managerr<sdumbdbm context manager)rr r r!r"r#rAr?)r&Údbr r rÚtest_context_managerÀs &4z$DumbDBMTestCase.test_context_managerc Csüt td¡}| ¡ttj|ƒttj|dƒttj|ƒttj |ƒfD]J}|  tj ¡}|dƒWdƒn1sp0Y|  t |jƒd¡qBt d¡t d¡t d¡tfD]J}|  tj ¡}||ƒWdƒn1sÚ0Y|  t |jƒd¡q¬dS)NrÚbÚtestz"DBM object has already been closedr#Ziterkeysrm)rr r r-rÚoperatorÚdelitemÚsetitemÚgetitemÚcontainsrAr?r!ÚstrÚ exceptionÚ methodcallerÚlen)r&r'ÚmethÚcmr r rÚtest_check_closedÊs,     ý& ÿý& ÿz!DumbDBMTestCase.test_check_closedcCs†t td¡*}|jD]}|j|||<qWdƒn1s<0Yt td¡ }| | ¡g¡Wdƒn1sx0YdSr_)rr r r$r!r#rar r rÚtest_create_newàs  .zDumbDBMTestCase.test_create_newc CsÈttddƒ}| d¡Wdƒn1s.0Yt ¡t}| t¡:t t¡}Wdƒn1sn0YWdƒn1sŒ0Y| |  ¡d¡Wdƒn1sº0YdS)Nrr6zstr(print('Hacked!')), 0 Ú) r r r[rZcaptured_stdoutrAÚ ValueErrorrr!Úgetvalue)r&ÚstreamÚstdoutr'r r rÚ test_evalès(   <zDumbDBMTestCase.test_evalc CsvdD]l}tƒ| t¡t t|¡Wdƒn1s:0Y| tj  td¡¡| tj  td¡¡qdS)N©r<r6rr) rrAÚFileNotFoundErrorrr r Ú assertFalserÚpathÚexists)r&Úvaluer r rÚtest_missing_datañs  *z!DumbDBMTestCase.test_missing_datac Csªt td¡}Wdƒn1s"0Yt td¡dD]f}| t¡t t|¡Wdƒn1sn0Y| tj  td¡¡| tj  td¡¡q>dS)Nr`rrˆr) rr r rr rAr‰rŠr‹rŒ)r&r'rr r rÚtest_missing_indexùs *z"DumbDBMTestCase.test_missing_indexc CsFdD]<}| td¡t t|¡Wdƒq1s60YqdS)N)ÚxZrfNz)Flag must be one of 'r', 'w', 'c', or 'n')r>rƒrr r )r&Úflagr r rÚtest_invalid_flags ÿz!DumbDBMTestCase.test_invalid_flagc Cst ¡þ}tj |d¡}t |d¡>}| t|  ¡ƒg¡|j D]}|j |||<q@Wdƒn1sh0Yt  |dt j ¡t  |dt j ¡t  |t j t jB¡t |d¡2}| t|  ¡ƒt|j ƒ¡| ¡Wdƒn1sî0YWdƒn1s0YdS)Nrqr`rrr<)rZtemp_dirrr‹Újoinrr r!r"r#r$Úchmodr/ÚS_IRUSRÚS_IXUSRrcr-)r&ÚdirZfnamer'r(r r rÚtest_readonly_files s  .z#DumbDBMTestCase.test_readonly_filesz*requires OS support of non-ASCII encodingscCsætj}dD]}| tj||¡q t |d¡}d|d<Wdƒn1sL0Y| tj  |d¡¡| tj  |d¡¡t |d¡D}|  t |  ¡ƒdg¡| d|v¡|  |dd¡Wdƒn1sØ0YdS)Nrrsvalueskeyrrr<) rÚTESTFN_NONASCIIZ addCleanupr rr Z assertTruerr‹rŒr!r"r#)r&ÚfilenameÚsuffixrqr r rÚtest_nonascii_filenames&z&DumbDBMTestCase.test_nonascii_filenamecCs tƒdSrD©r©r&r r rÚtearDown'szDumbDBMTestCase.tearDowncCs tƒdSrDrržr r rÚsetUp*szDumbDBMTestCase.setUpN)%Ú__name__Ú __module__Ú __qualname__rMr$r)ÚunittestZ skipUnlessÚhasattrrr3r5r;rCrFrJrLrNrQr^r%r9rErprrr€rr‡rŽrr’r˜rr™rœrŸr r r r rrsN ù       ÿ rÚ__main__)Ú__doc__rrWrurr/r¤Zdbm.dumbZdumbrrtrÚ functoolsrZTESTFNr rZTestCaserr¡Úmainr r r rÚs