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@seZdZdZdZdd„Zdd„Zdd„Zd d „Ze   e oBe j  e ¡d ¡d d „ƒZe   e obe j  e ¡d ¡dd„ƒZdd„Zdd„Zdd„Zdd„Ze   e jd¡dd„ƒZdd„Ze dd¡dd „ƒZd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Z d-d.„Z!d/d0„Z"d1d2„Z#d3d4„Z$d5d6„Z%dS)7Ú EnvironTestsz8check that os.environ object conform to mapping protocolNcCsBttjƒ|_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)z>Check that the repr() of os.environ looks like environ({...}).zenviron({{{}}})z, css|]\}}d ||¡VqdS)z {!r}: {!r}N©Úformat)rrjrúrrr Ú zsÿz-EnvironTests.test___repr__..N)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ÊrÎrKrðrôrõrørúrr rrrr rËbsE rËÚfwalkzTest needs os.fwalk()c@sLeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dZ dS)Ú FwalkTestszTests for os.fwalk().cks0|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)z. compare with walk() results. ©TFrW©Úrepeat)r÷rÍ)r÷r7N) 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 rWrr7) 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Îr rrrrrr rrrr r &s  r c@seZdZdZdd„ZdS)ÚBytesWalkTestsúTests for os.walk() with bytes.c 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ÊrÎrrrr rnsrc@seZdZdZddd„ZdS)ÚBytesFwalkTestsrrc os˜tjt |¡g|¢Ri|¤ŽD]t\}}}}t |¡}tttj|ƒƒ} tttj|ƒƒ} || | |fVtttj| ƒƒ|dd…<tttj| ƒƒ|dd…<qdSr#)rr r rArìr!) r(rÏr„rÐr"r#r$ÚtopfdrMrórórrr r ~s* zBytesFwalkTests.fwalkN)r)rCrDrErÊr 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þrZdir3Zdir4Zdir5Zdir6) 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þrimÚ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)rr2ú/) 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›r0zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.Tr1)rr1r3rrHr˜ÚS_ISGIDr4ÚS_IMODEÚlstatrÛrçrérÚSkipTesträ)r(r1r7rr5Zexisting_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†Fr1T) 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/r6r;r<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) rrMr-rZr˜rrHrEr?rFr0)r(ÚgroupsZgid_1Zgid_2rJrKrrr Ú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˜rrHrFr?rEr0)r(Úuid_1Úuid_2rKrJrrr Ú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^0YdSrP) rQrr˜rrHrFr\rér?)r(rRrSrKrrr Útest_chown_without_permissions  z,ChownFileTests.test_chown_without_permissioncCst tj¡dSr#)rr rrHrArrr Ú tearDownClassszChownFileTests.tearDownClassN)rCrDrEÚ classmethodrCrLrrrrrOÚ root_in_posixr-rQrTrUrVrrrr 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(rZr[rrr Útest_remove_all)s   zRemoveDirsTests.test_remove_allcCsŠtj tjd¡}t |¡tj |d¡}t |¡ttj |d¡ƒt |¡| tj  |¡¡|  tj  |¡¡|  tj  tj¡¡dS©NrZr[úfile.txt) rr1r3rrHr4r!r=r\r°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^rarbrrrr rY"s   rYc@seZdZdd„ZdS)Ú DevNullTestscCs€ttjddƒ"}| d¡| ¡Wdƒn1s60Yttjdƒ }| | ¡d¡Wdƒn1sr0YdS)Nr9róhellorvr )rrÚdevnullrrNr0rnrRrrr Ú test_devnullLs  &zDevNullTests.test_devnullN)rCrDrErfrrrr rcKsrcc@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é)rrhr%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¡}| ||¡dSrj)rqrrlrrr Útest_urandom_subprocessms  z$URandomTests.test_urandom_subprocessN)rCrDrErirmrqrrrrrr rgTs rgÚ 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)rrsr7r8r®rr:)rBr=rrr rCus   zGetRandomTests.setUpClasscCs*t d¡}| |t¡| t|ƒd¡dSrj)rrsr%r@r0r-©r(rxrrr Útest_getrandom_types  z"GetRandomTests.test_getrandom_typecCst d¡}| |d¡dS)Nrr )rrsr0)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)rrsÚ GRND_NONBLOCKÚBlockingIOErrorrJrrr Útest_getrandom_nonblocks z&GetRandomTests.test_getrandom_nonblockcCs$t d¡}t d¡}| ||¡dSrj)rrsrrlrrr Útest_getrandom_value˜s  z#GetRandomTests.test_getrandom_valueN) rCrDrErWrCrvrxrzr~rrrrr rtss rtZHAVE_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‹ÚrcrpÚ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‹rƒrpr„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)zË Stubs out execv and execve functions when used as context manager. Records exec calls. The mock execv and execve functions always raise an exception as they would normally never return. csˆ 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_execveN)rrˆrŽr‡)r‡rrZ orig_execvZ orig_execveZ orig_defpathrr‹r Ú_execvpe_mockupös$   þr‘rˆ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@r1r3r rr‘r\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œrr¦rar½r©rrrr r’sÿ  ÿ /r’r‡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°rrr7rr:r0r[)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¡dSr{)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 Ú UnicodeErrorrr:rß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þrrrrrr 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#)rr rèrñ)Úfn©Úbytesfnrr Ú add_filename~s  z'Pep383Tests.setUp..add_filenamez&couldn't create any non-ascii filenamezduplicate filename)rÚTESTFN_UNENCODABLErÓZTESTFN_NONASCIIrHrr ZbdirZTESTFN_UNICODErZrÚ unicodefnr4Zcreate_empty_filer1r3rAr©ÚaddÚshutilr)r(rrrrr rKts6           zPep383Tests.setUpcCst |j¡dSr#)r rrÓ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 rrrrrrrrrrr 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.N)r0ÚsortedrrèrrHr<r rJrrr Útest_listdir_no_extended_pathB sþþz/Win32ListdirTests.test_listdir_no_extended_pathcCshdtj tj¡}| tt |¡ƒ|j¡dt  tj tj¡¡}| tt |¡ƒdd„|jDƒ¡dS)z&Test when the path starts with '\\?\'.ú\\?\ó\\?\cSsg|]}t |¡‘qSrr?r@rrr r [ r z@Win32ListdirTests.test_listdir_extended_path..N) rr1rIrrHr0rArèr<r r>rrr Útest_listdir_extended_pathN s þ þz,Win32ListdirTests.test_listdir_extended_pathN)rCrDrErÊrKr»rBrErrrr r;. s   r;Ú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)NrDrC)Ú 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_targetr\ÚfilelinkÚ filelinkbrJrrr rKs szReadlinkTests.setUpcCs0t|jƒ}| ttj|j¡| ttj|¡dSr#)rrNr\r7rrF)r(rNrrr Útest_not_symlinky s zReadlinkTests.test_not_symlinkcCs(| ttjd¡| ttjtdƒ¡dS)Nz missing-link)r\r6rrFrrJrrr Útest_missing_link~ s ÿzReadlinkTests.test_missing_linkcCsBt |j|j¡| tj|j¡t|jƒ}| t  |¡|j¡dSr#) rr¡rNrPrwrrIrrMrF)r(rPrrr Ú test_pathlikeƒ s zReadlinkTests.test_pathlikecCsNt |j|j¡| tj|j¡t t|jƒ¡}|  ||j¡|  |t ¡dSr#) rr¡rOrQrwrrIrFrrMr%r@r>rrr Útest_pathlike_bytesŠ s z!ReadlinkTests.test_pathlike_bytescCsJt |j|j¡| tj|j¡t |j¡}| ||j¡|  |t ¡dSr#) rr¡rOrQrwrrIrFrMr%r@r>rrr Ú test_bytes’ s  zReadlinkTests.test_bytesN)rCrDrErPrr1rIrŸrNr rQrOrMrKrRrSrÚskip_unless_symlinkrTrUrVrrrr rG^ s     rGc@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°rPròÚdirlinkr rGÚ missing_linkrJrrr r»« s   zWin32SymlinkTests.tearDowncCs`t |j|j¡| tj |j¡¡| tj |j¡¡| tj |j¡¡|  |j|j¡dSr#) rr¡Údirlink_targetrYrOr1r°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¡rNrPrOr1r°Úisfiler\r]rJrrr Útest_file_linkº s z Win32SymlinkTests.test_file_linkcCs6|j}tj |¡rt |¡d}d}t |||¡dS)z2Create a "directory" link to a non-existent targetz"c:\\target does not exist.29r3c740TN)rZrr1rGròr¡)r(Zlinknamer¢Z target_is_dirrrr Ú_create_missing_dir_linkÁ s   z*Win32SymlinkTests._create_missing_dir_linkcCs| ¡t |j¡dSr#)rarròrZrJrrr Ú,test_remove_directory_link_to_missing_targetË sz>Win32SymlinkTests.test_remove_directory_link_to_missing_targetcCs | ¡| tj |j¡¡dSr#)rar\rr1r-rZrJrrr Ú.test_isdir_on_directory_link_to_missing_targetÒ sz@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_targetcCs| ¡t |j¡dSr#)rarr rZrJrrr Ú.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˜rr9r )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(Zlevel1rerfrßZorig_dirr×rrr Ú test_12084â s2      ÿ  ÿzWin32SymlinkTests.test_12084úC:\Users\All UsersúC:\ProgramDatazTest directories not foundcCs"t d¡}| tj |d¡¡dS)Nrirj)rrFrOr1Ú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:r9r0r˜r\ÚS_ISLNKrÛÚst_reparse_tagZIO_REPARSE_TAG_APPEXECLINK)r(ÚaliasesÚaliasrrrqr Útest_appexeclink7 s     ÿ  z"Win32SymlinkTests.test_appexeclinkN)rCrDrErPrr1rIrŸrNrYr;r[rZrKr»r^r`rarbrcrdr]rhrrrGr°rlroryrrrr rX› s,   # þ #rXc@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)NrC)Ú_winapiÚCreateJunctionÚjunction_targetr{rOrr1rGr°r-rr˜r9r0r\r\rJrFrJrrr Útest_create_junctionY sÿz'Win32JunctionTests.test_create_junctioncCs\t |j|j¡| tj |j¡¡| tj |j¡¡t  |j¡|  tj |j¡¡dSr#) r|r}r~r{rOrr1r°rGrIr\rJrrr Útest_unlink_removes_junctionf s  z/Win32JunctionTests.test_unlink_removes_junctionN)rCrDrEr{rr1r;rIrŸr~rKr»rr€rrrr rzL s  rzc@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.wintypesZWinDLLrrZGetCurrentProcessrrZGetProcessHandleCountZLPDWORDr!r Zbyrefr0rú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)zM Create this structure: base \___ some_dir z base/some_dirN)rrärJrrr rK£ szNonLocalSymlinkTests.setUpcCst d¡dS)Nr)r rrJrrr r»¬ szNonLocalSymlinkTests.tearDowncCstj dd¡}t d|¡dS)a¹ The symlink target should resolve relative to the link, not relative to the current directory. Then, link base/some_link -> base/some_dir and ensure that some_link is resolved as a directory. In issue13772, it was discovered that directory detection failed if the symlink target was not specified relative to the current directory, which was a defect in the implementation. rZ some_linkZsome_dirN)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Å)r0rr rArJrrr Útest_nopÁ szFSEncodingTests.test_nopc CsFdD]<}zt |¡}Wnty,YqYn0| t |¡|¡qdS)N)u unicodeÅulatinéÚascii)rr rèr0rA)r(rrrrr Ú test_identityÅ s   zFSEncodingTests.test_identityN)rCrDrEr‹rrrrr 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@â)rIrÚ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)rCrDrErrrrr¼rrar½rHrÚ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?rprrr 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žrŸrZ 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ÁrŸrÓrrr Útest_spawnle_noargs‹ szSpawnTests.test_spawnle_noargscCsv| ¡}| ttjtj|dd¡| ttjtj|dg¡| ttjtj|dd¡| ttjtj|ddg¡dS©Nrrr‚rH)r¼r\r©rržrŸrÓrrr Útest_spawnv_noargs‘ s zSpawnTests.test_spawnv_noargscCs~| ¡}| ttjtj|ddi¡| ttjtj|dgi¡| ttjtj|ddi¡| ttjtj|ddgi¡dSrÖ)r¼r\r©rrÉrŸrÓ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žrŸr 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@seZdZdZdd„ZdS)ÚProgramPriorityTestsz0Tests for os.getpriority() and os.setpriority().cCst 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ârr:r0r7r8ZEACCES)r(rZnew_prior„rrr Útest_set_get_priorityç s&ÿ ü z*ProgramPriorityTests.test_set_get_priorityN)rCrDrErÊræ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ñrurrr Ú 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)Útimeoutro) rr rrù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êÚpropertyrr r 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ÚDATArArrr rC\ s zTestSendfile.setUpClasscCstj|jŽt tj¡dSr#)rZthreading_cleanuprjrIrHrArrr rVa s zTestSendfile.tearDownClasscCs~ttjdfƒ|_|j ¡t ¡|_|j |jj|jj f¡|j  d¡|j  d¡|j  ¡|_ ttjdƒ|_|j  ¡|_ dS)NrrUrrv)rçrZHOSTÚserverr rûÚclientÚconnectrrÚ 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}~00qdS)zfA higher level wrapper representing how an application is supposed to use sendfile(). N)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&ror)r´r²r&roÚ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©r0sabcde123456789)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Ÿr3© 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)NFrr9r:rŸr7r;r-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>r7r8r!r )r(r„rrr Ú test_flags sÿ zTestSendfile.test_flagsN)rCrDrErrar½rHr1rrZrequires_headers_trailersÚmaxsizeZ requires_32brWrCrVrKr»r"r)r*r,r.r2r6r8r<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) rrrrrHrArlr7rI)r rrr Úsupports_extended_attributes s   þ&rCz(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 rBrdsbyez user.test2sfoosaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacss|]}d |¡VqdS)z user.test{}Nrz)rrµrrr r|` r z;ExtendedAttributeTests._check_xattrs_str..r‘r9)rrHrwrIr!r\r7r0rr8ÚENODATAr%rìrr rÚ XATTR_REPLACEÚ XATTR_CREATEÚEEXISTròrAr°) r(rrÚgetxattrrAÚ 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#)rPr&rrIrHrr r rrr Ú _check_xattrse s z$ExtendedAttributeTests._check_xattrscCs| tjtjtjtj¡dSr#©rQrrKrArLrMrJrrr Ú test_simplel sÿz"ExtendedAttributeTests.test_simplecCs |jtjtjtjtjdddS)NFrRrRrJrrr Ú test_lpathp sÿz!ExtendedAttributeTests.test_lpathcCs4dd„}dd„}dd„}dd„}| ||||¡dS) NcWsDt|dƒ&}tj| ¡g|¢RŽWdƒS1s60YdSr )rrrKrl©r1r„r rrr rKu s z1ExtendedAttributeTests.test_fds..getxattrcWsFt|ddƒ&}tj| ¡g|¢RŽWdƒn1s80YdS©Nr9r)rrrArlrUrrr rAx sz1ExtendedAttributeTests.test_fds..setxattrcWsFt|ddƒ&}tj| ¡g|¢RŽWdƒn1s80YdSrV)rrrLrlrUrrr rL{ sz4ExtendedAttributeTests.test_fds..removexattrcWsDt|dƒ&}tj| ¡g|¢RŽWdƒS1s60YdSr )rrrMrlrUrrr rM~ s z2ExtendedAttributeTests.test_fds..listxattr)rQ)r(rKrArLrMrrr Útest_fdst s zExtendedAttributeTests.test_fdsN)rCrDrErPrQrSrTrWrrrr rE/ s 0rEÚ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)zÔCheck if get_terminal_size() returns a meaningful value. There's no easy portable way to actually check the size of the terminal, so let's check if it returns something sensible instead. r‡úfailed to query terminal sizeNr) rrXr7rar½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| ||¡d S) zÕCheck if stty returns the same results stty actually tests stdin, so get_terminal_size is invoked on stdin explicitly. If stty succeeded, then get_terminal_size() should work too. ZsttyrtT)rr–zstty invocation failedrUrr‡rZN)r‚Ú check_outputÚDEVNULLr×r6ÚCalledProcessErrorrérZrÁrrXraÚ __stdin__rlr7r½r8r+r[r0)r(rtr<rÀr¶rrr Útest_stty_match˜ s" ÿÿÿ  zTermsizeTests.test_stty_matchN)rCrDrEr^rcrrrr rY„ srYÚ 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Î) rrdZ MFD_CLOEXECrrwrNr\rÖrrr0Útell)r(rqrSÚfd2rrr Útest_memfd_create¸ s  . z"MemfdCreateTests.test_memfd_createN)rCrDrErirrrr reµ srec@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È srl) r&Úbytes_filenamesÚunicode_filenamesrrrHrñZTESTFN_UNDECODABLErr r|r}r…)r(rlZdecodedÚ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×rMrFsuserÚlchmodrFz should bezNo exception thrown by {}),r…rr5rçr9rrr r˜rIrar½r=rmrdr—rnrèrrñr?rprËrqrrrsr×rMrKrArLrtrFr÷r&r@ZassertWarnsRegexÚDeprecationWarningr7r¤rÚUnicodeDecodeErrorrÙr{)r(Zfuncsr…ÚfuncZ func_argsrr„rrr Útest_oserror_filenameÝ sz      ù      û   ý            ü  4(z"OSErrorTests.test_oserror_filenameN)rCrDrErKrxrrrr rjÆ srjc@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)rCrDrEr|rrrr ry#sryc@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 riszFDInheritanceTests.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(Úfd1rhrrr Útest_dupvs  zFDInheritanceTests.test_dupcCs(t d¡}| tj|¡| |d¡dS©NrUr)rrYrwrNr{r’rrr Útest_dup_standard_stream~s z+FDInheritanceTests.test_dup_standard_streamr‡r¬cCsHt dtj¡}| tj|¡t |¡}| tj|¡| t |¡¡dS)NÚNUL)rrrrwrNrYr\rÖ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Ör\)r(rqrhZfd3rrr rÁŒszFDInheritanceTests.test_dup2Úopenptyzneed os.openpty()cCsPt ¡\}}| tj|¡| tj|¡| t |¡d¡| t |¡d¡dSr½)rr’rwrNr0rÖ)r(Z master_fdZslave_fdrrr Ú test_openptys  zFDInheritanceTests.test_openpty)rCrDrErrrªr€rƒr„rrrr†rˆrr‰rŒrŽrar½rrÁr“rrrr r}-s&      r}c @sHeZdZddddejfdfddddd eed dƒfgZd d „Zd d„ZdS)ÚPathTConverterTests)r˜TrN)r9FrNrPFN)rqF©rN)rrFr•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)rrHrrr rrr{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šrrrrr 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ŸèsrŸc@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ªr1r0rAÚ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ÓrHr0rÖ)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_symlinkr\rµ)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ªr0rAr®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) rr rÃ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¸r\rºr¼r\r6r·r˜r{)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ÃrrIr1r\r¸rrOrºr¼r\r6r·r˜r{rÅ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±rIr{r·r\r¸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!rr r1rìrªr0r-rr3)r(Ú path_bytesr°r©rrr rVì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}rr r1Ú assertWarnsrurìrªr0r-rr3r¤ror@)r(rBrÎ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ìr0rArè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ÌrVrÐ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)rdsgoodbyessome/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Çrr rA)r(rðZpathlikerrr Útest_fsencode_fsdecodexs z!TestPEP519.test_fsencode_fsdecodecCsB| d| tdƒ¡¡| tttjƒ¡| ttdƒtjƒ¡dS)Nz #feelthegilrÃ)r0rÇrrOÚ issubclassrÚPathLiker÷rJrrr rT€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..ANrkrrrr ÚA›srò)rrër\rê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érTrí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@seZdZdZeejƒZdS)ÚTestPEP519PurePythonz>Explicitly test the pure Python implementation of os.fspath().N)rCrDrErÊr_rrÿrÇrrrr r·srÚ__main__)r)N)€rèrùr”Ú contextlibrGr8rsrHrr—r0rrêr r+rûr˜r‚raZ sysconfigr.r÷r@rôrr/r‹ÚtestrZ test.supportrr½rr‡Ú ImportErrorr€r|ÚpwdÚgetpwallrQrÜZ _testcapir r r@Ztest.support.script_helperrrrrXrrrÚversionrHr«Úgetgidrôrr!ZTestCaser"rFr¾rr`ZBasicTestMappingProtocolrarËrr rr%r'r@rYrcrgrtZget_config_varZOS_URANDOM_DONT_USE_FDrªr€Úcontextmanagerr‘r’r¬r±rÞrërrr;rGrWrXrzrrˆrŠrŽr˜r´r:rßrãrúrørçrrCZrequires_linux_versionrErYrerjryr}r”rŸr r£r¬râr÷rrCÚmainrrrr Ús^              Aae_ 'EG  ^;) - ÿ ýÿ ÿM ÿh#d%CGs/<0!1H4ÿVOÿ Q0 ] yB ÿ\: