a 5êdgtã @sBddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z z ddl!Z!Wne"y dZ!Yn0z ddl#Z#Wne"yFdZ#Yn0z ddl$Z$Wne"yldZ$Yn0zddl%Z%dd„e% &¡DƒZ'Wne"e(fy¨gZ'Yn0zddl)m*Z*m+Z+Wne"yÜej,Z*Z+Yn0ddl-m.Z.dd lm/Z/m0Z0d Z1e2e d ƒre  3¡dkZ1e2ed ƒrGdd„dej<ƒZ?Gdd„dej<ƒZ@ddlmAZAGdd„deAjBƒZCGdd „d ej<ƒZDe Ee2e d!ƒd"¡Gd#d$„d$eDƒƒZFGd%d&„d&eDƒZGe Ee2e d!ƒd"¡Gd'd(„d(eFƒƒZHGd)d*„d*ej<ƒZIe Ee2e d+ƒd,¡Gd-d.„d.ej<ƒƒZJGd/d0„d0ej<ƒZKGd1d2„d2ej<ƒZLGd3d4„d4ej<ƒZMe Ee2e d5ƒd6¡Gd7d8„d8ej<ƒƒZNe Od9¡d:kpôe Od;¡d:kpôe Od<¡d:kZPe QePd=¡e Qejd>kd?¡Gd@dA„dAej<ƒƒƒZRejSdªdBdC„ƒZTe Ee2e dDƒdE¡GdFdG„dGej<ƒƒZUe EejdHkdI¡GdJdK„dKej<ƒƒZVGdLdM„dMej<ƒZWGdNdO„dOej<ƒZXe QejdHkdP¡GdQdR„dRej<ƒƒZYe QejdHkdP¡GdSdT„dTej<ƒƒZZe EejdHkdI¡GdUdV„dVej<ƒƒZ[e EejdHkdI¡GdWdX„dXej<ƒƒZ\e Ee2e dYƒdZ¡Gd[d\„d\ej<ƒƒZ]e EejdHkdI¡ej^Gd]d^„d^ej<ƒƒƒZ_e EejdHkdI¡Gd_d`„d`ej<ƒƒZ`e EejdHkdI¡Gdadb„dbej<ƒƒZaej^Gdcdd„ddej<ƒƒZbGdedf„dfej<ƒZcGdgdh„dhej<ƒZdGdidj„djej<ƒZeGdkdl„dlej<ƒZfe gdm¡e Ee2e dnƒdo¡Gdpdq„dqej<ƒƒƒZhe Ee2e drƒone2e dsƒdt¡Gdudv„dvej<ƒƒZiGdwdx„dxejjejkƒZle Ee2e dyƒdz¡Gd{d|„d|ej<ƒƒZmd}d~„Zne Eenƒd¡e od€dd‚¡Gdƒd„„d„ej<ƒƒƒZpe Ee2e d…ƒd†¡Gd‡dˆ„dˆej<ƒƒZqe Ee2e d‰ƒdŠ¡e od‹dŒ¡GddŽ„dŽej<ƒƒƒZrGdd„dej<ƒZsGd‘d’„d’ej<ƒZtGd“d”„d”ej<ƒZuGd•d–„d–ej<ƒZve Ee2e d—ƒd˜¡Gd™dš„dšej<ƒƒZwGd›dœ„dœej<ƒZxGddž„džej<ƒZyGdŸd „d ej<ƒZzGd¡d¢„d¢ej<ƒZ{Gd£d¤„d¤ej<ƒZ|e2e d¥ƒr,Gd¦d§„d§e{ƒZ}e~d¨kr>e ¡dS)«éN)Úsupport)Ú socket_helper)Ú win32_is_iotcCsg|] }|j‘qS©)Úpw_uid)Ú.0Úurrú(/usr/local/lib/python3.9/test/test_os.pyÚ 2ór )ÚINT_MAXÚPY_SSIZE_T_MAX©Úassert_python_ok)Ú unix_shellÚFakePathFÚgeteuidÚ thread_infoZ linuxthreadsZfreebsdcCst tt|ƒd|¡S)Nzrequires os.%s)ÚunittestÚ skipUnlessÚhasattrÚos©Únamerrr Úrequires_os_funcOsrócontentcCs:t|ddƒ}| |¡Wdƒn1s,0YdS)NÚxbr)ÚopenÚwrite)ÚfilenameZcontentÚfprrr Ú create_fileSsr!c@s$eZdZdd„Zdd„Zdd„ZdS)Ú MiscTestscCst ¡}| |t¡dS©N)rÚgetcwdÚassertIsInstanceÚstr©ÚselfÚcwdrrr Ú test_getcwdYszMiscTests.test_getcwdc Cs~d}d}d}|d|t|ƒ}t ¡>}t |¡}|}t ¡}| ||¡|t|ƒttjj ƒ}|dkrvq t|ƒ|kr–|dkr–|d|…}tj  ||¡}zt  |¡t  |¡Wn\t yÔYq YnFty} z,| jtjkrWYd} ~ q n‚WYd} ~ n d} ~ 00|}q>tjr:tdt|ƒ›ƒWdƒn1sP0YWdƒn1sp0YdS)NiÐéÈZpython_test_dir_Úarz!Tested current directory length: )ÚlenÚtempfileÚTemporaryDirectoryrZ change_cwdrr$Ú assertEqualÚpathÚsepÚjoinÚmkdirÚchdirÚFileNotFoundErrorÚOSErrorÚerrnoZ ENAMETOOLONGÚverboseÚprint) r(Zmin_lenZdirlenÚdirnameZtmpdirr1Úexpectedr)ZneedÚexcrrr Útest_getcwd_long_path]s6       zMiscTests.test_getcwd_long_pathcCs.t ¡}| |t¡| t |¡t ¡¡dSr#)rÚgetcwdbr%Úbytesr0Úfsdecoder$r'rrr Ú test_getcwdb’s zMiscTests.test_getcwdbN)Ú__name__Ú __module__Ú __qualname__r*r>rBrrrr r"Xs5r"c@seZdZdd„ZeZdd„Zdd„Zejdd„ƒZ d d „Z eje   e ekd ¡eje d d dddd„ƒƒƒZdd„Zdd„Ze   ejdkd¡dd„ƒZdd„Zdd„Zdd„Zd d!„Zd"d#„Ze   eed$ƒd%¡d&d'„ƒZe   eed$ƒd%¡d(d)„ƒZe   eed$ƒd%¡d*d+„ƒZd,S)-Ú FileTestscCstj tj¡rt tj¡dSr#)rr1ÚlexistsrÚTESTFNÚunlink©r(rrr ÚsetUpšszFileTests.setUpcCs:t tjtjtjB¡}t |¡| t tjtj ¡¡dSr#) rrrrHÚO_CREATÚO_RDWRÚcloseÚ assertTrueÚaccessÚW_OK©r(Úfrrr Ú test_accessŸs zFileTests.test_accessc Cs¨t tjtjtjB¡}t |¡}zTd}||dkrht |¡|d7}|dkrV| d¡|t |¡}}q&Wt |¡n t |¡0t  ||d¡|  t tj |d¡dS)Nréé z%couldn't allocate two consecutive fdséóa) rrrrHrLrMÚduprNÚskipTestÚ closerangeÚ assertRaisesr7r)r(ÚfirstÚsecondZretriesrrr Útest_closerange¤s    zFileTests.test_closerangecCs<tj}t |¡}| ttj|d¡t |¡}| ||¡dS©Nr) rrHÚsysÚ getrefcountr\Ú TypeErrorrÚrenamer0)r(r1ÚoldÚnewrrr Ú test_rename¹s   zFileTests.test_renamecCs€ttjdƒ`}| d¡| ¡| ¡}t |dd¡t |d¡}|  t |ƒt ¡|  |d¡Wdƒn1sr0YdS)Núw+bóspamré) rrrHrÚflushÚfilenorÚlseekÚreadr0Útyper@)r(ÚfobjÚfdÚsrrr Ú test_readÁs  zFileTests.test_readzneeds INT_MAX < PY_SSIZE_T_MAXrVrUF)ÚsizeZmemuseÚdry_runcCsh| tjtj¡ttjdƒttjdƒ }t | ¡|¡}Wdƒn1sN0Y|  |d¡dS)NstestÚrb) Ú addCleanuprrIrHr!rrrnrlr0)r(rtr Údatarrr Útest_large_readËs  .zFileTests.test_large_readcCs¦t tjtjtjB¡}| ttj|d¡t |d¡t |t dƒ¡t |t dƒ¡t  |¡ttjdƒ(}|  |  ¡ ¡gd¢¡Wdƒn1s˜0YdS)NÚbeanssbacon seggs sspam rv)sbaconseggsri)rrrrHrLÚO_WRONLYr\rcrÚ bytearrayÚ memoryviewrNr0rnÚ splitlines)r(rqrprrr Ú test_writeÞs  ÿzFileTests.test_writecGs"tj|tjdd}| |d¡dS)NT)Ú creationflagsÚshellr)Ú subprocessÚcallZCREATE_NEW_CONSOLEr0)r(ÚargsÚretcoderrr Úwrite_windows_consoleês üzFileTests.write_windows_consoleÚwin32z$test specific to the Windows consolecCs*d}| tjd|¡| tjdd|¡dS)Nzprint('x' * 100000)ú-cz-u)r†raÚ executable©r(Úcoderrr Útest_write_windows_consoleòsz$FileTests.test_write_windows_consolecGs.t tjtj¡}tj|g|¢RŽ}| ¡dSr#)rrrrHÚO_RDONLYÚfdopenrN)r(r„rqrSrrr Ú fdopen_helperýszFileTests.fdopen_helpercCsBt tjtjtjB¡}t |¡| ¡| d¡| dd¡dS)NÚréd)rrrrHrLrMrNr©r(rqrrr Ú test_fdopens   zFileTests.test_fdopencCsœtjd}| tjtj¡| tj|¡ttjdƒt|dƒt tj|¡| ttj tj¡t |dƒ }|  |  ¡d¡Wdƒn1sŽ0YdS)Nz.2ó1ó2rÚ1) rrHrwrIr!rÚreplacer\r6Ústatrr0rn)r(ÚTESTFN2rSrrr Ú test_replace s    zFileTests.test_replacecCs"tjttjddd}t |¡dS)Néÿ)r1ÚflagsÚmodeÚdir_fd)rrÚ__file__rrNrRrrr Útest_open_keywordss ÿzFileTests.test_open_keywordsc Cs>t td¡}z|dtjdddWnttfy8Yn0dS)NÚsymlinkÚtargetF)ÚsrcÚdstÚtarget_is_directoryrž)rZ get_attributerrHÚNotImplementedErrorr7)r(r¡rrr Útest_symlink_keywordss ÿ zFileTests.test_symlink_keywordsÚcopy_file_rangeztest needs os.copy_file_range()cCs<| t¡t ddd¡Wdƒn1s.0YdS)NrrUiöÿÿÿ)r\Ú ValueErrorrr¨rJrrr Ú#test_copy_file_range_invalid_values$s z-FileTests.test_copy_file_range_invalid_valuesc Cs tjd}d}ttj|ƒ| tjtj¡ttjdƒ}| |j¡| ¡}t|dƒ}| tj|¡| |j¡| ¡}zt  ||d¡}Wn<t yÄ}z$|j t j kr¦‚|  |¡WYd}~n`d}~00| |tddƒ¡t|dƒ(}| | ¡|d|…¡Wdƒn1s0YdS)Nz.3ó 0123456789rvrhéré)rrHr!rwrIrrNrlrr¨r7r8ÚENOSYSrZÚassertInÚranger0rn) r(r™rxÚin_fileÚin_fdÚout_fileÚout_fdÚiÚerrr Útest_copy_file_range)s(         zFileTests.test_copy_file_rangec Cs^tjd}d}d}d}d}ttj|ƒ| tjtj¡ttjdƒ}| |j¡| ¡}t|dƒ}| tj|¡| |j¡| ¡} ztj || |||d} Wn<t yÖ} z$| j t j kr¸‚|  | ¡WYd} ~ nŒd} ~ 00| | td |d ƒ¡t|dƒ}| ¡} Wdƒn1s0Y| | d|…d |¡| | |d…|||| …¡dS) Nz.4r«r­ér¬rvrh)Z offset_srcZ offset_dstrrUó)rrHr!rwrIrrNrlrr¨r7r8r®rZr¯r°rnr0) r(ZTESTFN4rxZ bytes_to_copyZin_skipZout_seekr±r²r³r´rµr¶rnrrr Útest_copy_file_range_offsetKs<       þ    (ÿz%FileTests.test_copy_file_range_offsetN) rCrDrErKÚtearDownrTr_rÚ cpython_onlyrgrsrrr r Z bigmemtestryrr†raÚplatformrŒrr“ršr r§rrrªr·rºrrrr rF™s<   ÿ   ÿ    !rFc@seZdZdd„Zdd„Zdd„Zdd„Zd d „Ze  e e d ƒd ¡d d„ƒZ e  e e d ƒd¡dd„ƒZ e  ejdkd¡dd„ƒZe  ejdkd¡e  e e dƒd¡dd„ƒƒZdd„Ze  ejdkd¡dd„ƒZe  ejdkd¡dd „ƒZe  ejdkd¡d!d"„ƒZd#S)$ÚStatAttributeTestscCs(tj|_| tj|j¡t|jdƒdS)NóABC)rrHÚfnamerwrIr!rJrrr rKzszStatAttributeTests.setUpc Csæt |¡}| |tjd¡| |jd¡t|ƒ}ttƒD]d}|dd…dkr:| ¡}| d¡rjdd„}ndd„}| |t||ƒƒ|tt|ƒ¡|  ||¡q:d  ¡D]8}t t||ƒdƒ}t||d ƒd }|j ||d d q¨z|d |  d¡Wnty Yn0zd|_|  d¡Wnty6Yn0zd|_|  d¡WnttfydYn0zd|_|  d¡WntyŽYn0zt d¡} |  d¡Wnty¼Yn0zt d¡} WntyàYn0dS)Nr¸ZST_ZTIMEcSst|ƒSr#)Úint©Úxrrr ÚtruncŒr z7StatAttributeTests.check_stat_attributes..trunccSs|Sr#rrÂrrr rÄŽr zst_atime st_mtime st_ctimei †Z_nsi'rW©Údeltar+úNo exception raisedrU©rV©rrUrWr¸rjr¬r­ééé rVé é é é)rr˜r0ÚST_SIZEÚst_sizeÚdirÚlowerÚendswithÚgetattrr¯ÚsplitrÁÚassertAlmostEqualÚfailÚ IndexErrorÚst_modeÚAttributeErrorÚst_rdevrcÚparrotÚ stat_result) r(rÀÚresultÚmembersrÚattrrÄZfloatyZ nanosecondyÚresult2rrr Úcheck_stat_attributess^     ÿ  z(StatAttributeTests.check_stat_attributescCs| |j¡dSr#)rärÀrJrrr Útest_stat_attributesÀsz'StatAttributeTests.test_stat_attributescCsFz|j t ¡¡}Wn"ty6| d|j¡Yn0| |¡dS)Nz#cannot encode %a for the filesystem)rÀÚencoderaÚgetfilesystemencodingÚUnicodeEncodeErrorrZrä)r(rÀrrr Útest_stat_attributes_bytesÃs  z-StatAttributeTests.test_stat_attributes_bytescCsft |j¡}ttjdƒD]F}t ||¡}| d|¡|dkrJ| d|¡t |¡}|  ||¡qdS)NrUs stat_resultrjscos stat_result ) rr˜rÀr°ÚpickleÚHIGHEST_PROTOCOLÚdumpsr¯Úloadsr0©r(ràÚprotoÚpZ unpickledrrr Útest_stat_result_pickleÊs     z*StatAttributeTests.test_stat_result_pickleÚstatvfsztest needs os.statvfs()cCst |j¡}| |j|d¡d}t|ƒD]"\}}| t|d|ƒ||¡q*| t|j t ƒ¡| t |ƒd¡zd|_|  d¡Wnt y–Yn0zd|_|  d¡Wnt y¾Yn0zt d¡}|  d¡WntyêYn0zt d¡}WntyYn0dS) Nr¸) ZbsizeZfrsizeZblocksZbfreeZbavailÚfilesZffreeZfavailÚflagZnamemaxZf_rVrUrÇrÈrÉ)rròrÀr0Úf_bfreeÚ enumeraterÖrOÚ isinstanceÚf_fsidrÁr-rÙrÜrÞÚstatvfs_resultrc)r(ràráÚvalueÚmemberrãrrr Útest_statvfs_attributesÔs4     z*StatAttributeTests.test_statvfs_attributesúneed os.statvfs()cCsft |j¡}ttjdƒD]F}t ||¡}| d|¡|dkrJ| d|¡t |¡}|  ||¡qdS)NrUsstatvfs_resultrjscos statvfs_result ) rròrÀr°rêrërìr¯rír0rîrrr Útest_statvfs_result_pickles     z-StatAttributeTests.test_statvfs_result_pickler‡úWin32 specific testsc Cs\zt d¡WnHty*| d¡Yn.tyV}z| d¡WYd}~n d}~00dS)Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)rr˜r6rZr7rÙ©r(r¶rrr Ú test_1686475 s  zStatAttributeTests.test_1686475Úpipezrequires os.pipe()c Cst ¡\}}z"t |¡Wt |¡t |¡nt |¡t |¡0| t¡}t |¡Wdƒn1sp0Y| |jjtj ¡dSr#) rrr˜rNr\r7r0Ú exceptionr8ÚEBADF)r(rÚwÚctxrrr Ú test_15261s    ÿ   (zStatAttributeTests.test_15261cCsF| t|dƒ¡| t|jtƒ¡| d|jko:dkn¡dS)NÚst_file_attributesrìÿÿ)rOrr÷rrÁ)r(ràrrr Úcheck_file_attributes%sz(StatAttributeTests.check_file_attributesz$st_file_attributes is Win32 specificcCszt |j¡}| |¡| |jtj@d¡tjd}t  |¡|  tj |¡t |¡}| |¡| |jtj@tj¡dS)NrrÓ) rr˜rÀr r0rÚFILE_ATTRIBUTE_DIRECTORYrrHr4rwÚrmdir)r(ràr;rrr Útest_file_attributes*s   þ     þz'StatAttributeTests.test_file_attributescCsdtj tjd|j¡}| tj|¡t|dƒd}t j d|ddg|dt  |¡}|  |j d¡dS) NÚTEMPr¿rËz icacls.exez/denyz*S-1-5-32-545:(S)©r€r)rr1r3ÚenvironrÀrwrrIr!r‚Ú check_callr˜ÚassertNotEqualrÒ)r(rÀZDETACHED_PROCESSràrrr Útest_access_denied?s  ü z%StatAttributeTests.test_access_deniedcCs6dtj t ¡¡d}t |¡}| |jtj¡dS)Nz//./r)rr1Ú splitdriver$r˜r0rÛÚS_IFBLK)r(rÀràrrr Útest_stat_block_deviceTs z)StatAttributeTests.test_stat_block_deviceN)rCrDrErKrärårérñrrrrrürþrar½rrr r rrrrrr r¾ys2A  + ÿ    ÿ  r¾c@säeZdZdd„Zdd„Zd)dd„Zdd „Zed d „ƒZd d „Z dd„Z e   e je jvd¡dd„ƒZe   e je jvd¡dd„ƒZe   e je jvd¡dd„ƒZdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zejd'd(„ƒZdS)*Ú UtimeTestscCsDtj|_tj |jd¡|_| tj|j¡t  |j¡t |jƒdS)NÚf1) rrHr;rr1r3rÀrwÚrmtreer4r!rJrrr rK^s  zUtimeTests.setUpcCs4t |¡}|j|dkp2|j|dkp2|j|dkS)NrÊrËrÌ)rr˜Úst_atimeÚst_mtimeÚst_ctime)r(rÚstrrr Úsupport_subsecondfs   ÿ þzUtimeTests.support_subsecondNcCs¸|s |j}| |¡}|r"d}d}nd}d}||||fƒt |¡}|rt|j|j|ddd|j|j|dddn$| |j|d¡| |j|d¡| |j|¡| |j |¡dS)Ni8Z¹;l° o]ìr TlP¬9ç•Ö&è .>gíµ ÷ư>rÅ) rÀrrr˜rØrrr0Ú st_atime_nsÚ st_mtime_ns)r(Úset_timerrÚatime_nsÚmtime_nsrrrr Ú _test_utimens"  zUtimeTests._test_utimecCsdd„}| |¡dS)NcSstj||ddS©N©Úns©rÚutime©rr)rrr r#Žsz'UtimeTests.test_utime..set_time©r&©r(r#rrr Ú test_utimeszUtimeTests.test_utimecCs |ddS)Nr g•Ö&è .>rr(rrr Ú ns_to_sec“szUtimeTests.ns_to_seccs‡fdd„}ˆ |¡dS)Ncs0|\}}ˆ |¡}ˆ |¡}t |||f¡dSr#©r0rr+©rr)r$r%ZatimeÚmtimerJrr r#œs  z2UtimeTests.test_utime_by_indexed..set_timer-r.rrJr Útest_utime_by_indexedšs z UtimeTests.test_utime_by_indexedcs‡fdd„}ˆ |¡dS)Ncs2|\}}ˆ |¡}ˆ |¡}tj|||fddS)N)Útimesr1r2rJrr r#¦s  z0UtimeTests.test_utime_by_times..set_timer-r.rrJr Útest_utime_by_times¥s zUtimeTests.test_utime_by_timesz9follow_symlinks support for utime required for this test.cCsdd„}| |¡dS)NcSstj||dddS)NF)r)Úfollow_symlinksr*r,rrr r#²sz9UtimeTests.test_utime_nofollow_symlinks..set_timer-r.rrr Útest_utime_nofollow_symlinks®sz'UtimeTests.test_utime_nofollow_symlinksz,fd support for utime required for this test.cCsdd„}| |¡dS)NcSsBt|ddƒ"}tj| ¡|dWdƒn1s40YdS)NÚwbrr()rrr+rl)rr)r rrr r#»sz*UtimeTests.test_utime_fd..set_timer-r.rrr Ú test_utime_fd¸szUtimeTests.test_utime_fdz0dir_fd support for utime required for this test.cCsdd„}| |¡dS)Nc SsNtj |¡\}}t |tj¡}ztj|||dWt |¡n t |¡0dS)N)ržr))rr1r×rrr+rN)rr)r;rÚdirfdrrr r#Ås z.UtimeTests.test_utime_dir_fd..set_timer-r.rrr Útest_utime_dir_fdÂszUtimeTests.test_utime_dir_fdcCsdd„}|j||jddS)NcSstj||ddSr'r*r,rrr r#Ðsz1UtimeTests.test_utime_directory..set_time©r)r&r;r.rrr Útest_utime_directoryÏszUtimeTests.test_utime_directorycCsbt ¡}||jƒ| |j¡s$d}nd}t |j¡}d|j||j|f}|j|j|||ddS)Ngð?gš™™™™™©?zst_time=%r, current=%r, dt=%r)rÆÚmsg)ÚtimerÀrrr˜rrØ)r(r#ÚcurrentrÆrr?rrr Ú_test_utime_currentÕs   ÿ ÿzUtimeTests._test_utime_currentcs‡fdd„}ˆ |¡dS)Ncst ˆj¡dSr#©rr+rÀr=rJrr r#ìsz/UtimeTests.test_utime_current..set_time©rBr.rrJr Útest_utime_currentës zUtimeTests.test_utime_currentcs‡fdd„}ˆ |¡dS)Ncst ˆjd¡dSr#rCr=rJrr r#òsz3UtimeTests.test_utime_current_old..set_timerDr.rrJr Útest_utime_current_oldñs z!UtimeTests.test_utime_current_oldc Csltjdkrhtj tj |¡¡dd}ddl}|jj}|  dd¡}|  |ddddd|t |ƒ¡}|rh|j SdS)Nr‡rú\Úr‘) rar½rr1rÚabspathÚctypesÚwindllÚkernel32Zcreate_unicode_bufferZGetVolumeInformationWr-rú)r(r1ÚrootrJrLÚbufÚokrrr Úget_file_system÷s   þzUtimeTests.get_file_systemcCsJ| |j¡dkr| d¡d}t |j||f¡| t |j¡j|¡dS)NZNTFSz requires NTFSr) rPr;rZrr+rÀr0r˜r)r(Zlargerrr Útest_large_times  zUtimeTests.test_large_timec Cs¶| t¡"tj|jdddWdƒn1s20Y| t¡"t |jddg¡Wdƒn1sn0Y| t¡t |jd¡Wdƒn1s¦0Y| t¡t |jd¡Wdƒn1sÞ0Y| t¡$tj|jddgdWdƒn1s0Y| t¡ tj|jddWdƒn1sZ0Y| t¡ tj|jddWdƒn1s–0Ytjtjvrì| t¡"tj|jdddWdƒn1sâ0Ytjtjvrft |jdd ƒL}| t¡ t |  ¡d¡Wdƒn1s<0YWdƒn1s\0Ytjtj vr²| t¡"tj|jdd d Wdƒn1s¨0YdS) N)r¬r¬r(r¬)r¬)r¬r¬r¬F©r7r9r©rž) r\r©rr+rÀrcÚsupports_follow_symlinksr¦Ú supports_fdrrlÚsupports_dir_fd)r(r rrr Útest_utime_invalid_argumentss0 0 0 , , 4 0 0 2 P z'UtimeTests.test_utime_invalid_argumentscCsÒdd„}| t¡(tj|j|dƒdfdWdƒn1s@0Y| t¡(tj|j|dƒdfdWdƒn1s‚0Y| t¡(tj|j|dƒdfdWdƒn1sÄ0YdS)NcsG‡fdd„dƒ}|ƒS)NcseZdZ‡fdd„ZdS)z?UtimeTests.test_issue31577..get_bad_int..BadIntcsˆSr#r)r„©Údivmod_ret_valrr Ú __divmod__0szJUtimeTests.test_issue31577..get_bad_int..BadInt.__divmod__N)rCrDrErZrrXrr ÚBadInt/sr[r)rYr[rrXr Ú get_bad_int.sz/UtimeTests.test_issue31577..get_bad_inté*rUr(r)rUrWr¸)r\rcrr+rÀ)r(r\rrr Útest_issue31577*s 6 6 zUtimeTests.test_issue31577)N)rCrDrErKrr&r/Ú staticmethodr0r4r6rrrr+rTr8rUr:rVr<r>rBrErFrPrQrWrr¼r^rrrr r]s:    ÿ ÿ ÿ   r)Ú mapping_testsc@seZdZdZdd„Zdd„Zdd„Zdd „Ze  e o>e j   e ¡d ¡d d „ƒZe  e o^e j   e ¡d ¡d d„ƒZdd„Zdd„Zdd„Zdd„Ze  e jd¡dd„ƒZdd„Ze dd¡dd„ƒZd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Z d.d/„Z!d0d1„Z"d2d3„Z#d4d5„Z$dS)6Ú EnvironTestsNcCsBttjƒ|_tjrttjƒ|_| ¡ ¡D]\}}|tj|<q*dSr#) ÚdictrrÚ_EnvironTests__saveÚsupports_bytes_environÚenvironbÚ_EnvironTests__savebÚ _referenceÚitems©r(Úkeyrúrrr rKAs   zEnvironTests.setUpcCs:tj ¡tj |j¡tjr6tj ¡tj |j¡dSr#)rrÚclearÚupdatercrdrerfrJrrr r»Hs   zEnvironTests.tearDowncCs ddddœS)NZVALUE1ZVALUE2ZVALUE3)ZKEY1ZKEY2ZKEY3rrJrrr rgOszEnvironTests._referencecCstj ¡tjSr#)rrrkrJrrr Ú_empty_mappingRs zEnvironTests._empty_mappingzrequires a shellcCsbtj ¡tjjddt dt¡(}| ¡ ¡}| |d¡Wdƒn1sT0YdS)NZWorld)ZHELLOz%s -c 'echo $HELLO') rrrkrlÚpopenrrnÚstripr0)r(rnrúrrr Ú test_update2Ws   zEnvironTests.test_update2cCsxt dt¡V}t|ƒ}| t|ƒd¡| t|ƒd¡| t|ƒd¡| tt|¡Wdƒn1sj0YdS)Nz %s -c 'echo "line1 line2 line3"'zline1 zline2 zline3 )rrnrÚiterr0Únextr\Ú StopIteration)r(rnÚitrrr Útest_os_popen_iter`sÿzEnvironTests.test_os_popen_itercCs8tj ¡D](\}}| t|ƒt¡| t|ƒt¡q dSr#)rrrhr0ror&)r(rjÚvalrrr Útest_keyvalue_typesmsz EnvironTests.test_keyvalue_typescCs.| ¡ ¡D]\}}| tj |¡|¡q dSr#)rgrhr0rrÚgetrirrr Ú test_itemsrszEnvironTests.test_itemsc Cs4tj}| t|ƒd d dd„| ¡Dƒ¡¡¡dS)Nzenviron({{{}}})z, css|]\}}d ||¡VqdS)z {!r}: {!r}N©Úformat)rrjrúrrr Ú zsÿz-EnvironTests.test___repr__..)rrr0Úreprr{r3rh)r(Úenvrrr Ú test___repr__wsþzEnvironTests.test___repr__cCsZtj tj¡}gd¢}dtj |¡i}tj}z8t|ƒt_| |t ¡¡| |tjdd¡W|t_n|t_0| |t i¡¡| dt ddi¡¡| |t |¡¡tj rVz:t j dddd d œ}Wdƒn1sÞ0YWnt yüYn0|  ttj|¡| t d d i¡d g¡| t d d i¡d g¡| t dd i¡d g¡dS)N)z/montyz/pythonrHz/flying/circusÚPATH©r~©rHrHT)Úrecordr–r•)r€óPATHr„óabcÚabc)rÚdefpathr×Úpathsepr3rrbÚassertSequenceEqualÚ get_exec_pathrdÚwarningsÚcatch_warningsÚ BytesWarningr\r©)r(Z defpath_listZ test_pathZtest_envZ saved_environZ mixed_envrrr Útest_get_exec_path~s8 , ÿÿÿzEnvironTests.test_get_exec_pathz#os.environb required for this test.cCs¸d}z| t ¡d¡}Wn*tyBdt ¡f}| |¡Yn0|tjd<| tjd|¡| tjd|¡d}|tjd<| tjd|¡|  t ¡d¡}| tjd|¡dS) Nueuro€Úsurrogateescapez'U+20AC character is not encodable to %sÚunicodesunicodeóÿsbytesr@) rærarçrèrZrrr0reÚdecode)r(rúZ value_bytesr?Z value_strrrr Ú test_environb§s$ ÿ ÿ  zEnvironTests.test_environbcCsÆd}d}d|›d}t ¡–}| |d¡t ||¡tjtjd|gdtj dd}|  |j   ¡t |ƒ¡t |¡tjtjd|gdtj dd}|  |j   ¡t dƒ¡Wdƒn1s¸0YdS)NZ PYTHONTESTVARZ testvaluez%import os; print(repr(os.environ.get(z)))rˆT)ÚcheckÚstdoutÚtext)rZEnvironmentVarGuardÚpoprÚputenvr‚Úrunrar‰ÚPIPEr0r•Úrstripr}Úunsetenv)r(rrúr‹r~Úprocrrr Útest_putenv_unsetenv¾s    ÿ ÿz!EnvironTests.test_putenv_unsetenvrVr­cCs~dD].}| ttftj|d¡| ttftj|¡qtjdkrzdd}| ttj|d¡| ttjd|¡| ttj|¡dS)N)rHz=namezna=mezname=znameznamerúr‡rÃé€r–ÚX)r\r7r©rr˜rœrar½)r(rZlongstrrrr Útest_putenv_unsetenv_errorÑs z'EnvironTests.test_putenv_unsetenv_errorcCsÀd}| |tj¡| t¡}tj|Wdƒn1s<0Y| |jjd|¡| |jj ¡| t¡}tj|=Wdƒn1s0Y| |jjd|¡| |jj ¡dS)NZ missingkeyr) Ú assertNotInrrr\ÚKeyErrorÚassertIsrr„rOÚ__suppress_context__)r(ÚmissingÚcmrrr Ú test_key_typeás ( &zEnvironTests.test_key_typecCsTt|ƒ}d}t|ƒdtj|<z&t|ƒ| tj|d¡Wtj|=n tj|=0dS)NZ __new_key__Ztest_environ_iteration)rqrrrrr0)r(Z collectionÚiteratorZnew_keyrrr Ú_test_environ_iterationïs z$EnvironTests._test_environ_iterationcCs| tj¡dSr#)rªrrrJrrr Ú(test_iter_error_when_changing_os_environþsz5EnvironTests.test_iter_error_when_changing_os_environcCs| tj ¡¡dSr#)rªrrrhrJrrr Ú.test_iter_error_when_changing_os_environ_itemssz;EnvironTests.test_iter_error_when_changing_os_environ_itemscCs| tj ¡¡dSr#)rªrrÚvaluesrJrrr Ú/test_iter_error_when_changing_os_environ_valuessztjj}| tjtj¡|tjdƒ|_||jdƒ|_||jdƒ|_ ||jdƒ}||dƒ}||jdƒ}||jdƒ}||dƒ}||dƒ}||d ƒ|_ |tjd ƒ}|tjd d ƒ} ||d ƒ} ||d ƒ} ||dƒ} t  |j ¡t  |¡t  |¡t  |¡|||| |fD]H} t | ddd"}|  d| d¡Wdƒn1s<0Yqt ¡r¶t tj |¡|j ¡t d| d¡t |ddƒ| d¡t |ddƒ| d¡|dd ggd¢f|_n|dgdgf|_t |d¡zt |¡Wn&ty| tj|tj¡Yn40t |tj¡t |¡t |¡|jddd…=dS)NZTEST1ÚSUB1ÚSUB11ÚSUB2ZSUB21Útmp1Útmp2Útmp3ÚlinkZTEST2Útmp4Ú broken_linkÚ broken_link2Ú broken_link3rÃúutf-8©ÚencodingzI'm z" and proud of it. Blame test_os. ÚbrokenTZtmp5)rØrÙrÚrÕrrU)rr1r3rwrrrHÚ walk_pathÚ sub1_pathÚ sub11_pathÚ link_pathÚmakedirsrrÚ can_symlinkr¡rIÚ sub2_treeÚchmodÚlistdirÚPermissionErrorr˜ÚS_IRWXUrIr )r(r3Z sub2_pathZ sub21_pathZ tmp1_pathZ tmp2_pathZ tmp3_pathZ tmp5_pathZt2_pathZ tmp4_pathZbroken_link_pathZbroken_link2_pathZbroken_link3_pathr1rSrrr rKlsT               6 ÿ   zWalkTests.setUpcCsìt| |j¡ƒ}| t|ƒd¡|ddddk}|dd ¡|dd|d ¡|dd|d ¡| |d|jddgd gf¡| |d||jd gd gf¡| |d||jggf¡| |dd||j¡dS) NrjrrUrÐr¸rWéÿÿÿÿrÒrÓrÑrÔ) ÚlistrÍrßr0r-Úsortràrárå©r(ÚallZflippedrrr Útest_walk_topdown±s zWalkTests.test_walk_topdownNcCs¬|dur|j}g}| |¡D],\}}}| |||f¡d|vr| d¡q| t|ƒd¡| |d|jdgdgf¡|dd ¡|dd ¡| |d|j¡dS)NrÐrWrrÒrÓrUrê)rßrÍÚappendÚremover0r-rìrå)r(rßrîrMÚdirsrórrr Útest_walk_pruneÂs zWalkTests.test_walk_prunecCs| t|jƒ¡dSr#)rórrßrJrrr Útest_file_like_pathÕszWalkTests.test_file_like_pathcCsît|j|jddƒ}| t|ƒd|¡|ddddk}|dd ¡|dd|d  ¡|dd|d ¡| |d|jdd gd gf¡| |||jggf¡| ||d|jd gd gf¡| |dd||j¡dS)NF©Útopdownrjr¸rUrrÐrWrêrÒrÓrÑrÔ) rërÍrßr0r-rìráràrårírrr Útest_walk_bottom_upØs$ ÿ  ÿÿÿzWalkTests.test_walk_bottom_upcCsht ¡s| d¡|j|jdd}|D]2\}}}||jkr&| |g¡| |dg¡qdq&| d¡dS)Nzneed symlink supportTrRr×z+Didn't follow symlink with followlinks=True)rrärZrÍrßrâr0rÙ)r(Úwalk_itrMròrórrr Útest_walk_symlinkís   zWalkTests.test_walk_symlinkc CsÜg}|j|j|jd}t|ƒ\}}}| |g¡d}tj ||¡}tj ||d¡}t ||¡zhdd„|Dƒ} |  |¡|  || ¡|  || ¡|D]"} | |kr–|  tj || ¡| ¡q–Wt ||¡nt ||¡0dS)N)ÚonerrorrÐz.newcSsg|]\}}}|‘qSrr)rrÚdrSrrr r r z/WalkTests.test_walk_bad_dir..) rÍrßrðrrr0rr1r3rdrOr¢r¯) r(ÚerrorsrørMròróÚdir1Zpath1Zpath1newÚrootsÚdir2rrr Útest_walk_bad_dirûs"     zWalkTests.test_walk_bad_dircsd}tj tjd¡‰tjjˆgdg|¢RŽ}t |¡‡‡fdd„tdƒDƒ}t|dƒD]>}||rldgnggf}|D]}ˆ t|ƒ|¡qxtj  |¡}q\‡‡fdd„tdƒDƒ}ˆ}t|dƒD]D}|||krØdgnggf}|D]}ˆ t|ƒ|¡qätj |d¡}qÄdS) NéZdeeprûcsg|]}ˆjˆdd‘qS)Frõ©rÍ©rÚj©Úbaser(rr r r z7WalkTests.test_walk_many_open_files..r‘rUcsg|]}ˆjˆdd‘qS)Trõrrrrr r r ) rr1r3rrHrãr°r0rrr;)r(ÚdepthrðZitersrµr<rtrrr Útest_walk_many_open_filess" z#WalkTests.test_walk_many_open_files)N) rCrDrErÍrKrïrórôr÷rùrrrrrr rÊbsE rÊÚfwalkzTest needs os.fwalk()c@sHeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dZ dS)Ú FwalkTestscks0|j|fi|¤ŽD]\}}}}|||fVqdSr#)r )r(rÎrÏrMròróZroot_fdrrr rÍ*szFwalkTests.walkcOstj|i|¤ŽSr#)rr ©r(r„rÏrrr r .szFwalkTests.fwalkc CsÂ| ¡}| ¡}tjdddD]ž\}}|j||d|j||di}tjfi|¤ŽD]\}}}t|ƒt|ƒf||<qV|jfi|¤ŽD]4\}}}} | ||¡|  ||t|ƒt|ƒf¡q†qdS)N©TFrW©Úrepeat)rörÌ)rör7) rÅÚ itertoolsÚproductrlrrÍÚsetr r¯r0) r(Ú walk_kwargsÚ fwalk_kwargsrör7r<rMròróÚrootfdrrr Ú_compare_to_walk1s zFwalkTests._compare_to_walkcCsdtji}| ||¡dS)NrÎ)rrHr)r(rÏrrr Útest_compare_to_walkCs zFwalkTests.test_compare_to_walkc CsTzBt dtj¡}dtji}| ¡}||d<| ||¡Wt |¡n t |¡0dS)NÚ.rÎrž)rrrrrHrÅrrN)r(rqrrrrr Ú test_dir_fdGs zFwalkTests.test_dir_fdcCs|tjdddD]h\}}tj|df}|j|d|iŽD]B\}}}}t |¡t |¡| t t  |¡ƒt |ƒt |ƒB¡q2qdS)Nr rWr r7) rrrrHr rÚfstatr˜r0rrç)r(rör7r„rMròrórrrr Útest_yields_correct_dir_fdQs    z%FwalkTests.test_yields_correct_dir_fdcCs\t d¡}t |¡tdƒD]}| tj¡D]}q,qt d¡}| tj|¡| ||¡dS)NrUé) rrYrNr°r rrHrwr0)r(ZminfdrµrÃZnewfdrrr Ú test_fd_leak]s    zFwalkTests.test_fd_leakN) rCrDrErÍr rrrrrrrrrr r &s  r c@seZdZdd„ZdS)ÚBytesWalkTestsc ks¤d|vr| d¡|d<tjt |¡fi|¤ŽD]p\}}}t |¡}tttj|ƒƒ}tttj|ƒƒ}|||fVtttj|ƒƒ|dd…<tttj|ƒƒ|dd…<q.dSrË)r—rrÍÚfsencoderArëÚmap) r(rÎrÏÚbrootÚbdirsÚbfilesrMròrórrr rÍps"  zBytesWalkTests.walkN)rCrDrErÍrrrr rnsrc@seZdZddd„ZdS)ÚBytesFwalkTestsrc os˜tjt |¡g|¢Ri|¤ŽD]t\}}}}t |¡}tttj|ƒƒ} tttj|ƒƒ} || | |fVtttj| ƒƒ|dd…<tttj| ƒƒ|dd…<qdSr#)rr rrArër) r(rÎr„rÏr r!r"ÚtopfdrMròrórrr r ~s* zBytesFwalkTests.fwalkN)r)rCrDrEr rrrr r#{sr#c@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)Ú MakedirTestscCst tj¡dSr#©rr4rrHrJrrr rK‰szMakedirTests.setUpc Cs tj}tj |ddd¡}t |¡tj |dddd¡}t |¡| ttjtj¡tj |dddddtj¡}t |¡tj |dtjddddd¡}t |¡dS©NrýrÿZdir3Zdir4Zdir5Zdir6) rrHrr1r3rãr\r7Úcurdir)r(rr1rrr Ú test_makedirŒs   ÿzMakedirTests.test_makedircCsºt d¡œtj}tj |d¡}tj |d¡}t |d¡| tj |¡¡| tj  |¡¡tj dkr˜|  t  |¡j d@d¡|  t  |¡j d@d¡Wdƒn1s¬0YdS)NrWrýrÿimÚntr›iý)rZ temp_umaskrHrr1r3rãrOr°Úisdirrr0r˜rÛ)r(rÚparentr1rrr Ú test_mode›s   zMakedirTests.test_modecCs–tj tjd¡}d}t d¡}t ||¡| ttj||¡|jttj||ddtj|dddtj||ddt |¡tjtj  d ¡dddS) Nrýr›éF©Úexist_okiþT)rr0ú/) rr1r3rrHÚumaskrãr\r7rI)r(r1rÚold_maskrrr Ú test_exist_ok_existing_directory§s   z-MakedirTests.test_exist_ok_existing_directoryc Cstj tjd¡}tj}d}t d¡}zÊt t  tj¡j ¡}zt  tj||B¡Wnt ylt  d¡‚Yn0t  tj¡j |@|krŽt  d¡‚t |||B¡tj||ddt  |t t  |¡j ¡|@¡tj|||BddWt |¡n t |¡0dS)Nrýr›r.zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.Tr/)rr1r3rrHr˜ÚS_ISGIDr2ÚS_IMODEÚlstatrÛrærèrÚSkipTestrã)r(r1r5rr3Zexisting_testfn_moderrr Útest_exist_ok_s_isgid_directoryµs&  ÿ   z,MakedirTests.test_exist_ok_s_isgid_directorycCstj}tj tjd¡}t|dƒ}| d¡Wdƒn1s@0Y| ttj |¡|jttj |dd|jttj |ddt  |¡dS)Nrýrr†Fr/T) rrHrr1r3rrr\r7rãrñ)r(rr1rSrrr Ú#test_exist_ok_existing_regular_fileÐs (z0MakedirTests.test_exist_ok_existing_regular_filec CsLtj tjdddddd¡}tj |¡s>|tjkr>tj |¡}qt |¡dSr')rr1r3rrHr°r;Ú removedirs©r(r1rrr r»Ús ÿzMakedirTests.tearDownN) rCrDrErKr)r-r4r9r:r»rrrr r%ˆs  r%ÚchownzTest needs chownc@sˆeZdZedd„ƒZdd„Ze ee dƒd¡dd„ƒZ e e oHe e ƒd kd ¡d d „ƒZe e oje e ƒd kd ¡dd„ƒZedd„ƒZdS)ÚChownFileTestscCst tj¡dSr#r&©Úclsrrr Ú setUpClassészChownFileTests.setUpClasscCs”t tj¡}|j}|j}ddt d¡t  dd¡fD]0}|  t tj tj||¡|  t tj tj||¡q2|  t  tj||¡¡|  t  tjdd¡¡dS)Ngð¿y€ð¿rêéþÿÿÿrW)rr˜rrHÚst_uidÚst_gidÚdecimalZDecimalÚ fractionsZFractionr\rcr=Ú assertIsNone)r(r˜ÚuidÚgidrúrrr Ú*test_chown_uid_gid_arguments_must_be_indexís z9ChownFileTests.test_chown_uid_gid_arguments_must_be_indexÚ getgroupszneed os.getgroupscCs”t ¡}t|ƒdkr| d¡|dd…\}}t tj¡j}t tj||¡t tj¡j }|  ||¡t tj||¡t tj¡j }|  ||¡dS)NrWztest needs at least 2 groups) rrKr-rZr˜rrHrCr=rDr0)r(ÚgroupsZgid_1Zgid_2rHrIrrr Útest_chown_gid÷s   zChownFileTests.test_chown_gidrUz0test needs root privilege and more than one usercCsvtdd…\}}t tj¡j}t tj||¡t tj¡j}| ||¡t tj||¡t tj¡j}| ||¡dS©NrW) Ú all_usersrr˜rrHrDr=rCr0)r(Úuid_1Úuid_2rIrHrrr Útest_chown_with_roots z#ChownFileTests.test_chown_with_rootz2test needs non-root account and more than one usercCsltdd…\}}t tj¡j}| t¡0t tj||¡t tj||¡Wdƒn1s^0YdSrN) rOrr˜rrHrDr\rèr=)r(rPrQrIrrr Útest_chown_without_permissions  z,ChownFileTests.test_chown_without_permissioncCst tj¡dSr#)rr rrHr?rrr Ú tearDownClassszChownFileTests.tearDownClassN)rCrDrEÚ classmethodrArJrrrrrMÚ root_in_posixr-rOrRrSrTrrrr r>æs   ÿ ÿ r>c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚRemoveDirsTestscCst tj¡dSr#)rrãrrHrJrrr rK#szRemoveDirsTests.setUpcCst tj¡dSr#)rrrHrJrrr r»&szRemoveDirsTests.tearDowncCsxtj tjd¡}t |¡tj |d¡}t |¡t |¡| tj |¡¡| tj |¡¡| tj tj¡¡dS)NÚdiraÚdirb) rr1r3rrHr4r;Ú assertFalser°©r(rXrYrrr Útest_remove_all)s   zRemoveDirsTests.test_remove_allcCsŠtj tjd¡}t |¡tj |d¡}t |¡ttj |d¡ƒt |¡| tj  |¡¡|  tj  |¡¡|  tj  tj¡¡dS©NrXrYúfile.txt) rr1r3rrHr4r!r;rZr°rOr[rrr Útest_remove_partial3s   z#RemoveDirsTests.test_remove_partialcCs´tj tjd¡}t |¡tj |d¡}t |¡ttj |d¡ƒ| t¡t  |¡Wdƒn1sn0Y|  tj  |¡¡|  tj  |¡¡|  tj  tj¡¡dSr]) rr1r3rrHr4r!r\r7r;rOr°r[rrr Útest_remove_nothing>s   (z#RemoveDirsTests.test_remove_nothingN)rCrDrErKr»r\r_r`rrrr rW"s   rWc@seZdZdd„ZdS)Ú DevNullTestscCs€ttjddƒ"}| d¡| ¡Wdƒn1s60Yttjdƒ }| | ¡d¡Wdƒn1sr0YdS)Nr9róhellorvr )rrÚdevnullrrNr0rnrRrrr Ú test_devnullLs  &zDevNullTests.test_devnullN)rCrDrErdrrrr raKsrac@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú URandomTestscCsr| tt d¡ƒd¡| tt d¡ƒd¡| tt d¡ƒd¡| tt d¡ƒd¡| tt d¡ƒd¡dS)NrrUrVr‘iè)r0r-rÚurandomrJrrr Útest_urandom_lengthUs z URandomTests.test_urandom_lengthcCs0t d¡}| |t¡t d¡}| ||¡dS©Né)rrfr%r@r©r(Zdata1Zdata2rrr Útest_urandom_value\s   zURandomTests.test_urandom_valuecCs<d dd|ddf¡}td|ƒ}|d}| t|ƒ|¡|S)NÚ zimport os, syszdata = os.urandom(%s)zsys.stdout.buffer.write(data)zsys.stdout.buffer.flush()rˆrU)r3rr0r-)r(Úcountr‹Úoutr•rrr Úget_urandom_subprocessbsü z#URandomTests.get_urandom_subprocesscCs$| d¡}| d¡}| ||¡dSrh)rorrjrrr Útest_urandom_subprocessms  z$URandomTests.test_urandom_subprocessN)rCrDrErgrkrorprrrr reTs reÚ getrandomzneed os.getrandom()c@s@eZdZedd„ƒZdd„Zdd„Zdd„Zd d „Zd d „Z d S)ÚGetRandomTestsc CsRzt d¡Wn>tyL}z&|jtjkr6t d¡‚n‚WYd}~n d}~00dS)NrUz%getrandom() syscall fails with ENOSYS)rrqr7r8r®rr8)r@r=rrr rAus   zGetRandomTests.setUpClasscCs*t d¡}| |t¡| t|ƒd¡dSrh)rrqr%r@r0r-©r(rxrrr Útest_getrandom_types  z"GetRandomTests.test_getrandom_typecCst d¡}| |d¡dS)Nrr )rrqr0)r(Úemptyrrr Útest_getrandom0†s zGetRandomTests.test_getrandom0cCs| ttdƒ¡dS)NÚ GRND_RANDOM)rOrrrJrrr Útest_getrandom_randomŠsz$GetRandomTests.test_getrandom_randomcCs*zt dtj¡Wnty$Yn0dS©NrU)rrqÚ GRND_NONBLOCKÚBlockingIOErrorrJrrr Útest_getrandom_nonblocks z&GetRandomTests.test_getrandom_nonblockcCs$t d¡}t d¡}| ||¡dSrh)rrqrrjrrr Útest_getrandom_value˜s  z#GetRandomTests.test_getrandom_valueN) rCrDrErUrArtrvrxr|r}rrrr rrss rrZHAVE_GETENTROPYrUZHAVE_GETRANDOMZHAVE_GETRANDOM_SYSCALLz*os.random() does not use a file descriptorZvxworksz$VxWorks can't set RLIMIT_NOFILE to 1c@s0eZdZe ed¡dd„ƒZdd„Zdd„ZdS) ÚURandomFDTestsz!test requires the resource modulecCsd}td|ƒdS)NaÌif 1: import errno import os import resource soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_NOFILE) resource.setrlimit(resource.RLIMIT_NOFILE, (1, hard_limit)) try: os.urandom(16) except OSError as e: assert e.errno == errno.EMFILE, e.errno else: raise AssertionError("OSError not raised") rˆrrŠrrr Útest_urandom_failureªsz#URandomFDTests.test_urandom_failurecCsd}td|ƒ\}}}dS)Naif 1: import os import sys import test.support os.urandom(4) with test.support.SuppressCrashReport(): os.closerange(3, 256) sys.stdout.buffer.write(os.urandom(4)) ú-Scr)r(r‹ÚrcrnÚerrrrr Útest_urandom_fd_closedÁs z%URandomFDTests.test_urandom_fd_closedcCs–| tjtj¡ttjdƒdjtjd}td|ƒ\}}}| t|ƒd¡|  |dd…|dd…¡td|ƒ\}}}| t|ƒd¡|  ||¡dS)Nsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa­if 1: import os import sys import test.support os.urandom(4) with test.support.SuppressCrashReport(): for fd in range(3, 256): try: os.close(fd) except OSError: pass else: # Found the urandom fd (XXX hopefully) break os.closerange(3, 256) with open({TESTFN!r}, 'rb') as f: new_fd = f.fileno() # Issue #26935: posix allows new_fd and fd to be equal but # some libc implementations have dup2 return an error in this # case. if new_fd != fd: os.dup2(new_fd, fd) sys.stdout.buffer.write(os.urandom(4)) sys.stdout.buffer.write(os.urandom(4)) )rHr€rËrrj) rwrrIrHr!r{rr0r-r)r(r‹rrnr‚Zout2Zerr2rrr Útest_urandom_fd_reopenedÏs èz'URandomFDTests.test_urandom_fd_reopenedN) rCrDrErrÚresourcerrƒr„rrrr r~¥s  r~c#s~g‰‡fdd„}‡fdd„}zHtj}tj}tj}|t_|t_|durJ|t_ˆVW|t_|t_|t_n|t_|t_|t_0dS)Ncsˆ d||f¡tdƒ‚dS)NÚexecvz execv called)rðÚ RuntimeError©rr„©Úcallsrr Ú mock_execvsz#_execvpe_mockup..mock_execvcs ˆ d||f¡ttjdƒ‚dS)NÚexecvez execve called)rðr7r8ÚENOTDIRrˆr‰rr Ú mock_execvesz$_execvpe_mockup..mock_execve)rr†rŒr‡)r‡r‹rŽZ orig_execvZ orig_execveZ orig_defpathrr‰r Ú_execvpe_mockupös$   þrr†zneed os.execv()c@steZdZe ed¡dd„ƒZdd„Zdd„Ze  e e dƒd ¡d d „ƒZ d d „Z dd„Ze  ejdkd¡dd„ƒZdS)Ú ExecTestsz4avoid triggering a linuxthreads bug: see issue #4970cCs| ttjddgd¡dS)Nz no such app-)r\r7rÚexecvperJrrr Útest_execvpe_with_bad_programs ÿz'ExecTests.test_execvpe_with_bad_programcCsN| ttjdd¡| ttjdg¡| ttjdd¡| ttjddg¡dS)NÚnotepadrr‚rH)r\r©rr†rJrrr Útest_execv_with_bad_arglist sz%ExecTests.test_execv_with_bad_arglistcCsB| ttjdgd¡| ttjdgi¡| ttjddgi¡dS)Nr“rH)r\r©rr‘rJrrr Útest_execvpe_with_bad_arglist&sz'ExecTests.test_execvpe_with_bad_arglistÚ_execvpez)No internal os._execvpe function to test.c CsÐtjd}|tur8d}tj t |¡|¡}|}gd¢}n4d}gd¢}tj ||¡}tjdkrht |¡}n|}ddi}tƒJ}| t tj ||¡|  t |ƒd ¡|  |d d ||ff¡Wdƒn1sÊ0Yt|d P}|jt tj |||d |  t |ƒd ¡| |d d|||ff¡Wdƒn1s60Ytƒt}| ¡} |turd|| d<n|| d<|jt tj ||| d |  t |ƒd ¡| |d d||| ff¡Wdƒn1sÂ0YdS)NZ absolutepaths executable)sprognameÚarg1Úarg2r‰)Zprognamer—r˜r*ZspamrzrUrr†)r‡rrŒr„r€)rr2r@r1r3rrrr\r‡r–r0r-r7r‰rÅ) r(Z test_typeZ program_pathZprogramÚfullpathZnative_fullpathZ argumentsr~rŠZenv_pathrrr Ú_test_internal_execvpe+sN    ÿ6  ÿ  ÿ$   ÿ  ÿz ExecTests._test_internal_execvpecCs"| t¡tjdkr| t¡dS)Nr*)ršr&rrr@rJrrr Útest_internal_execvpe_str\s  z#ExecTests.test_internal_execvpe_strcCsútjddg}tj ¡}d|d<| t¡"t |d||¡Wdƒn1sP0Ytj ¡}d|d<| t¡"t |d||¡Wdƒn1sž0Ytj ¡}d|d <| t¡"t |d||¡Wdƒn1sì0YdS) NrˆÚpassÚcabbageúFRUITVEGETABLErúorangeVEGETABLE=cabbageÚFRUITÚlemonú FRUIT=ORANGE)rar‰rrrÅr\r©rŒ)r(r„Únewenvrrr Útest_execve_invalid_envas   0  0  z!ExecTests.test_execve_invalid_envr‡zWin32-specific testc Csbzt ddgi¡Wn>tyR}z&| |jdup:|jdk¡WYd}~nd}~00| d¡dS)NrHÚargrzNo OSError raised)rrŒr7rOÚwinerrorrÙrrrr Útest_execve_with_empty_pathvs 0z%ExecTests.test_execve_with_empty_pathN)rCrDrErÚskipIfÚUSING_LINUXTHREADSr’r”r•rrrršr›r¤rar½r§rrrr rsÿ  ÿ /rr‡rÿc@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)ÚWin32ErrorTestsc Csvzt tj¡WnPty&d}YnLty`}z$d}| dtj|f¡WYd}~nd}~00| dtj¡dS)NFTz.file %s must not exist; os.stat failed with %szfile %s must not exist)rr˜rrHr6r7rÙ)r(r°r=rrr rKƒs ÿzWin32ErrorTests.setUpcCs| ttjtjtjd¡dS)Nz.bak)r\r7rrdrrHrJrrr rgszWin32ErrorTests.test_renamecCs| ttjtj¡dSr#)r\r7rrñrrHrJrrr Ú test_remove’szWin32ErrorTests.test_removecCs| ttjtj¡dSr#)r\r7rr5rrHrJrrr Ú test_chdir•szWin32ErrorTests.test_chdircCsR| tjtj¡ttjdƒ"}| ttjtj¡Wdƒn1sD0YdS)NrÃ) rwrrIrHrr\r7rr4rRrrr Ú test_mkdir˜szWin32ErrorTests.test_mkdircCs| ttjtjd¡dSr#)r\r7rr+rrHrJrrr r/žszWin32ErrorTests.test_utimecCs| ttjtjd¡dSr`)r\r7rrærrHrJrrr Ú test_chmod¡szWin32ErrorTests.test_chmodN) rCrDrErKrgr«r¬r­r/r®rrrr rªs rªc@s´eZdZgd¢Zdd„ZeD]Zeeƒeƒde<qdd„Ze  e e dƒd¡d d „ƒZ e  e e d ƒd ¡d d„ƒZ e  e e dƒd¡dd„ƒZe  e e dƒd¡dd„ƒZe  e e dƒd¡dd„ƒZe  e e dƒd¡dd„ƒZe  e e dƒd ¡d!d"„ƒZe  e e d#ƒd$¡d%d&„ƒZe  e e d'ƒd(¡d)d*„ƒZe  e e d+ƒd,¡d-d.„ƒZe  e e d/ƒd0¡d1d2„ƒZe  e e d3ƒd4¡d5d6„ƒZe  e e d7ƒd8¡d9d:„ƒZd;d<„Ze  e e d=ƒd>¡d?d@„ƒZdAS)BÚ TestInvalidFD) ÚfchdirrYrŽÚ fdatasyncrÚfstatvfsÚfsyncÚ tcgetpgrpÚttynamecs‡fdd„}|S)Ncsttˆƒr| ttˆƒ¡dSr#)rrr”rÖrJ©rSrr Úhelper«s z(TestInvalidFD.get_single..helperr)rSr·rr¶r Ú get_singleªs zTestInvalidFD.get_singleZtest_c Gs`z|t ¡g|¢RŽWn4tyL}z| |jtj¡WYd}~nd}~00| d|¡dS)Nz5%r didn't raise an OSError with a bad file descriptor)rÚ make_bad_fdr7r0r8rrÙ)r(rSr„r¶rrr r”²s&ÿzTestInvalidFD.checkÚisattyztest needs os.isatty()cCs| t t ¡¡d¡dS©NF)r0rrºrr¹rJrrr Ú test_isatty»szTestInvalidFD.test_isattyr[ztest needs os.closerange()c Csrt ¡}tdƒD].}zt ||¡Wnty8Yq0q@q|dkrRt d¡‚| t  |||d¡d¡dS)NrVrWz5Unable to acquire a range of invalid file descriptorsrU) rr¹r°rrr7rr8r0r[)r(rqrµrrr r_¿s  ÿzTestInvalidFD.test_closerangeÚdup2ztest needs os.dup2()cCs| tjd¡dS)Né)r”rr½rJrrr Ú test_dup2ÏszTestInvalidFD.test_dup2Úfchmodztest needs os.fchmod()cCs| tjd¡dSr`)r”rrÀrJrrr Ú test_fchmodÓszTestInvalidFD.test_fchmodÚfchownztest needs os.fchown()cCs| tjdd¡dS)Nrê)r”rrÂrJrrr Ú test_fchown×szTestInvalidFD.test_fchownÚ fpathconfztest needs os.fpathconf()cCs | tjd¡| tjd¡dS)NÚ PC_NAME_MAX)r”rÚpathconfrÄrJrrr Útest_fpathconfÛszTestInvalidFD.test_fpathconfÚ ftruncateztest needs os.ftruncate()cCs | tjd¡| tjd¡dSr`)r”rÚtruncaterÈrJrrr Útest_ftruncateàszTestInvalidFD.test_ftruncatermztest needs os.lseek()cCs| tjdd¡dSr`)r”rrmrJrrr Ú test_lseekåszTestInvalidFD.test_lseekrnztest needs os.read()cCs| tjd¡dSry)r”rrnrJrrr rsészTestInvalidFD.test_readÚreadvztest needs os.readv()cCstdƒ}| tj|g¡dS)NrV)r|r”rrÌ)r(rNrrr Ú test_readvíszTestInvalidFD.test_readvÚ tcsetpgrpztest needs os.tcsetpgrp()cCs| tjd¡dSr`)r”rrÎrJrrr Útest_tcsetpgrptòszTestInvalidFD.test_tcsetpgrptrztest needs os.write()cCs| tjd¡dS)Nó )r”rrrJrrr röszTestInvalidFD.test_writeÚwritevztest needs os.writev()cCs| tjdg¡dS)Nr…)r”rrÑrJrrr Ú test_writevúszTestInvalidFD.test_writevcCs| tj¡| tjd¡dS©NT)r”rÚget_inheritableÚset_inheritablerJrrr Útest_inheritableþs zTestInvalidFD.test_inheritableÚ get_blockingú-needs os.get_blocking() and os.set_blocking()cCs| tj¡| tjd¡dSrÓ)r”rr×Ú set_blockingrJrrr Ú test_blockings zTestInvalidFD.test_blockingN)rCrDrEZsinglesr¸rSÚlocalsr”rrrrr¼r_r¿rÁrÃrÇrÊrËrsrÍrÏrrÒrÖrÚrrrr r¯¥sH               ÿr¯c@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)Ú LinkTestscCs tj|_tj tjd¡|_dS)Nr¸)rrHÚfile1rr1r3Úfile2rJrrr rK szLinkTests.setUpcCs,|j|jfD]}tj |¡r t |¡q dSr#)rÝrÞrr1r°rI)r(Úfilerrr r»s zLinkTests.tearDownc CsÀt|ƒzt ||¡Wn2tyJ}z| d|¡WYd}~n d}~00t|dƒV}t|dƒ,}| tj |  ¡|  ¡¡¡Wdƒn1s”0YWdƒn1s²0YdS)Nú os.link(): %sr) r!rrÖrèrZrrOr1Ú sameopenfilerl)r(rÝrÞr¶rÚf2rrr Ú _test_links$zLinkTests._test_linkcCs| |j|j¡dSr#)rãrÝrÞrJrrr Ú test_linkszLinkTests.test_linkcCs(| t|jt ¡ƒt|jt ¡ƒ¡dSr#)rãr@rÝrarçrÞrJrrr Útest_link_bytes sÿzLinkTests.test_link_bytescCsZzt d¡Wnty*t d¡‚Yn0|jd7_|jd|_| |j|j¡dS)Nõñz#Unable to encode for this platform.r¸)rrÚ UnicodeErrorrr8rÝrÞrãrJrrr Útest_unicode_name$s  zLinkTests.test_unicode_nameN) rCrDrErKr»rãrärårèrrrr rÜ s  rÜzPosix specific testsc@säeZdZdZdZe eedƒd¡dd„ƒZ e eedƒd¡dd „ƒZ e eed ƒd ¡d d „ƒZ e eedƒd¡dd„ƒZ e eedƒd¡dd„ƒZ e eedƒd¡dd„ƒZe eedƒd¡dd„ƒZe eedƒd¡dd„ƒZdS)ÚPosixUidGidTestsìÚsetuidztest needs os.setuid()cCsBt ¡dkr| ttjd¡| ttjd¡| ttj|j¡dS©Nrz not an int)rÚgetuidr\r7rërcÚ OverflowErrorÚ UID_OVERFLOWrJrrr Ú test_setuid4s zPosixUidGidTests.test_setuidÚsetgidztest needs os.setgid()cCsFt ¡dkr ts | ttjd¡| ttjd¡| ttj|j¡dSrì) rríÚHAVE_WHEEL_GROUPr\r7rñrcrîÚ GID_OVERFLOWrJrrr Ú test_setgid;szPosixUidGidTests.test_setgidÚseteuidztest needs os.seteuid()cCsBt ¡dkr| ttjd¡| ttjd¡| ttj|j¡dSrì) rrír\r7rõrcÚsetegidrîrïrJrrr Ú test_seteuidBs zPosixUidGidTests.test_seteuidröztest needs os.setegid()cCsFt ¡dkr ts | ttjd¡| ttjd¡| ttj|j¡dSrì) rríròr\r7rörcrîrórJrrr Ú test_setegidIszPosixUidGidTests.test_setegidÚsetreuidztest needs os.setreuid()cCsnt ¡dkr| ttjdd¡| ttjdd¡| ttjdd¡| ttj|jd¡| ttjd|j¡dSrì)rrír\r7rùrcrîrïrJrrr Ú test_setreuidPs  zPosixUidGidTests.test_setreuidcCst tjddg¡dS)Nrˆz,import os,sys;os.setreuid(-1,-1);sys.exit(0)©r‚rrar‰rJrrr Útest_setreuid_neg1Ysþz#PosixUidGidTests.test_setreuid_neg1Úsetregidztest needs os.setregid()cCsrt ¡dkr"ts"| ttjdd¡| ttjdd¡| ttjdd¡| ttj|jd¡| ttjd|j¡dSrì) rríròr\r7rýrcrîrórJrrr Ú test_setregidas zPosixUidGidTests.test_setregidcCst tjddg¡dS)Nrˆz,import os,sys;os.setregid(-1,-1);sys.exit(0)rûrJrrr Útest_setregid_neg1jsþz#PosixUidGidTests.test_setregid_neg1N)rCrDrErïrórrrrrðrôr÷rørúrürþrÿrrrr ré.s$       réc@sNeZdZdd„Zdd„Zdd„Zdd„Ze e e d ƒd ¡d d „ƒZ d d„Z dS)Ú Pep383Testscsþtjrtj|_ntjr tj|_ntj|_t |j¡|_g‰‡fdd„}|tjƒtjr`|tjƒtjrp|tjƒˆs~|  d¡t ƒ|_ t  |j¡zLˆD]B}t  tj |j|¡¡t |¡}||j vrÎtdƒ‚|j  |¡q˜Wnt |j¡‚Yn0dS)Ncs2zt |¡}Wnty"YdS0ˆ |¡dSr#)rrrèrð)Úfn©Úbytesfnrr Ú add_filename~s  z'Pep383Tests.setUp..add_filenamez&couldn't create any non-ascii filenamezduplicate filename)rÚTESTFN_UNENCODABLErÓZTESTFN_NONASCIIrHrrZbdirZTESTFN_UNICODErZrÚ unicodefnr4Zcreate_empty_filer1r3rAr©ÚaddÚshutilr)r(rrrrr rKts6           zPep383Tests.setUpcCst |j¡dSr#)rrrÓrJrrr r»™szPep383Tests.tearDownc Csv|j}tt |j¡ƒ}| ||¡t ¡}z:t tj¡| tt ¡ƒtt tj¡ƒ¡Wt |¡n t |¡0dSr#) rrrrçrÓr0r$r5r2)r(r<ÚfoundZcurrent_directoryrrr Ú test_listdirœs  "zPep383Tests.test_listdircCs.|jD]"}ttj |j|¡dƒ}| ¡qdS©Nrv)rrrr1r3rÓrN)r(rrSrrr Ú test_open¨s zPep383Tests.test_openròrýcCs*|jD]}tj |j|¡}t |¡qdSr#)rrr1r3rÓrò)r(rÚfullnamerrr Ú test_statvfs­s zPep383Tests.test_statvfscCs&|jD]}t tj |j|¡¡qdSr#)rrr˜r1r3rÓ)r(rrrr Ú test_stat¶s zPep383Tests.test_statN) rCrDrErKr»r r rrrrrrrrrr rrs%  ÿ rc@sFeZdZdd„Zdd„Zdd„Zdd„Ze d ¡d d „ƒZ d d „Z dS)ÚWin32KillTestsc Csvddl}ddlm}ddl}|jjj}|j|_|j|  |j ¡|j |  |j ¡|  |j ¡|  |j ¡f|_ d}t jtjdd |¡gt jt jt jd}| |jj¡| |jj¡| |jj¡d\}} || krJ| ¡durJ| t|ƒ¡} || |j ¡¡| | | ¡dddƒ} | | dd¡| jr6|  || j !¡¡qTt" #d ¡|d 7}qÀ| $d ¡t% &|j'|¡|  | (¡|¡dS) Nr©ÚwintypesÚrunningrˆz.)r0ÚsortedrrçrrHr:rrJrrr Útest_listdir_no_extended_pathB sþþz/Win32ListdirTests.test_listdir_no_extended_pathcCshdtj tj¡}| tt |¡ƒ|j¡dt  tj tj¡¡}| tt |¡ƒdd„|jDƒ¡dS)Nú\\?\ó\\?\cSsg|]}t |¡‘qSrr=r>rrr r [ r z@Win32ListdirTests.test_listdir_extended_path..) rr1rIrrHr0r?rçr:rr<rrr Útest_listdir_extended_pathN s þ þz,Win32ListdirTests.test_listdir_extended_pathN)rCrDrErKr»r@rCrrrr r9. s  r9Úreadlinkzneeds os.readlink()c@szeZdZdZej e¡Ze  e¡Z e  e¡Z dd„Z dd„Z dd„Zdd „Zejd d „ƒZejd d „ƒZejdd„ƒZdS)Ú ReadlinkTestsZ readlinktestcCsbtj |¡}tj |¡}tjdkrRdd„}||ƒr>|dd…}||ƒrR|dd…}| ||¡dS)Nr‡cSs| t|tƒrdnd¡S)NrBrA)Ú startswithr÷r@)rðrrr Úk sÿz/ReadlinkTests.assertPathEqual..rj)rr1Únormcaserar½r0)r(ÚleftÚrightZ has_prefixrrr ÚassertPathEquale s     zReadlinkTests.assertPathEqualcCsT| tj |j¡¡| tj |j¡¡| tj |j¡¡| tj |j¡¡dSr#) rOrr1r°Úfilelink_targetÚfilelinkb_targetrZÚfilelinkÚ filelinkbrJrrr rKs szReadlinkTests.setUpcCs0t|jƒ}| ttj|j¡| ttj|¡dSr#)rrLr\r7rrD)r(rLrrr Útest_not_symlinky s zReadlinkTests.test_not_symlinkcCs(| ttjd¡| ttjtdƒ¡dS)Nz missing-link)r\r6rrDrrJrrr Útest_missing_link~ s ÿzReadlinkTests.test_missing_linkcCsBt |j|j¡| tj|j¡t|jƒ}| t  |¡|j¡dSr#) rr¡rLrNrwrrIrrKrD)r(rNrrr Ú test_pathlikeƒ s zReadlinkTests.test_pathlikecCsNt |j|j¡| tj|j¡t t|jƒ¡}|  ||j¡|  |t ¡dSr#) rr¡rMrOrwrrIrDrrKr%r@r<rrr Útest_pathlike_bytesŠ s z!ReadlinkTests.test_pathlike_bytescCsJt |j|j¡| tj|j¡t |j¡}| ||j¡|  |t ¡dSr#) rr¡rMrOrwrrIrDrKr%r@r<rrr Ú test_bytes’ s  zReadlinkTests.test_bytesN)rCrDrErNrr1rIrŸrLrrOrMrKrKrPrQrÚskip_unless_symlinkrRrSrTrrrr rE^ s     rEc@s¸eZdZdZej e¡ZdZ ej  e¡Z dZ dd„Z dd„Zdd „Zd d „Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„Ze ej d¡o–ej d¡d¡dd„ƒZdd„Zdd „Zd!S)"ÚWin32SymlinkTestsZ filelinktestZ dirlinktestz missing linkcCsdSr#rrJrrr rK¤ szWin32SymlinkTests.setUpcCsRtj |j¡rt |j¡tj |j¡r4t |j¡tj |j¡rNt |j¡dSr#) rr1r°rNrñÚdirlinkr rGÚ missing_linkrJrrr r»« s   zWin32SymlinkTests.tearDowncCs`t |j|j¡| tj |j¡¡| tj |j¡¡| tj |j¡¡|  |j|j¡dSr#) rr¡Údirlink_targetrWrOr1r°r+ÚislinkÚ check_statrJrrr Útest_directory_link³ s z%Win32SymlinkTests.test_directory_linkcCs`t |j|j¡| tj |j¡¡| tj |j¡¡| tj |j¡¡|  |j|j¡dSr#) rr¡rLrNrOr1r°ÚisfilerZr[rJrrr Útest_file_linkº s z Win32SymlinkTests.test_file_linkcCs6|j}tj |¡rt |¡d}d}t |||¡dS)Nz"c:\\target does not exist.29r3c740T)rXrr1rGrñr¡)r(Zlinknamer¢Z target_is_dirrrr Ú_create_missing_dir_linkÁ s   z*Win32SymlinkTests._create_missing_dir_linkcCs| ¡t |j¡dSr#)r_rrñrXrJrrr Ú,test_remove_directory_link_to_missing_targetË sz>Win32SymlinkTests.test_remove_directory_link_to_missing_targetcCs | ¡| tj |j¡¡dSr#)r_rZrr1r+rXrJrrr Ú.test_isdir_on_directory_link_to_missing_targetÒ sz@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_targetcCs| ¡t |j¡dSr#)r_rr rXrJrrr Ú.test_rmdir_on_directory_link_to_missing_targetÖ sz@Win32SymlinkTests.test_rmdir_on_directory_link_to_missing_targetcCsn| t |¡t |¡¡| t |¡t |¡¡t |¡}| t |¡t |¡¡| t |¡t |¡¡dSr#)r0rr˜rr7r)r(rÖr¢Z bytes_linkrrr r[Ú s  zWin32SymlinkTests.check_statc CsJtj tj¡}tj |d¡}tj |d¡}| tj|¡t |¡t |¡t |¡tj tj |d¡¡}t |ƒt  ¡}z¼t  |¡tj |d¡}t  tj  |¡d¡| dt t  ¡¡¡| t |¡t d¡¡t  |¡| t |¡t tj  |¡¡¡t  |¡| t |¡t tj  |¡¡¡Wt  |¡n t  |¡0dS)NÚlevel2Úlevel3rÝrÖ)rr1rIrrHr3rwrr4r!r$r5r¡Úrelpathr¯rçr0r˜)r(Zlevel1rcrdrÝZorig_dirrÖrrr Ú test_12084â s2      ÿ  ÿzWin32SymlinkTests.test_12084úC:\Users\All UsersúC:\ProgramDatazTest directories not foundcCs"t d¡}| tj |d¡¡dS)Nrgrh)rrDrOr1Úsamefile)r(r¢rrr Ú test_29248 s zWin32SymlinkTests.test_29248c Csêd}tjj|gdŽ}d||f||f|dd…|dd…fg}|D] \}}zt ||¡WntynYn$0zt |¡WntyYn0zt t |¡t |¡¡WntyÀYqD0zt |¡WqDtyâYqD0qDdS)NZXXXXXXXXXXXXXXXXXXXXXXXXXXXrVrGé´)rr1r3r¡r6rñr7r)r(Zsegmentr1Z test_casesr£Údestrrr Útest_buffer_overflow s. ú     z&Win32SymlinkTests.test_buffer_overflowcs²tj d¡‰tj ˆ¡s"| d¡‡fdd„t t ˆ¡d¡Dƒ}|D]\}tj r`t ƒt d|ƒt  |¡}|  |t  |¡¡| t  |j¡¡|  |jt j¡q®qF| d¡dS)Nz$%LOCALAPPDATA%\Microsoft\WindowsAppsz%test requires a WindowsApps directorycsg|]}tj ˆ|¡‘qSr)rr1r3©rr,©rMrr r < sÿz6Win32SymlinkTests.test_appexeclink..z*.exez Testing withz$test requires an app execution alias)rr1Ú expandvarsr+rZÚfnmatchÚfilterrçrr9r:r7r0r˜rZÚS_ISLNKrÛÚst_reparse_tagZIO_REPARSE_TAG_APPEXECLINK)r(ÚaliasesÚaliasrrror Útest_appexeclink7 s     ÿ  z"Win32SymlinkTests.test_appexeclinkN)rCrDrErNrr1rIrŸrLrWr;rYrXrKr»r\r^r_r`rarbr[rfrrrGr°rjrmrwrrrr rV› s,   # þ #rVc@sDeZdZdZej ej e¡¡Z dd„Z dd„Z dd„Z dd „Z d S) ÚWin32JunctionTestsZ junctiontestcCsdSr#rrJrrr rKQ szWin32JunctionTests.setUpcCstj |j¡rt |j¡dSr#)rr1rGÚjunctionrIrJrrr r»U szWin32JunctionTests.tearDowncCsÆt |j|j¡| tj |j¡¡| tj |j¡¡| tj  |j¡¡|  t  |j¡t  |j¡¡|  t  |j¡t  |j¡¡| tj |j¡¡|  tj d|j¡tj t |j¡¡¡dS)NrA)Ú_winapiÚCreateJunctionÚjunction_targetryrOrr1rGr°r+rr˜r7r0rZrZrHrDrJrrr Útest_create_junctionY sÿz'Win32JunctionTests.test_create_junctioncCs\t |j|j¡| tj |j¡¡| tj |j¡¡t  |j¡|  tj |j¡¡dSr#) rzr{r|ryrOrr1r°rGrIrZrJrrr Útest_unlink_removes_junctionf s  z/Win32JunctionTests.test_unlink_removes_junctionN)rCrDrEryrr1r;rIrŸr|rKr»r}r~rrrr rxL s  rxc@seZdZdd„ZdS)Ú Win32NtTestsc Cs,t d¡}t d¡}ddl}|jddd}|jj|j_|jj|j _|jj|jj f|j _ | ¡}|j  ¡}|  ||  |¡¡}| d|¡|j}dd d tg}td ƒD]R} |D]H} z| | ¡WntyÌYn0zt | ¡Wq¨tyîYq¨0q¨q |  ||  |¡¡}| d|¡|j|} | d| ¡dS) Nr*rJrz Kernel32.dllT)Zuse_last_errorrUz\\?\C:z\\?\NULz \\?\CONINrV)rÚ import_moduleZctypes.wintypesZWinDLLrrZGetCurrentProcessrrZGetProcessHandleCountZLPDWORDrrZbyrefr0rúrŸr°Ú_getfinalpathnameÚ Exceptionrr˜) r(r*rJZkernelZhprocZ handle_countrOZ before_countÚ filenamesÚ_rZ handle_deltarrr Útest_getfinalpathname_handlesp sB    ÿ  ü      z*Win32NtTests.test_getfinalpathname_handlesN)rCrDrEr…rrrr rn src@s$eZdZdd„Zdd„Zdd„ZdS)ÚNonLocalSymlinkTestscCst d¡dS)Nz base/some_dir)rrãrJrrr rK£ szNonLocalSymlinkTests.setUpcCst d¡dS)Nr)rrrJrrr r»¬ szNonLocalSymlinkTests.tearDowncCstj dd¡}t d|¡dS)NrZ some_linkZsome_dir)rr1r3r¡)r(r£rrr Útest_directory_link_nonlocal¯ s  z1NonLocalSymlinkTests.test_directory_link_nonlocalN)rCrDrErKr»r‡rrrr r†  s r†c@seZdZdd„Zdd„ZdS)ÚFSEncodingTestscCs(| t d¡d¡| t d¡d¡dS)NsabcÿuabcÅ)r0rrrArJrrr Útest_nopÁ szFSEncodingTests.test_nopc CsFdD]<}zt |¡}Wnty,YqYn0| t |¡|¡qdS)N)u unicodeÅulatinéÚascii)rrrèr0rA)r(rrrrr Ú test_identityÅ s   zFSEncodingTests.test_identityN)rCrDrEr‰r‹rrrr rˆÀ srˆc@sVeZdZdd„Ze e d¡oDeƒ oDe j   d¡pDe e dƒoDe e dƒd¡dd „ƒZd S) ÚDeviceEncodingTestscCs| t d¡¡dS)Ni@â)rGrÚdevice_encodingrJrrr Ú test_bad_fdÒ szDeviceEncodingTests.test_bad_fdrÚwinÚ nl_langinfoÚCODESETz>test requires a tty and either Windows or nl_langinfo(CODESET)cCs(t d¡}| |¡| t |¡¡dSr`)rrZassertIsNotNonerOÚcodecsÚlookup)r(rÝrrr Útest_device_encodingÖ s  z(DeviceEncodingTests.test_device_encodingN)rCrDrErŽrrrrºrrar½rFrÚlocaler”rrrr rŒÐ s "þrŒc@sŽeZdZe eedƒd¡dd„ƒZddd„Zdd „Z d d „Z e e j d kd ¡dd„ƒZ e e j d kd ¡dd„ƒZe eedƒd¡dd„ƒZdS)ÚPidTestsÚgetppidztest needs os.getppidcCs<tjtjddgtjd}| ¡\}}| t|ƒt  ¡¡dS)Nrˆzimport os; print(os.getppid()))r•) r‚r rar‰ršÚ communicater0rÁrÚgetpid)r(rðr•r„rrr Ú test_getppidà s ÿþ zPidTests.test_getppidNcCsˆtjdkr(dtj›ddd|›dg}n tjd|g}t tjtj|¡}|durV||ƒt |d¡\}}| t |¡|¡| ||¡dS)Nr‡ú"rˆr) rar½r‰rÚspawnvÚP_NOWAITÚwaitpidr0Úwaitstatus_to_exitcode)r(r‹ÚexitcodeÚcallbackr„r$Zpid2Ústatusrrr Ú check_waitpidé s  zPidTests.check_waitpidcCs|jddddS)Nrœr)r‹r ©r£rJrrr Ú test_waitpidû szPidTests.test_waitpidcCsVd}d|›d}|j||d| t¡t d¡Wdƒn1sH0YdS)Nézimport sys; sys.exit(ú)©r g)r£r\rcrrŸ)r(r r‹rrr Útest_waitstatus_to_exitcodeþ s   z$PidTests.test_waitstatus_to_exitcoder‡úwin32-specific testcCs"d}d|›d}|j||ddS)Nl:z$import _winapi; _winapi.ExitProcess(r§r¨r¤)r(ZSTATUS_CONTROL_C_EXITr‹rrr Útest_waitpid_windows s zPidTests.test_waitpid_windowscCs d}ddd|fD]}| t |d>¡|¡q| t¡"t |dd>¡Wdƒn1s^0Y| t¡t d¡Wdƒn1s’0YdS)Nr rrUr¬rËrê)r0rrŸr\r©rî)r(Z max_exitcoder rrr Ú#test_waitstatus_to_exitcode_windows sÿ 0 z,PidTests.test_waitstatus_to_exitcode_windowsÚSIGKILLzneed signal.SIGKILLcs6dtj›d}tj‰‡fdd„}|j|ˆ |ddS)Nzimport time; time.sleep(r§cst |ˆ¡dSr#)rr#)r$©Úsignumrr Ú kill_process! sz?PidTests.test_waitstatus_to_exitcode_kill..kill_process)r r¡)rZ LONG_TIMEOUTr)r­r£)r(r‹r°rr®r Ú test_waitstatus_to_exitcode_kill s z)PidTests.test_waitstatus_to_exitcode_kill)N)rCrDrErrrrršr£r¥r©rar½r«r¬r)r±rrrr r–ß s    r–c@s$eZdZdddœdd„Zedƒdd„ƒZedƒd d „ƒZed ƒd d „ƒZedƒdd„ƒZedƒdd„ƒZ edƒdd„ƒZ edƒdd„ƒZ edƒdd„ƒZ edƒdd„ƒZ edƒdd „ƒZedƒd!d"„ƒZedƒd#d$„ƒZedƒd%d&„ƒZedƒd'd(„ƒZd)d*„Zedƒd+d,„ƒZedƒd-d.„ƒZd/S)0Ú SpawnTestsF©Úwith_envÚ use_bytescCsÌd|_tj}| tj|¡|s*d|j}n8ttjƒ|_t t   ¡ƒ|_ |j |j|j <d|j |jf}t |dƒ}| |¡Wdƒn1sŒ0Ytj|g}|rÈdd„|Dƒ}dd„|j ¡Dƒ|_|S) Nézimport sys; sys.exit(%s)z4import sys, os; magic = os.environ[%r]; sys.exit(%s)rcSsg|]}t |¡‘qSrr=rnrrr r > r z*SpawnTests.create_args..cSs"i|]\}}t |¡t |¡“qSrr=)rÚkÚvrrr Ú ? sÿz*SpawnTests.create_args..)r rrHrwrIrbrrr~r&r-Zuuid4rjrrrar‰rh)r(r´rµrr‹r r„rrr Ú create_args( s(   ÿ ( ÿzSpawnTests.create_argsÚspawnlcCs4| ¡}tjtj|dg|¢RŽ}| ||j¡dSr`)rºrr»ÚP_WAITr0r ©r(r„r rrr Ú test_spawnlD szSpawnTests.test_spawnlÚspawnlecCs>|jdd}tjtj|dg|¢|j‘RŽ}| ||j¡dS©NT)r´r)rºrr¿r¼r~r0r r½rrr Ú test_spawnleJ s  zSpawnTests.test_spawnleÚspawnlpcCs4| ¡}tjtj|dg|¢RŽ}| ||j¡dSr`)rºrrÂr¼r0r r½rrr Ú test_spawnlpP szSpawnTests.test_spawnlpÚspawnlpecCs>|jdd}tjtj|dg|¢|j‘RŽ}| ||j¡dSrÀ)rºrrÄr¼r~r0r r½rrr Ú test_spawnlpeV s  zSpawnTests.test_spawnlperœcCsT| ¡}t tj|d|¡}| ||j¡t tjt|dƒ|¡}| ||j¡dSr`)rºrrœr¼r0r rr½rrr Ú test_spawnv\ s zSpawnTests.test_spawnvÚspawnvecCs6|jdd}t tj|d||j¡}| ||j¡dSrÀ©rºrrÇr¼r~r0r r½rrr Ú test_spawnvef s zSpawnTests.test_spawnveÚspawnvpcCs.| ¡}t tj|d|¡}| ||j¡dSr`)rºrrÊr¼r0r r½rrr Ú test_spawnvpl szSpawnTests.test_spawnvpÚspawnvpecCs6|jdd}t tj|d||j¡}| ||j¡dSrÀ)rºrrÌr¼r~r0r r½rrr Ú test_spawnvper s zSpawnTests.test_spawnvpecCs0| ¡}t tj|d|¡}tj||jddS)Nrr¨)rºrrœrrZ wait_processr )r(r„r$rrr Ú test_nowaitx szSpawnTests.test_nowaitcCs8|jddd}t tj|d||j¡}| ||j¡dS)NTr³rrÈr½rrr Útest_spawnve_bytes~ szSpawnTests.test_spawnve_bytescCs>| ¡}| ttjtj|d¡| ttjtj|dd¡dS©NrrH)rºr\r©rr»r©r(r„rrr Útest_spawnl_noargs… szSpawnTests.test_spawnl_noargscCsB| ¡}| ttjtj|di¡| ttjtj|ddi¡dSrÐ)rºr\r©rr¿rrÑrrr Útest_spawnle_noargs‹ szSpawnTests.test_spawnle_noargscCsv| ¡}| ttjtj|dd¡| ttjtj|dg¡| ttjtj|dd¡| ttjtj|ddg¡dS©Nrrr‚rH)rºr\r©rrœrrÑrrr Útest_spawnv_noargs‘ s zSpawnTests.test_spawnv_noargscCs~| ¡}| ttjtj|ddi¡| ttjtj|dgi¡| ttjtj|ddi¡| ttjtj|ddgi¡dSrÔ)rºr\r©rrÇrrÑrrr Útest_spawnve_noargs™ s zSpawnTests.test_spawnve_noargscCsttjddg}tj ¡}d|d<z|tj|d||ƒ}WntyHYn0| |d¡tj ¡}d|d<z|tj|d||ƒ}Wnty’Yn0| |d¡tj ¡}d |d <z|tj|d||ƒ}WntyÜYn0| |d¡tj }|  tj |¡t |d ƒ}|  d ¡Wdƒn1s*0Ytj|g}tj ¡}d |d<|tj|d||ƒ}| |d¡dS)NrˆrœrržrérŸr r¡r¢rzPimport sys, os if os.getenv("FRUIT") != "orange=lemon": raise AssertionErrorz orange=lemon)rar‰rrrÅr¼r©r0rrHrwrIrr)r(Úspawnr„r£r rr rrr Ú_test_invalid_env¡ s>           *  zSpawnTests._test_invalid_envcCs| tj¡dSr#)rÙrrÇrJrrr Útest_spawnve_invalid_envÏ sz#SpawnTests.test_spawnve_invalid_envcCs| tj¡dSr#)rÙrrÌrJrrr Útest_spawnvpe_invalid_envÓ sz$SpawnTests.test_spawnvpe_invalid_envN)rCrDrErºrr¾rÁrÃrÅrÆrÉrËrÍrÎrÏrÒrÓrÕrÖrÙrÚrÛrrrr r²' sD              . r²z>Skip due to platform/environment differences on *NIX buildbotsÚgetloginztest needs os.getloginc@seZdZdd„ZdS)Ú LoginTestscCst ¡}| t|ƒd¡dSr`)rrÜrr-)r(Z user_namerrr Ú test_getloginÝ szLoginTests.test_getloginN)rCrDrErÞrrrr rÝÚ srÝÚ getpriorityÚ setpriorityz'needs os.getpriority and os.setpriorityc@seZdZdd„ZdS)ÚProgramPriorityTestscCst tjt ¡¡}t tjt ¡|d¡z’t tjt ¡¡}|dkr^|dkr^t d|¡‚n| ||d¡Wzt tjt ¡|¡Wn2tyº}z|j t j kr¦‚WYd}~n d}~00nPzt tjt ¡|¡Wn4ty }z|j t j krö‚WYd}~n d}~000dS)NrUéz?unable to reliably test setpriority at current nice level of %s) rrßÚ PRIO_PROCESSr™ràrr8r0r7r8ZEACCES)r(rZnew_prior‚rrr Útest_set_get_priorityç s&ÿ ü z*ProgramPriorityTests.test_set_get_priorityN)rCrDrErärrrr ráâ srác@sveZdZGdd„dejƒZdd„Zedd„ƒZdd„Z d d „Z d d „Z d d„Z dd„Z dd„ZeZdd„Zdd„ZdS)ÚSendfileTestServerc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) zSendfileTestServer.HandlercCs.tj ||¡g|_d|_d|_| d¡dS)NTFs 220 ready )ÚasynchatÚ async_chatÚ__init__Ú in_bufferÚ accumulateÚclosedÚpush)r(Úconnrrr rèþ s z#SendfileTestServer.Handler.__init__cCs | d¡}|jr|j |¡dS)Né)Úrecvrêrérðrsrrr Ú handle_read s z&SendfileTestServer.Handler.handle_readcCs d |j¡S)Nr )r3rérJrrr Úget_data sz#SendfileTestServer.Handler.get_datacCs| ¡d|_dSrÓ)rNrërJrrr Ú handle_close sz'SendfileTestServer.Handler.handle_closecCs‚dSr#rrJrrr Ú handle_error sz'SendfileTestServer.Handler.handle_errorN)rCrDrErèrðrñròrórrrr ÚHandlerü s rôcCsptj |¡tj |¡| tjtj¡|  |¡|  d¡|j  ¡dd…\|_ |_ d|_d|_t ¡|_dS)Nr¬rWF)Ú threadingÚThreadrèÚasyncoreÚ dispatcherZ create_socketÚsocketÚAF_INETÚ SOCK_STREAMÚbindÚlistenÚ getsocknameÚhostÚportÚhandler_instanceÚ_activeÚLockÚ _active_lock)r(Úaddressrrr rè s    zSendfileTestServer.__init__cCs|jSr#)rrJrrr r! szSendfileTestServer.runningcCs$t ¡|_tj |¡|j ¡dSr#)rõÚEventÚ_SendfileTestServer__flagröÚstartr%rJrrr r% s  zSendfileTestServer.startcCsd|_| ¡dSr»)rr3rJrrr Ústop+ szSendfileTestServer.stopcCs&t|jddƒst d¡q| ¡dS)NrëFçü©ñÒMbP?)rÖrr@r"r rJrrr r%0 s zSendfileTestServer.waitcCsLd|_|j ¡|jr@tjr@|j ¡tjddd|j ¡qt  ¡dS)NTr rU)Útimeoutrm) rrrr÷Z socket_maprÚacquireZloopÚreleaseZ close_allrJrrr r™8 s    zSendfileTestServer.runcCs| ¡\}}| |¡|_dSr#)Úacceptrôr)r(ríÚaddrrrr Ú handle_acceptA s z SendfileTestServer.handle_acceptcCs | ¡dSr#)rNrJrrr Úhandle_connectE sz!SendfileTestServer.handle_connectcCsdSr`rrJrrr ÚwritableI szSendfileTestServer.writablecCs‚dSr#rrJrrr róL szSendfileTestServer.handle_errorN)rCrDrErærçrôrèÚpropertyrrr r%r™rrrðrrórrrr råú s   råÚsendfileztest needs os.sendfile()c@s eZdZddZej d¡ o8ej d¡ o8ej d¡ Ze  ed¡Z e  ej dkd¡Z e d d „ƒZe d d „ƒZd d„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Ze dd„ƒZe dd „ƒZe e d!d"„ƒƒZe e d#d$„ƒƒZe e  eed%ƒd&¡d'd(„ƒƒZd)S)*Ú TestSendfiles 12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcdeéÚlinuxZsolarisZsunosz%requires headers and trailers supportrêz(test is only meaningful on 32-bit buildscCst ¡|_ttj|jƒdSr#)rZthreading_setuprjr!rHÚDATAr?rrr rA\ s zTestSendfile.setUpClasscCstj|jŽt tj¡dSr#)rZthreading_cleanuprjrIrHr?rrr rTa s zTestSendfile.tearDownClasscCs~ttjdfƒ|_|j ¡t ¡|_|j |jj|jj f¡|j  d¡|j  d¡|j  ¡|_ ttjdƒ|_|j  ¡|_ dS)NrrUrrv)rårZHOSTÚserverrrùÚclientÚconnectrÿrÚ settimeoutrïrlÚsocknorrrHrßrJrrr rKf s     zTestSendfile.setUpcCs0|j ¡|j ¡|jjr&|j ¡d|_dSr#)rßrNrrrr rJrrr r»r s    zTestSendfile.tearDownc Ospztj|i|¤ŽWStyh}z>|jtjkr2‚n"|jtjtjfvrRWYd}~qn‚WYd}~qd}~00qdSr#)rrr7r8Z ECONNRESETÚEAGAINÚEBUSY)r(r„rÏr‚rrr Úsendfile_wrappery s zTestSendfile.sendfile_wrappercCsÌd}d}d}|t|jƒkrd| |j|j||¡}|dkr8qd||7}||7}| ||k¡| ||¡q | |t|jƒ¡|j t j ¡|j  ¡|j   ¡|j j ¡}| t|ƒt|jƒ¡| ||j¡dS)Nrrî)r-rr rrlrOr0rÚshutdownrùÚ SHUT_RDWRrNrr%rrñ)r(Ú total_sentÚoffsetÚnbytesÚsentrxrrr Útest_send_whole_fileŠ s$   z!TestSendfile.test_send_whole_filecCsäd}t|jƒd}t|jƒ|}d}||krj| |j|j||¡}|dkrJqj||7}||7}| ||k¡q$|j tj ¡|j  ¡|j   ¡|j j  ¡}|jt|jƒdd…}| |t|ƒ¡| t|ƒt|ƒ¡| ||¡dS)NrrWrî)r-rr rrlrOrr!rùr"rNrr%rrñr0)r(r#r$Z must_sendr%r&rxr<rrr Útest_send_at_certain_offset  s&   z(TestSendfile.test_send_at_certain_offsetc Cs¤t|jƒd}zt |j|j|d¡}Wn2tyX}z|jtjkrD‚WYd}~nd}~00|  |d¡|j   t j ¡|j  ¡|j ¡|jj ¡}|  |d¡dS)Nrîrr )r-rrrrrlr7r8ÚEINVALr0rr!rùr"rNrr%rrñ)r(r$r&r¶rxrrr Útest_offset_overflow· s     z!TestSendfile.test_offset_overflowcCsT| t¡$}t |j|jdd¡Wdƒn1s40Y| |jjtj ¡dS)Nrêrî) r\r7rrrrlr0rr8r)©r(r§rrr Útest_invalid_offsetÈ s 2z TestSendfile.test_invalid_offsetc Cs<tj|j|jddd|jr8tj|j|jdddddddS)Nrrî)r´r²r$rmr)r´r²r$rmÚheadersÚtrailersrœ)rrrrlÚSUPPORT_HEADERS_TRAILERSrJrrr Ú test_keywordsÍ s ÿ þzTestSendfile.test_keywordscCsìd}d|jdd…}tj|j|jddddgd}| |d¡||7}d}|t|ƒkr¤tt|ƒ|dƒ}| |j|j||¡}|dkr†q¤| ||¡||7}||7}qJ|  |t|ƒ¡|j   ¡|j   ¡|j j ¡}|  t|ƒt|ƒ¡dS) Nrsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyrêrîsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy©r-i)rrrrrlZassertLessEqualr-Úminr r0rrNrr%rrñÚhash)r(r#Z expected_datar&r$r%rxrrr Ú test_headersØ s.ÿ   ÿ     zTestSendfile.test_headerscCsžtjd}d}| tj|¡t||ƒt|dƒZ}tj|j|  ¡ddddgd|j   ¡|j   ¡|j j ¡}| |d ¡Wdƒn1s0YdS) Nr¸sabcdefrvrr¬s123456s789©r.sabcde123456789)rrHrwrIr!rrrrrlrrNrr%rrñr0)r(r™Z file_datarSrxrrr Ú test_trailersñ s   ÿ   zTestSendfile.test_trailerscCsld|jj_| t¡2}tj|j|jddddgddWdƒn1sL0Y|  |j j t j ¡dS)NFróxérŸr1© rrrêr\r7rrrrlr0rr8r)r+rrr Útest_headers_overflow_32bits s    ÿ$z)TestSendfile.test_headers_overflow_32bitscCsld|jj_| t¡2}tj|j|jddddgddWdƒn1sL0Y|  |j j t j ¡dS)NFrr7r8rŸr5r9r+rrr Útest_trailers_overflow_32bits s    ÿ$z*TestSendfile.test_trailers_overflow_32bitsÚ SF_NODISKIOztest needs os.SF_NODISKIOc Cs\ztj|j|jddtjdWn8tyV}z |jtjtjfvrB‚WYd}~n d}~00dS)Nrrî)rœ) rrrrlr<r7r8rr)r(r‚rrr Ú test_flags sÿ zTestSendfile.test_flagsN)rCrDrErrar½rFr/rrZrequires_headers_trailersÚmaxsizeZ requires_32brUrArTrKr»r r'r(r*r,r0r4r6r:r;rrr=rrrr rP sN ÿ þÿ ÿ         ÿrc Cs¦ttdƒsdSz„ttjddƒV}zt | ¡dd¡Wn.tydYWdƒWt tj¡dS0Wdƒn1sz0YWt tj¡nt tj¡0dS)NÚsetxattrFrró user.testr T) rrrrrHr?rlr7rI)r rrr Úsupports_extended_attributes s   þ&rAz(no non-broken extended attribute supportrWr­é'c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚExtendedAttributeTestsc KsJtj}| tj|¡t|ƒ| t¡&}|||dƒfi|¤ŽWdƒn1sR0Y| |jj t j ¡||ƒ} |  | t ¡|||dƒdfi|¤Žt | ƒ} |  d¡| t ||ƒƒ| ¡| ||dfi|¤Žd¡|||dƒdtjfi|¤Ž| ||dfi|¤Žd¡| t¡,}|||dƒdtjfi|¤ŽWdƒn1sN0Y| |jj t j¡| t¡,}|||dƒdtjfi|¤ŽWdƒn1s¨0Y| |jj t j ¡|||dƒdtjfi|¤Ž|  d¡| t ||ƒƒ| ¡|||dƒfi|¤Ž| t¡&}|||dƒfi|¤ŽWdƒn1sL0Y| |jj t j ¡|  d¡| t ||ƒƒ| ¡| |||dƒfi|¤Žd¡|||dƒdfi|¤Ž| |||dƒfi|¤Žd¡|||dƒfi|¤Žtd d „td ƒDƒƒ} | D]} ||| d fi|¤Žq | t ||ƒƒt | ƒt | ƒB¡dS) Nú user.testr r@rbsbyez user.test2sfoosaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacss|]}d |¡VqdS)z user.test{}Nrz)rrµrrr r|` r z;ExtendedAttributeTests._check_xattrs_str..r‘r7)rrHrwrIr!r\r7r0rr8ÚENODATAr%rërrrÚ XATTR_REPLACEÚ XATTR_CREATEÚEEXISTrñr?r°) r(rrÚgetxattrr?Ú removexattrÚ listxattrrÏrr§Z init_xattrZxattrÚmanyÚthingrrr Ú_check_xattrs_str5 sL 4   < <  6 z(ExtendedAttributeTests._check_xattrs_strcOsN|jtg|¢Ri|¤Žt tj¡|jtjg|¢Ri|¤Žt tj¡dSr#)rNr&rrIrHrrr rrr Ú _check_xattrse s z$ExtendedAttributeTests._check_xattrscCs| tjtjtjtj¡dSr#©rOrrIr?rJrKrJrrr Ú test_simplel sÿz"ExtendedAttributeTests.test_simplecCs |jtjtjtjtjdddS)NFrRrPrJrrr Ú test_lpathp sÿz!ExtendedAttributeTests.test_lpathcCs4dd„}dd„}dd„}dd„}| ||||¡dS) NcWsDt|dƒ&}tj| ¡g|¢RŽWdƒS1s60YdSr )rrrIrl©r1r„r rrr rIu s z1ExtendedAttributeTests.test_fds..getxattrcWsFt|ddƒ&}tj| ¡g|¢RŽWdƒn1s80YdS©Nr9r)rrr?rlrSrrr r?x sz1ExtendedAttributeTests.test_fds..setxattrcWsFt|ddƒ&}tj| ¡g|¢RŽWdƒn1s80YdSrT)rrrJrlrSrrr rJ{ sz4ExtendedAttributeTests.test_fds..removexattrcWsDt|dƒ&}tj| ¡g|¢RŽWdƒS1s60YdSr )rrrKrlrSrrr rK~ s z2ExtendedAttributeTests.test_fds..listxattr)rO)r(rIr?rJrKrrr Útest_fdst s zExtendedAttributeTests.test_fdsN)rCrDrErNrOrQrRrUrrrr rC/ s 0rCÚget_terminal_sizezrequires os.get_terminal_sizec@seZdZdd„Zdd„ZdS)Ú TermsizeTestsc Cszz t ¡}WnLtyX}z4tjdks8|jtjtjfvrB| d¡‚WYd}~n d}~00|  |j d¡|  |j d¡dS)Nr‡úfailed to query terminal sizer) rrVr7rar½r8r)ÚENOTTYrZZassertGreaterEqualÚcolumnsÚlines)r(rtr¶rrr Útest_does_not_crash† s  z!TermsizeTests.test_does_not_crashc CsÎztjddgtjdd ¡}Wn$ttjtfyB| d¡Yn0t|dƒt|dƒf}zt   t j   ¡¡}WnLty¼}z4t jdksœ|jtjtjfvr¦| d ¡‚WYd}~n d}~00| ||¡dS) NZsttyrtT)rr–zstty invocation failedrUrr‡rX)r‚Ú check_outputÚDEVNULLr×r6ÚCalledProcessErrorrèrZrÁrrVraÚ __stdin__rlr7r½r8r)rYr0)r(rtr<rÀr¶rrr Útest_stty_match˜ s" ÿÿÿ  zTermsizeTests.test_stty_matchN)rCrDrEr\rarrrr rW„ srWÚ memfd_createzrequires os.memfd_creater¸r¶c@seZdZdd„ZdS)ÚMemfdCreateTestscCs¬t dtj¡}| |d¡| tj|¡| t |¡¡t|ddd*}|  d¡|  |  ¡d¡Wdƒn1sv0Yt d¡}| tj|¡| t |¡¡dS)NZHirêr9F)Úclosefds memfd_createrÎ) rrbZ MFD_CLOEXECrrwrNrZrÔrrr0Útell)r(rqrSÚfd2rrr Útest_memfd_create¸ s  . z"MemfdCreateTests.test_memfd_createN)rCrDrErgrrrr rcµ srcc@seZdZdd„Zdd„ZdS)Ú OSErrorTestscCs¬Gdd„dtƒ}g|_g|_tjdur.tj}ntj}|j |¡|j ||ƒ¡tjdurbtj}n t  tj¡}|j |¡|j t |ƒ¡|j t |ƒ¡|j|j|_ dS)Nc@s eZdZdS)zOSErrorTests.setUp..StrN©rCrDrErrrr ÚStrÈ srj) r&Úbytes_filenamesÚunicode_filenamesrrrHrðZTESTFN_UNDECODABLErrr|r}rƒ)r(rjZdecodedÚencodedrrr rKÇ s     zOSErrorTests.setUpc CsJ|jtjf|jtjdf|jtjf|jtjtjf|jtjf|jtjf|jtj fg}t j dkr |  |j tjdf|j tjdf|jtjdf|jtjdf|jtjff¡n,|  |jtjf|jtjdf|jtjdff¡ttdƒrì| |jtjddf¡ttdƒr| |jtjddf¡ttdƒr.| |jtjdf¡ttd ƒrN| |jtjdf¡ttd ƒrn| |jtjdf¡ttd ƒrŒ| |jtjf¡ttd ƒrât j dkrÎ| |j tjdf¡| |jtjdf¡n| |jtjdf¡ttd ƒr(|  |jtjf|jtjdf|jtjddf|jtjdff¡ttdƒrH| |jtjdf¡ttdƒrf| |jtj f¡|D]Ú^}}}|D]È}zdt!|t"t#fƒr ||g|¢RŽn>| $t%d¡ ||g|¢RŽWdƒn1sÔ0YWnLt&y}z | '|j(|t"|ƒ¡WYd}~n,d}~0t)y,Yn0| *d +|¡¡qxqjdS)Nr›r‡sdstr¤r=rÚlchownrÉÚchflagsÚlchflagsÚchrootrÖrKrDsuserÚlchmodrDz should bezNo exception thrown by {}),rƒrr5rær7rrr r˜rIrar½r;rkrdr—rlrçrrðr=rnrÉrorprqrÖrKrIr?rJrrrDr÷r&r@ZassertWarnsRegexÚDeprecationWarningr7r¤rÚUnicodeDecodeErrorrÙr{)r(ZfuncsrƒÚfuncZ func_argsrr‚rrr Útest_oserror_filenameÝ sz      ù      û   ý            ü  4(z"OSErrorTests.test_oserror_filenameN)rCrDrErKrvrrrr rhÆ srhc@seZdZdd„ZdS)Ú CPUCountTestscCs8t ¡}|dur*| |t¡| |d¡n | d¡dS)Nrz&Could not determine the number of CPUs)rÚ cpu_countr%rÁÚ assertGreaterrZ)r(Zcpusrrr Útest_cpu_count$s  zCPUCountTests.test_cpu_countN)rCrDrErzrrrr rw#srwc@sæeZdZdd„Ze edud¡dd„ƒZe edud¡dd„ƒZe  e e d ƒd ¡d d „ƒZ d d„Z dd„Ze  e e dƒd¡dd„ƒZdd„Zdd„Ze  ejdkd¡dd„ƒZe  e e dƒd¡dd „ƒZe  e e d!ƒd"¡d#d$„ƒZdS)%ÚFDInheritanceTestscCsPt ttj¡}| tj|¡| t |¡d¡t |d¡| t |¡d¡dS©NFT) rrrŸrrwrNr0rÔrÕr’rrr Útest_get_set_inheritable.s  z+FDInheritanceTests.test_get_set_inheritableNz need fcntlcCsnt ttj¡}| tj|¡| t |¡d¡t |tj ¡}|tj M}t |tj |¡| t |¡d¡dSr|) rrrŸrrwrNr0rÔÚfcntlÚF_GETFDÚ FD_CLOEXECZF_SETFD)r(rqrœrrr Útest_get_inheritable_cloexec6s z/FDInheritanceTests.test_get_inheritable_cloexeccCsft ttj¡}| tj|¡| t |tj¡tj @tj ¡t  |d¡| t |tj¡tj @d¡dS)NTr) rrrŸrrwrNr0r~rr€rÕr’rrr Útest_set_inheritable_cloexecCsÿ ÿz/FDInheritanceTests.test_set_inheritable_cloexecÚO_PATHzneed os.O_PATHcCsnt ttj¡}| tj|¡| t |¡d¡t |d¡| t |¡d¡t |d¡| t |¡d¡dSr|) rrrŸrƒrwrNr0rÔrÕr’rrr Útest_get_set_inheritable_o_pathNs  z2FDInheritanceTests.test_get_set_inheritable_o_pathcCsât ¡}| t¡}t |¡Wdƒn1s20Y| |jjtj ¡| t¡}t  |d¡Wdƒn1sz0Y| |jjtj ¡| t¡}t  |d¡Wdƒn1sÂ0Y| |jjtj ¡dS©NTF) rr¹r\r7rrÔr0rr8rrÕ)r(rqrrrr Útest_get_set_inheritable_badfZs ( * *z0FDInheritanceTests.test_get_set_inheritable_badfcCs2t ttj¡}| tj|¡| t |¡d¡dSr»)rrrŸrrwrNr0rÔr’rrr r iszFDInheritanceTests.test_openrzneed os.pipe()cCsPt ¡\}}| tj|¡| tj|¡| t |¡d¡| t |¡d¡dSr»)rrrwrNr0rÔ)r(ZrfdZwfdrrr Ú test_pipens  zFDInheritanceTests.test_pipecCsJt ttj¡}| tj|¡t |¡}| tj|¡| t |¡d¡dSr») rrrŸrrwrNrYr0rÔ©r(Úfd1rfrrr Útest_dupvs  zFDInheritanceTests.test_dupcCs(t d¡}| tj|¡| |d¡dS©NrUr)rrYrwrNryr’rrr Útest_dup_standard_stream~s z+FDInheritanceTests.test_dup_standard_streamr‡rªcCsHt dtj¡}| tj|¡t |¡}| tj|¡| t |¡¡dS)NÚNUL)rrrrwrNrYrZrÔrˆrrr Ú test_dup_nulƒs  zFDInheritanceTests.test_dup_nulr½zneed os.dup2()cCs¤t ttj¡}| tj|¡t ttj¡}| tj|¡| t ||¡|¡| t  |¡¡t ttj¡}| tj|¡| tj||dd|¡|  t  |¡¡dS)NF)Ú inheritable) rrrŸrrwrNr0r½rOrÔrZ)r(rqrfZfd3rrr r¿ŒszFDInheritanceTests.test_dup2Úopenptyzneed os.openpty()cCsPt ¡\}}| tj|¡| tj|¡| t |¡d¡| t |¡d¡dSr»)rrrwrNr0rÔ)r(Z master_fdZslave_fdrrr Ú test_openptys  zFDInheritanceTests.test_openpty)rCrDrEr}rr¨r~rr‚rrrr„r†r r‡rŠrŒrar½rŽr¿r‘rrrr r{-s&      r{c @sHeZdZddddejfdfddddd eed dƒfgZd d „Zd d„ZdS)ÚPathTConverterTests)r˜TrN)r7FrNrPFN)roF©rN)rpFr“Nrr“rNc Cstj}tjdkrd}}nt tj¡}t|ƒ}t t|ƒtjtjB¡}|  tj tj¡|  tj |¡t|ƒ}t|ƒ}|j D]‚\}}} } |j |dVztt|ƒ} Wn"tyÈYWdƒqzYn0||||fD]`} | duräqÖ|j || d2| | g| ¢RŽ} | dur| | ƒWdƒqÖ1s,0YqÖ| td¡ | |g| ¢RŽWdƒn1sl0Y|r | |g| ¢RŽ} | durÞ| | ƒn>| td¡ | |g| ¢RŽWdƒn1sÔ0YWdƒqz1sô0YqzdS)Nr*r)rr1zto return str or bytesz os.PathLike)rrHrrrrrr{rLrwrIrNÚ functionsZsubTestrÖrÜÚassertRaisesRegexrc)r(Z str_filenameZ bytes_fspathÚbytes_filenamerqZ int_fspathZ str_fspathrZallow_fdÚ extra_argsZ cleanup_fnrr1ràrrr Útest_path_t_converter²sL    ÿ *ÿ0  þz)PathTConverterTests.test_path_t_convertercCsÄd}| t|d¡t tdƒ¡Wdƒn1s80Y| t|d¡t tdƒ¡Wdƒn1sv0Y| t|d¡ t ttƒƒ¡Wdƒn1s¶0YdS)Nz-__fspath__\(\) to return str or bytes, not %srÁrWÚfloatg¸…ëQ¸@Úobject)r•rcrr˜rrš)r(r?rrr Ú&test_path_t_converter_and_custom_classÞs,,z:PathTConverterTests.test_path_t_converter_and_custom_class) rCrDrErÚF_OKrÖr”r˜r›rrrr r’¦sú ,r’r×rØc@seZdZdd„ZdS)Ú BlockingTestscCsnt ttj¡}| tj|¡| t |¡d¡t |d¡| t |¡d¡t |d¡| t |¡d¡dSr…) rrrŸrrwrNr0r×rÙr’rrr rÚës  zBlockingTests.test_blockingN)rCrDrErÚrrrr rèsrc@seZdZdd„ZdS)Ú ExportsTestscCs | dtj¡| dtj¡dS)NrrÍ)r¯rÚ__all__rJrrr Ú test_os_allùszExportsTests.test_os_allN)rCrDrEr rrrr ržøsržc@s$eZdZdd„Zdd„Zdd„ZdS)Ú TestDirEntrycCs0tj tj¡|_| tj|j¡t |j¡dSr#)rr1ÚrealpathrrHrwrr4rJrrr rKÿszTestDirEntry.setUpcCs| ttj¡dSr#)r\rcrÚDirEntryrJrrr Útest_uninstantiablesz TestDirEntry.test_uninstantiablecCsjttj |jd¡dƒ}dd„t |j¡Dƒ ¡}| |tj¡| |j d¡ddl }|  t |j ||¡dS)Nr^ópythoncSsg|]}|‘qSrr©rÚentryrrr r r z0TestDirEntry.test_unpickable..r)r!rr1r3Úscandirr—r%r£r0rrêr\rcrì)r(rr§rêrrr Útest_unpickables zTestDirEntry.test_unpickableN)rCrDrErKr¤r©rrrr r¡þsr¡c@s eZdZejZdd„ZdÚ TestScandircCs>tj tj¡|_t |j¡|_| tj|j¡t  |j¡dSr#) rr1r¢rrHrÚ bytes_pathrwrr4rJrrr rKszTestScandir.setUpr^cCs2t|tƒr|jn|j}tj ||¡}t|dƒ|S)Nr¥)r÷r@r«r1rr3r!)r(rr1rrrr r!s zTestScandir.create_filecCs2tdd„t |j¡Dƒƒ}| t| ¡ƒ|¡|S)Ncss|]}|j|fVqdSr#rr¦rrr r| sÿz*TestScandir.get_entries..)rbrr¨r1r0r?Úkeys)r(ÚnamesÚentriesrrr Ú get_entriess  ÿzTestScandir.get_entriescCsZ|rJt|ƒD]:}| d¡sq |dvr&q | t||ƒt||ƒ|||f¡q n | ||¡dS)NZst_)Úst_devÚst_inoÚst_nlink)rÓrFr0rÖ)r(Zstat1Zstat2Z skip_fieldsrârrr Úassert_stat_equal%s   þzTestScandir.assert_stat_equalcCs(t |j¡}| tt|ƒ¡| ¡dSr#)rr¨r1r\rcrorN)r(Ú scandir_iterrrr r¤2s zTestScandir.test_uninstantiablecCs<| d¡}t |j¡}ddl}| t|j||¡| ¡dS)Nr^r) r!rr¨r1rêr\rcrìrN)r(rr´rêrrr r©7s   zTestScandir.test_unpickablecCs2| |tj¡| |j|¡| |jtj |j|¡¡| | ¡tj|jddj ¡t |j¡}| |  ¡t  |j ¡¡| |  ¡t |j ¡¡| | ¡tj |j¡¡tj|jdd}| |j ddt  |j ¡¡| |j ddt |j ¡¡| | ¡|tjdko| ¡| |jdd|tjdk¡dS)NFrRr*)r%rr£r0rr1r3Úinoder˜r±Úis_dirÚS_ISDIRrÛÚis_fileÚS_ISREGÚ is_symlinkrZr³)r(r§rr¶r¸rºZ entry_statZ entry_lstatrrr Ú check_entry>s> ÿ   ÿ  ÿ  ÿ ÿ ÿ þþzTestScandir.check_entryc Cs‚ttdƒ}t ¡}tj |jd¡}t |¡| d¡}|rŠzt |tj |jd¡¡Wn2t yˆ}z|  d|¡WYd}~n d}~00|rÂtj |tj |jd¡ddt  |tj |jd ¡¡ddg}|rØ|  d¡|ræ|  d ¡| |¡}|d}| |ddd d ¡|d}| |dd dd ¡|rD|d}| |dd dd ¡|r~|d}| |ddd d¡|d }| |d d dd¡dS) NrÖrÓr^z link_file.txtràÚ symlink_dirT)r¥úsymlink_file.txt)r¼r½F)rrrrär1r3r4r!rÖrèrZr¡rðr;r¯r») r(rÖr¡r;rr¶r­r®r§rrr Útest_attributesZsB   $ÿ   zTestScandir.test_attributescCsNt|tƒr|jn|j}tt |¡ƒ}| t|ƒd¡|d}| |j |¡|Sr‹) r÷r@r«r1rërr¨r0r-r)r(rr1r®r§rrr Ú get_entryƒs zTestScandir.get_entrycCs|j|d}| tj |¡¡S)Nr)r!r¿rr1Úbasename)r(rrrrr Úcreate_file_entryŒs zTestScandir.create_file_entryc Csp| ¡}t ¡}zNt |j¡tdd„t ¡Dƒƒ}| t|  ¡ƒtj  |¡g¡Wt |¡n t |¡0dS)Ncss|]}|j|fVqdSr#rr¦rrr r|˜r z5TestScandir.test_current_directory..) r!rr$r5r1rbr¨r0r?r¬rÀ)r(rZold_dirr®rrr Útest_current_directorys  ÿz"TestScandir.test_current_directorycCs| ¡}| t|ƒd¡dS)Nz)rÁr0r}©r(r§rrr Ú test_repržszTestScandir.test_reprcCs*| ¡}| t |¡tj |jd¡¡dS)Nr^)rÁr0rÚfspathr1r3rÃrrr Útest_fspath_protocol¢sz TestScandir.test_fspath_protocolcCsNt d¡}|j|d}t |¡}| |t¡| |tj t |j¡|¡¡dS)Nz bytesfile.txtr) rrrÁrÅr%r@r0r1r3)r(r–Z bytes_entryrÅrrr Útest_fspath_protocol_bytes¦s    ÿz&TestScandir.test_fspath_protocol_bytescCsÄtj |jd¡}t |¡| d¡}t |¡tjdkrF| | ¡¡|  |  ¡¡|  |  ¡¡tjdkr|  t |j¡| ¡|jddn0| | ¡d¡|  t |j¡|j t |jdddS)NrÓr*FrRr)rr1r3r4r¿r rrOr¶rZr¸rºr\r6rµr˜ry)r(r1r§rrr Útest_removed_dir®s     zTestScandir.test_removed_dircCsª| ¡}t |j¡| | ¡¡tjdkr:| | ¡¡| |  ¡¡tjdkrv|  t |j ¡|  ¡|j ddn0| |  ¡d¡|  t |j ¡|j t |j dddS)Nr*FrRr)rÁrrIr1rZr¶rrOr¸rºr\r6rµr˜ryrÃrrr Útest_removed_fileÄs   zTestScandir.test_removed_filecCsÐt ¡s| d¡S| d¡}t |tj |jd¡¡| ddg¡}|d}t  |¡|  |  ¡d¡|  |  ¡¡|  | ¡¡|  |j dd¡|  |jdd¡| | ¡¡| t|j¡|jdddS)Nzcannot create symbolic linkr^z symlink.txtrFrR)rrärZr!rr¡r1r3r¯rIryrµrZr¶r¸rOrºr\r6r˜)r(rr®r§rrr Útest_broken_symlink×s"  ÿ zTestScandir.test_broken_symlinkc Csp| d¡t |j¡}tt |¡ƒ}| t|ƒd|¡|d}| |jd¡| |jt tj  |jd¡¡¡dS©Nr^rUrsfile.txt) r!rrr1rër¨r0r-rr3)r(Ú path_bytesr®r§rrr rTìs  ÿzTestScandir.test_bytesc CsÐ| d¡ttfD]¸}|t |j¡ƒ}| t¡tt  |¡ƒ}Wdƒn1sT0Y|  t |ƒd|¡|d}|  |j d¡|  |jt tj  |jd¡¡¡| t|j ƒt¡| t|jƒt¡qdSrË)r!r|r}rrr1Ú assertWarnsrsrër¨r0r-rr3r¤ror@)r(r@rÌr®r§rrr Útest_bytes_likeøs   ,ÿzTestScandir.test_bytes_likez.fd support for listdir required for this test.c Cst| tjtj¡| d¡dg}t ¡rJt dtj  |jd¡¡|  d¡t  |jtj ¡}zt |¡}t |ƒ}Wdƒn1s†0Ydd„|Dƒ}| t|ƒ|¡| |t |¡¡|D]}| |j|j¡| t |¡|j¡| | ¡|jdk¡tjtjvrÄtj|j|d}| | ¡|¡tj|j|dd}| |jdd|¡qÄWt |¡n t |¡0dS) Nr^rÖcSsg|] }|j‘qSrrr¦rrr r r z'TestScandir.test_fd..rSF)ržr7rR)r¯rr¨rUr!rrär¡r1r3rðrrrër0r?rçrrÅrºr˜rVrN)r(Zexpected_namesrqrtr®r­r§rrrr Útest_fds.   & zTestScandir.test_fdcCs| ttjd¡dS)NrH)r\r6rr¨rJrrr Útest_empty_path%szTestScandir.test_empty_pathcCsN| d¡t |j¡}t|ƒ}| t|ƒd|¡t|ƒ}| t|ƒd|¡dS)Nr^rUr)r!rr¨r1rër0r-)r(r©r®Zentries2rrr Útest_consume_iterator_twice(s   z'TestScandir.test_consume_iterator_twicecCs$digfD]}| ttj|¡q dS)NgX9´Èv¾ó?)r\rcrr¨)r(Úobjrrr Útest_bad_path_type3szTestScandir.test_bad_path_typecCsf| d¡| d¡t |j¡}t|ƒ| ¡| ¡| ¡~Wdƒn1sX0YdS©Nr^ú file2.txt)r!rr¨r1rrrNÚcheck_no_resource_warning©r(r©rrr Ú test_close7s    zTestScandir.test_closecCsv| d¡| d¡t |j¡}t|ƒWdƒn1s>0Y| ¡~Wdƒn1sh0YdSrÔ)r!rr¨r1rrrÖr×rrr Útest_context_managerBs   & z TestScandir.test_context_managercCsT| d¡| d¡t |j¡ }t|ƒ| ¡Wdƒn1sF0YdSrÔ)r!rr¨r1rrrNr×rrr Útest_context_manager_closeJs   z&TestScandir.test_context_manager_closec Cs¨| d¡| d¡| t¡Lt |j¡ }t|ƒddWdƒn1sR0YWdƒn1sp0Y| ¡~Wdƒn1sš0YdS)Nr^rÕrUr)r!r\ÚZeroDivisionErrorrr¨r1rrrÖr×rrr Útest_context_manager_exceptionQs   D z*TestScandir.test_context_manager_exceptioncCsž| d¡| d¡t |j¡}t|ƒ| t¡~t ¡Wdƒn1sR0Yt |j¡}t |ƒ|  ¡~Wdƒn1s0YdSrÔ) r!rr¨r1rrrÍÚResourceWarningrÚ gc_collectrërÖr×rrr Útest_resource_warning[s    &  z!TestScandir.test_resource_warningN)r^)r^)&rCrDrErrÖrKr!r¯r³r¤r©r»r¾r¿rÁrÂrÄrÆrÇrÈrÉrÊrTrÎrrrrçrUrÏrÐrÑrÓrØrÙrÚrÜrßrrrr rªs@  )  ÿ    rªc@s^eZdZeejƒZdd„Zdd„Zdd„Zdd„Z d d „Z d d „Z d d„Z dd„Z dd„ZdS)Ú TestPEP519cCs dD]}| || |¡¡qdS)N)rbsgoodbyessome/path/and/file©r0rÅ)r(Úbrrr Útest_return_bytespszTestPEP519.test_return_bytescCs dD]}| || |¡¡qdS)N)ZhelloZgoodbyezsome/path/and/filerá)r(rrrrr Útest_return_stringtszTestPEP519.test_return_stringcCsLdD]B}t|ƒ}| || |¡¡| dt |¡¡| dt |¡¡qdS)N)úpath/like/objectópath/like/objectrærå)rr0rÅrrrA)r(rðZpathlikerrr Útest_fsencode_fsdecodexs z!TestPEP519.test_fsencode_fsdecodecCsB| d| tdƒ¡¡| tttjƒ¡| ttdƒtjƒ¡dS)Nz #feelthegilrÃ)r0rÅrrOÚ issubclassrÚPathLiker÷rJrrr rR€szTestPEP519.test_pathlikecCs4tddiƒ}ttt|ƒfD]}| t|j|¡qdS)NZblahr)rorÁrr\rcrÅ)r(ZvaporÚorrr Útest_garbage_in_exception_out…s z(TestPEP519.test_garbage_in_exception_outcCs| t|j¡dSr#)r\rcrÅrJrrr Útest_argument_requiredŠsz!TestPEP519.test_argument_requiredcCsR| t|jtdƒ¡tddiƒ}d|_| t|j|ƒ¡| t|jttƒƒ¡dS)Nr]ZfoorrU)r\rcrÅrroÚ __fspath__rÛ)r(Úcrrr Útest_bad_pathlikes  ÿzTestPEP519.test_bad_pathlikecCs8Gdd„dtjƒ}| tt|ƒ¡| tttjƒ¡dS)Nc@s eZdZdS)z0TestPEP519.test_pathlike_subclasshook..ANrirrrr ÚA›srð)rrérZrèrrO)r(rðrrr Útest_pathlike_subclasshook˜sz%TestPEP519.test_pathlike_subclasshookcCs| tjttj¡dSr#)r%rrér@ÚtypesÚ GenericAliasrJrrr Útest_pathlike_class_getitem sz&TestPEP519.test_pathlike_class_getitemN)rCrDrEr_rrÅrãrärçrRrërìrïrñrôrrrr ràjs  ràc@seZdZdd„ZdS)Ú TimesTestscCsnt ¡}| |tj¡dD]}t||ƒ}| |t¡qtjdkrj| |jd¡| |j d¡| |j d¡dS)N)ÚuserÚsystemÚ children_userÚchildren_systemÚelapsedr*r) rr5r%Ú times_resultrÖr™rr0rørùrú)r(r5Zfieldrúrrr Ú test_times¥s  zTimesTests.test_timesN)rCrDrErürrrr rõ¤srõÚ_fspathc@seZdZeejƒZdS)ÚTestPEP519PurePythonN)rCrDrEr_rrýrÅrrrr rþ·srþÚ__main__)r)N)€rær÷r’Ú contextlibrEr8rqrFrr•r.rrêrr)rùr˜r‚raZ sysconfigr.rõr@ròrr-r‹ÚtestrZ test.supportrr½rr…Ú ImportErrorr~rzÚpwdÚgetpwallrOrÜZ _testcapir r r>Ztest.support.script_helperrrrrVrrrÚversionrFr©Úgetgidròrr!ZTestCaser"rFr¾rr`ZBasicTestMappingProtocolrarÊrr rr#r%r>rWrarerrZget_config_varZOS_URANDOM_DONT_USE_FDr¨r~Úcontextmanagerrrrªr¯rÜrérrr9rErUrVrxrr†rˆrŒr–r²r8rÝrárørörårrAZrequires_linux_versionrCrWrcrhrwr{r’rržr¡rªràrõrþrCÚmainrrrr Ús^              Aae_ 'EG  ^;) - ÿ ýÿ ÿM ÿh#d%CGs/<0!1H4ÿVOÿ Q0 ] yB ÿ\: