a 5êdg¶tã@säddlZddlZddlZddlmZmZmZmZddlmZm Z ddl m Z ddlm Z z ddl Z WneyzdZ Yn0eejƒZdd„Zdd „ZGd d „d ejƒZGd d „d e jejƒZGdd„dejƒZedkràe ¡dS)éN)ÚrealpathÚabspathÚdirnameÚbasename)ÚsupportÚtest_genericpath)ÚFakePath)ÚmockcCs"dtv}d}|t |¡|ƒg|S)Nú\z'ABSTFN is not a posix path - tests fail)ÚABSTFNÚunittestÚskip)ÚtestZfound_backslashÚmsg©rú//usr/local/lib/python3.9/test/test_posixpath.pyÚ!skip_if_ABSTFN_contains_backslashsrcCs&zt |¡Wnty Yn0dS©N)ÚosÚrmdirÚOSError)rrrrÚ safe_rmdirs rc@sôeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Ze e ¡d¡dd„ƒZe edud¡dd„ƒZe edud¡d d!„ƒZd"d#„Zd$d%„Zd&d'„Zd(d)„Zed*d+„ƒZed,d-„ƒZe ee d.ƒd/¡ed0d1„ƒƒZ!e ee d.ƒd/¡ed2d3„ƒƒZ"e ee d.ƒd/¡ed4d5„ƒƒZ#e ee d.ƒd/¡ed6d7„ƒƒZ$e ee d.ƒd/¡ed8d9„ƒƒZ%e ee d.ƒd/¡ed:d;„ƒƒZ&e ee d.ƒd/¡edd?„ƒƒZ(d@dA„Z)dBdC„Z*dDdE„Z+dS)FÚ PosixPathTestcCs | ¡dSr)ÚtearDown©ÚselfrrrÚsetUp&szPosixPathTest.setUpcCs,dD]"}t tj|¡ttj|ƒqdS)N)ÚÚ1Ú2)rÚunlinkÚTESTFNr)rÚsuffixrrrr)szPosixPathTest.tearDowncCsŒ| t dddd¡d¡| t ddd¡d¡| t ddd ¡d ¡| t d d d d¡d¡| t d d d¡d¡| t ddd¡d¡dS)Nú/fooÚbarz/barZbazz/bar/bazz /foo/bar/bazz/foo/zbar/zbaz/z /foo/bar/baz/ó/fooóbars/barsbazs/bar/bazs /foo/bar/bazs/foo/sbar/sbaz/s /foo/bar/baz/)Ú assertEqualÚ posixpathÚjoinrrrrÚ test_join.s ÿÿÿÿÿzPosixPathTest.test_joincCs¸| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d¡| t d ¡d ¡| t d ¡d ¡| t d ¡d¡| t d¡d¡| t d¡d¡| t d¡d¡dS)Nú/foo/bar)r#r$ú/)r,rÚfoo)rr-ú////foo)ú////r-ú //foo//bar)ú//foor$ó/foo/bar)r%r&ó/)r3óófoo)r4r5ó////foo)ó////r5ó //foo//bar)ó//foor&)r'r(ÚsplitrrrrÚ test_split<szPosixPathTest.test_splitcCs‚| t |¡||f¡| t d|¡d||f¡| t d|¡d||f¡| t d|¡d||f¡| t d|¡d||f¡| t |d¡||ddf¡t|dƒ}t|dƒ}t|dƒ}| t |¡||f¡| t d|¡d||f¡| t d|¡d||f¡| t d |¡d ||f¡| t d |¡d ||f¡| t |d¡||dd f¡dS) Nr,zabc/zabc.def/z /abc.def/rÚASCIIr3sabc/sabc.def/s /abc.def/r4)r'r(ÚsplitextÚbytes)rÚpathÚfilenameÚextrrrÚ splitextTestIsB ÿ ÿ ÿÿ    ÿ ÿ ÿ ÿÿzPosixPathTest.splitextTestcCs¬| ddd¡| ddd¡| ddd¡| dd d ¡| d d d ¡| d d d ¡| ddd ¡| ddd¡| ddd ¡| ddd ¡| ddd ¡| d d d ¡dS)Nzfoo.barr-z.barz foo.boo.barzfoo.boozfoo.boo.biff.barz foo.boo.biffz.csh.rcz.cshz.rcZnodotsrz.cshrcz ...manydotsz...manydots.extz.extÚ.ú..z........)rBrrrrÚ test_splitexteszPosixPathTest.test_splitextcCs¸| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d¡| t d ¡d¡| t d ¡d¡| t d ¡d¡| t d ¡d¡dS) NrFr,Tr#r+zfoo/barr4r3r%r2sfoo/bar)ÚassertIsr(ÚisabsrrrrÚ test_isabssszPosixPathTest.test_isabscCs¸| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d ¡| t d ¡d ¡| t d ¡d ¡| t d ¡d ¡| t d¡d ¡dS)Nr+r$r,rr-r.r0r2r&r3r4r5r6r8)r'r(rrrrrÚ test_basename€szPosixPathTest.test_basenamecCs¸| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d ¡| t d ¡d ¡| t d ¡d ¡| t d ¡d¡| t d¡d¡| t d¡d¡dS)Nr+r#r,r-rr.r/r0r1r2r%r3r5r4r6r7r8r9)r'r(rrrrrÚ test_dirnameszPosixPathTest.test_dirnamecCs„| t tjd¡d¡| t tjd¡d¡ttjddƒ}| d¡Wdƒn1s`0Y| t tjd¡d¡t ¡rt   tjdtjd¡| t tjd¡d¡t   tjd¡| t tjd¡d¡| t  tjd¡d¡| t tjd¡d¡| t tjd¡d¡| t t   tj¡d¡d¡| t tjd ¡d¡| t t   tj¡d ¡d¡dS) NrFrÚwbr5Tuí¿¿óÿúó)rFr(Úislinkrr!ÚlexistsÚopenÚwriteÚ can_symlinkrÚsymlinkÚremoveÚexistsÚfsencode)rÚfrrrÚ test_islinkšs ( zPosixPathTest.test_islinkcCs(| t d¡d¡| t d¡d¡dS)Nr,Tr3)rFr(ÚismountrrrrÚ test_ismount¯szPosixPathTest.test_ismountcCs’| t t¡d¡z(t t¡| t t¡d¡Wttƒn ttƒ0| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d¡dS)NFu/í¿¿s/ÿz/s/)rFr(rZr rÚmkdirrrrrrÚtest_ismount_non_existent³s z'PosixPathTest.test_ismount_non_existentzTest requires symlink supportc Cs>z,t dt¡| t t¡d¡Wt t¡n t t¡0dS)Nr,F)rrTr rFr(rZr rrrrÚtest_ismount_symlinksÁs z#PosixPathTest.test_ismount_symlinksNzTest requires posix modulecCs>tj}dd„}z"|t_| t t¡d¡W|t_n|t_0dS)Nc Ss6d}d}|tkrd}d}t d||dddddddf ¡S)Nré)r ÚposixÚ stat_result©r?Úst_inoÚst_devrrrÚ fake_lstatÐs z?PosixPathTest.test_ismount_different_device..fake_lstatT©rÚlstatrFr(rZr ©rZ save_lstatrerrrÚtest_ismount_different_deviceËs z+PosixPathTest.test_ismount_different_devicecCs>tj}dd„}z"|t_| t t¡d¡W|t_n|t_0dS)Nc SsPd}d}| t¡r"|tkr"tdƒ‚|tkr2d}d}t d||dddddddf ¡S)Nrz!Fake [Errno 13] Permission deniedr_)Ú startswithr rr`rarbrrrreâszEPosixPathTest.test_ismount_directory_not_readable..fake_lstatTrfrhrrrÚ#test_ismount_directory_not_readableÝs  z1PosixPathTest.test_ismount_directory_not_readablecCs(| t d¡d¡| t d¡d¡dS)Nr-r5)r'r(Ú expanduserrrrrÚtest_expanduserószPosixPathTest.test_expanduserc CsÔt ¡¸}d|d<| t d¡d¡d|d<| t d¡d¡dD]n}|j|dN||d<| t d¡d¡| t d¡d¡| t d ¡d ¡WdƒqB1s¦0YqBWdƒn1sÆ0YdS) Nz /home/victorÚHOMEú~z /home/victor/)r,rú//ú///)Úhomer,ú~/z~/foor#)rÚEnvironmentVarGuardr'r(rlZsubTest)rÚenvrrrrrÚtest_expanduser_home_envvar÷s z)PosixPathTest.test_expanduser_home_envvarc Cs¦t d¡}| t d¡t¡| t d¡t¡t d¡dkrt| t d¡dt d¡¡| t d¡dt d¡¡| t d¡t¡| t d ¡t¡| t d ¡t¡| t d ¡t¡t ¡Ì}|d =|  t   ¡¡j }|  d¡pèd}| t d¡|¡tjj|d tdbtjj|dtd.dD]}| t |¡|¡q(Wdƒn1sX0YWdƒn1sx0YWdƒn1s˜0YdS)NÚpwdrss~/ror,ó~r3z~root/z~foo/s~root/s~foo/rnÚgetpwuid)Z side_effectÚgetpwnam)roz~/.localz ~vstinner/)rÚ import_moduleZassertIsInstancer(rlÚstrr>r'rtryrÚgetuidÚpw_dirÚrstripr ZpatchÚobjectÚKeyError)rrwrurrr?rrrÚtest_expanduser_pwds4  þ þ ÿz!PosixPathTest.test_expanduser_pwdcCs| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d ¡| t d ¡d¡| t d ¡d ¡| t d ¡d ¡| t d¡d¡| t d¡d ¡| t d¡d¡| t d¡d¡| t d¡d¡dS)NrrCr,rprqz///foo/.//bar//r+z///foo/.//bar//.//..//.//bazz/foo/bazz///..//./foo/.//barr4ó.r3s//s///s///foo/.//bar//r2s///foo/.//bar//.//..//.//bazs/foo/bazs///..//./foo/.//bar)r'r(ÚnormpathrrrrÚ test_normpath.s( ÿ ÿ ÿzPosixPathTest.test_normpathcCs”| tdƒt ¡¡| tdƒt ¡¡| td dgd¡ƒt ¡¡| tdƒt ¡¡| tdƒt ¡¡| td dgd¡ƒt ¡¡dS)NrCz./.r,édrƒs./.r3)r'rrÚgetcwdr)ÚgetcwdbrrrrÚtest_realpath_curdirBs  z"PosixPathTest.test_realpath_curdircCs¤| tdƒtt ¡ƒ¡| tdƒttt ¡ƒƒ¡| td dgd¡ƒd¡| tdƒtt ¡ƒ¡| tdƒttt ¡ƒƒ¡| td dgd¡ƒd¡dS)NrDz../..r,r†s..s../..r3)r'rrrr‡r)rˆrrrrÚtest_realpath_pardirLs z"PosixPathTest.test_realpath_pardirrTzMissing symlink implementationc CsDz2t tdt¡| ttƒtd¡Wt t¡n t t¡0dS©Nr)rrTr r'rrr rrrrÚtest_realpath_basicVsz!PosixPathTest.test_realpath_basicc CsJz8t t td¡t¡| ttƒtd¡Wt t¡n t t¡0dSr‹) rrTr(Úrelpathr r'rrr rrrrÚtest_realpath_relativeasz$PosixPathTest.test_realpath_relativec Cs‚z(t tt¡| ttƒt¡t tdtd¡t tdtd¡| ttdƒtd¡| ttdƒtd¡| ttdƒtd¡| ttdƒttƒ¡| ttdƒttƒd¡t tdtd¡| ttd ttƒdƒtd¡| ttd ttƒdƒtd¡t ttƒd td ¡| ttd ƒtd ¡t d tttƒƒd ttƒdtd¡| ttdƒtd¡t ttƒ¡$| tttƒƒt¡Wdƒn1sÎ0YWt  t¡t  td¡t  td¡t  td¡t  td¡t  td ¡nRt  t¡t  td¡t  td¡t  td¡t  td¡t  td ¡0dS)Nrrz1/xz1/..z1/../xú/xÚxÚyz1/../úa/bÚaú../r,Úc) rrTr r'rrrrÚ change_cwdr rrrrÚtest_realpath_symlink_loopsksR ÿÿÿÿÿ6 û z)PosixPathTest.test_realpath_symlink_loopsc Csšznt t¡t dttƒtd¡t dtd¡| ttdƒt¡Wt td¡t td¡t tƒn&t td¡t td¡t tƒ0dS)Nr”z/selfzself/self/selfz/link) rr\r rTrr'rrr rrrrrÚ(test_realpath_repeated_indirect_symlinks•s  þz6PosixPathTest.test_realpath_repeated_indirect_symlinksc Csd}zÖt t¡t|ƒD],}t d d|gd¡td|d¡qt dtd¡| ttd|ƒt¡t  t¡$| td|ƒt¡Wdƒn1s¢0YWt|dƒD]}t  td|¡qºt tƒn.t|dƒD]}t  td|¡qèt tƒ0dS)Né r,z%dz/%dr_rCz/0) rr\r ÚrangerTr)r'rrr–r r)rÚdepthÚirrrÚtest_realpath_deep_recursion¤s  * 4 þz*PosixPathTest.test_realpath_deep_recursionc Cs¾z”t t¡t td¡t tdtd¡t td¡$| tdƒtd¡Wdƒn1sf0YWt td¡t tdƒt tƒn$t td¡t tdƒt tƒ0dS)Nz/yú/kr“z/y/a) rr\r rTrr–r'rr rrrrrÚtest_realpath_resolve_parents¸s 4  þ z+PosixPathTest.test_realpath_resolve_parentsc CszÎt t¡t td¡t td¡t tdtd¡| ttdƒtd¡t ttƒ¡,| tt tƒdƒtd¡Wdƒn1s”0YWt  td¡t tdƒt tdƒt tƒn0t  td¡t tdƒt tdƒt tƒ0dS)Nržz/k/yz/link-yz /link-y/..) rr\r rTr'rrr–rrr rrrrrÚ(test_realpath_resolve_before_normalizingÌs$  ÿ$   ý  z6PosixPathTest.test_realpath_resolve_before_normalizingc CsÚz°t t¡t td¡t ttd¡t ttƒ¡Dttƒ}| t |dƒt¡| t |dƒtd¡Wdƒn1s‚0YWt  td¡t tdƒt tƒn$t  td¡t tdƒt tƒ0dS)NržÚlinkzlink/k) rr\r rTrr–rrr'rr r)rÚbaserrrÚtest_realpath_resolve_firstés 8  þ z)PosixPathTest.test_realpath_resolve_firstcCs²tjdd„}t_ztj t ¡¡d}| ttjd¡| t d¡d¡| t t  d¡¡d¡| t d¡d¡| t d¡d¡| t dd¡d |d ¡| t dd ¡d |d ¡| t dd ¡d¡| t dd¡d¡| t dd¡d¡| t dd¡d¡| t dd¡d¡| t dd¡d¡| t dd¡d¡| t dd¡d¡| t dd¡d¡| t d d ¡d¡| t d d ¡d¡W|t_n|t_0dS)NcSsdS)Nz/home/user/barrrrrrÚþr4z,PosixPathTest.test_relpath..éÿÿÿÿrr“r’z../a/bz../br”z/az../cz/a/bzb/cz../../arCz /foo/bar/batz/x/y/zz../../../foo/bar/batr+Zbatr,z foo/bar/batz../../..rz../foo/bar/batz ../../../x) rr‡r?r:Ú assertRaisesÚ ValueErrorr(rr'r)rZ real_getcwdÚcurdirrrrÚ test_relpathýs0 ÿzPosixPathTest.test_relpathcCsÖtjdd„}t_z´tj t ¡¡d}| ttjd¡| t d¡d¡| t t  d¡¡d¡| t d¡d¡| t d¡d¡| t dd¡d |d ¡| t dd ¡d |d ¡| t dd ¡d¡| t dd¡d¡| t dd¡d¡| t dd¡d¡| t dd¡d¡| t dd¡d¡| t dd¡d¡| t dd¡d¡| t dd¡d¡| t d d ¡d¡| t d d ¡d¡| t tjdd¡| t tjdd¡W|t_n|t_0dS)NcSsdS)Ns/home/user/barrrrrrr¤r4z2PosixPathTest.test_relpath_bytes..r¥r4óasa/bs../a/bs../bs../s/as../cs/a/bsb/cs../../arƒs /foo/bar/bats/x/y/zs../../../foo/bar/batr2sbatr3s foo/bar/bats../../..s/xs../foo/bar/bats ../../../xsbytesr|) rrˆr?r:r¦r§r(rr'rÚ TypeError)rZ real_getcwdbr¨rrrÚtest_relpath_bytess8 ÿ ÿz PosixPathTest.test_relpath_bytescsü‡fdd„}‡fdd„}ˆ ttjg¡|tddgƒ|tddgƒ|dgdƒ|ddgdƒ|ddgdƒ|ddgdƒ|d d gdƒ|d d gdƒ|d dgd ƒ|ddgd ƒ|ddgdƒ|ddgdƒ|ddgdƒ|ddgdƒ|dgdƒ|ddgdƒ|ddgdƒ|ddgdƒ|ddgdƒ|ddgdƒ|gd¢dƒ|gd¢dƒ|dgdƒ|dd gdƒ|tdd!gƒˆ ttjd"dg¡ˆ ttjd"d#g¡ˆ ttjd$dg¡ˆ ttjdd%g¡ˆ ttjdd&g¡ˆ ttjd'd%g¡dS)(Ncs8ˆ t |¡|¡ˆ t dd„|Dƒ¡t |¡¡dS)NcSsg|]}t |¡‘qSr©rrW©Ú.0ÚprrrÚ 8r4z@PosixPathTest.test_commonpath..check..)r'r(Ú commonpathrrW)ÚpathsZexpectedrrrÚcheck6sÿz,PosixPathTest.test_commonpath..checkcs.ˆ |tj|¡ˆ |tjdd„|Dƒ¡dS)NcSsg|]}t |¡‘qSrr­r®rrrr±=r4zFPosixPathTest.test_commonpath..check_error..)r¦r(r²)Úexcr³rrrÚ check_error:s  ÿz2PosixPathTest.test_commonpath..check_errorz/usrZusrz /usr/localz /usr/local/z /usr//localz //usr/localz /usr/./localz /./usr/localr,z/devz /usr/lib/z/usr/lib/python3z/usr/libz /usr/lib64/z /usr/lib64ZspamÚalotrúand/jamúand/spamÚandzand//jamz and/spam//z and/./jamz ./and/spam)r¸r¹r·)r¸r¹rºz spam/alotz /spam/alots /usr/lib/zusr/lib/python3susr/lib/s/usr/lib/python3susr/lib/python3zusr/lib/)r¦r§r(r²r«)rr´r¶rrrÚtest_commonpath5s\      ÿ ÿ ÿ ÿ ÿ ÿzPosixPathTest.test_commonpath),Ú__name__Ú __module__Ú __qualname__rrr*r;rBrErHrIrJrYr[r]r Z skipUnlessrrSr^ZskipIfr`rirkrmrvr‚r…rr‰rŠÚhasattrrrŒrŽr—r˜rrŸr r£r©r¬r»rrrrr$sŽ     ÿ   '  ÿ  ÿ  ÿ ' ÿ ÿ  ÿ  ÿ  ÿ rc@seZdZeZgd¢ZdS)ÚPosixCommonTest)rÚsamefileÚ sameopenfileÚsamestatN)r¼r½r¾r(Z pathmoduleZ attributesrrrrrÀlsrÀc@s°eZdZeZdd„Zdd„Zdd„Zdd„Zd d „Z d d „Z d d„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)S)*Ú PathLikeTestscCs`tj|_ttjƒ|_| tj|j¡t|jddƒ}| d¡Wdƒn1sR0YdS)NÚxbrstest_posixpath.PathLikeTests) rr!Ú file_namerÚ file_pathZ addCleanupr rQrR)rÚfilerrrrus  zPathLikeTests.setUpcCs| ||jƒ||jƒ¡dSr)r'rÇrÆ)rÚfuncrrrÚassertPathEqual|szPathLikeTests.assertPathEqualcCs| |jj¡dSr)rÊr?ÚnormcaserrrrÚtest_path_normcasesz PathLikeTests.test_path_normcasecCs| |jj¡dSr)rÊr?rGrrrrÚtest_path_isabs‚szPathLikeTests.test_path_isabscCs,| |j dtdƒd¡|j ddd¡¡dS)Nr“Úbr•)r'r?r)rrrrrÚtest_path_join…sÿzPathLikeTests.test_path_joincCs| |jj¡dSr)rÊr?r:rrrrÚtest_path_split‰szPathLikeTests.test_path_splitcCs| |jj¡dSr)rÊr?r=rrrrÚtest_path_splitextŒsz PathLikeTests.test_path_splitextcCs| |jj¡dSr)rÊr?Ú splitdriverrrrÚtest_path_splitdrivesz"PathLikeTests.test_path_splitdrivecCs| |jj¡dSr)rÊr?rrrrrÚtest_path_basename’sz PathLikeTests.test_path_basenamecCs| |jj¡dSr)rÊr?rrrrrÚtest_path_dirname•szPathLikeTests.test_path_dirnamecCs| |jj¡dSr)rÊr?rOrrrrÚtest_path_islink˜szPathLikeTests.test_path_islinkcCs| |jj¡dSr)rÊr?rPrrrrÚtest_path_lexists›szPathLikeTests.test_path_lexistscCs| |jj¡dSr)rÊr?rZrrrrÚtest_path_ismountžszPathLikeTests.test_path_ismountcCs| |jj¡dSr)rÊr?rlrrrrÚtest_path_expanduser¡sz"PathLikeTests.test_path_expandusercCs| |jj¡dSr)rÊr?Ú expandvarsrrrrÚtest_path_expandvars¤sz"PathLikeTests.test_path_expandvarscCs| |jj¡dSr)rÊr?r„rrrrÚtest_path_normpath§sz PathLikeTests.test_path_normpathcCs| |jj¡dSr)rÊr?rrrrrÚtest_path_abspathªszPathLikeTests.test_path_abspathcCs| |jj¡dSr)rÊr?rrrrrÚtest_path_realpath­sz PathLikeTests.test_path_realpathcCs| |jj¡dSr)rÊr?rrrrrÚtest_path_relpath°szPathLikeTests.test_path_relpathcCs&|j |j|jg¡}| ||j¡dSr)r?r²rÇrÆr')rZ common_pathrrrÚtest_path_commonpath³sz"PathLikeTests.test_path_commonpathN)r¼r½r¾r(r?rrÊrÌrÍrÏrÐrÑrÓrÔrÕrÖr×rØrÙrÛrÜrÝrÞrßràrrrrrÄqs*rÄÚ__main__)rr(r rrrrrrrZ test.supportrr r`Ú ImportErrorr!r rrZTestCaserZ CommonTestrÀrÄr¼ÚmainrrrrÚs,       LG