
    0hh%                    b   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SKJr  S SKJ r   S SKJ!r!  S SKJ"r"  S SKJ#r#  S SK$J%r%   S SK&r& S SK(r( S SK)r) S SK*r*\*RV                  " 5        V s/ s H  o RX                  PM     sn r- S SK/r/S S	K/J0r0J1r1   S SK3r3S S
K4J5r5  S SKJ6r6  S SK7J8r8  Sr9\:" \	S5      (       a  \	Rv                  " 5       S :H  r9\:" \S5      (       aA  \Rx                  Rz                  (       a&  \Rx                  Rz                  R}                  S5      r?OSr?\RH                  R}                  S5      =(       a    \	R                  " 5       S :H  rAS rBSS jrC\R                  " \RH                  R}                  S5      S5      rES rF " S S\R                  5      rH " S S\R                  5      rI " S S\R                  5      rJ " S S\R                  5      rKS SKJLrL   " S  S!\LR                  5      rN " S" S#\R                  5      rO\R                  " \:" \	S$5      S%5       " S& S'\O5      5       rQ " S( S)\O5      rR\R                  " \:" \	S$5      S%5       " S* S+\Q5      5       rS " S, S-\R                  5      rT\R                  " \:" \	S.5      S/5       " S0 S1\R                  5      5       rU " S2 S3\R                  5      rV\R                  " \R                  S45       " S5 S6\R                  5      5       rX " S7 S8\R                  5      rY\R                  " \:" \	S95      S:5       " S; S<\R                  5      5       rZ\R                  " S=5      S>:H  =(       d1    \R                  " S?5      S>:H  =(       d    \R                  " S@5      S>:H  r\\R                  " \\SA5      \R                  " \RH                  SB:H  SC5       " SD SE\R                  5      5       5       r]\R                  SSF j5       r_\R                  " \:" \	SG5      SH5       " SI SJ\R                  5      5       r`\R                  " \RH                  SK:H  SL5       " SM SN\R                  5      5       ra\R                  " \R                  SO5       " SP SQ\R                  5      5       rb\R                  " \:" \	SR5      SS5       " ST SU\R                  5      5       rc\R                  " \RH                  SK:H  SV5       " SW SX\R                  5      5       rd\R                  " \RH                  SK:H  SV5       " SY SZ\R                  5      5       re\R                  " \RH                  SK:H  SL5       " S[ S\\R                  5      5       rf\R                  " \RH                  SK:H  SL5       " S] S^\R                  5      5       rg\R                  " \	R                  S_:H  S`5       " Sa Sb\R                  5      5       ri\R                  " \:" \	Sc5      Sd5       " Se Sf\R                  5      5       rj\R                  " \RH                  SK:H  SL5      \ R                   " Sg Sh\R                  5      5       5       rl\R                  " \RH                  SK:H  SL5       " Si Sj\R                  5      5       rm\R                  " \RH                  SK:H  SL5       " Sk Sl\R                  5      5       rn\ R                   " Sm Sn\R                  5      5       ro " So Sp\R                  5      rp " Sq Sr\R                  5      rq\R                  " 5        " Ss St\R                  5      5       rs\R                  " 5        " Su Sv\R                  5      5       rt\R                  " Sw5      \R                  " \:" \	Sx5      Sy5       " Sz S{\R                  5      5       5       rv\R                  " \:" \	S|5      =(       a	    \:" \	S}5      S~5       " S S\R                  5      5       rw\R                  " \:" \	S5      S5       " S S\R                  5      5       ryS rz\R                  " \z" 5       S5      \R                  " SSS5       " S S\R                  5      5       5       r|\R                  " \:" \	S5      S5       " S S\R                  5      5       r}\R                  " \:" \	S5      S5      \R                  " SS5       " S S\R                  5      5       5       r~\R                  " \:" \	S5      S5      \R                  " SSS5       " S S\R                  5      5       5       r\R                  " \:" \	S5      S5      \R                  " \RH                  S:H  S5      \R                  " SSS5       " S S\R                  5      5       5       5       r " S S\R                  5      r " S S\R                  5      r\R                  " 5        " S S\R                  5      5       r\R                  " \:" \	S5      S5       " S S\R                  5      5       r " S S\R                  5      r\R                  " \:" \	S5      S5      \R                  " \GR                  S5      \R                  " \RH                  SK:H  S5       " S S\R                  5      5       5       5       r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r\GR                  " 5        " S S\R                  5      5       r\:" \	S5      (       a   " S S\5      r\S:X  a  \GR"                  " 5         gg! \' a    Sr& GN-f = f! \' a    Sr( GN7f = f! \' a    Sr) GNAf = fs  sn f ! \'\.4 a    / r- GN'f = f! \' a    Sr/\Rd                  =r0r1 GN7f = f! \' a    Sr3 GNAf = f)    N)support)import_helper)	os_helper)socket_helper)infinite_recursion)warnings_helper)win32_is_iot)INT_MAXPY_SSIZE_T_MAXassert_python_ok)
unix_shell)FakePathFgeteuidthread_infolinuxthreadsfreebsdc                 R    [         R                  " [        [        U 5      SU -  5      $ )Nzrequires os.%s)unittest
skipUnlesshasattrosnames    5/opt/python-3.13.8/usr/lib/python3.13/test/test_os.pyrequires_os_funcr   \   s"    wr402BT2IJJ    c                 t    [        U SS5       nUR                  U5        S S S 5        g ! , (       d  f       g = f)Nxbr   )openwrite)filenamecontentfps      r   create_filer%   `   s(    	ha	 B
 
!	 	 s   )
7aixz%on AIX, splice() only accepts socketsc                  0    [         R                  " S 5        g N)asyncioset_event_loop_policy r   r   tearDownModuler,   j   s    !!$'r   c                   &    \ rS rSrS rS rS rSrg)	MiscTestsn   c                 Z    [         R                  " 5       nU R                  U[        5        g r(   )r   getcwdassertIsInstancestrselfcwds     r   test_getcwdMiscTests.test_getcwdo   s    iikc3'r   c                    Sn[         R                  S:X  a  SnSnSnUSU[        U5      -
  -  -   n[        R                  " 5        n[
        R                  " U5       nUn [        R                  " 5       nU R                  Xv5        U[        U5      [        [        R                  R                  5      -   -
  nUS::  a  Oj[        U5      U:  a  US:  a  US U n[        R                  R                  XS5      n [        R                  " U5        [        R                  " U5        UnM  [&        R(                  (       a  [+        S[        U5       35        S S S 5        S S S 5        g ! [         a     MJ  [          a*  n	U	R"                  ["        R$                  :X  a   S n	A	Mw  e S n	A	ff = f! , (       d  f       NZ= f! , (       d  f       g = f)	Ni  vxworks     python_test_dir_ar   z!Tested current directory length: )sysplatformlentempfileTemporaryDirectoryr   
change_cwdr   r1   assertEqualpathsepjoinmkdirchdirFileNotFoundErrorOSErrorerrnoENAMETOOLONGr   verboseprint)
r5   min_lendirlendirnametmpdirrF   expectedr6   needexcs
             r   test_getcwd_long_pathMiscTests.test_getcwd_long_paths   ss     <<9$G$SFS\$9:;((*f%%f-))+C$$S3"c#hRWW[[1A&ABDqy7|d*tax")%4.77<<6D"   $H7 : ??=c#hZHIC . +*( -  " "99(:(::!!	"1 .- +*sa   F;BF*:,E'&0F*F;'
F'1F*4	F'=F"F*!F""F''F**
F8	4F;;
G	c                     [         R                  " 5       nU R                  U[        5        U R	                  [         R
                  " U5      [         R                  " 5       5        g r(   )r   getcwdbr2   bytesrE   fsdecoder1   r4   s     r   test_getcwdbMiscTests.test_getcwdb   s<    jjlc5)S)299;7r   r+   N)__name__
__module____qualname____firstlineno__r7   rX   r^   __static_attributes__r+   r   r   r.   r.   n   s    (7Jr8r   r.   c                      \ rS rSrS r\rS r\R                  " \	R                  S5      \R                  " \	R                  S5      S 5       5       r\	R                  S 5       rS r\	R                  \R                   " \\:  S	5      \	R&                  " \S
-   SSS9S 5       5       5       rS rS r\R                   " \R0                  S:H  S5      S 5       rS rS rS rS rS r\R                   " \" \ S5      S5      S 5       r!\R                   " \" \ S5      S5      S 5       r"\R                   " \" \ S5      S5      S 5       r#\R                   " \" \ S5      S5      S  5       r$\R                   " \" \ S5      S5      \%S! 5       5       r&\R                   " \" \ S5      S5      \%S" 5       5       r'\R                   " \" \ S5      S5      \%S# 5       5       r(S$r)g%)&	FileTests   c                     [         R                  R                  [        R                  5      (       a%  [         R
                  " [        R                  5        g g r(   )r   rF   lexistsr   TESTFNunlinkr5   s    r   setUpFileTests.setUp   s2    77??9++,,IIi&&' -r   c                 <   [         R                  " [        R                  [         R                  [         R
                  -  5      n[         R                  " U5        U R                  [         R                  " [        R                  [         R                  5      5        g r(   )
r   r    r   rj   O_CREATO_RDWRclose
assertTrueaccessW_OKr5   fs     r   test_accessFileTests.test_access   sQ    GGI$$bjj&:;
		)"2"2BGG<=r   z"Test is unstable under Emscripten.zWASI does not support dup.c                 T   [         R                  " [        R                  [         R                  [         R
                  -  5      n[         R                  " U5      n SnX!S-   :w  aS  [         R                  " U5        US-  nUS:  a  U R                  S5        U[         R                  " U5      p!X!S-   :w  a  MS  [         R                  " U5        [         R                  " XS-   5        U R                  [        [         R                  US5        g ! [         R                  " U5        f = f)Nr      
   z%couldn't allocate two consecutive fds      a)r   r    r   rj   rp   rq   duprr   skipTest
closerangeassertRaisesrL   r!   )r5   firstsecondretriess       r   test_closerangeFileTests.test_closerange   s     	(("**RYY*>? 
	GAI%1R<MM"IJ &vv AI% HHV
eQY''288UD9 HHVs   AD D'c                     [         R                  n[        R                  " U5      nU R	                  [
        [        R                  US5        [        R                  " U5      nU R                  X#5        g Nr   )	r   rj   r?   getrefcountr   	TypeErrorr   renamerE   )r5   rF   oldnews       r   test_renameFileTests.test_rename   sO    ood#)RYYa8ood#"r   c                    [        [        R                  S5       nUR                  S5        UR	                  5         UR                  5       n[        R                  " USS5        [        R                  " US5      nU R                  [        U5      [        5        U R                  US5        S S S 5        g ! , (       d  f       g = f)Nw+b   spamr      )r    r   rj   r!   flushfilenor   lseekreadrE   typer\   )r5   fobjfdss       r   	test_readFileTests.test_read   s    )""E*dJJwJJLBHHRAAAT!We,Q( +**s   BB66
Czneeds INT_MAX < PY_SSIZE_T_MAXr|   r{   F)sizememusedry_runc                 j   U R                  [        R                  [        R                  5        [	        [        R                  S5        [        [        R                  S5       n[        R                  " UR                  5       U5      nS S S 5        U R                  WS5        g ! , (       d  f       N!= f)Ns   testrb)

addCleanupr   rk   rj   r%   r    r   r   r   rE   )r5   r   r$   datas       r   test_large_readFileTests.test_large_read   sx     		(()*:*:;I$$g. )""D)R77299;-D *
 	w' *)s   #&B$$
B2c                 z   [         R                  " [        R                  [         R                  [         R
                  -  5      nU R                  [        [         R                  US5        [         R                  " US5        [         R                  " U[        S5      5        [         R                  " U[        S5      5        [         R                  " U5        [        [        R                  S5       nU R                  UR                  5       R                  5       / SQ5        S S S 5        g ! , (       d  f       g = f)Nbeanss   bacon
s   eggs
s   spam
r   )s   bacons   eggsr   )r   r    r   rj   rp   O_WRONLYr   r   r!   	bytearray
memoryviewrr   rE   r   
splitlines)r5   r   r   s      r   
test_writeFileTests.test_write   s    WWY%%rzzBKK'?@)RXXr7;
Z 
Yy)*
Z	*+
)""D)TTYY[335,. *))s   21D,,
D:c                 p    [         R                  " U[         R                  SS9nU R                  US5        g )NT)creationflagsshellr   )
subprocesscallCREATE_NEW_CONSOLErE   )r5   argsretcodes      r   write_windows_consoleFileTests.write_windows_console
  s0    //$$77	
 	!$r   win32z$test specific to the Windows consolec                     SnU R                  [        R                  SU5        U R                  [        R                  SSU5        g )Nzprint('x' * 100000)-cz-u)r   r?   
executabler5   codes     r   test_write_windows_console$FileTests.test_write_windows_console  s7     %""3>>4>""3>>4tDr   c                     [         R                  " [        R                  [         R                  5      n[         R
                  " U/UQ7SS06nUR                  5         g )Nencodingutf-8)r   r    r   rj   O_RDONLYfdopenrr   )r5   r   r   rw   s       r   fdopen_helperFileTests.fdopen_helper  s=    WWY%%r{{3IIb242'2		r   c                    [         R                  " [        R                  [         R                  [         R
                  -  5      n[         R                  " U5        U R                  5         U R                  S5        U R                  SS5        g )Nrd   )r   r    r   rj   rp   rq   rr   r   r5   r   s     r   test_fdopenFileTests.test_fdopen"  sZ    WWY%%rzz"))';<
33$r   c                 L   [         R                  S-   nU R                  [         R                  [         R                  5        U R                  [         R                  U5        [	        [         R                  S5        [	        US5        [
        R                  " [         R                  U5        U R                  [        [
        R                  [         R                  5        [        USSS9 nU R                  UR                  5       S5        S S S 5        g ! , (       d  f       g = f)Nz.2   1   2r   r   r   1)r   rj   r   rk   r%   r   replacer   rK   statr    rE   r   )r5   TESTFN2rw   s      r   test_replaceFileTests.test_replace*  s    ""T)	(()*:*:;	(('2I$$d+GT"


9##W-+RWWi6F6FG'31QQVVXs+ 211s   +!D
D#c                     [         R                  " [        [         R                  SS S9n[         R                  " U5        g )N  )rF   flagsmodedir_fd)r   r    __file__r   rr   rv   s     r   test_open_keywordsFileTests.test_open_keywords7  s(    GG5
r   c                     [         R                  " [        S5      n U" S[        R                  SS S9  g ! [
        [        4 a     g f = f)NsymlinktargetF)srcdsttarget_is_directoryr   )r   get_attributer   r   rj   NotImplementedErrorrL   )r5   r   s     r   test_symlink_keywordsFileTests.test_symlink_keywords<  sG    ''I6	i&6&6$)$8#W- 		s   5 AAcopy_file_rangeztest needs os.copy_file_range()c                     U R                  [        5         [        R                  " SSS5        S S S 5        g ! , (       d  f       g = fNr   r{   i)r   
ValueErrorr   r   rl   s    r   #test_copy_file_range_invalid_values-FileTests.test_copy_file_range_invalid_valuesD  s.    z*q!S) +**	   8
Ac                 ~   [         R                  S-   nSn[        [         R                  U5        U R                  [         R                  [         R                  5        [        [         R                  S5      nU R                  UR                  5        UR                  5       n[        US5      nU R                  [         R                  U5        U R                  UR                  5        UR                  5       n [        R                  " XFS5      nU R                  U[        SS5      5        [        US5       nU R                  UR                  5       US U 5        S S S 5        g ! , (       d  f       g = f! [         a:  nUR                  [        R                   :w  a  e U R#                  U5         S nAg S nAff = f)N.3
   0123456789r   r      r      )r   rj   r%   r   rk   r    rr   r   r   r   assertInrangerE   r   rL   rM   ENOSYSr   )	r5   r   r   in_filein_fdout_fileout_fdies	            r   test_copy_file_rangeFileTests.test_copy_file_rangeI  sA   ""T)I$$d+	(()*:*:;y''.& '	(('2'"	;""5!4A MM!U1a[)gt$  bq: %$$  	 ww%,,&MM!	s$   ;E8 :$E''
E58
F<0F77F<c                    [         R                  S-   nSnSnSnSn[        [         R                  U5        U R                  [         R                  [         R                  5        [        [         R                  S5      nU R                  UR                  5        UR                  5       n[        US5      nU R                  [         R                  U5        U R                  UR                  5        UR                  5       n	 [        R                  " XyUUUS9n
U R                  U
[        S	US
-   5      5        [        US5       nUR                  5       nS S S 5        U R                  WS U SU-  5        U R                  XS  X$XJ-    5        g ! , (       d  f       N?= f! [         a:  nUR                  [        R                   :w  a  e U R#                  U5         S nAg S nAff = f)N.4r   r      r   r   r   )
offset_src
offset_dstr   r{       )r   rj   r%   r   rk   r    rr   r   r   r   r   r   r   rE   rL   rM   r   r   )r5   TESTFN4r   bytes_to_copyin_skipout_seekr   r   r   r   r   r   r   s                r   test_copy_file_range_offset%FileTests.test_copy_file_range_offsetk  s   ""T)I$$d+	(()*:*:;y''.& '	(('2'"	6""5-.5.68A MM!U1mAo67gt$||~ % T)8_gh.>? T)_!')46 %$  	 ww%,,&MM!	s$   F F
F
G"(0GG"spliceztest needs os.splice()c                     U R                  [        5         [        R                  " SSS5        S S S 5        g ! , (       d  f       g = fr   )r   r   r   r  rl   s    r   test_splice_invalid_values$FileTests.test_splice_invalid_values  s,    z*IIaC  +**r   c                   ^^ [         R                  S-   nSn[        [         R                  U5        U R                  [         R                  [         R                  5        [        [         R                  S5      nU R                  UR                  5        UR                  5       n[        R                  " 5       u  mmU R                  U4S j5        U R                  U4S j5         [        R                  " UTS5      nU R                  U[        SS5      5        U R                  [        R                  " TS	5      US U 5        g ! [         a:  nUR                   [         R"                  :w  a  e U R%                  U5         S nAg S nAff = f)
Nr   r   r   c                  0   > [         R                  " T 5      $ r(   r   rr   read_fds   r   <lambda>'FileTests.test_splice.<locals>.<lambda>       1r   c                  0   > [         R                  " T 5      $ r(   r  write_fds   r   r  r         2r   r   r   r   r   )r   rj   r%   r   rk   r    rr   r   r   piper  r   r   rE   r   rL   rM   r   r   )	r5   r   r   r   r   r   r   r  r  s	          @@r   test_spliceFileTests.test_splice  s     ""T)I$$d+	(()*:*:;y''.& GGI1223	>		%1-A MM!U1a[)RWWWc2D!H=  	 ww%,,&MM!	s   (E 
F0FFc                 ,  ^
^ [         R                  S-   nSnSnSn[        [         R                  U5        U R                  [         R                  [         R                  5        [        [         R                  S5      nU R                  UR                  5        UR                  5       n[        R                  " 5       u  m
mU R                  U
4S j5        U R                  U4S j5         [        R                  " UTX4S9nU R                  U[        S	US
-   5      5        [        R                  " T
S5      nU R                  XXDU-    5        g ! [         a:  n	U	R                   [         R"                  :w  a  e U R%                  U	5         S n	A	g S n	A	ff = f)Nr  r   r   r  r   c                  0   > [         R                  " T 5      $ r(   r  r  s   r   r  1FileTests.test_splice_offset_in.<locals>.<lambda>  r  r   c                  0   > [         R                  " T 5      $ r(   r  r  s   r   r  r#    r  r   )r  r   r{   r   )r   rj   r%   r   rk   r    rr   r   r   r  r  r   r   r   rE   rL   rM   r   r   )r5   r  r   r	  r
  r   r   r   r   r   r  r  s             @@r   test_splice_offset_inFileTests.test_splice_offset_in  s7    ""T)I$$d+	(()*:*:;y''.& GGI1223	<		%=MA MM!U1mAo67777C(D T	#:;  	 ww%,,&MM!	s   ,E 
F0FFc                   ^^ [         R                  S-   nSnSnSn[        [         R                  U5        U R                  [         R                  [         R                  5        [
        R                  " 5       u  mmU R                  U4S j5        U R                  U4S j5        [
        R                  " TU5        [        US5      nU R                  [         R                  U5        U R                  UR                  5        UR                  5       n [
        R                  " TXcUS9nU R                  U[        S	US
-   5      5        [        US5       nUR                  5       n	S S S 5        U R                  W	S U SU-  5        U R                  XS  US U 5        g ! , (       d  f       N>= f! [          a:  n
U
R"                  ["        R$                  :w  a  e U R'                  U
5         S n
A
g S n
A
ff = f)Nr  r   r   r  c                  0   > [         R                  " T 5      $ r(   r  r  s   r   r  2FileTests.test_splice_offset_out.<locals>.<lambda>  r  r   c                  0   > [         R                  " T 5      $ r(   r  r  s   r   r  r)    r  r   r   )r  r   r{   r   r  )r   rj   r%   r   rk   r   r  r!   r    rr   r   r  r   r   r   rE   rL   rM   r   r   )r5   r  r   r	  r  r   r   r   r   r   r   r  r  s              @@r   test_splice_offset_out FileTests.test_splice_offset_out  s    ""T)I$$d+	(()*:*:;GGI1223
4 '	(('2'"	8		'6XNA MM!U1mAo67gt$||~ % T)8_gh.>? T)_d2Ah7 %$  	 ww%,,&MM!	s$   F0 F
F-0
G4:0G//G4r+   N)*r`   ra   rb   rc   rm   tearDownrx   r   skipIfr   is_emscriptenis_wasir   cpython_onlyr   r   r   r
   r   
bigmemtestr   r   r   r?   r@   r   r   r   r   r   r   r   r   r   r   r  r  requires_splice_piper  r%  r+  rd   r+   r   r   rf   rf      se   ( H>
 __C __5::* # #)  >19;Wr\!UC( D; (
.% 0?AEAE
%,
 %679Z[* \* %679Z[; \;B %679Z[*6 \*6X X.0HI! J! X.0HI>  J>> X.0HI"<  J"<H X.0HI'8  J'8r   rf   c                   n   \ rS rSrS rS rS rS rS r\	R                  " \" \S5      S5      S	 5       r\	R                  " \" \S5      S
5      S 5       r\	R                  " \R                   S:H  S5      S 5       r\	R                  " \R                   S:H  S5      \	R                  " \" \S5      S5      S 5       5       rS r\	R                  " \R                   S:H  S5      S 5       r\	R                  " \R                   S:H  S5      S 5       r\	R                  " \R                   S:H  S5      S 5       rSrg)StatAttributeTestsi  c                     [         R                  U l        U R                  [         R                  U R                  5        [        U R                  S5        g )N   ABC)r   rj   fnamer   rk   r%   rl   s    r   rm   StatAttributeTests.setUp  s5    %%
	(($**5DJJ'r   c           	      "   [         R                  " U5      nU R                  U[        R                     S5        U R                  UR                  S5        [        U5      n[        [        5       H~  nUS S S:X  d  M  UR                  5       nUR                  S5      (       a  S nOS nU R                  U" [        X%5      5      U[        [        U5         5        U R                  XS5        M     SR                  5        H;  n[        [        X$5      S-  5      n[        X$S-   5      S	-  nU R                  XxS
S9  M=      [        UR                  S-  5      nUR                  S	-  nU R                  XxS
S9   US     U R!                  S5         SUl        U R!                  S5         SUl        U R!                  S5         SUl        U R!                  S5         [         R,                  " S5      n	U R!                  S5         [         R,                  " S5      n	g ! [         a     Nf = f! ["         a     Nf = f! [         a     Nf = f! [        [(        4 a     Nf = f! [         a     Nf = f! [(         a     Nzf = f! [(         a     g f = f)Nr  ST_TIMEc                     [        U 5      $ r(   )intxs    r   trunc7StatAttributeTests.check_stat_attributes.<locals>.trunc$  s
    Q-r   c                     U $ r(   r+   r?  s    r   rA  rB  &  s    (r   zst_atime st_mtime st_ctimei _nsi'  r}   deltar<   No exception raisedr{   r|   r   r{   r}   r  r   r   r         	   r|               )r   r   rE   ST_SIZEst_sizedirlowerendswithgetattrr   splitr>  assertAlmostEqualst_birthtimest_birthtime_nsAttributeErrorfail
IndexErrorst_modest_rdevr   parrotstat_result)
r5   r8  resultmembersr   attrrA  floatynanosecondyresult2s
             r   check_stat_attributes(StatAttributeTests.check_stat_attributes  sm    	-q1+ f+IDBQx5 zz|==((/*  wv'<!="(t)<"=?d,  1668D.78F!&,75@K""6a"@ 9	A,,v56F 00E9K ""6a"@	3KII+,
	FNII+,	FNII+,	FMII+,
	nnU+GII+,
	nn%IJGO  		  		  		 	* 		  		  		  		s~   'H :H+ H; *I I! 'I1 J 
H('H(+
H87H8;
IIII!
I.-I.1
I>=I>
JJc                 :    U R                  U R                  5        g r(   )rh  r8  rl   s    r   test_stat_attributes'StatAttributeTests.test_stat_attributesa  s    ""4::.r   c                      U R                   R                  [        R                  " 5       5      nU R                  W5        g ! [         a!    U R                  SU R                   -  5         N<f = f)Nz#cannot encode %a for the filesystem)r8  encoder?   getfilesystemencodingUnicodeEncodeErrorr   rh  )r5   r8  s     r   test_stat_attributes_bytes-StatAttributeTests.test_stat_attributes_bytesd  s^    	NJJ%%c&?&?&ABE 	""5) " 	NMM?$**LM	Ns   .A (A-,A-c                    [         R                  " U R                  5      n[        [        R
                  S-   5       H  nU R                  SU 35         [        R                  " X5      nU R                  SU5        US:  a  U R                  SU5        [        R                  " U5      nU R                  X5        S S S 5        M     g ! , (       d  f       M  = f)Nr{   z	protocol s   stat_resultr   s   cos
stat_result
)r   r   r8  r   pickleHIGHEST_PROTOCOLsubTestdumpsr   loadsrE   r5   rb  protop	unpickleds        r   test_stat_result_pickle*StatAttributeTests.test_stat_result_picklek  s    $622Q67E	%12LL/na019MM"7;"LLO	  3 32 822s   A(C		
C	statvfsztest needs os.statvfs()c                    [         R                  " U R                  5      nU R                  UR                  US   5        Sn[        U5       H&  u  p4U R                  [        USU-   5      X   5        M(     U R                  [        UR                  [        5      5        U R                  [        U5      S5         SUl        U R                  S5         SUl        U R                  S5         [         R                  " S5      nU R                  S5         [         R                  " S5      ng ! [         a     Nef = f! [         a     N\f = f! [          a     NDf = f! [          a     g f = f)	Nr  )
bsizefrsizeblocksbfreebavailfilesffreefavailflagnamemaxf_r|   r{   rG  rH  rI  )r   r  r8  rE   f_bfree	enumeraterV  rs   
isinstancef_fsidr>  rA   r\  r[  r`  statvfs_resultr   )r5   rb  rc  valuememberrg  s         r   test_statvfs_attributes*StatAttributeTests.test_statvfs_attributesv  sI   DJJ' 	3:&w/MEWVTF];V]K 0 	
6==#67 	Vb)	FNII+,	FMII+,
	''.GII+,
	''(LMG%  		  		  		  		sH   <D- D= .'E E -
D:9D:=
E
	E

EE
E*)E*need os.statvfs()c                 X   [         R                  " U R                  5      n[        [        R
                  S-   5       Hj  n[        R                  " X5      nU R                  SU5        US:  a  U R                  SU5        [        R                  " U5      nU R                  X5        Ml     g )Nr{   s   statvfs_resultr   s   cos
statvfs_result
)
r   r  r8  r   rt  ru  rw  r   rx  rE   ry  s        r   test_statvfs_result_pickle-StatAttributeTests.test_statvfs_result_pickle  s~     DJJ'622Q67EV+AMM+Q/qy6:QIV/ 8r   r   Win32 specific testsc                      [         R                  " S5        g ! [         a    U R                  S5         g [         a  nU R                  S5         S nAg S nAff = f)Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)r   r   rK   r   rL   r\  r5   r   s     r   test_1686475StatAttributeTests.test_1686475  sI    	5GG&'  	=MM;< 	5II344	5s    A	AAAr  zrequires os.pipe()c                    [         R                  " 5       u  p [         R                  " U5        [         R                  " U5        [         R                  " U5        U R	                  [
        5       n[         R                  " U5        S S S 5        U R                  WR                  R                  [        R                  5        g ! [         R                  " U5        [         R                  " U5        f = f! , (       d  f       Nt= fr(   )
r   r  r   rr   r   rL   rE   	exceptionrM   EBADF)r5   r   wctxs       r   
test_15261StatAttributeTests.test_15261  s     wwy	GGAJHHQKHHQKw'3GGAJ (,,ekk:	 HHQKHHQK''s   C 0C5.C25
Dc                     U R                  [        US5      5        U R                  [        UR                  [        5      5        U R                  SUR                  s=:*  =(       a
    S:*  5        g s  5        g )Nst_file_attributesr       )rs   r   r  r  r>  )r5   rb  s     r   check_file_attributes(StatAttributeTests.check_file_attributes  sT    (<=>
6#<#<cBCV66DD*DEDEr   z$st_file_attributes is Win32 specificc                    [         R                  " U R                  5      nU R                  U5        U R	                  UR
                  [        R                  -  S5        [        R                  S-   n[         R                  " U5        U R                  [         R                  U5        [         R                  " U5      nU R                  U5        U R	                  UR
                  [        R                  -  [        R                  5        g )Nr   rS  )r   r   r8  r  rE   r  FILE_ATTRIBUTE_DIRECTORYr   rj   rI   r   rmdir)r5   rb  rS   s      r   test_file_attributes'StatAttributeTests.test_file_attributes  s     $""6*%%(E(EE	
 ""U*
'*!""6*%%(E(EE))	+r   c                    [         R                  R                  [         R                  S   U R                  S-   5      nU R                  [        R                  U5        [        US5        Sn[        R                  " SUSS/US9  [         R                  " U5      nU R                  UR                  S	5        U R                  [         R                  R                  U5      5        g )
NTEMP_accessr7  rK  z
icacls.exez/denyz*S-1-5-32-545:(S)r   r   )r   rF   rH   environr8  r   r   rk   r%   r   
check_callr   assertNotEqualrR  rs   isfile)r5   r8  DETACHED_PROCESSrb  s       r   test_access_denied%StatAttributeTests.test_access_denied  s     RZZ/i1GH	((%0E6"  5'+>?*		
 FNNA.u-.r   c                     S[         R                  R                  [         R                  " 5       5      S   -   n[         R                  " U5      nU R                  UR                  [        R                  5        g )Nz//./r   )r   rF   
splitdriver1   r   rE   r^  S_IFBLK)r5   r8  rb  s      r   test_stat_block_device)StatAttributeTests.test_stat_block_device  sM     ++BIIK8;;6r   )r8  N)r`   ra   rb   rc   rm   rh  rk  rq  r}  r   r   r   r   r  r  r?   r@   r  r  r  r  r  r  rd   r+   r   r   r5  r5    sv   (
HT/*	4 Y/1JK) L)V Y/,.	0.	0 02HI5 J5 02HIV,.BC
; D J
;F
 0?A+A+& 02HI/ J/* 02HI7 J7r   r5  c                      \ rS rSrS rS rSS jrS r\S 5       r	S r
S	 r\R                  " \R                  \R                   ;   S
5      S 5       r\R                  " \R                  \R$                  ;   S5      S 5       r\R                  " \R                  \R(                  ;   S5      S 5       rS rS rS rS rS rS rS rS r\R>                  S 5       r Sr!g)
UtimeTestsi   c                 J   [         R                  U l        [        R                  R                  U R                  S5      U l        U R                  [         R                  U R                  5        [        R                  " U R                  5        [        U R                  5        g )Nf1)r   rj   rS   r   rF   rH   r8  r   rmtreerI   r%   rl   s    r   rm   UtimeTests.setUp  s]     ''WW\\$,,5
	(($,,7
DJJr   c                     [         R                  " U5      nUR                  US   :g  =(       d+    UR                  US   :g  =(       d    UR                  US   :g  $ )NrJ  rK  rL  )r   r   st_atimest_mtimest_ctime)r5   r"   sts      r   support_subsecondUtimeTests.support_subsecond	  sQ     WWX1% *KK2a5(*KK2a5(	+r   Nc                     U(       d  U R                   nU R                  U5      nU(       a  SnSnOSnSnU" X$U45        [        R                  " U5      nU(       a=  U R	                  UR
                  US-  SS9  U R	                  UR                  US-  SS9  O>U R                  UR
                  US-  5        U R                  UR                  US-  5        U R                  UR                  U5        U R                  UR                  U5        g )Ni8Z;l   
o]     rT l    P9 &.>gư>rE  )
r8  r  r   r   rX  r  r  rE   st_atime_nsst_mtime_ns)r5   set_timer"   r  atime_nsmtime_nsr  s          r   _test_utimeUtimeTests._test_utime  s    zzH 228< "H!H !H Hh/0WWX""2;;4t"L""2;;4t"LR[[(T/:R[[(T/:22r   c                 ,    S nU R                  U5        g )Nc                 ,    [         R                  " XS9  g Nnsr   utimer"   r  s     r   r  'UtimeTests.test_utime.<locals>.set_time1      HHX%r   r  r5   r  s     r   
test_utimeUtimeTests.test_utime0  s    	& 	"r   c                     U S-  S-   $ )Nr  g&.>r+   r  s    r   	ns_to_secUtimeTests.ns_to_sec6  s    
 T	V##r   c                 4   ^  U 4S jnT R                  U5        g )Nc                    > Uu  p#TR                  U5      nTR                  U5      n[        R                  " XU45        g r(   r  r   r  r"   r  r  r  atimemtimer5   s         r   r  2UtimeTests.test_utime_by_indexed.<locals>.set_time?  s9    !#HNN8,ENN8,E HHXu~.r   r  r  s   ` r   test_utime_by_indexed UtimeTests.test_utime_by_indexed=  s    	/ 	"r   c                 4   ^  U 4S jnT R                  U5        g )Nc                 ~   > Uu  p#TR                  U5      nTR                  U5      n[        R                  " XU4S9  g )N)timesr  r  s         r   r  0UtimeTests.test_utime_by_times.<locals>.set_timeI  s7    !#HNN8,ENN8,EHHXU^4r   r  r  s   ` r   test_utime_by_timesUtimeTests.test_utime_by_timesH  s    	5 	"r   z9follow_symlinks support for utime required for this test.c                 ,    S nU R                  U5        g )Nc                 .    [         R                  " XSS9  g )NF)r  follow_symlinksr  r  s     r   r  9UtimeTests.test_utime_nofollow_symlinks.<locals>.set_timeU  s     HHXe<r   r  r  s     r   test_utime_nofollow_symlinks'UtimeTests.test_utime_nofollow_symlinksQ  s    	= 	"r   z,fd support for utime required for this test.c                 ,    S nU R                  U5        g )Nc                     [        U SS5       n[        R                  " UR                  5       US9  S S S 5        g ! , (       d  f       g = f)Nwbr   r  )r    r   r  r   )r"   r  r$   s      r   r  *UtimeTests.test_utime_fd.<locals>.set_time^  s2    ha(B , )((s	   $;
A	r  r  s     r   test_utime_fdUtimeTests.test_utime_fd[  s    	-
 	"r   z0dir_fd support for utime required for this test.c                 ,    S nU R                  U5        g )Nc                     [         R                  R                  U 5      u  p#[        R                  " U5       n[         R
                  " X4US9  S S S 5        g ! , (       d  f       g = f)N)r   r  )r   rF   rW  r   open_dir_fdr  )r"   r  rS   r   dirfds        r   r  .UtimeTests.test_utime_dir_fd.<locals>.set_timeh  s@    GGMM(3MG&&w/53 0//s   A
A%r  r  s     r   test_utime_dir_fdUtimeTests.test_utime_dir_fde  s    	4
 	"r   c                 <    S nU R                  XR                  S9  g )Nc                 ,    [         R                  " XS9  g r  r  r  s     r   r  1UtimeTests.test_utime_directory.<locals>.set_timep  r  r   )r"   )r  rS   r  s     r   test_utime_directoryUtimeTests.test_utime_directoryo  s    	& 	LL9r   c                 \   [         R                   " 5       nU" U R                  5        U R                  U R                  5      (       d  SnOSn[        R                  " U R                  5      nSUR
                  < SU< SUR
                  U-
  < 3nU R                  UR
                  UX5S9  g )Ng      ?g?zst_time=z
, current=z, dt=)rF  msg)timer8  r  r   r   r  rX  )r5   r  currentrF  r  r  s         r   _test_utime_currentUtimeTests._test_utime_currentu  s    ))+ 	%%djj11E EWWTZZ ++wg(=?r{{G%* 	 	5r   c                 4   ^  U 4S jnT R                  U5        g )Nc                 F   > [         R                  " TR                  5        g r(   r   r  r8  r"   r5   s    r   r  /UtimeTests.test_utime_current.<locals>.set_time  s    HHTZZ r   r  r  s   ` r   test_utime_currentUtimeTests.test_utime_current  s    	! 	  *r   c                 4   ^  U 4S jnT R                  U5        g )Nc                 H   > [         R                  " TR                  S 5        g r(   r  r  s    r   r  3UtimeTests.test_utime_current_old.<locals>.set_time  s    HHTZZ&r   r  r  s   ` r   test_utime_current_old!UtimeTests.test_utime_current_old  s    	' 	  *r   c                    [         R                   " 5       nSnU R                  [        5       n[        R                  " X!U45        S S S 5        U R                  WR                  R                  U5        g ! , (       d  f       N5= f)Nnonexistent)r  r   rK   r   r  rE   r  r"   )r5   nowr"   cms       r   test_utime_nonexistent!UtimeTests.test_utime_nonexistent  s[    iik 01RHHXSz* 2..9 21s   A55
Bc                 r   [         R                  S:X  a  [        R                  R	                  [        R                  R                  U5      5      S   S-   nSS KnUR                  R                  nUR                  SS5      nUR                  US SS S S U[        U5      5      nU(       a  UR                  $ g g )Nr   r   \ r   )r?   r@   r   rF   r  abspathctypeswindllkernel32create_unicode_bufferGetVolumeInformationWrA   r  )r5   rF   rootr+  r-  bufoks          r   get_file_systemUtimeTests.get_file_system  s    <<7"77%%bggood&;<Q?$FD}}--H..r37C//dA04dD03SX?B yy   #r   c                     U R                  U R                  5      S:w  a  U R                  S5        Sn[        R                  " U R
                  X45        U R                  [        R                  " U R
                  5      R                  U5        g )NNTFSzrequires NTFSr  )	r3  rS   r   r   r  r8  rE   r   r  )r5   larges     r   test_large_timeUtimeTests.test_large_time  sc     -7MM/*
e^,,55u=r   c                    U R                  [        5         [        R                  " U R                  SSS9  S S S 5        U R                  [
        5         [        R                  " U R                  SS/5        S S S 5        U R                  [
        5         [        R                  " U R                  S5        S S S 5        U R                  [
        5         [        R                  " U R                  S5        S S S 5        U R                  [
        5         [        R                  " U R                  SS/S9  S S S 5        U R                  [
        5         [        R                  " U R                  SS9  S S S 5        U R                  [
        5         [        R                  " U R                  SS9  S S S 5        [        R                  [        R                  ;  a>  U R                  [        5         [        R                  " U R                  SSS9  S S S 5        [        R                  [        R                  ;  ac  [        U R                  SS	5       nU R                  [
        5         [        R                  " UR                  5       S5        S S S 5        S S S 5        [        R                  [        R                  ;  a?  U R                  [        5         [        R                  " U R                  SS	S
9  S S S 5        g g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNr= f! , (       d  f       GNE= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNt= f! , (       d  f       GN	= f! , (       d  f       GN= f! , (       d  f       g = f)N)r   r   r  r   )r   )r   r   r   Fr  r  r   r   )r   r   r   r  r8  r   supports_follow_symlinksr   supports_fdr    r   supports_dir_fd)r5   r$   s     r   test_utime_invalid_arguments'UtimeTests.test_utime_invalid_arguments  s4   z*HHTZZF3 +y)HHTZZ!Q( *y)HHTZZ& *y)HHTZZ+ *y)HHTZZQF+ *y)HHTZZD) *y)HHTZZI. * 882666""#67VUC 8882>>)djj$*b&&y1HHRYY[&1 2 + 882---""#67VA6 87 .- +*)))))))))))) 87 21 +* 87s   !K>$L"L""L4"M M M*.!M<N &&NN !N2>
L
L"
L14
M
M
M'*
M9<
N
N	N  
N/2
O c                    S nU R                  [        5         [        R                  " U R                  U" S5      S4S9  S S S 5        U R                  [        5         [        R                  " U R                  U" S5      S4S9  S S S 5        U R                  [        5         [        R                  " U R                  U" S5      S4S9  S S S 5        g ! , (       d  f       N= f! , (       d  f       Ne= f! , (       d  f       g = f)Nc                 ,   ^   " U 4S jS5      nU" 5       $ )Nc                   "   > \ rS rSrU 4S jrSrg)?UtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadInti  c                     > T$ r(   r+   )r   divmod_ret_vals    r   
__divmod__JUtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadInt.__divmod__  s	    ))r   r+   N)r`   ra   rb   rc   rH  rd   )rG  s   r   BadIntrE    s    * *r   rJ  r+   )rG  rJ  s   ` r   get_bad_int/UtimeTests.test_issue31577.<locals>.get_bad_int  s    * * 8Or   *   r{   r  r+   )r{   r}   r  )r   r   r   r  r8  )r5   rK  s     r   test_issue31577UtimeTests.test_issue31577  s    	
 y)HHTZZ[_a$89 *y)HHTZZ[_a$89 *y)HHTZZ[%;Q$?@ *)	 *)))))s#   (C(C%#(C6
C"%
C36
D)rS   r8  r(   )"r`   ra   rb   rc   rm   r  r  r  staticmethodr  r  r  r   r   r   r  r=  r  r>  r   r?  r  r  r  r  r  r%  r3  r8  r@  r   r1  rN  rd   r+   r   r   r  r     s    +3># $ $	## R%@%@@*+#+# R^^3GI#I# R%7%77KM#M#:5,++:
!>78 A Ar   r  )mapping_testsc                      \ rS rSrSrSrS rS rS rS r	\
R                  " \=(       a    \R                  R                  \5      S5      \
R                  " \" \S	5      S
5      \R$                  " 5       S 5       5       5       r\
R                  " \=(       a    \R                  R                  \5      S5      \
R                  " \" \S	5      S
5      \R$                  " 5       S 5       5       5       rS rS rS rS r\
R                  " \R2                  S5      S 5       r\R$                  " 5       S 5       r\R8                  " SS5      S 5       rS rS rS r S r!S r"S r#S r$S r%S r&S  r'S! r(S"r)g)#EnvironTestsi  z8check that os.environ object conform to mapping protocolNc                    [        [        R                  5      U l        [        R                  (       a  [        [        R
                  5      U l        U R                  5       R                  5        H  u  pU[        R                  U'   M     g r(   )	dictr   r  _EnvironTests__savesupports_bytes_environenvironb_EnvironTests__saveb
_referenceitemsr5   keyr  s      r   rm   EnvironTests.setUp  sT    2::&$$,DL//+113JC#BJJsO 4r   c                 L   [         R                  R                  5         [         R                  R                  U R                  5        [         R
                  (       aH  [         R                  R                  5         [         R                  R                  U R                  5        g g r(   )r   r  clearupdaterV  rW  rX  rY  rl   s    r   r-  EnvironTests.tearDown  s\    





$++&$$KKKKt||, %r   c                     SSSS.$ )NVALUE1VALUE2VALUE3)KEY1KEY2KEY3r+   rl   s    r   rZ  EnvironTests._reference  s    BBr   c                 ^    [         R                  R                  5         [         R                  $ r(   )r   r  r`  rl   s    r   _empty_mappingEnvironTests._empty_mapping  s    


zzr   zrequires a shellpopenzneeds os.popen()c                 H   [         R                  R                  5         [         R                  R                  SS9  [         R                  " S[
        -  5       nUR                  5       R                  5       nU R                  US5        S S S 5        g ! , (       d  f       g = f)NWorld)HELLOz%s -c 'echo $HELLO')	r   r  r`  ra  rn  r   r   striprE   )r5   rn  r  s      r   test_update2EnvironTests.test_update2  sm    
 	




(XX+j89UJJL&&(EUG, :99s   1B
B!c                 `   [         R                  " S[        -  5       n[        U5      nU R	                  [        U5      S5        U R	                  [        U5      S5        U R	                  [        U5      S5        U R                  [        [
        U5        S S S 5        g ! , (       d  f       g = f)Nz %s -c 'echo "line1
line2
line3"'zline1
zline2
zline3
)r   rn  r   iterrE   nextr   StopIteration)r5   rn  its      r   test_os_popen_iterEnvironTests.test_os_popen_iter	  s    
 XX<"# $',eBT"Xy1T"Xy1T"Xy1mT26$ $ $s   A8B
B-c                     [         R                  R                  5        HC  u  pU R                  [	        U5      [
        5        U R                  [	        U5      [
        5        ME     g r(   )r   r  r[  rE   r   r3   )r5   r]  vals      r   test_keyvalue_types EnvironTests.test_keyvalue_types  sC    

((*HCT#Y,T#Y, +r   c                     U R                  5       R                  5        H4  u  pU R                  [        R                  R                  U5      U5        M6     g r(   )rZ  r[  rE   r   r  getr\  s      r   
test_itemsEnvironTests.test_items  s;    //+113JCRZZ^^C0%8 4r   c                     [         R                  nSR                  S UR                  5        5       5      nU R	                  [        U5      SU S35        g)z>Check that the repr() of os.environ looks like environ({...}).z, c              3   8   #    U  H  u  pU< S U< 3v   M     g7f)z: Nr+   ).0r]  r  s      r   	<genexpr>-EnvironTests.test___repr__.<locals>.<genexpr>%  s$      $
)
 gRy!)s   z	environ({z})N)r   r  rH   r[  rE   repr)r5   envformatted_itemss      r   test___repr__EnvironTests.test___repr__"  sL    jj)) $
!iik$
 
 	cj0A$EFr   c                    [         R                  R                  [         R                  5      n/ SQnS[         R                  R	                  U5      0n[         R
                  n [        U5      [         l        U R                  U[         R                  " 5       5        U R                  U[         R                  " S S95        U[         l        U R                  U[         R                  " 0 5      5        U R                  S[         R                  " SS05      5        U R                  U[         R                  " U5      5        [         R                  (       a   [        R                  " SS9   SS	S
.nS S S 5        U R                  [        [         R                  W5        U R                  [         R                  " SS05      S/5        U R                  [         R                  " SS05      S/5        U R                  [         R                  " SS05      S/5        g g ! U[         l        f = f! , (       d  f       N= f! [         a     Nf = f)N)z/montyz/pythonr)  z/flying/circusPATHr  r)  r)  T)recordr   r   )r     PATHr     abcabc)r   defpathrW  pathseprH   r  rU  assertSequenceEqualget_exec_pathrW  warningscatch_warningsr   r   BytesWarning)r5   defpath_list	test_pathtest_envsaved_environ	mixed_envs         r   test_get_exec_pathEnvironTests.test_get_exec_path+  s   zz''

3?	BJJOOI67

	'hBJ$$Y0@0@0BC$$Y0@0@T0JK&BJ 	  r/?/?/CD  (8(8&(EF  B,<,<X,FG$$K,,D9),t <I : !!*b.>.>	J $$R%5%5w6G%H$$R%5%5w6F%G$$R%5%5vv6F%G# % 'BJ :9 s7   $AH H; *H*0H; H'*
H84H; ;
IIz#os.environb required for this test.c                 |   Sn UR                  [        R                  " 5       S5      nU[
        R                  S'   U R                  [
        R                  S   U5        U R                  [
        R                  S   W5        SnU[
        R                  S'   U R                  [
        R                  S   U5        UR                  [        R                  " 5       S5      nU R                  [
        R                  S   U5        g ! [         a.    S[        R                  " 5       < 3nU R	                  U5         GNf = f)	Nu   euro€surrogateescapez%U+20AC character is not encodable to unicodes   unicode   s   bytesr\   )
rn  r?   ro  rp  r   r   r  rE   rX  decode)r5   r  value_bytesr  	value_strs        r   test_environbEnvironTests.test_environbT  s     	,,s'@'@'B'8:K !&

9I.6Z0+>  %HX.6LL!:!:!<>OP	G,i8 " 	))+.CMM#	s   %D 4D;:D;c                    SnSnSU< S3n[         R                  " 5        nUR                  US 5        [        R                  " X5        [
        R                  " [        R                  SU/S[
        R                  SS9nU R                  UR                  R                  5       [        U5      5        [        R                  " U5        [
        R                  " [        R                  SU/S[
        R                  SS9nU R                  UR                  R                  5       [        S 5      5        S S S 5        g ! , (       d  f       g = f)NPYTHONTESTVAR	testvaluez%import os; print(repr(os.environ.get(z)))r   T)checkstdouttext)r   EnvironmentVarGuardpopr   putenvr   runr?   r   PIPErE   r  rstripr  unsetenv)r5   r   r  r   r  procs         r   test_putenv_unsetenv!EnvironTests.test_putenv_unsetenvk  s    6thcB**,GGD$IId">>3>>4">d)3tEDT[[//14;?KK>>3>>4">d)3tEDT[[//14:> -,,s   DD;;
E	r|   r   c                    S HZ  nU R                  [        [        4[        R                  US5        U R                  [        [        4[        R
                  U5        M\     S HN  nU R                  [        [        R                  US5        U R                  [        [        R
                  U5        MP     [        R                  S:X  aw  SS-  nU R                  [        [        R                  US5        U R                  [        [        R                  SU5        U R                  [        [        R
                  U5        g g )	N)r)  z=namezna=mezname=r  )zname zna mer   r@     r   X)r   rL   r   r   r  r  r?   r@   )r5   r   longstrs      r   test_putenv_unsetenv_error'EnvironTests.test_putenv_unsetenv_error  s     4Dw
3RYYgNw
3R[[$G 4 )Dj"))T7Cj"++t< ) <<7" FlGj"))WcBj"))S'Bj"++w? #r   c                    SnU R                  U[        R                  5        U R                  [        5       n[        R                  U     S S S 5        U R                  WR                  R                  S   U5        U R                  UR                  R                  5        U R                  [        5       n[        R                  U	 S S S 5        U R                  UR                  R                  S   U5        U R                  UR                  R                  5        g ! , (       d  f       N= f! , (       d  f       Nn= f)N
missingkeyr   )
assertNotInr   r  r   KeyErrorassertIsr  r   rs   __suppress_context__)r5   missingr$  s      r   test_key_typeEnvironTests.test_key_type  s    "**-x(BJJw )bll''*G499:x(B

7# )bll''*G499: )(
 )(s   D 7D1 
D.1
D?c                    [        U5      nSn[        U5        S[        R                  U'    [        U5        U R	                  [        R                  U   S5        [        R                  U	 g ! [        R                  U	 f = f)N__new_key__test_environ_iteration)rv  rw  r   r  rE   )r5   
collectioniteratornew_keys       r   _test_environ_iteration$EnvironTests._test_environ_iteration  sg    
#X 7

7	$NRZZ02JK

7#

7#s   .A- -B c                 B    U R                  [        R                  5        g r(   )r  r   r  rl   s    r   (test_iter_error_when_changing_os_environ5EnvironTests.test_iter_error_when_changing_os_environ  s    $$RZZ0r   c                 ^    U R                  [        R                  R                  5       5        g r(   )r  r   r  r[  rl   s    r   .test_iter_error_when_changing_os_environ_items;EnvironTests.test_iter_error_when_changing_os_environ_items  s    $$RZZ%5%5%78r   c                 ^    U R                  [        R                  R                  5       5        g r(   )r  r   r  valuesrl   s    r   /test_iter_error_when_changing_os_environ_values<EnvironTests.test_iter_error_when_changing_os_environ_values  s    $$RZZ%6%6%89r   c                 l   [         (       a(  [        R                  R                  [         5      (       d  g [        R
                  (       d  g [        R                  " [          SU S35       nUR                  5       R                  5       nS S S 5        U R                  UW5        g ! , (       d  f       N!= f)Nz -c 'echo $')
r   r   rF   existsr   has_subprocess_supportrn  r   rr  rE   )r5   varrU   rn  r  s        r   _test_underlying_process_env)EnvironTests._test_underlying_process_env  sw    
rww~~j99//XXKuA675JJL&&(E 8 	5) 87s   +B%%
B3c                    SnSnU[         R                  U'   SSSSUS0n[        [         R                  5      nUR                  U5        [         R                  U-  nU R	                  XE5        U R                  SXQ   5        UR                  5       nU R                  [        [         R                  R                  U5      5        U R                  SS5        U R                  X5        g 	N
_TEST_VAR_original_value_A_r   _B_23r)  )r   r  rU  ra  assertDictEqualrE   r[  r  NotImplemented__or__r  r5   overridden_keyr  new_vars_dictrU   actualnew_vars_itemss          r   test_or_operatorEnvironTests.test_or_operator  s    %)%3

>"UCE

#&m+X.f45&,,.nbjj&7&7&GH))%4)).Ir   c                    SnS[         R                  U'   SSSSUS0n[        [         R                  5      nUR                  U5        [         =R                  U-  sl        U R	                  U[         R                  5        U R	                  S[         R                  U   5        U R                  SS5        U R                  US5        g )Nr  r  r  r   r  r  r  r   r  rU  ra  rE   r  )r5   r  r  rU   s       r   test_ior_operatorEnvironTests.test_ior_operator  s    %%5

>"UCE

#&


m#
2::.bjj89))%5)).#>r   c                    [         R                  R                  5       nU R                  [        5         SS0n[         =R                  U-  sl        S S S 5        U R                  [        5         SS0n[         =R                  U-  sl        S S S 5        U R                  U[         R                  5        g ! , (       d  f       Nj= f! , (       d  f       N@= f)Nr{   r  )r   r  copyr   r   rE   )r5   os_environ_copydict_with_bad_keydict_with_bad_vals       r   test_ior_operator_invalid_dicts,EnvironTests.test_ior_operator_invalid_dicts  s    **//+y)!"E
JJ++J * y)!&
JJ++J *
 	"**5 *) *)s   B6/C6
C
Cc                    SnS[         R                  U'   SSUS44n[        [         R                  5      nUR                  U5        [         =R                  U-  sl        U R	                  U[         R                  5        U R	                  S[         R                  U   5        U R                  SS5        U R                  US5        g )Nr  r  )r  r   )r  r  r  r  r   r  )r5   r  r  rU   s       r   $test_ior_operator_key_value_iterable1EnvironTests.test_ior_operator_key_value_iterable  s    %%5

>"&~s6KL

#'


n$
2::.bjj89))%5)).#>r   c                    SnSnU[         R                  U'   SSSSUS0n[        U5      nUR                  [         R                  5        U[         R                  -  nU R	                  XE5        U R                  X%U   5        UR                  5       nU R                  [        [         R                  R                  U5      5        U R                  SS5        U R                  X5        g r  )r   r  rU  ra  r  rE   r[  r  r  __ror__r  r  s          r   test_ror_operatorEnvironTests.test_ror_operator  s    %)%3

>"UCE&

#+X.)?@&,,.nbjj&8&8&HI))%4)).Ir   )__save__saveb)*r`   ra   rb   rc   __doc__	type2testrm   r-  rZ  rl  r   r   r   r   rF   r  r   r   requires_subprocessrs  rz  r~  r  r  r  rW  r  r  requires_mac_verr  r  r  r  r  r  r  r  r  r   r  r  rd   r+   r   r   rS  rS    s   BI$-C
 Bz(B+-W-/AB  "- # C-- Bz(B+-W-/AB  "7 # C-7-
9
G'R 22>@9@9*   "? #?& b!$@ %@$;$19:	*J&?6?Jr   rS  c                   n   \ rS rSrSrSrS rS rS rSS jr	S	 r
S
 rS rS rS r\R                   " \" \S5      S5      \R&                  " \R*                  S:H  S5      S 5       5       r\R                   " \" \S5      S5      \R&                  " \R*                  S:H  S5      S 5       5       rS rS rSrg)	WalkTestsi  zTests for os.walk().Fc                 d    SU;   a  UR                  S5      US'   [        R                  " U40 UD6$ Nr  followlinks)r  r   walk)r5   topkwargss      r   r  WalkTests.walk  s2    &$*JJ/@$AF=!wws%f%%r   c                 t   [         R                  R                  nU R                  [        R
                  [        R                  5        U" [        R                  S5      U l        U" U R                  S5      U l        U" U R                  S5      U l	        U" U R                  S5      nU" US5      nU" U R                  S5      U l
        U" U R                  S5      nU" US5      nU" US5      nU" US	5      U l        U" [        R                  S
5      nU" [        R                  S
S5      nU" US5      U l        U" US5      n	U" US5      n
[         R                  " U R                  5        [         R                  " U5        [         R                  " U5        [         R                  " U5        U R                  XEX4 H.  n[        USSS9 nUR                  SU-   S-   5        S S S 5        M0     [        R                   " 5       (       a  [         R"                  " [         R                  R%                  U5      U R                  5        [         R"                  " SU R                  S5        [         R"                  " U" SS5      U	S5        [         R"                  " U" SS5      U
S5        USS	// SQ4U l        OUS/S/4U l        [(        R*                  (       d  [         R,                  " US5         [         R.                  " U5        [         R,                  " U[0        R2                  5        [         R4                  " U5        [         R6                  " U5        U R&                  S   S S2	 g ! , (       d  f       GM  = f! [8         a2    U R                  [         R,                  U[0        R2                  5         g f = f)NTEST1SUB1SUB11SUB2SUB21tmp1tmp2tmp3linkTEST2tmp4broken_linkbroken_link2broken_link3r@  r   r   zI'm z" and proud of it.  Blame test_os.
brokenTtmp5)r$  r%  r&  r   r   r{   )r   rF   rH   r   r   r  rj   	walk_path	sub1_path
sub11_path	tmp1_path	link_pathbroken_link_pathmakedirsr    r!   can_symlinkr   r*  	sub2_treer   r/  chmodlistdirr   S_IRWXUrk   r  PermissionError)r5   rH   	sub2_path
sub21_path	tmp2_path	tmp3_path	tmp5_patht2_path	tmp4_pathbroken_link2_pathbroken_link3_pathrF   rw   s                r   rm   WalkTests.setUp   s   ww||	(()*:*:;& i..8dnnf5t~~w70	)W-
dnnf50	F+	V,	i0y''1))7F;	 $Y > N; N; 	DOO$
I
J
GNNI)NDdC'2a(MMN 32 O   ""JJrwww/@JJx!6!6=JJtFH-/@$GJJtGV,.?F''6):'(DN ('VH=DN$$HHZ#	&JJz" HHZ.IIi HHZ q!"1"%3 32&  	@OOBHHj$,,?	@s   
M(.M; (
M8	;9N76N7c                 f   [        U R                  U R                  5      5      nU R                  [	        U5      S5        US   S   S   S:g  nUS   S   R                  5         USSU-  -
     S   R                  5         USSU-  -
     S   R                  5         U R                  US   U R                  SS/S	/45        U R                  USU-      U R                  S
/S/45        U R                  USU-      U R                  / / 45        U R                  USSU-  -
     U R                  5        g )Nr   r   r{   r  r  r}   r  r  r  r  )	listr  r)  rE   rA   sortr*  r+  r1  r5   allflippeds      r   test_walk_topdownWalkTests.test_walk_topdowng  s&   499T^^,-S1% a&)A,&(Aq	AGOR %%'AGOQ$$&Q$..662BVH!MNQ[)DNNWIx+PQQ[)DOOR+DEQW_-t~~>r   Nc                    Uc  U R                   n/ nU R                  U5       H2  u  p4nUR                  X4U45        SU;   d  M!  UR                  S5        M4     U R	                  [        U5      S5        U R	                  US   U R                   S/S/45        US   S   R                  5         US   S   R                  5         U R	                  US   U R                  5        g )Nr  r}   r   r  r  r{   rA  )r)  r  appendremoverE   rA   rC  r1  )r5   r)  rE  r0  dirsr  s         r   test_walk_pruneWalkTests.test_walk_prunex  s    I!%9!5DJJE*+~F# "6 	S1%Q$..6(VH!EFAr
Aq	Q0r   c                 L    U R                  [        U R                  5      5        g r(   )rM  r   r)  rl   s    r   test_file_like_pathWalkTests.test_file_like_path  s    Xdnn56r   c                 \   [        U R                  U R                  SS95      nU R                  [	        U5      SU5        US   S   S   S:g  nUS   S   R                  5         USSU-  -
     S	   R                  5         USSU-  -
     S   R                  5         U R                  US   U R                  SS
/S/45        U R                  X   U R                  / / 45        U R                  XS-      U R                  S/S/45        U R                  USSU-  -
     U R                  5        g )NFtopdownr   r  r{   r   r  r}   rA  r  r  r  r  )	rB  r  r)  rE   rA   rC  r+  r*  r1  rD  s      r   test_walk_bottom_upWalkTests.test_walk_bottom_up  s1   499T^^U9;<S1c* a&)A,&(Aq	AGOR %%'AGOQ$$&Q..66*:VHE	G//2r2	4q[)..7)fX>	@QW_-	)r   c                    [         R                  " 5       (       d  U R                  S5        U R                  U R                  SS9nU H<  u  p#nX R
                  :X  d  M  U R                  U/ 5        U R                  US/5          O   U R                  S5        U R                  U R                  SS9nU R                  (       a  U R                  [        [        U5        U R                  [        [        U5        g )Nzneed symlink supportTr;  r#  z+Didn't follow symlink with followlinks=True)r   r0  r   r  r)  r-  rE   r\  r.  is_fwalkr   rK   rw  rx  )r5   walk_itr0  rL  r  s        r   test_walk_symlinkWalkTests.test_walk_symlink  s    $$&&MM01 ))DNND)A!(D~~%  r*  1	 ") IICD))D114)H==/w?-w7r   c                    / nU R                  U R                  UR                  S9n[        U5      u  p4nU R	                  U/ 5        Sn[
        R                  R                  X65      n[
        R                  R                  X6S-   5      n[
        R                  " Xx5         U V	V
Vs/ s H  u  poPM	     nn
n	nU R                  U5        U R                  X|5        U R                  X5        U H9  nX:w  d  M
  U R                  [
        R                  R                  X=5      U5        M;     [
        R                  " X5        g s  snn
n	f ! [
        R                  " X5        f = f)Nonerrorr  z.new)r  r)  rJ  rw  rE   r   rF   rH   r   rs   r  r   )r5   errorsrY  r0  rL  r  dir1path1path1newr   drw   rootsdir2s                 r   test_walk_bad_dirWalkTests.test_walk_bad_dir  s
   ))DNNFMM)B ME$T(77<<Vm4
		%"		'&-.g71QgE.OOF#U*X-<MM"'',,t":EB  IIh& / IIh&s$   !E	 'E5?E	 83E	 E	 	E!c                    U R                  S5      nU R                  (       a  U R                  [        [        U5        U R                  [
        [        U5        U R                  SSS9nU R                  (       a  U R                  [        [        U5        U R                  [
        [        U5        U R                  U R                  5      nU R                  [
        [        U5        U R                  U R                  SS9nU R                  (       a  U R                  [        [        U5        U R                  [
        [        U5        g )NnonexistingTr;  )r  rX  r   rK   rw  rx  r,  NotADirectoryError)r5   rY  s     r   test_walk_bad_dir2WalkTests.test_walk_bad_dir2  s    ))M*==/w?-w7))M4)@==/w?-w7))DNN+-w7))DNND)A==0$@-w7r   mkfifozrequires os.mkfifo()r:   z%fifo requires special path on VxWorksc                    [         R                  S-   n[        R                  " U5        U R	                  [        R
                  U5        U R                  U5      nU R                  [        [        U5        U R                  USS9nU R                  (       a  U R                  [        [        U5        U R                  [        [        U5        g )Nz-pipeTr;  )r   rj   r   rm  r   rk   r  r   rx  rw  rX  rj  )r5   rF   rY  s      r   test_walk_named_pipeWalkTests.test_walk_named_pipe  s     ')
		$		4())D/-w7))D$)7==0$@-w7r   c                    [         R                  S-   n[        R                  " U5        U R	                  [
        R                  U5        [        R                  " [        R                  R                  US5      5        / nU R                  XR                  S9n[        U5        U R                  [        [        U5        U R                  U/ 5        / nU R                  XR                  S9n[        U5      u  pEnU R                  XA5        U R                  U/ 5        U R                  US/5        UR!                  U5        UR#                  5         U R$                  (       a  U R                  [&        [        U5        U R                  [        [        U5        U R$                  (       a  U R                  U/ 5        g U R                  [)        U5      SU5        U R+                  US   [&        5        g )Nz-dirmypiper]  r{   r   )r   rj   r   rI   r   shutilr  rm  rF   rH   r  rJ  rw  r   rx  rE   extendr`  rX  rj  rA   r2   )r5   rF   r_  rY  r0  rL  r  s          r   test_walk_named_pipe2WalkTests.test_walk_named_pipe2  sh    &(
t,
		"'',,tX./))D--)8W-w7$))D--)8 ME$r"
+E==0$@-w7==VR(S[!V4!!&)-?@r   c                 *   Sn[         R                  R                  [        R                  S5      n[         R                  R                  " U/S/U-  Q76 n[         R
                  " U5        [        S5       Vs/ s H  o@R                  USS9PM     nn[        US-   5       HT  nX6(       a  S/O/ / 4nU H  nU R                  [        U5      U5        M      [         R                  R                  U5      nMV     [        S5       Vs/ s H  o@R                  USS9PM     nnUn[        US-   5       HT  nX6U:  a  S/O/ / 4nU H  nU R                  [        U5      U5        M      [         R                  R                  US5      nMV     g s  snf s  snf )	N   deeprc  r   FrS  r{   T)r   rF   rH   r   rj   r/  r   r  rE   rw  rS   )	r5   depthbaser{  jitersr   rU   ry  s	            r   test_walk_many_open_files#WalkTests.test_walk_many_open_files  sP   ww||I,,f5GGLL.#u.
A9>sDA4/Duqy!AAC52r2H  b84 "A	 " 9>c
C
14.
Cuqy!AIC52r:H  b84 Q$A	 " E Ds   9FFc                    Sn[         R                  " [         R                  R                  " U R                  /S/U-  Q76 5        [        US-
  5         [        U R                  U R                  5      5      nS S S 5        U R                  S   nW H-  u  pEnXC:X  d  M  UR                  5         UR                  5         M/     / nU R                  n[        U5       H8  n	[         R                  R                  US5      nUR                  US// 45        M:     US   S   R                  5         U R                  S/S/4U R                  / / 4/U R                  /US	.n
US   S   nU R                  US
/4/nU H  nUR                  X   5        M     U R!                  [#        U5      US-   5        U R!                  [%        U5      / S	Q5        U R!                  X+5        g ! , (       d  f       GNm= f)N2   rc  r   r   rA  r{   r  r  )r  r  rc  r  r   )r   r/  rF   rH   r)  r   rB  r  r1  rC  r   rJ  r`  r*  r+  rt  rE   rA   sorted)r5   rz  rE  r6  r0  rL  r  	d_entriesd_path_sectionsrU   rc  s                r   test_walk_above_recursion_limit)WalkTests.test_walk_above_recursion_limit#  s   
BGGLLBC55=BC	*tyy01C + NN1%	!$D 		

 "%
 	uAWW\\&#.FfseR01  	"a 
 'VH5"b) ^^$
 1vay^^TF845AOOHK(  	S519-'<='G +*s   %G
G.)r.  r-  r+  r*  r1  r,  r)  r(   )r`   ra   rb   rc   r  rX  r  rm   rG  rM  rP  rU  rZ  rf  rk  r   r   r   r   r.  r?   r@   ro  ru  r~  r  rd   r+   r   r   r  r    s    H&
E&N?"1&7)*8&'*8& X.0FG__S\\Y.;=8= H8 X.0FG__S\\Y.;=A= HA:%*&(r   r  fwalkzTest needs os.fwalk()c                   P   \ rS rSrSrSrS rS rS rS r	S r
S	 r\R                  " \R                  S
5      \R                  " \R                   S5      S 5       5       r\R                  " \R                  S
5      \R                  " \R                   S5      S 5       5       rSrSrg)
FwalkTestsiL  zTests for os.fwalk().Tc              +   R   #    U R                   " U40 UD6 H  u  p4pVX4U4v   M     g 7fr(   )r  )r5   r  r  r0  rL  r  root_fds          r   r  FwalkTests.walkQ  s.     *.**S*CF*C&Du%% +Ds   %'c                 .    [         R                  " U0 UD6$ r(   )r   r  r5   r   r  s      r   r  FwalkTests.fwalkU  s    xx(((r   c           	         UR                  5       nUR                  5       n[        R                  " SSS9 H  u  p4UR                  X4S9  UR                  X4S9  0 n[        R
                  " S0 UD6 H  u  pgn[        U5      [        U5      4XV'   M      U R                  " S0 UD6 H?  u  pgpU R                  Xe5        U R                  XV   [        U5      [        U5      45        MA     M     g)z
compare with walk() results.
TFr}   repeat)rT  r  )rT  r  Nr+   )
r  	itertoolsproductra  r   r  setr  r   rE   )
r5   walk_kwargsfwalk_kwargsrT  r  rU   r0  rL  r  rootfds
             r   _compare_to_walkFwalkTests._compare_to_walkX  s     "&&(#((*(1(9(9-PQ(R$GwLQH%'WW%;{%;!E"%d)SZ!8 &< .2ZZ-G,-G)Ed-  #d)SZ1HI .H )Sr   c                 J    S[         R                  0nU R                  X5        g )Nr  )r   rj   r  )r5   r  s     r   test_compare_to_walkFwalkTests.test_compare_to_walkj  s     ))*f-r   c                      [         R                  " S[         R                  5      nS[        R                  0nUR                  5       nXS'   U R                  X#5        [         R                  " U5        g ! [         R                  " W5        f = f)N.r  r   )r   r    r   r   rj   r  r  rr   )r5   r   r  r  s       r   test_dir_fdFwalkTests.test_dir_fdn  sf    	bkk*B )"2"23K&++-L%'"!!+<HHRLBHHRLs   AA5 5Bc           	      ~   [         R                  " SSS9 H  u  p[        R                  US 4nU R                  " USU06 Hv  u  pEpg[
        R                  " U5        [
        R                  " U5        U R                  [        [
        R                  " U5      5      [        U5      [        U5      -  5        Mx     M     g )Nr  r}   r  r  )r  r  r   rj   r  r   fstatr   rE   r  r3  )r5   rT  r  r   r0  rL  r  r  s           r   test_yields_correct_dir_fd%FwalkTests.test_yields_correct_dir_fdx  s    (1(9(9-PQ(R$G##Wd2D-1ZZ-_-_)E   RZZ%7!8#d)c%j:PQ .` )Sr   zCannot dup stdout on Emscriptenz,dup return value is unpredictable on Androidc                 Z   [         R                  " S5      n[         R                  " U5        [        S5       H)  nU R	                  [
        R                  5       H  nM     M+     [         R                  " S5      nU R                  [         R                  U5        U R                  XA5        g )Nr{      )	r   r   rr   r   r  r   rj   r   rE   )r5   minfdr   r@  newfds        r   test_fd_leakFwalkTests.test_fd_leak  su     q	
sAZZ	 0 01 2  q	%(&r   c                 &   S nS H  nU" 5       nU R                  [        R                  US9nU R                  U" 5       U5        [	        U5        U R                  U" 5       U5        UR                  5         U R                  U" 5       U5        M     g )Nc                  ^    [         R                  " S5      n [         R                  " U 5        U $ Nr{   )r   r   rr   )r   s    r   getfd.FwalkTests.test_fd_finalization.<locals>.getfd  s    BHHRLIr   FTrS  )r  r   rj   rE   rw  assertGreaterrr   )r5   r  rT  old_fdry  s        r   test_fd_finalizationFwalkTests.test_fd_finalization  sx    	 %GWFI,,g>BUWf-Huw/HHJUWf- %r   Nr+   )r`   ra   rb   rc   r  rX  r  r  r  r  r  r  r   r.  r   r/  
is_androidr  r  r~  rd   r+   r   r   r  r  L  s    H&)J$.
R __@ __J'' __@ __J..  !%r   r  c                       \ rS rSrSrS rSrg)BytesWalkTestsi  Tests for os.walk() with bytes.c              +     #    SU;   a  UR                  S5      US'   [        R                  " [        R                  " U5      40 UD6 H  u  p4n[        R                  " U5      n[        [        [        R                  U5      5      n[        [        [        R                  U5      5      nXgU4v   [        [        [        R                  U5      5      US S & [        [        [        R                  U5      5      US S & M     g 7fr  )r  r   r  fsencoder]   rB  map)	r5   r  r  brootbdirsbfilesr0  rL  r  s	            r   r  BytesWalkTests.walk  s     &$*JJ/@$AF=!$&GGBKK,<$G$G E&;;u%DBKK/0DR[[&12Eu%%CT23E!HSe45F1I %Hs   C?Dr+   N)r`   ra   rb   rc   r  r  rd   r+   r   r   r  r    s
    )	6r   r  c                   "    \ rS rSrSrSS jrSrg)BytesFwalkTestsi  r  c              /     #    [         R                  " [         R                  " U5      /UQ70 UD6 H  u  pEpg[         R                  " U5      n[	        [        [         R                  U5      5      n	[	        [        [         R                  U5      5      n
XX4v   [	        [        [         R                  U	5      5      US S & [	        [        [         R                  U
5      5      US S & M     g 7fr(   )r   r  r  r]   rB  r  )r5   r  r   r  r  r  r  topfdr0  rL  r  s              r   r  BytesFwalkTests.fwalk  s     +-88BKK4D+Vt+Vv+V'E&;;u%DBKK/0DR[[&12Eu,,CT23E!HSe45F1I ,Ws   C(C*r+   N)r  )r`   ra   rb   rc   r  r  rd   r+   r   r   r  r    s
    )6r   r  c                      \ rS rSrS rS r\R                  " \R                  =(       d    \R                  S5      S 5       r\R                  " \R                  =(       d    \R                  S5      S 5       r\R                  " \R                  =(       d    \R                  S5      S 5       rS r\R                  " \R"                  S	:H  S
5      S 5       rS rSrg)MakedirTestsi  c                 L    [         R                  " [        R                  5        g r(   r   rI   r   rj   rl   s    r   rm   MakedirTests.setUp  s    
!!"r   c           
         [         R                  n[        R                  R	                  USSS5      n[        R
                  " U5        [        R                  R	                  USSSS5      n[        R
                  " U5        U R                  [        [        R
                  [        R                  5        [        R                  R	                  USSSSS[        R                  5      n[        R
                  " U5        [        R                  R	                  US[        R                  SSSSS5      n[        R
                  " U5        g Nr`  re  dir3dir4dir5dir6)	r   rj   r   rF   rH   r/  r   rL   curdir)r5   r{  rF   s      r   test_makedirMakedirTests.test_makedir  s    ww||D&&&9
Dww||D&&&&A
D 	'2;;		:ww||D&&&&&"))T
Dww||D&"))VVV"F,
Dr   z$Emscripten's/WASI's umask is a stub.c                    [         R                  " S5         [         R                  n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  " US5        U R                  [        R                  R                  U5      5        U R                  [        R                  R                  U5      5        [        R                  S:w  af  U R                  [        R                  " U5      R                  S-  S5        U R                  [        R                  " U5      R                  S-  S5        S S S 5        g ! , (       d  f       g = f)Nr}   r`  re  im  ntr   i  )r   
temp_umaskrj   r   rF   rH   r/  rs   r  isdirr   rE   r   r^  )r5   r{  parentrF   s       r   	test_modeMakedirTests.test_mode  s    
 !!%(##DWW\\$/F77<</DKKe$OOBGGNN401OOBGGMM$/0ww$  !6!6!>F  !8!85!@%H )((s   D>E
E,c                 4   [         R                  R                  [        R                  S5      nSn[         R
                  " S5      n[         R                  " X5        U R                  [        [         R                  X5        U R                  [        [         R                  XSS9  [         R                  " USSS9  [         R                  " XSS9  [         R
                  " U5        [         R                  " [         R                  R                  S	5      SS9  g )
Nr`  r      Fexist_oki  T)r   r  /)
r   rF   rH   r   rj   umaskr/  r   rL   r*  )r5   rF   r   old_masks       r    test_exist_ok_existing_directory-MakedirTests.test_exist_ok_existing_directory  s    
 ww||I,,f588E?
D'2;;;'2;;UK
D%$/
Dd3
 	BGGOOC(48r   c                    [         R                  R                  [        R                  S5      n[
        R                  nSn[         R                  " S5      n [
        R                  " [         R                  " [        R                  5      R                  5      n [         R                  " [        R                  XR-  5        [         R                  " [        R                  5      R                  U-  U:w  a  [        R                  " S5      e[         R                  " XU-  5        [         R                  " XSS9  [         R                  " U[
        R                  " [         R                  " U5      R                  5      U) -  5        [         R                  " XU-  SS9  [         R                  " U5        g ! [         a    [        R                  " S5      ef = f! [         R                  " U5        f = f)Nr`  r   r  zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.Tr  )r   rF   rH   r   rj   r   S_ISGIDr  S_IMODElstatr^  r2  r5  r   SkipTestr/  )r5   rF   r  r   r  existing_testfn_modes         r   test_exist_ok_s_isgid_directory,MakedirTests.test_exist_ok_s_isgid_directory  sY   
 ww||I,,f5,,88E?	#'<<HHY--.66$8 G))+?+IJ ))*22W<G''(JKK KKWn- KKT2HHT4<<(>(>?7(JKKKWnt<HHX # G''(EFFG HHXs&   AG 'F7 CG 7!GG G3c                    [         R                  n[        R                  R	                  [         R                  S5      n[        USSS9 nUR                  S5        S S S 5        U R                  [        [        R                  U5        U R                  [        [        R                  USS9  U R                  [        [        R                  USS9  [        R                  " U5        g ! , (       d  f       N= f)	Nr`  r  r   r   r  Fr  T)r   rj   r   rF   rH   r    r!   r   rL   r/  rK  )r5   r{  rF   rw   s       r   #test_exist_ok_existing_regular_file0MakedirTests.test_exist_ok_existing_regular_file  s    ww||I,,f5$g.!GGEN /'2;;5'2;;uE'2;;tD
		$ /.s   
C((
C6r  zrequires Windowsc                    [         R                  n[        R                  R	                  [        R                  R                  [         R                  S5      5      n[        R                  " USS9  [        R                  " SUS/SS9n[        R                  " U5        UR                  5       R                  SS	5      S	   nU R                  US
5        g )NrS  i  )r   z	cacls.exez/soemr    r{   z5"D:P(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;OW)")r   rj   r   rF   r*  rH   rI   r   check_outputr  rr  rsplitrE   )r5   r{  rF   outs       r   test_win32_mkdir_700!MakedirTests.test_win32_mkdir_700(  s    wwrww||I,<,<eDE
E"%%{D$&?%P
iik  a(+C	
r   c           	         [         R                  R                  [        R                  SSSSSS5      n[         R                  R                  U5      (       dm  U[        R                  :w  aY  [         R                  R                  U5      n[         R                  R                  U5      (       d  U[        R                  :w  a  MY  [         R                  " U5        g r  )r   rF   rH   r   rj   r  rS   
removedirsr5   rF   s     r   r-  MakedirTests.tearDown5  s    ww||I,,fff"FF4
 ''..&&493C3C+C77??4(D ''..&&493C3C+C 	dr   r+   N)r`   ra   rb   rc   rm   r  r   r.  r   r/  r0  r  r  r  r  r   r   r   r  r-  rd   r+   r   r   r  r    s    # __0.
I	
I __0.9	9 __0.	6 D*<=

 >

	r   r  chownzrequires os.chown()c                   0   \ rS rSr\S 5       rS r\R                  " \	" \
S5      S5      S 5       r\R                  " \=(       a    \" \5      S:  S5      S	 5       r\R                  " \(       + =(       a    \" \5      S:  S
5      S 5       r\S 5       rSrg)ChownFileTestsiA  c                 L    [         R                  " [        R                  5        g r(   r  clss    r   
setUpClassChownFileTests.setUpClassD      
!!"r   c                    [         R                  " [        R                  5      nUR                  nUR
                  nSS[        R                  " S5      [        R                  " SS5      4 Hk  nU R                  [        [         R                  [        R                  XC5        U R                  [        [         R                  [        R                  X$5        Mm     U R                  [         R                  " [        R                  X#5      5        U R                  [         R                  " [        R                  SS5      5        g )Ng      y             rA  r}   )r   r   r   rj   st_uidst_giddecimalDecimal	fractionsFractionr   r   r  assertIsNone)r5   r   uidgidr  s        r   *test_chown_uid_gid_arguments_must_be_index9ChownFileTests.test_chown_uid_gid_arguments_must_be_indexH  s    wwy''(kkkkC!4i6H6HQ6OPEi93C3CUPi93C3CSP Q 	"((9#3#3S>?"((9#3#3R<=r   	getgroupszneed os.getgroupsc                 h   [         R                  " 5       n[        U5      S:  a  U R                  S5        US S u  p#[         R                  " [
        R                  5      R                  n[         R                  " [
        R                  XB5        [         R                  " [
        R                  5      R                  nU R                  XR5        [         R                  " [
        R                  XC5        [         R                  " [
        R                  5      R                  nU R                  XS5        g )Nr}   ztest needs at least 2 groups)r   r  rA   r   r   r   rj   r	  r  r
  rE   )r5   groupsgid_1gid_2r  r  s         r   test_chown_gidChownFileTests.test_chown_gidR  s    v;?MM89bqzggi&&'..
!!3.ggi&&'..$
!!3.ggi&&'..$r   r{   z0test needs root privilege and more than one userc                    [         S S u  p[        R                  " [        R                  5      R
                  n[        R                  " [        R                  X5        [        R                  " [        R                  5      R                  nU R                  XA5        [        R                  " [        R                  X#5        [        R                  " [        R                  5      R                  nU R                  XB5        g Nr}   )		all_usersr   r   r   rj   r
  r  r	  rE   )r5   uid_1uid_2r  r  s        r   test_chown_with_root#ChownFileTests.test_chown_with_rootc  s     !!}ggi&&'..
!!5.ggi&&'..$
!!5.ggi&&'..$r   z2test needs non-root account and more than one userc                 h   [         S S u  p[        R                  " [        R                  5      R
                  nU R                  [        5         [        R                  " [        R                  X5        [        R                  " [        R                  X#5        S S S 5        g ! , (       d  f       g = fr  )	r  r   r   r   rj   r
  r   r5  r  )r5   r  r  r  s       r   test_chown_without_permission,ChownFileTests.test_chown_without_permissiono  sm     !!}ggi&&'../HHY%%u2HHY%%u2 0//s   AB##
B1c                 L    [         R                  " [        R                  5        g r(   )r   r  r   rj   r  s    r   tearDownClassChownFileTests.tearDownClassx  r  r   r+   N)r`   ra   rb   rc   classmethodr  r  r   r   r   r   r  root_in_posixrA   r  r   r#  r&  rd   r+   r   r   r   r   A  s     # #> [13FG% H%  =3y>A+=KM%M% ]*As9~/AMO3O3 # #r   r   c                   2    \ rS rSrS rS rS rS rS rSr	g)	RemoveDirsTestsi}  c                 L    [         R                  " [        R                  5        g r(   )r   r/  r   rj   rl   s    r   rm   RemoveDirsTests.setUp~  s    
I$$%r   c                 L    [         R                  " [         R                  5        g r(   )r   r  rj   rl   s    r   r-  RemoveDirsTests.tearDown  s    ))*r   c                 T   [         R                  R                  [        R                  S5      n[         R
                  " U5        [         R                  R                  US5      n[         R
                  " U5        [         R                  " U5        U R                  [         R                  R                  U5      5        U R                  [         R                  R                  U5      5        U R                  [         R                  R                  [        R                  5      5        g )Ndiradirb)	r   rF   rH   r   rj   rI   r  assertFalser  r5   r1  r2  s      r   test_remove_allRemoveDirsTests.test_remove_all  s    ww||I,,f5
ww||D&)

d-.-.	(8(89:r   c                    [         R                  R                  [        R                  S5      n[         R
                  " U5        [         R                  R                  US5      n[         R
                  " U5        [        [         R                  R                  US5      5        [         R                  " U5        U R                  [         R                  R                  U5      5        U R                  [         R                  R                  U5      5        U R                  [         R                  R                  [        R                  5      5        g Nr1  r2  file.txt)r   rF   rH   r   rj   rI   r%   r  r3  r  rs   r4  s      r   test_remove_partial#RemoveDirsTests.test_remove_partial  s    ww||I,,f5
ww||D&)
BGGLLz23
d-.t,-y'7'789r   c                    [         R                  R                  [        R                  S5      n[         R
                  " U5        [         R                  R                  US5      n[         R
                  " U5        [        [         R                  R                  US5      5        U R                  [        5         [         R                  " U5        S S S 5        U R                  [         R                  R                  U5      5        U R                  [         R                  R                  U5      5        U R                  [         R                  R                  [        R                  5      5        g ! , (       d  f       N= fr8  )r   rF   rH   r   rj   rI   r%   r   rL   r  rs   r  r4  s      r   test_remove_nothing#RemoveDirsTests.test_remove_nothing  s    ww||I,,f5
ww||D&)
BGGLLz23w'MM$ (t,-t,-y'7'789	 ('s   9E11
E?r+   N)
r`   ra   rb   rc   rm   r-  r5  r:  r=  rd   r+   r   r   r+  r+  }  s    &+;	:
:r   r+  zWASI has no /dev/nullc                       \ rS rSrS rSrg)DevNullTestsi  c                 X   [        [        R                  SS5       nUR                  S5        UR	                  5         S S S 5        [        [        R                  S5       nU R                  UR                  5       S5        S S S 5        g ! , (       d  f       NR= f! , (       d  f       g = f)Nr  r      hellor   r   )r    r   devnullr!   rr   rE   r   rv   s     r   test_devnullDevNullTests.test_devnull  sp    "**dA&!GGHGGI ' "**d#qQVVXs+ $# '& $#s   "B
 !B

B
B)r+   N)r`   ra   rb   rc   rD  rd   r+   r   r   r@  r@    s    ,r   r@  c                   ,    \ rS rSrS rS rS rS rSrg)URandomTestsi  c                    U R                  [        [        R                  " S5      5      S5        U R                  [        [        R                  " S5      5      S5        U R                  [        [        R                  " S5      5      S5        U R                  [        [        R                  " S5      5      S5        U R                  [        [        R                  " S5      5      S5        g )Nr   r{   r|   r   r;   )rE   rA   r   urandomrl   s    r   test_urandom_length URandomTests.test_urandom_length  s    RZZ]+Q/RZZ]+Q/RZZ^,b1RZZ_-s3RZZ-.5r   c                     [         R                  " S5      nU R                  U[        5        [         R                  " S5      nU R	                  X5        g N   )r   rI  r2   r\   r  r5   data1data2s      r   test_urandom_valueURandomTests.test_urandom_value  s:    

2eU+

2E)r   c                     SR                  SSU-  SS45      n[        SU5      nUS   nU R                  [        U5      U5        U$ )N
zimport os, syszdata = os.urandom(%s)zsys.stdout.buffer.write(data)zsys.stdout.buffer.flush()r   r{   )rH   r   rE   rA   )r5   countr   r  r  s        r   get_urandom_subprocess#URandomTests.get_urandom_subprocess  sV    yy#e++'	) *
 tT*QVe,r   c                 j    U R                  S5      nU R                  S5      nU R                  X5        g rM  )rW  r  rO  s      r   test_urandom_subprocess$URandomTests.test_urandom_subprocess  s0    ++B/++B/E)r   r+   N)	r`   ra   rb   rc   rJ  rR  rW  rZ  rd   r+   r   r   rG  rG    s    6*	*r   rG  	getrandomzneed os.getrandom()c                   B    \ rS rSr\S 5       rS rS rS rS r	S r
Srg	)
GetRandomTestsi  c                      [         R                  " S5        g ! [         a:  nUR                  [        R                  :X  a  [
        R                  " S5      ee S nAff = f)Nr{   z%getrandom() syscall fails with ENOSYS)r   r\  rL   rM   r   r   r  )r  rW   s     r   r  GetRandomTests.setUpClass  sI    	LLO 	yyELL( ''(OPP	s    
A5AAc                     [         R                  " S5      nU R                  U[        5        U R	                  [        U5      S5        g rM  )r   r\  r2   r\   rE   rA   )r5   r   s     r   test_getrandom_type"GetRandomTests.test_getrandom_type  s4    ||BdE*TB'r   c                 T    [         R                  " S5      nU R                  US5        g )Nr   r   )r   r\  rE   )r5   emptys     r   test_getrandom0GetRandomTests.test_getrandom0  s    Q$r   c                 B    U R                  [        [        S5      5        g )NGRND_RANDOM)rs   r   r   rl   s    r   test_getrandom_random$GetRandomTests.test_getrandom_random  s    M23r   c                 p     [         R                  " S[         R                  5        g ! [         a     g f = fr  )r   r\  GRND_NONBLOCKBlockingIOErrorrl   s    r   test_getrandom_nonblock&GetRandomTests.test_getrandom_nonblock  s-    	LLB,,- 		s   %( 
55c                 ~    [         R                  " S5      n[         R                  " S5      nU R                  X5        g rM  )r   r\  r  rO  s      r   test_getrandom_value#GetRandomTests.test_getrandom_value  s,    R R E)r   r+   N)r`   ra   rb   rc   r(  r  rb  rf  rj  ro  rr  rd   r+   r   r   r^  r^    s-    	 	(
%4*r   r^  HAVE_GETENTROPYr{   HAVE_GETRANDOMHAVE_GETRANDOM_SYSCALLz*os.random() does not use a file descriptorr:   z$VxWorks can't set RLIMIT_NOFILE to 1c                   R    \ rS rSr\R
                  " \S5      S 5       rS rS r	Sr
g)URandomFDTestsi  z!test requires the resource modulec                      Sn[        SU5        g )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   r   r   s     r   test_urandom_failure#URandomFDTests.test_urandom_failure  s     	t$r   c                 &    Sn[        SU5      u  p#ng )Na  if 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   )r5   r   rcr  errs        r   test_urandom_fd_closed%URandomFDTests.test_urandom_fd_closed  s     (t4r   c                    U R                  [        R                  [        R                  5        [	        [        R                  S5        SR                  [        R                  S9n[        SU5      u  p#nU R                  [        U5      S5        U R                  USS USS 5        [        SU5      u  p%nU R                  [        U5      S5        U R                  XS5        g )Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa  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))
            )rj   r}  rK  r   r   )
r   r   rk   rj   r%   formatr   rE   rA   r  )r5   r   r~  r  r  out2err2s          r   test_urandom_fd_reopened'URandomFDTests.test_urandom_fd_reopened+  s     		(()*:*:;I$$j10 i../1 	2 (t4S1%C!Hc!Ah/)%6$TA&D&r   r+   N)r`   ra   rb   rc   r   r   resourcerz  r  r  rd   r+   r   r   rx  rx    s/    
 #FG% H%,5$'r   rx  c              #   j  ^#    / mU4S jnU4S jn [         R                  n[         R                  n[         R                  nU[         l        U[         l        U b  U [         l        Tv   U[         l        U[         l        U[         l        g! W[         l        W[         l        W[         l        f = f7f)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.
c                 @   > TR                  SX45        [        S5      e)Nexecvzexecv called)rJ  RuntimeErrorr   r   callss     r   
mock_execv#_execvpe_mockup.<locals>.mock_execv]  s    gt*+>**r   c                 ^   > TR                  SX45        [        [        R                  S5      e)Nexecvezexecve called)rJ  rL   rM   ENOTDIRr  s     r   mock_execve$_execvpe_mockup.<locals>.mock_execvea  s%    h+,emm_55r   N)r   r  r  r  )r  r  r  
orig_execvorig_execveorig_defpathr  s         @r   _execvpe_mockupr  R  s      E+6"XX
iizz	 BJ	!
 	!
s   B3AB +"B3#B00B3r  zneed os.execv()c                       \ rS rSr\R
                  " \S5      S 5       rS rS r	\R                  " \" \S5      S5      S 5       rS	 rS
 r\R                  " \R"                  S:H  S5      S 5       rSrg)	ExecTestsis  z4avoid triggering a linuxthreads bug: see issue #4970c                 T    U R                  [        [        R                  SS/S 5        g )Nzno such app-)r   rL   r   execvperl   s    r   test_execvpe_with_bad_program'ExecTests.test_execvpe_with_bad_programv  s$     	'2::~)*D	2r   c                 6   U R                  [        [        R                  SS5        U R                  [        [        R                  S/ 5        U R                  [        [        R                  SS5        U R                  [        [        R                  SS/5        g )Nnotepadr+   r  r)  )r   r   r   r  rl   s    r   test_execv_with_bad_arglist%ExecTests.test_execv_with_bad_arglist|  sd    *bhh	2>*bhh	2>*bhh	5A*bhh	B4@r   c                     U R                  [        [        R                  S/ S 5        U R                  [        [        R                  S/ 0 5        U R                  [        [        R                  SS/0 5        g )Nr  r)  )r   r   r   r  rl   s    r   test_execvpe_with_bad_arglist'ExecTests.test_execvpe_with_bad_arglist  sR    *bjj)RF*bjj)RD*bjj)bT2Fr   _execvpez)No internal os._execvpe function to test.c           	         [         R                  S-   nU[        L a=  Sn[         R                  R	                  [         R
                  " U5      U5      nUn/ SQnORSn/ SQn[         R                  R	                  X#5      n[         R                  S:w  a  [         R
                  " U5      nOUnSS0n[        5        nU R                  [        [         R                  XF5        U R                  [        U5      S	5        U R                  US
   SXF445        S S S 5        [        US9 nU R                  [        [         R                  X6US9  U R                  [        U5      S	5        U R                  US
   SXVU445        S S S 5        [        5        nUR                  5       n	U[        L a  X)S'   OX)S'   U R                  [        [         R                  X6U	S9  U R                  [        U5      S	5        U R                  US
   SXVU	445        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)Nabsolutepaths
   executable)s   prognamearg1arg2r   )prognamer  r  r  spamr   r{   r   r  )r  r  r  r  r  )r   rG   r\   rF   rH   r  r   r  r   r  r  rE   rA   rL   r  r  )
r5   	test_typeprogram_pathprogramfullpathnative_fullpath	argumentsr  r  env_paths
             r   _test_internal_execvpe ExecTests._test_internal_execvpe  s    vv.#Gww||BKK$=wGH&O5I"G4Iww||L:Hww$"$++h"7"*w %lX2SZ+U1X<'HI	  \2egWS  :SZ+$$U1X?,<=?	 3 %xxzHE!$0!#/ gWX  ?SZ+$$U1X?,ABD #  32 s'   :AH$AH%A;H6
H"%
H36
Ic                     U R                  [        5        [        R                  S:w  a  U R                  [        5        g g )Nr  )r  r3   r   r   r\   rl   s    r   test_internal_execvpe_str#ExecTests.test_internal_execvpe_str  s.    ##C(77d?''. r   c                    [         R                  SS/n[        R                  R	                  5       nSUS'   U R                  [        5         [        R                  " US   X5        S S S 5        [        R                  R	                  5       nSUS'   U R                  [        5         [        R                  " US   X5        S S S 5        [        R                  R	                  5       nSUS	'   U R                  [        5         [        R                  " US   X5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N{= f! , (       d  f       g = f)
Nr   passcabbageFRUIT VEGETABLEr   orange VEGETABLE=cabbageFRUITlemonFRUIT=ORANGE)r?   r   r   r  r  r   r   r  )r5   r   newenvs      r   test_execve_invalid_env!ExecTests.test_execve_invalid_env  s    f- "%.!"z*IId1gt, + "5wz*IId1gt, + "!(~z*IId1gt, +* +* +* +*s$   D&'D7E&
D47
E
Er   zWin32-specific testc                      [         R                  " SS/0 5        U R                  S5        g ! [         a=  nU R	                  UR
                  S L =(       d    UR
                  S:g  5         S nAg S nAff = f)Nr)  argzNo OSError raisedr   )r   r  r\  rL   rs   winerrorr  s     r   test_execve_with_empty_path%ExecTests.test_execve_with_empty_path  sa    	+IIb5'2& II)*  	COOAJJ$.A!**/BB	Cs   - 
A43A//A4r+   N)r`   ra   rb   rc   r   r.  USING_LINUXTHREADSr  r  r  r   r   r   r  r  r  r?   r@   r  rd   r+   r   r   r  r  s  s     __'KM2M2AG
 Z0DF-DF-D^/
-* 02GH+ I+r   r  r   r  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)Win32ErrorTestsi  c                 ,    [         R                  " [        R                  5        U R	                  S[        R                  -  5        g ! [
         a    Sn g [         a3  nSnU R	                  S[        R                  < SU< 35         S nAg S nAff = f)Nzfile %s must not existFTzfile z% must not exist; os.stat failed with )r   r   r   rj   r\  rK   rL   )r5   r  rW   s      r   rm   Win32ErrorTests.setUp  sy    		CGGI$$% II.1A1AAB ! 	F 	1FII"))30 1 1	1s   $A	 	B	B )BBc                     U R                  [        [        R                  [        R
                  [        R
                  S-   5        g )Nz.bak)r   rL   r   r   r   rj   rl   s    r   r   Win32ErrorTests.test_rename  s,    '299i.>.>	@P@PQW@WXr   c                 j    U R                  [        [        R                  [        R
                  5        g r(   )r   rL   r   rK  r   rj   rl   s    r   test_removeWin32ErrorTests.test_remove  s    '299i.>.>?r   c                 j    U R                  [        [        R                  [        R
                  5        g r(   )r   rL   r   rJ   r   rj   rl   s    r   
test_chdirWin32ErrorTests.test_chdir  s    '288Y-=-=>r   c                 .   U R                  [        R                  [        R                  5        [	        [        R                  S5       nU R                  [        [        R                  [        R                  5        S S S 5        g ! , (       d  f       g = f)Nr@  )	r   r   rk   rj   r    r   rL   r   rI   rv   s     r   
test_mkdirWin32ErrorTests.test_mkdir  sV    	(()*:*:;)""C(Agrxx1A1AB )((s   	4B
Bc                 l    U R                  [        [        R                  [        R
                  S 5        g r(   )r   rL   r   r  r   rj   rl   s    r   r  Win32ErrorTests.test_utime  s     '288Y-=-=tDr   c                 l    U R                  [        [        R                  [        R
                  S5        g r   )r   rL   r   r2  r   rj   rl   s    r   
test_chmodWin32ErrorTests.test_chmod  s     '288Y-=-=qAr   r+   N)r`   ra   rb   rc   rm   r   r  r  r  r  r  rd   r+   r   r   r  r    s+    
CY@?CEBr   r  z!Cannot create invalid FD on WASI.c                      \ rS rSr/ SQr1 SkrS r\ H  r\" \5      \" 5       S\-   '   M     S r	S r
S r\R                  " \" \S	5      S
5      S 5       r\R                  " \" \S5      S5      S 5       r\R                  " \" \S5      S5      S 5       r\R                  " \" \S5      S5      \R&                  " \R*                  S5      S 5       5       r\R                  " \" \S5      S5      S 5       r\R                  " \" \S5      S5      S 5       r\R                  " \" \S5      S5      \R&                  " \R*                  =(       d    \R2                  S5      S 5       5       r\R                  " \" \S5      S5      S  5       r\R                  " \" \S!5      S"5      S# 5       r\R                  " \" \S$5      S%5      S& 5       r\R                  " \" \S'5      S(5      S) 5       r\R                  " \" \S*5      S+5      S, 5       r\R                  " \" \S-5      S.5      S/ 5       r \R                  " \" \S05      S15      S2 5       r!\RD                  " 5       S3 5       r#\R                  " \" \S45      S55      S6 5       r$S7r%g8)9TestInvalidFDi	  )fchdirr   	fdatasyncr  fstatvfsfsync	tcgetpgrpttyname>   r  r  r  c                    ^  U 4S jnU$ )Nc                    > [        [        T5      (       aP  U R                  [        [        T5      5        TU R                  ;   a   U R                  [        [        T5      5        g g g r(   )r   r   r  rV  singles_fildes
check_boolrv   s    r   helper(TestInvalidFD.get_single.<locals>.helper		  sJ    A

72q>*+++OOGBN3 , r   r+   )rw   r  s   ` r   
get_singleTestInvalidFD.get_single	  s    	4
 r   test_c                      U" [         R                  " 5       /UQ70 UD6  U R                  SU-  5        g ! [         a4  nU R	                  UR
                  [
        R                  5         S nAg S nAff = f)Nz5%r didn't raise an OSError with a bad file descriptor)r   make_bad_fdr\  rL   rE   rM   r  )r5   rw   r   r  r   s        r   r  TestInvalidFD.check	  sh    	i##%777 IIM   	3QWWekk22	3s   6 
A4 *A//A4c                 "   [         R                  " 5          [         R                  " S[        5        S H-  nU R	                  [        5         U" U/UQ70 UD6  S S S 5        M/     S S S 5        g ! , (       d  f       MI  = f! , (       d  f       g = f)Nerrorr  )r  r  simplefilterRuntimeWarningr   )r5   rw   r   r  r   s        r   r  TestInvalidFD.check_bool	  sj    $$&!!'>:!&&~6b*4*6* 76 " '& 76 '&s#   6B A.B .
A=8B  
Bc                 |    U R                  [        R                  SS9  U R                  [        R                  SS9  g )Nr   r   )r  r   r   r  rl   s    r   r   TestInvalidFD.test_fdopen"	  s*    

299w
/		G4r   isattyztest needs os.isatty()c                 v    U R                  [        R                  " [        R                  " 5       5      S5        g NF)rE   r   r  r   r  rl   s    r   test_isattyTestInvalidFD.test_isatty&	  s$    9#8#8#:;UCr   r   ztest needs os.closerange()c                 4   [         R                  " 5       n[        S5       H  n[        R                  " X-   5          O   WS:  a  [        R                  " S5      eU R                  [        R                  " XU-   S-
  5      S 5        g ! [
         a     Mu  f = f)Nr|   r}   z5Unable to acquire a range of invalid file descriptorsr{   )
r   r  r   r   r  rL   r   r  rE   r   )r5   r   r   s      r   r   TestInvalidFD.test_closerange*	  s    ""$ rA"$   q5##GI Ir6!84d;  s   B		
BBdup2ztest needs os.dup2()c                 D    U R                  [        R                  S5        g )N   )r  r   r  rl   s    r   	test_dup2TestInvalidFD.test_dup2:	  s    

277Br   z@dup2() with negative fds is broken on Emscripten (see gh-102179)c                 0   [         R                  " [        [         R                  5      nU R	                  [         R
                  U5        USS/n[        R                  " USS9 H  u  p4X4:w  d  M  U R                  X4S9   U R                  [        5       n[         R                  " X45        S S S 5        U R                  WR                  R                  [        R                  5        S S S 5        M     g ! , (       d  f       NO= f! , (       d  f       M  = f)NrA  i   r}   r  )r   fd2)r   r    r   r   r   rr   r  r  rv  r   rL   r  rE   r  rM   r  )r5   valid_fdfdsr   r  r  s         r   test_dup2_negative_fd#TestInvalidFD.test_dup2_negative_fd>	  s     778R[[1(+

 !((Q7GBy\\R\1**73s( 4$$S]]%8%8%++F 21 8 43 21s$   ?DC5,<D5
D?D
D	fchmodztest needs os.fchmod()c                 D    U R                  [        R                  S5        g r   )r  r   r  rl   s    r   test_fchmodTestInvalidFD.test_fchmodR	  s    

299a r   fchownztest needs os.fchown()c                 F    U R                  [        R                  SS5        g )NrA  )r  r   r  rl   s    r   test_fchownTestInvalidFD.test_fchownV	  s    

299b"%r   	fpathconfztest needs os.fpathconf()z-musl libc issue on Emscripten/WASI, bpo-46390c                 D   U R                  S[        R                  5        U R                  [        R                  S5        U R                  [        R
                  S5        U R                  [        R                  S5        U R                  [        R
                  S5        g )NPC_NAME_MAX)r   r   pathconf_namesr  pathconfr  r  rl   s    r   test_fpathconfTestInvalidFD.test_fpathconfZ	  s`     	mR%6%67

2;;.

2<</]3m4r   	ftruncateztest needs os.ftruncate()c                     U R                  [        R                  S5        U R                  [        R                  S5        U R	                  [        R                  S5        g r   )r  r   truncater  r  rl   s    r   test_ftruncateTestInvalidFD.test_ftruncatef	  s8    

2;;"

2<<#Q'r   r   ztest needs os.lseek()c                 F    U R                  [        R                  SS5        g r   )r  r   r   rl   s    r   
test_lseekTestInvalidFD.test_lseekl	  s    

288Q"r   r   ztest needs os.read()c                 D    U R                  [        R                  S5        g r  )r  r   r   rl   s    r   r   TestInvalidFD.test_readp	  s    

277Ar   readvztest needs os.readv()c                 \    [        S5      nU R                  [        R                  U/5        g )Nr|   )r   r  r   r%  )r5   r1  s     r   
test_readvTestInvalidFD.test_readvt	  s    m

288cU#r   	tcsetpgrpztest needs os.tcsetpgrp()c                 D    U R                  [        R                  S5        g r   )r  r   r)  rl   s    r   test_tcsetpgrptTestInvalidFD.test_tcsetpgrpty	  s    

2<<#r   r!   ztest needs os.write()c                 D    U R                  [        R                  S5        g )N    )r  r   r!   rl   s    r   r   TestInvalidFD.test_write}	  s    

288T"r   writevztest needs os.writev()c                 F    U R                  [        R                  S/5        g )Nr  )r  r   r0  rl   s    r   test_writevTestInvalidFD.test_writev	  s    

299vh'r   c                     U R                  [        R                  5        U R                  [        R                  S5        g NT)r  r   get_inheritableset_inheritablerl   s    r   test_inheritableTestInvalidFD.test_inheritable	  s(    

2%%&

2%%t,r   get_blocking-needs os.get_blocking() and os.set_blocking()c                     U R                  [        R                  5        U R                  [        R                  S5        g r5  )r  r   r:  set_blockingrl   s    r   test_blockingTestInvalidFD.test_blocking	  s&     	

2??#

2??D)r   r+   N)&r`   ra   rb   rc   singlesr  r  rw   localsr  r  r   r   r   r   r   r  r   r  r.  r   r/  r
  r  r  r0  r  r  r!  r   r'  r+  r   r2  r  r8  r>  rd   r+   r   r   r  r  	  s   <G5N (m +5 X.0HID JD \24PQ< R< V,.DE  F  V,.DE__JG	 F
G X.0HI! J! X.0HI& J& [13NO__075	 P
5 [13NO( P(
 W-/FG# H# V,.DE F W-/FG$ H$ [13NO$ P$ W-/FG# H# X.0HI( J(   "- #- ^4HJ*J*r   r  r!  zrequires os.linkc                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
	LinkTestsi	  c                     [         R                  U l        [        R                  R                  [         R                  S-   5      U l        g )Nr  )r   rj   file1r   rF   rH   file2rl   s    r   rm   LinkTests.setUp	  s.    %%
WW\\)"2"2S"89
r   c                     U R                   U R                  4 H?  n[        R                  R	                  U5      (       d  M)  [        R
                  " U5        MA     g r(   )rE  rF  r   rF   r  rk   )r5   files     r   r-  LinkTests.tearDown	  s7    ZZ,Dww~~d##		$ -r   c           	         [        U5         [        R                  " X5        [        US5       n[        US5       nU R                  [        R                  R                  UR                  5       UR                  5       5      5        S S S 5        S S S 5        g ! [         a  nU R	                  SU-  5         S nANS nAff = f! , (       d  f       NB= f! , (       d  f       g = f)Nos.link(): %sr   )
r%   r   r!  r5  r   r    rs   rF   sameopenfiler   )r5   rE  rF  r   r  f2s         r   
_test_linkLinkTests._test_link	  s    E	/GGE! %"d5$&72OOBGG00biikJK '8  	/MM/A-..	/&7&7s:   B CACC
C#B<<C
C	C
C#c                 P    U R                  U R                  U R                  5        g r(   )rO  rE  rF  rl   s    r   	test_linkLinkTests.test_link	  s    

DJJ/r   c                     U R                  [        U R                  [        R                  " 5       5      [        U R
                  [        R                  " 5       5      5        g r(   )rO  r\   rE  r?   ro  rF  rl   s    r   test_link_bytesLinkTests.test_link_bytes	  s<    djj#*C*C*EFdjj#*C*C*EF	Hr   c                     [         R                  " S5        U =R
                  S-  sl        U R
                  S-   U l        U R                  U R
                  U R                  5        g ! [         a    [        R                  " S5      ef = f)N   ñz#Unable to encode for this platform.r  )r   r  UnicodeErrorr   r  rE  rF  rO  rl   s    r   test_unicode_nameLinkTests.test_unicode_name	  so    	KKK 	

f
ZZ#%


DJJ/  	K##$IJJ	Ks   A( (!B	)rE  rF  N)r`   ra   rb   rc   rm   r-  rO  rR  rU  rZ  rd   r+   r   r   rC  rC  	  s"    : 
L0H0r   rC  zPosix specific testsc                      \ rS rSrSrSr\R                  " \" \	S5      S5      S 5       r
\R                  " \" \	S5      S5      S 5       r\R                  " \" \	S	5      S
5      S 5       r\R                  " \" \	S5      S5      S 5       r\R                  " \" \	S5      S5      S 5       r\R                  " \" \	S5      S5      \R                   " 5       S 5       5       r\R                  " \" \	S5      S5      \R                   " 5       S 5       5       r\R                  " \" \	S5      S5      \R                   " 5       S 5       5       rSrg)PosixUidGidTestsi	          setuidztest needs os.setuid()c                 (   [         R                  " 5       S:w  a%  U R                  [        [         R                  S5        U R                  [
        [         R                  S5        U R                  [        [         R                  U R                  5        g Nr   z
not an int)r   getuidr   rL   r_  r   OverflowErrorUID_OVERFLOWrl   s    r   test_setuidPosixUidGidTests.test_setuid	  sX    99;!gryy!4)RYY=-D4E4EFr   setgidztest needs os.setgid()c                 >   [         R                  " 5       S:w  a0  [        (       d%  U R                  [        [         R
                  S5        U R                  [        [         R
                  S5        U R                  [        [         R
                  U R                  5        g ra  )	r   rb  HAVE_WHEEL_GROUPr   rL   rg  r   rc  GID_OVERFLOWrl   s    r   test_setgidPosixUidGidTests.test_setgid	  s^    99;!$4$4gryy!4)RYY=-D4E4EFr   seteuidztest needs os.seteuid()c                 (   [         R                  " 5       S:w  a%  U R                  [        [         R                  S5        U R                  [
        [         R                  S5        U R                  [        [         R                  U R                  5        g ra  )	r   rb  r   rL   rm  r   setegidrc  rd  rl   s    r   test_seteuidPosixUidGidTests.test_seteuid	  sX    99;!grzz15)RZZ>-T5F5FGr   ro  ztest needs os.setegid()c                 >   [         R                  " 5       S:w  a0  [        (       d%  U R                  [        [         R
                  S5        U R                  [        [         R
                  S5        U R                  [        [         R
                  U R                  5        g ra  )	r   rb  ri  r   rL   ro  r   rc  rj  rl   s    r   test_setegidPosixUidGidTests.test_setegid	  s^    99;!$4$4grzz15)RZZ>-T5F5FGr   setreuidztest needs os.setreuid()c                    [         R                  " 5       S:w  a&  U R                  [        [         R                  SS5        U R                  [
        [         R                  SS5        U R                  [
        [         R                  SS5        U R                  [        [         R                  U R                  S5        U R                  [        [         R                  SU R                  5        g ra  )r   rb  r   rL   ru  r   rc  rd  rl   s    r   test_setreuidPosixUidGidTests.test_setreuid	  s    99;!gr{{Aq9)R[[,B)R[[!\B-d6G6GK-a9J9JKr   c                 R    [         R                  " [        R                  SS/5        g )Nr   z,import os,sys;os.setreuid(-1,-1);sys.exit(0)r   r  r?   r   rl   s    r   test_setreuid_neg1#PosixUidGidTests.test_setreuid_neg1	  %    
 	>@ 	Ar   setregidztest needs os.setregid()c                    [         R                  " 5       S:w  a1  [        (       d&  U R                  [        [         R
                  SS5        U R                  [        [         R
                  SS5        U R                  [        [         R
                  SS5        U R                  [        [         R
                  U R                  S5        U R                  [        [         R
                  SU R                  5        g ra  )	r   rb  ri  r   rL   r~  r   rc  rj  rl   s    r   test_setregidPosixUidGidTests.test_setregid	  s     99;!$4$4gr{{Aq9)R[[,B)R[[!\B-d6G6GK-a9J9JKr   c                 R    [         R                  " [        R                  SS/5        g )Nr   z,import os,sys;os.setregid(-1,-1);sys.exit(0)rz  rl   s    r   test_setregid_neg1#PosixUidGidTests.test_setregid_neg1	  r}  r   r+   N)r`   ra   rb   rc   rd  rj  r   r   r   r   re  rk  rp  rs  rw  r   r  r{  r  r  rd   r+   r   r   r]  r]  	  s    LLX.0HIG JG X.0HIG JG Y/1JKH LH Y/1JKH LH Z02LML NL Z02LM  "A # NA Z02LM  "L # NL Z02LM  "A # NAr   r]  c                   r    \ rS rSrS rS rS rS r\R                  " \
" \S5      S5      S 5       rS	 rS
rg)Pep383Testsi	  c                   ^ [         R                  (       a  [         R                  U l        O@[         R                  (       a  [         R                  U l        O[         R                  U l        [
        R                  " U R                  5      U l        / mU4S jnU" [         R                  5        [         R                  (       a  U" [         R                  5        [         R                  (       a  U" [         R                  5        T(       d  U R                  S5        [        5       U l        [
        R                  " U R                  5         T H  n[         R                  " [
        R                  R                  U R                  U5      5        [
        R                   " U5      nX R                  ;   a  [#        S5      eU R                  R%                  U5        M     g !   [&        R(                  " U R                  5        e = f)Nc                 v   >  [         R                  " U 5      n TR                  U 5        g ! [         a     g f = fr(   )r   r  rp  rJ  )fnbytesfns    r   add_filename'Pep383Tests.setUp.<locals>.add_filename

  s7    [[_ NN2 & s   + 
88z&couldn't create any non-ascii filenamezduplicate filename)r   TESTFN_UNENCODABLErS  TESTFN_NONASCIIrj   r   r  bdirTESTFN_UNICODEr   r  	unicodefnrI   create_empty_filerF   rH   r]   r   addrs  r  )r5   r  r  r  s      @r   rm   Pep383Tests.setUp 
  s@   '' 33DH&& 00DH ''DHKK)		 	Y--.''556$$223MMBC
		++BGGLLB,GH[[_'$%9::""2& 	MM$((#s   BG! !#Hc                 D    [         R                  " U R                  5        g r(   )rs  r  rS  rl   s    r   r-  Pep383Tests.tearDown%
  s    dhhr   c                    U R                   n[        [        R                  " U R                  5      5      nU R                  X!5        [        R                  " 5       n [        R                  " U R                  5        U R                  [        [        R                  " 5       5      U5        [        R                  " U5        g ! [        R                  " U5        f = fr(   )r  r  r   r3  rS  rE   r1   rJ   )r5   rU   foundcurrent_directorys       r   test_listdirPep383Tests.test_listdir(
  s    >>BJJtxx())IIK	( HHTXXS.9HH&'BHH&'s   AC Cc                     U R                    HG  n[        [        R                  R	                  U R
                  U5      S5      nUR                  5         MI     g Nr   )r  r    r   rF   rH   rS  rr   )r5   r  rw   s      r   	test_openPep383Tests.test_open6
  s8    ..BRWW\\$((B/6AGGI !r   r  r  c                     U R                    HC  n[        R                  R                  U R                  U5      n[        R
                  " U5        ME     g r(   )r  r   rF   rH   rS  r  )r5   r  fullnames      r   test_statvfsPep383Tests.test_statvfs;
  s6     ..Bww||DHHb1HJJx  !r   c                     U R                    HA  n[        R                  " [        R                  R	                  U R
                  U5      5        MC     g r(   )r  r   r   rF   rH   rS  )r5   r  s     r   	test_statPep383Tests.test_statD
  s/    ..BGGBGGLL2./ !r   )r  rS  r  N)r`   ra   rb   rc   rm   r-  r  r  r   r   r   r   r  r  rd   r+   r   r   r  r  	  sG    #J (
 Y//1!1!0r   r  c                       \ rS rSrS rS rS r\R                  " \	SL S5      S 5       r
\R                  " S5      \R                  " 5       S	 5       5       r\R                  " 5       S
 5       rSrg)Win32KillTestsiH
  c                    SS K nSSK Jn  SS KnUR                  R                  R
                  nUR                  Ul        UR                  UR                  UR                  5      UR                  UR                  UR                  5      UR                  UR                  5      UR                  UR                  5      4Ul        Sn[        R                  " [        R                   SSR#                  U5      /[        R$                  [        R$                  [        R$                  S9nU R'                  UR(                  R*                  5        U R'                  UR,                  R*                  5        U R'                  UR.                  R*                  5        Su  pX:  a  UR1                  5       c  UR3                  [5        U5      5      n
U" UR7                  UR(                  R9                  5       5      XR;                  U
5      S S S 5      nU R=                  USS5        U
R>                  (       a*  U RA                  XjR>                  RC                  5       5        OD[D        RF                  " S	5        US
-  nX:  a  UR1                  5       c  M  U RI                  S5        [J        RL                  " URN                  U5        U RA                  URQ                  5       U5        g )Nr   wintypesrunningr   z<import sys;sys.stdout.write('{}');sys.stdout.flush();input())r  stderrstdin)r   r   zPeekNamedPipe failed皙?r{   z1Did not receive communication from the subprocess))r+  r  msvcrtr,  r-  PeekNamedPipeBOOLrestypeHANDLEPOINTERc_charDWORDargtypesr   Popenr?   r   r  r  r   r  rr   r  r  pollcreate_string_bufferrA   get_osfhandler   sizeofr  r  rE   r  r  sleepr\  r   killpidwait)r5   sigr+  r  r  r  r  r  rV  maxr1  rslts               r   _killWin32KillTests._killJ
  s   
 	# ..<< ("*//"(.."?"*.."(.."@"(.."@"(.."@"B "+ ,26#;	!8
 (2'1&0oo7 	))*))*

(()
kdiik1--c#h7C !!5!5dkk6H6H6J!K!$mmC&8$dLDa)?@yy  ii&6&6&89JJsOQJE kdiik1 IIIJ
#c*r   c                 B    U R                  [        R                  5        g r(   )r  signalSIGTERMrl   s    r   test_kill_sigterm Win32KillTests.test_kill_sigterm
  s    

6>>"r   c                 &    U R                  S5        g )Nr   )r  rl   s    r   test_kill_intWin32KillTests.test_kill_int
  s    

3r   Nzrequires mmapc                 b   S[         R                  " 5       -  n[        R                  " SSU5      nSUS'   [        R                  R                  [        R                  R                  [        5      S5      n[        R                  XS/n[        R                  " U[        R                  S9nU   [        R                  " [        R                  5       H  nUR!                  5       b  M    O#   UR#                  5         U R%                  S5        [        R"                  " UR&                  U5         UR)                  [        R                  S9  S S S 5        g ! [        R*                   a3    UR#                  5         U R%                  S	R-                  U5      5         NOf = f! , (       d  f       g = f)
Nz
test_os_%srA  r{   r   zwin_console_handler.pyr  z'Subprocess didn't finish initialization)timeoutzsubprocess did not stop on {})uuiduuid1mmapr   rF   rH   rS   r   r?   r   r   r  CREATE_NEW_PROCESS_GROUPr   sleeping_retrySHORT_TIMEOUTr  r  r\  r  r  TimeoutExpiredr  )	r5   eventr   tagnamemscriptcmdr  r  s	            r   _kill_with_eventWin32KillTests._kill_with_event
  s<   -IIb!W%! bggooh768~~v/.8.Q.QS ++G,A,AB99;& C
 				CDGGDHHe$H 		'"7"7	8 T  ,, H				9@@FGH! Ts2   .7F )AF 0EAFF FF  
F.z.subprocesses aren't inheriting Ctrl+C propertyc                 d   SSK Jn  SS K nUR                  UR                  5      " 5       nUR                  R
                  R                  nUR                  UR                  5      UR                  4Ul        UR                  Ul	        U" US5        U R                  [        R                  S5        g )Nr   r  CTRL_C_EVENT)r+  r  r  c_intr,  r-  SetConsoleCtrlHandlerr  r  r  r  r  r  )r5   r  r+  NULLr  s        r   test_CTRL_C_EVENT Win32KillTests.test_CTRL_C_EVENT
  s     	$ ~~fll+- & 6 6 L L*0..*F*2--*9&(0%
 	dA&f11>Br   c                 D    U R                  [        R                  S5        g )NCTRL_BREAK_EVENT)r  r  r  rl   s    r   test_CTRL_BREAK_EVENT$Win32KillTests.test_CTRL_BREAK_EVENT
  s    f557IJr   r+   )r`   ra   rb   rc   r  r  r  r   r.  r  r  skipr   r  r  r  rd   r+   r   r   r  r  H
  s    4+l# __TT\?3H 4HB ]]CD  "C # EC$   "K #Kr   r  c                   0    \ rS rSrSrS rS rS rS rSr	g)	Win32ListdirTestsi
  zTest listdir on Windows.c                    / U l         [        S5       H  nSU-  n[        R                  R	                  [
        R                  U5      nSU-  n[        R                  R	                  [
        R                  U5      n[        R                  " U5        [        USSS9 nUR                  SU-  5        S S S 5        U R                   R                  X$/5        M     U R                   R                  5         g ! , (       d  f       NI= f)Nr}   zSUB%dzFILE%dr  r   r   z'I'm %s and proud of it. Blame test_os.
)created_pathsr   r   rF   rH   r   rj   r/  r    r!   rt  rC  )r5   r   dir_namedir_path	file_name	file_pathrw   s          r   rm   Win32ListdirTests.setUp
  s    qA{Hww||I$4$4h?H 1IY%5%5yAIKK!iw71BYNO 8%%x&;<  	! 87s   C55
D	c                 L    [         R                  " [        R                  5        g r(   )rs  r  r   rj   rl   s    r   r-  Win32ListdirTests.tearDown
  s    i&&'r   c           	         U R                  [        [        R                  " [        R
                  5      5      U R                  5        U R                  [        [        R                  " [        R                  " [        R
                  5      5      5      U R                   Vs/ s H  n[        R                  " U5      PM     sn5        gs  snf )z-Test when the path is not an "extended" path.N)rE   r  r   r3  r   rj   r  r  r  s     r   test_listdir_no_extended_path/Win32ListdirTests.test_listdir_no_extended_path
  s     	rzz)"2"234""	$
 	rzz"++i.>.>"?@A/3/A/AB/AtT"/AB	DBs   ! C	
c           	      $   S[         R                  R                  [        R                  5      -   nU R                  [        [         R                  " U5      5      U R                  5        S[         R                  " [         R                  R                  [        R                  5      5      -   nU R                  [        [         R                  " U5      5      U R                   Vs/ s H  n[         R                  " U5      PM     sn5        gs  snf )z&Test when the path starts with '\\?\'.\\?\   \\?\N)
r   rF   r*  r   rj   rE   r  r3  r  r  r  s     r   test_listdir_extended_path,Win32ListdirTests.test_listdir_extended_path
  s     277??9+;+;<<rzz$'(""	$
 BKK	8H8H(IJJrzz$'(/3/A/AB/AtT"/AB	DBs   % D
)r  N)
r`   ra   rb   rc   r  rm   r-  r  r  rd   r+   r   r   r  r  
  s    ""(
DDr   r  r  zNT specific testsc                   0    \ rS rSrSrS rS rS rS rSr	g)	Win32ListdriveTestsi
  z5Test listdrive, listmounts and listvolume on Windows.c           	         [         R                  " / SQ[        R                  R	                  [        R
                  " SS5      S5      SSS9nUR                  5       nU Vs1 s H  o3R                  S5      (       d  M  UiM     snU l        U Vs1 s H  o3S	S  S
:X  d  M  UiM     snU l	        U Vs1 s H  o3S	S S
:X  d  M  UiM     snU l
        g s  snf s  snf s  snf )N)z
fsutil.exevolumerB  
SystemRootz\WindowsSystem32mbcsignore)r6   r   r_  r  r{   z:\r  )r   r  r   rF   rH   getenvr   
startswithknown_volumesknown_drivesknown_mounts)r5   r  linesls       r   rm   Win32ListdriveTests.setUp
  s    %%,RYY|[A:N	
  ).JA,,y2IaJ(-@112%Q@(-A11Q5QA K@As$   !C>CC C2CCc                     [         R                  " 5       nU R                  U[        5        U R	                  U R
                  U R
                  [        U5      -  5        g r(   )r   
listdrivesr2   rB  assertSetEqualr	  r  )r5   drivess     r   test_listdrives#Win32ListdriveTests.test_listdrives  sF    fd+F+	
r   c                     [         R                  " 5       nU R                  U[        5        U R	                  U R
                  U R
                  [        U5      -  5        g r(   )r   listvolumesr2   rB  r  r  r  )r5   volumess     r   test_listvolumes$Win32ListdriveTests.test_listvolumes  sG    .."gt,W-	
r   c                 z   [         R                  " 5        Ha  n [         R                  " U5      nU R                  U[        5        U R                  [        U5      U R                  [        U5      -  5        Mc     g ! [         a4  n[        R                  (       a  [        SUSU5         S nAM   S nAM  S nAff = f)NSkippingz
because of)r   r  
listmountsr2   rB  r  r  r
  rL   r   rO   rP   )r5   r  mountsexs       r   test_listmounts#Win32ListdriveTests.test_listmounts  s    nn&F
v.
 %%fd3##K%%F3 '  @??*flB?? #@s   A<<
B:#B55B:)r	  r
  r  N)
r`   ra   rb   rc   r  rm   r  r  r  rd   r+   r   r   r  r  
  s    ?B

r   r  readlinkzneeds os.readlink()c                      \ rS rSrSr\R                  R                  \5      r	\R                  " \5      r\R                  " \	5      rS rS rS rS r\R$                  S 5       r\R$                  S 5       r\R$                  S	 5       rS
rg)ReadlinkTestsi#  readlinktestc                    [         R                  R                  U5      n[         R                  R                  U5      n[        R                  S:X  a'  S nU" U5      (       a  USS  nU" U5      (       a  USS  nU R                  X5        g )Nr   c                 Z    U R                  [        U [        5      (       a  S5      $ S5      $ )Nr  r  )r  r  r\   )r{  s    r   r  /ReadlinkTests.assertPathEqual.<locals>.<lambda>0  s&    1<<(E22
$C8A$Cr   r   )r   rF   normcaser?   r@   rE   )r5   leftright
has_prefixs       r   assertPathEqualReadlinkTests.assertPathEqual*  sx    ww%  '<<7"CJ$ABx%  ab	%r   c                    U R                  [        R                  R                  U R                  5      5        U R                  [        R                  R                  U R
                  5      5        U R                  [        R                  R                  U R                  5      5        U R                  [        R                  R                  U R                  5      5        g r(   )	rs   r   rF   r  filelink_targetfilelinkb_targetr3  filelink	filelinkbrl   s    r   rm   ReadlinkTests.setUp8  s~    t';';<=t'<'<=>6778r   c                     [        U R                  5      nU R                  [        [        R
                  U R                  5        U R                  [        [        R
                  U5        g r(   )r   r.  r   rL   r   r   )r5   r.  s     r   test_not_symlinkReadlinkTests.test_not_symlink>  sD    "4#7#78'2;;0D0DE'2;;@r   c                     U R                  [        [        R                  S5        U R                  [        [        R                  [	        S5      5        g )Nzmissing-link)r   rK   r   r   r   rl   s    r   test_missing_linkReadlinkTests.test_missing_linkC  s8    +R[[.I+R[[">2	4r   c                 8   [         R                  " U R                  U R                  5        U R	                  [
        R                  U R                  5        [        U R                  5      nU R                  [         R                  " U5      U R                  5        g r(   )
r   r   r.  r0  r   r   rk   r   r+  r   )r5   r0  s     r   test_pathlikeReadlinkTests.test_pathlikeH  s_    


4''7	(($--8DMM*R[[2D4H4HIr   c                 b   [         R                  " U R                  U R                  5        U R	                  [
        R                  U R                  5        [         R                  " [        U R                  5      5      nU R                  XR                  5        U R                  U[        5        g r(   )r   r   r/  r1  r   r   rk   r   r   r+  r2   r\   r  s     r   test_pathlike_bytes!ReadlinkTests.test_pathlike_bytesO  sm    


4(($..9	(($..9{{8DNN34T#8#89dE*r   c                 P   [         R                  " U R                  U R                  5        U R	                  [
        R                  U R                  5        [         R                  " U R                  5      nU R                  XR                  5        U R                  U[        5        g r(   )r   r   r/  r1  r   r   rk   r   r+  r2   r\   r  s     r   
test_bytesReadlinkTests.test_bytesW  sh    


4(($..9	(($..9{{4>>*T#8#89dE*r   r+   N)r`   ra   rb   rc   r0  r   rF   r*  r   r.  r  r1  r/  r+  rm   r4  r7  r   skip_unless_symlinkr:  r=  r@  rd   r+   r   r   r"  r"  #  s    Hggooh/OH%I{{?3&9A
4
 ""J #J ""+ #+ ""+ #+r   r"  c                   |   \ rS rSrSr\R                  R                  \5      r	Sr
\R                  R                  \	5      rSrS rS rS rS rS	 rS
 rS rS rS rS r\R2                  " \R                  R5                  S5      =(       a    \R                  R7                  S5      S5      S 5       rS rS rSrg)Win32SymlinkTestsi`  filelinktestdirlinktestzmissing linkc                     g r(   r+   rl   s    r   rm   Win32SymlinkTests.setUpi      r   c                    [         R                  R                  U R                  5      (       a   [         R                  " U R                  5        [         R                  R                  U R
                  5      (       a   [         R                  " U R
                  5        [         R                  R                  U R                  5      (       a!  [         R                  " U R                  5        g g r(   )	r   rF   r  r0  rK  dirlinkr  ri   missing_linkrl   s    r   r-  Win32SymlinkTests.tearDownp  s    77>>$--((IIdmm$77>>$,,''HHT\\"77??4,,--IId''( .r   c                    [         R                  " U R                  U R                  5        U R	                  [         R
                  R                  U R                  5      5        U R	                  [         R
                  R                  U R                  5      5        U R	                  [         R
                  R                  U R                  5      5        U R                  U R                  U R                  5        g r(   )
r   r   dirlink_targetrK  rs   rF   r  r  islink
check_statrl   s    r   test_directory_link%Win32SymlinkTests.test_directory_linkx  s    


4&&5t||45dll34t||45d&9&9:r   c                    [         R                  " U R                  U R                  5        U R	                  [         R
                  R                  U R                  5      5        U R	                  [         R
                  R                  U R                  5      5        U R	                  [         R
                  R                  U R                  5      5        U R                  U R                  U R                  5        g r(   )
r   r   r.  r0  rs   rF   r  r  rP  rQ  rl   s    r   test_file_link Win32SymlinkTests.test_file_link  s    


4''7t}}56t}}56t}}56t';';<r   c                     U R                   n[        R                  R                  U5      (       a  [        R                  " U5        SnSn[        R
                  " X!U5        g)z2Create a "directory" link to a non-existent targetz"c:\\target does not exist.29r3c740TN)rL  r   rF   ri   rK  r   )r5   linknamer   target_is_dirs       r   _create_missing_dir_link*Win32SymlinkTests._create_missing_dir_link  sD    $$77??8$$IIh6


6]3r   c                 d    U R                  5         [        R                  " U R                  5        g r(   )rZ  r   rK  rL  rl   s    r   ,test_remove_directory_link_to_missing_target>Win32SymlinkTests.test_remove_directory_link_to_missing_target  s"    %%' 			$##$r   c                     U R                  5         U R                  [        R                  R	                  U R
                  5      5        g r(   )rZ  r3  r   rF   r  rL  rl   s    r   .test_isdir_on_directory_link_to_missing_target@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_target  s/    %%'t'8'89:r   c                 d    U R                  5         [        R                  " U R                  5        g r(   )rZ  r   r  rL  rl   s    r   .test_rmdir_on_directory_link_to_missing_target@Win32SymlinkTests.test_rmdir_on_directory_link_to_missing_target  s     %%'
""#r   c                     U R                  [        R                  " U5      [        R                  " U5      5        U R                  [        R                  " U5      [        R                  " U5      5        [        R
                  " U5      nU R                  [        R                  " U5      [        R                  " U5      5        U R                  [        R                  " U5      [        R                  " U5      5        g r(   )rE   r   r   r  r  r  )r5   r!  r   
bytes_links       r   rQ  Win32SymlinkTests.check_stat  s    8BHHTNBGGDM:[[&
,bggfo>BHHZ0"''*2EFr   c                 .   [         R                  R                  [        R                  5      n[         R                  R                  US5      n[         R                  R                  US5      nU R                  [        R                  U5        [         R                  " U5        [         R                  " U5        [         R                  " U5        [         R                  R                  [         R                  R                  US5      5      n[        U5        [         R                  " 5       n [         R                  " U5        [         R                  R                  US5      n[         R                  " [         R                  R                  U5      S5        U R                  S[         R                  " [         R                  " 5       5      5        U R!                  [         R"                  " U5      [         R"                  " S5      5        [         R                  " U5        U R!                  [         R"                  " U5      [         R"                  " [         R                  R                  U5      5      5        [         R                  " U5        U R!                  [         R"                  " U5      [         R"                  " [         R                  R                  U5      5      5        [         R                  " U5        g ! [         R                  " U5        f = f)Nlevel2level3rE  r!  )r   rF   r*  r   rj   rH   r   r  rI   r%   r1   rJ   r   relpathr   r3  rE   r   )r5   level1ri  rj  rE  orig_dirr!  s          r   
test_12084Win32SymlinkTests.test_12084  s   !1!12fh/fh/	((&1


VW =>E99;	HHV77<</DJJrwwu-v6MM&"**RYY["9: RWWU^RWWV_= HHVRWWU^WWRWW__T%:;= HHVRWWU^WWRWW__T%:;= HHXBHHXs   .F7K< <LC:\Users\All UsersC:\ProgramDatazTest directories not foundc                     [         R                  " S5      nU R                  [         R                  R	                  US5      5        g )Nrp  rq  )r   r   rs   rF   samefile)r5   r   s     r   
test_29248Win32SymlinkTests.test_29248  s1     23((1BCDr   c                    Sn[         R                  R                  " U/S-  6 nSU-   U4X4US S US S 4/nU H  u  pE [         R                  " XE5         [         R                  " U5         [         R                  " [         R                  " U5      [         R                  " U5      5         [         R                  " U5        M     g ! [
         a     Nhf = f! [         a     Nxf = f! [
         a     M  f = f! [         a     M  f = f)NXXXXXXXXXXXXXXXXXXXXXXXXXXXr|   r(     )r   rF   rH   r   rK  rL   rK   r  )r5   segmentrF   
test_casesr   dests         r   test_buffer_overflow&Win32SymlinkTests.test_buffer_overflow  s     ww||gY^, D['"O$3Zds$

 $IC

3%IIdO

2;;s+R[[->?IIdO# $   %    % sG   CC-?C9-C(
CC
C%$C%(
C65C69
DDc                 v   [         R                  R                  S5      n[         R                  R                  U5      (       d  U R	                  S5        [
        R                  " [         R                  " U5      S5       Vs/ s H"  n[         R                  R                  X5      PM$     nnU H  n[        R                  (       a  [        5         [        SU5        [         R                  " U5      nU R                  U[         R                  " U5      5        U R                  [        R                   " UR"                  5      5        U R                  UR$                  [        R&                  5        U R)                  [         R                  R+                  U5      5          g    U R	                  S5        g s  snf )Nz$%LOCALAPPDATA%\Microsoft\WindowsAppsz%test requires a WindowsApps directoryz*.exezTesting withz$test requires an app execution alias)r   rF   
expandvarsr  r   fnmatchfilterr3  rH   r   rO   rP   r  rE   r   r3  S_ISLNKr^  st_reparse_tagIO_REPARSE_TAG_APPEXECLINKrs   r  )r5   r0  r>   aliasesaliasr  s         r   test_appexeclink"Win32SymlinkTests.test_appexeclink  s+   ww!!"IJww}}T""MMAB $NN2::d+;WEGEq 77<<(E 	 G Ene,%BR0T\\"**56R..0O0OPOOBGGNN512  MM@AGs   )F6r+   N) r`   ra   rb   rc   r0  r   rF   r*  r   r.  rK  rS   rO  rL  rm   r-  rR  rU  rZ  r]  r`  rc  rQ  rn  r   r   ri   r  rt  r|  r  rd   r+   r   r   rD  rD  `  s     Hggooh/OGWW___5N!L5);=4%;$G!F )>? B "/@ A8:
E:
E!FBr   rD  c                       \ rS rSrSr\R                  R                  \R                  R                  \	5      5      r
S rS rS rS rSrg)	Win32JunctionTestsi  junctiontestc                     g r(   r+   rl   s    r   rm   Win32JunctionTests.setUp  rI  r   c                     [         R                  R                  U R                  5      (       a!  [         R                  " U R                  5        g g r(   )r   rF   ri   junctionrk   rl   s    r   r-  Win32JunctionTests.tearDown  s.    77??4==))IIdmm$ *r   c                 @   [         R                  " U R                  U R                  5        U R	                  [
        R                  R                  U R                  5      5        U R	                  [
        R                  R                  U R                  5      5        U R	                  [
        R                  R                  U R                  5      5        U R                  [
        R                  " U R                  5      [
        R                  " U R                  5      5        U R                  [
        R                  " U R                  5      [
        R                  " U R                  5      5        U R                  [
        R                  R                  U R                  5      5        U R                  [
        R                  R!                  SU R                  -   5      [
        R                  R!                  [
        R"                  " U R                  5      5      5        g )Nr  )_winapiCreateJunctionjunction_targetr  rs   r   rF   ri   r  r  r  r   r  rE   r3  rP  r'  r   rl   s    r   test_create_junction'Win32JunctionTests.test_create_junction  s4   t33T]]C67t}}56dmm45BGGDMM2BHHT]]4KL/9M9M1NO 	67)))d6J6J*JK))"++dmm*DE	Gr   c                    [         R                  " U R                  U R                  5        U R	                  [
        R                  R                  U R                  5      5        U R	                  [
        R                  R                  U R                  5      5        [
        R                  " U R                  5        U R                  [
        R                  R                  U R                  5      5        g r(   )r  r  r  r  rs   r   rF   r  ri   rk   r3  rl   s    r   test_unlink_removes_junction/Win32JunctionTests.test_unlink_removes_junction,  s    t33T]]Ct}}5667
		$-- 67r   r+   N)r`   ra   rb   rc   r  r   rF   rS   r*  r   r  rm   r-  r  r  rd   r+   r   r   r  r    s;    Hggoobggooh&?@O2%G8r   r  c                   v    \ rS rSrS r\R                  " 5       S 5       r\R                  " 5       S 5       rSr	g)Win32NtTestsi4  c                    [         R                  " S5      n[         R                  " S5      nSS KnUR                  SSS9nUR                  R
                  UR                  l        UR                  R                  UR                  l        UR                  R
                  UR                  R                  4UR                  l        UR                  5       nUR                  R                  5       nUR                  XBR                  U5      5      nU R                  SU5        UR                  nSS	S
[         /n[#        S5       H5  n	U H,  n
 UR%                  U
5         [(        R*                  " U
5        M.     M7     UR                  XBR                  U5      5      nU R                  SU5        UR                  U-
  nU R                  SU5        g ! [&         a     Nf = f! [&         a     M  f = f)Nr  r+  r   zKernel32.dllT)use_last_errorr{   z\\?\C:z\\?\NULz	\\?\CONINr|   )r   import_modulectypes.wintypesWinDLLr  r  GetCurrentProcessr  r  GetProcessHandleCountLPDWORDr  r  byrefrE   r  r   r   _getfinalpathname	Exceptionr   r   )r5   r  r+  kernelhprochandle_countr2  before_count	filenamesr  r   handle_deltas               r   test_getfinalpathname_handles*Win32NtTests.test_getfinalpathname_handles6  s   ((.,,X6~dC+1??+A+A  (/5/C/C$$,171G1G171H1H1J$$- ((*,,.))%l1KLB#)) 	
	 rA!((.GGDM "  ))%l1KLB#))L8L) ! 
 ! s$   GG 
GG 
G.-G.c           	         [         R                  nU R                  [         R                  U5        [        R                  " 5       S-   n[
        R                  " S5      n[        R                  " [        R                  SX1[        U5      /5       n[        R                  " 5       U:  a2   [        R                  " U5        [        R                  " 5       U:  a  M2   UR                  S5        S S S 5        g ! [         a
  n S nANES nAff = f! [        R                    a    UR#                  5          NFf = f! , (       d  f       g = f)Nr   a              import os
            import sys
            import time

            filename = sys.argv[1]
            deadline = float(sys.argv[2])

            while time.time() < deadline:
                try:
                    with open(filename, "w") as f:
                        pass
                except OSError:
                    pass
                try:
                    os.remove(filename)
                except OSError:
                    pass
            r   r{   )r   rj   r   rk   r  textwrapdedentr   r  r?   r   r3   r   r   rK   r  r  	terminate)r5   r"   deadlinecommandr  r   s         r   test_stat_unlink_race"Win32NtTests.test_stat_unlink_raceg  s     $$	(((399;?// # ( s~~tWHVW[_))+(+GGH% ))+(
!		! XW ) + + + ,, ! ! XWsN   D8+C7D8D7
DD8DD8$D52D84D55D88
Ec                   ^^ [         R                  m[        R                  R	                  S5      m[        TS5       nUR                  S5        S S S 5        [        R                  " T5      n [        R                  " TTS/[        R                  S9  UU4S
 jnU R+                  U5        [        R                  (       a  [        ST5        [        SU5        [        R                  " T5      n[        R                  (       a  [        SU5        U R-                  UR.                  SUR.                  45        U R-                  UR0                  SUR0                  45        U R3                  UR4                  UR4                  5        U R3                  UR6                  UR6                  5        U R3                  UR8                  UR8                  5        U R3                  UR:                  UR:                  5        U R=                  UR>                  UR>                  5        g ! , (       d  f       GN= f! [        R                   a  n[        R                  (       aA  [        TTSS5        [        UR                  R!                  SS5      R#                  5       5         [        R$                  " T5        O! [&         a     Of = fU R)                  S	5         S nAGNFS nAff = f)Nz %SystemRoot%\System32\icacls.exer  s	   Test dataz/inheritance:rr  zfailed.r  r   z"Unable to create inaccessible filec                     > [         R                  " T TSS/[         R                  S9  [        R                  " T5        g )Nz/grantz*WD:(D)r  )r   r  STDOUTr   rk   )ICACLSr"   s   r   cleanup9Win32NtTests.test_stat_inaccessible_file.<locals>.cleanup  s1    ##VXx$K+5+<+<>IIhr   zFile:zstat with access:z without access:r   ) r   rj   r   rF   r  r    r!   r   r   r  r  CalledProcessErrorr   rO   rP   r  r  r  rk   rL   r   r   r   st_devst_inorE   r^  rR  r  r  assertGreaterEqualr  )r5   rw   stat1r  r  stat2r  r"   s         @@r   test_stat_inaccessible_file(Win32NtTests.test_stat_inaccessible_file  s   ####$GH(D!QGGL! " !	@##VX7G$H+5+<+<>	  	 ??'8$%u- !??$e, 	ellQ$56ellQ$56 	66 	88 	?g "! ,, 	@fh(8)Dbii&&ui8??AB		(# MM>??	@sH   H /&H2  
H/2K AKJ43K4
K>K KKK r+   N)
r`   ra   rb   rc   r  r   r  r  r  rd   r+   r   r   r  r  4  sE    /*b   "'! #'!R   "7@ #7@r   r  c                   &    \ rS rSrS rS rS rSrg)NonLocalSymlinkTestsi  c                 0    [         R                  " S5        g)z-
Create this structure:

base
 \___ some_dir
zbase/some_dirN)r   r/  rl   s    r   rm   NonLocalSymlinkTests.setUp  s     	O$r   c                 0    [         R                  " S5        g )Nr{  )rs  r  rl   s    r   r-  NonLocalSymlinkTests.tearDown  s    fr   c                 r    [         R                  R                  SS5      n[         R                  " SU5        g)ay  
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.
r{  	some_linksome_dirN)r   rF   rH   r   )r5   r   s     r   test_directory_link_nonlocal1NonLocalSymlinkTests.test_directory_link_nonlocal  s&     ggll6;/


:s#r   r+   N)r`   ra   rb   rc   rm   r-  r  rd   r+   r   r   r  r    s    %"r   r  c                        \ rS rSrS rS rSrg)FSEncodingTestsi  c                     U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        g )Ns   abcu   abcŁ)rE   r   r  r]   rl   s    r   test_nopFSEncodingTests.test_nop  s4    Z0*=[1;?r   c                     S H@  n [         R                  " U5      nU R                  [         R                  " U5      U5        MB     g ! [         a     MR  f = f)N)u	   unicodeŁu   latinéascii)r   r  rp  rE   r]   )r5   r  r  s      r   test_identityFSEncodingTests.test_identity  sM    9B++b/ R[[126 : & s   A
AAr+   N)r`   ra   rb   rc   r  r  rd   r+   r   r   r  r    s    @7r   r  c                   V   \ rS rSrS r\R                  " \R                  " S5      =(       aN    \	" 5       (       + =(       a;    \
R                  R                  S5      =(       d    \" \S5      =(       a	    \" \S5      S5      \R                  " \R"                  S5      S	 5       5       rS
rg)DeviceEncodingTestsi  c                 N    U R                  [        R                  " S5      5        g )Ni@ )r  r   device_encodingrl   s    r   test_bad_fdDeviceEncodingTests.test_bad_fd  s    ",,V45r   r   winnl_langinfoCODESETz>test requires a tty and either Windows or nl_langinfo(CODESET)z*Cannot get encoding of stdin on Emscriptenc                     [         R                  " S5      nU R                  U5        U R                  [        R
                  " U5      5        g r   )r   r  assertIsNotNoners   codecslookup)r5   r   s     r   test_device_encoding(DeviceEncodingTests.test_device_encoding  s7     %%a(X&h/0r   r+   N)r`   ra   rb   rc   r  r   r   r   r  r	   r?   r@   r  r   localer.  r   r/  r  rd   r+   r   r   r  r    s    6 1 Mln*< M#,,BYBYZ_B` CLV]+J	0JLN __K1N1r   r  c                   B   \ rS rSr\R
                  " \" \S5      S5      S 5       rSS jr	S r
S r\R
                  " \R                  S	:H  S
5      S 5       r\R
                  " \R                  S	:H  S
5      S 5       r\R
                  " \" \S5      S5      S 5       rSrg)PidTestsi  getppidztest needs os.getppidc                 .   [         R                  " [        R                  SS/[         R                  [         R                  S9nUR                  5       u  p#U R                  US5        U R                  [        U5      [        R                  " 5       5        g )Nr   zimport os; print(os.getppid()))r  r  r   )
r   r  r?   _base_executabler  communicaterE   r>  r   getpid)r5   r{  r  r  s       r   test_getppidPidTests.test_getppid  sl    c22D>@$.OO$.OO5 $Vbiik2r   Nc                    [         R                  S:X  a  S[         R                   S3SSU S3/nO[         R                  SU/n[        R                  " [        R
                  [         R                  U5      nUb  U" U5        [        R                  " US5      u  pgU R                  [        R                  " U5      U5        U R                  Xe5        g )Nr   "r   r   )	r?   r@   r   r   spawnvP_NOWAITwaitpidrE   waitstatus_to_exitcode)r5   r   exitcodecallbackr   r  pid2statuss           r   check_waitpidPidTests.check_waitpid  s    <<7" 'q)41TF!=DNND$/DiiS^^T:SM zz#q)226:HE#r   c                 $    U R                  SSS9  g )Nr  r   )r   r  r  rl   s    r   test_waitpidPidTests.test_waitpid-  s    3r   c                     SnSU S3nU R                  X!S9  U R                  [        5         [        R                  " S5        S S S 5        g ! , (       d  f       g = f)N   zimport sys; sys.exit()r          )r  r   r   r   r  )r5   r  r   s      r   test_waitstatus_to_exitcode$PidTests.test_waitstatus_to_exitcode0  sN    &xj243y)%%c* *))s   A
Ar   win32-specific testc                 2    SnSU S3nU R                  X!S9  g )Nl   :   z$import _winapi; _winapi.ExitProcess(r  r  r   )r5   STATUS_CONTROL_C_EXITr   s      r   test_waitpid_windowsPidTests.test_waitpid_windows8  s+     !+56K5LAN4@r   c                    SnSSSU4 H,  nU R                  [        R                  " US-  5      U5        M.     U R                  [        5         [        R                  " US-   S-  5        S S S 5        U R                  [
        5         [        R                  " S5        S S S 5        g ! , (       d  f       NC= f! , (       d  f       g = f)Nr  r   r{   r   rK  rA  )rE   r   r  r   r   rc  )r5   max_exitcoder  s      r   #test_waitstatus_to_exitcode_windows,PidTests.test_waitstatus_to_exitcode_windows@  s    "Aq,/HR66x1}E%' 0
 z*%%|a'7A&=> +}-%%b) .- +*--s   B(B9(
B69
CSIGKILLzneed signal.SIGKILLc                 ~   ^ S[         R                   S3n[        R                  mU4S jnU R	                  UT* US9  g )Nzimport time; time.sleep(r  c                 4   > [         R                  " U T5        g r(   )r   r  )r  signums    r   kill_process?PidTests.test_waitstatus_to_exitcode_kill.<locals>.kill_processS  s    GGC r   )r  r  )r   LONG_TIMEOUTr  r  r  )r5   r   r  r  s      @r    test_waitstatus_to_exitcode_kill)PidTests.test_waitstatus_to_exitcode_killN  s?    )'*>*>)?qA	! 	46'LIr   r+   r(   )r`   ra   rb   rc   r   r   r   r   r  r  r  r  r?   r@   r  r  r  r  rd   r+   r   r   r  r    s    Y/1HI3 J3$$4+ 02GHA IA 02GH
* I
* 35JKJ LJr   r  c                      \ rS rSr\S 5       rSSS.S jr\" S5      S 5       r\" S5      S	 5       r	\" S
5      S 5       r
\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       rS r\" S5      S 5       r\" S5      S 5       rSrg )!
SpawnTestsiY  c                     [         R                  S:w  a  U $ U  Vs/ s H  nSUR                  5       ;   a  SU S3OUPM!     sn$ s  snf )Nr  r  r  )r   r   rr  )r   r  s     r   
quote_argsSpawnTests.quote_args[  sF     77d?KEIJTccSYY[0!C5
c9TJJJs   &AFwith_env	use_bytesc                   SU l         [        R                  nU R                  [        R                  U5        U(       d  SU R                   -  nO[        [        R                  5      U l        [        [        R                  " 5       5      U l        U R                  U R                  U R                  '   SU R                  < SU R                   < S3n[        USSS9 nUR                  U5        S S S 5        [        R                   nU R#                  Xc/5      nU(       a  [        R$                  " U5      nU Vs/ s H  n[        R$                  " U5      PM     nnU R                  R'                  5        V	V
s0 s H0  u  p[        R$                  " U	5      [        R$                  " U
5      _M2     sn
n	U l        Xg4$ ! , (       d  f       N= fs  snf s  sn
n	f )	N   zimport sys; sys.exit(%s)z#import sys, os; magic = os.environ[z]; sys.exit(r  r  r   r   )r  r   rj   r   rk   rU  r   r  r  r3   r  uuid4r]  r    r!   r?   r   r  r  r[  )r5   r"  r#  r"   r   r$   r  r   r>   kvs              r   create_argsSpawnTests.create_argsc  sM   ##	(((3-=DBJJ'DH4::<(DH!%DHHTXX xx0D (C'2bHHTN 3 ..23kk'*G,01DqBKKNDD1$(HHNN$46$4DA AA6$46DH } 32 26s   F<: G97G<
G
spawnlc                     U R                  5       u  p[        R                  " [        R                  U/UQ76 nU R	                  X0R
                  5        g r(   )r)  r   r+  P_WAITrE   r  r5   r  r   r  s       r   test_spawnlSpawnTests.test_spawnl  s=    ((*99RYY7$7==1r   spawnlec                     U R                  SS9u  p[        R                  " [        R                  U/UQU R                  P76 nU R                  X0R                  5        g NT)r"  )r)  r   r1  r-  r  rE   r  r.  s       r   test_spawnleSpawnTests.test_spawnle  sK    (($(7::biiB4BB==1r   spawnlpc                     U R                  5       u  p[        R                  " [        R                  U/UQ76 nU R	                  X0R
                  5        g r(   )r)  r   r6  r-  rE   r  r.  s       r   test_spawnlpSpawnTests.test_spawnlp  s=    ((*::bii848==1r   spawnlpec                     U R                  SS9u  p[        R                  " [        R                  U/UQU R                  P76 nU R                  X0R                  5        g r3  )r)  r   r:  r-  r  rE   r  r.  s       r   test_spawnlpeSpawnTests.test_spawnlpe  sK    (($(7;;ryy'CDC$((C==1r   r  c                 <   U R                  5       u  p[        R                  " [        R                  X5      nU R	                  X0R
                  5        [        R                  " [        R                  [        U5      U5      nU R	                  X0R
                  5        g r(   )r)  r   r  r-  rE   r  r   r.  s       r   test_spawnvSpawnTests.test_spawnv  sg    ((*99RYY6==1 99RYY(94@==1r   spawnvec                     U R                  SS9u  p[        R                  " [        R                  XU R                  5      nU R                  X0R                  5        g r3  r)  r   rA  r-  r  rE   r  r.  s       r   test_spawnveSpawnTests.test_spawnve  sC    (($(7::biiA==1r   spawnvpc                     U R                  5       u  p[        R                  " [        R                  X5      nU R	                  X0R
                  5        g r(   )r)  r   rF  r-  rE   r  r.  s       r   test_spawnvpSpawnTests.test_spawnvp  s8    ((*::bii7==1r   spawnvpec                     U R                  SS9u  p[        R                  " [        R                  XU R                  5      nU R                  X0R                  5        g r3  )r)  r   rJ  r-  r  rE   r  r.  s       r   test_spawnvpeSpawnTests.test_spawnvpe  sC    (($(7;;ryy'B==1r   c                     U R                  5       u  p[        R                  " [        R                  X5      n[        R
                  " X0R                  S9  g )Nr  )r)  r   r  r  r   wait_processr  )r5   r  r   r  s       r   test_nowaitSpawnTests.test_nowait  s8    ((*iiW3S==9r   c                     U R                  SSS9u  p[        R                  " [        R                  XU R                  5      nU R                  X0R                  5        g )NTr!  rC  r.  s       r   test_spawnve_bytesSpawnTests.test_spawnve_bytes  sG     (($$(G::biiA==1r   c                     U R                  5       u  pU R                  [        [        R                  [        R
                  U5        U R                  [        [        R                  [        R
                  US5        g Nr)  )r)  r   r   r   r+  r  r5   r  __s      r   test_spawnl_noargsSpawnTests.test_spawnl_noargs  sL    &&(*biigF*biigrJr   c                     U R                  5       u  pU R                  [        [        R                  [        R
                  U0 5        U R                  [        [        R                  [        R
                  US0 5        g rV  )r)  r   r   r   r1  r  rW  s      r   test_spawnle_noargsSpawnTests.test_spawnle_noargs  sP    &&(*bjj"++wK*bjj"++wBOr   c                    U R                  5       u  pU R                  [        [        R                  [        R
                  US5        U R                  [        [        R                  [        R
                  U/ 5        U R                  [        [        R                  [        R
                  US5        U R                  [        [        R                  [        R
                  US/5        g Nr+   r  r)  )r)  r   r   r   r  r  rW  s      r   test_spawnv_noargsSpawnTests.test_spawnv_noargs  s    &&(*biigrJ*biigrJ*biiguM*biigtLr   c                    U R                  5       u  pU R                  [        [        R                  [        R
                  US0 5        U R                  [        [        R                  [        R
                  U/ 0 5        U R                  [        [        R                  [        R
                  US0 5        U R                  [        [        R                  [        R
                  US/0 5        g r_  )r)  r   r   r   rA  r  rW  s      r   test_spawnve_noargsSpawnTests.test_spawnve_noargs  s    &&(*bjj"++wBO*bjj"++wBO*bjj"++wrR*bjj"++wbQr   c                    [         R                  nU R                  USS/5      n[        R                  R                  5       nSUS'    U" [        R                  X#U5      nU R                  US5        [        R                  R                  5       nSUS'    U" [        R                  X#U5      nU R                  US5        [        R                  R                  5       nSUS	'    U" [        R                  X#U5      nU R                  US5        [        R                  nU R                  [        R                  U5        [        US
SS9 nUR                  S5        S S S 5        U R                  X&/5      n[        R                  R                  5       nSUS'   U" [        R                  X#U5      nU R                  US5        g ! [         a     GN^f = f! [         a     GN!f = f! [         a     Nf = f! , (       d  f       N= f)Nr   r  r  r     r  r  r  r  r  r   r   zPimport sys, os
if os.getenv("FRUIT") != "orange=lemon":
    raise AssertionErrorzorange=lemonr   )r?   r   r  r   r  r  r-  rE   r   r   rj   r   rk   r    r!   )r5   spawnr  r   r  r  r"   r$   s           r   _test_invalid_envSpawnTests._test_invalid_env  s   ..v67 "%.!"	,RYYv>H Xs+ "5w	,RYYv>H Xs+ "!(~	,RYYv>H Xs+ ##	(((3(C'2bHH 0 1 3
 23"(wG6:1%K  		  		  		 32sB   	G G %G& 
G6
GG
G#"G#&
G32G36
Hc                 B    U R                  [        R                  5        g r(   )rh  r   rA  rl   s    r   test_spawnve_invalid_env#SpawnTests.test_spawnve_invalid_env  s    rzz*r   c                 B    U R                  [        R                  5        g r(   )rh  r   rJ  rl   s    r   test_spawnvpe_invalid_env$SpawnTests.test_spawnvpe_invalid_env  s    r{{+r   )r  r  r]  N)r`   ra   rb   rc   rP  r  r)  r   r/  r4  r8  r<  r?  rD  rH  rL  rP  rS  rY  r\  r`  rc  rh  rk  rn  rd   r+   r   r   r  r  Y  s   K K ',u < h2  2
 i 2 !2
 i 2 !2
 j!2 "2
 h2  2 i 2 !2
 i 2 !2
 j!2 "2
 h:  :
 i 2 !2 hK  K
 i P !P
 hM  M i R !R.&` i + !+ j!, ",r   r  z>Skip due to platform/environment differences on *NIX buildbotsgetloginztest needs os.getloginc                       \ rS rSrS rSrg)
LoginTestsi  c                 d    [         R                  " 5       nU R                  [        U5      S5        g r   )r   rp  r  rA   )r5   	user_names     r   test_getloginLoginTests.test_getlogin  s!    KKM	C	NA.r   r+   N)r`   ra   rb   rc   ru  rd   r+   r   r   rr  rr    s    /r   rr  getprioritysetpriorityz'needs os.getpriority and os.setpriorityc                       \ rS rSrSrS rSrg)ProgramPriorityTestsi!  z0Tests for os.getpriority() and os.setpriority().c                 $   [         R                  " [         R                  [         R                  " 5       5      nSU S3n[	        SU5      u  p4n[        U5      nUS:  a  XQ::  a  [        R                  " SU-  5      eU R                  XQS-   5        g )NzMif 1:
        import os
        os.setpriority(os.PRIO_PROCESS, os.getpid(), zJ + 1)
        print(os.getpriority(os.PRIO_PROCESS, os.getpid()))
        r      z?unable to reliably test setpriority at current nice level of %sr{   )	r   rw  PRIO_PROCESSr  r   r>  r   r  rE   )r5   r{  r   r  r  new_prios         r   test_set_get_priority*ProgramPriorityTests.test_set_get_priority&  s    ~~booryy{;66:V <	 %T40	s82:(*## %BDH%I J J Xax0r   r+   N)r`   ra   rb   rc   r  r  rd   r+   r   r   rz  rz  !  s     ;1r   rz  sendfileztest needs os.sendfile()c                      \ rS rSrSS-  r\R                  R                  S5      (       + r\	R                  " \S5      r\	R                  " \R                  S:  S5      r\S 5       r\S	 5       r\S
 5       rS rS rS r\S 5       r\S 5       rS rS rS rS rS r\S 5       r\S 5       r\\S 5       5       r\\S 5       5       r \\	R                  " \!" \"S5      S5      S 5       5       r#Sr$g)TestSendfilei9  s   12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcdei   )linuxandroidsolarissunosz%requires headers and trailers supportr^  z(test is only meaningful on 32-bit buildsc                 L    [        [        R                  U R                  5        g r(   )r%   r   rj   DATAr  s    r   r  TestSendfile.setUpClassD  s    I$$chh/r   c                 L    [         R                  " [         R                  5        g r(   )r   rk   rj   r  s    r   r&  TestSendfile.tearDownClassH  s    ))*r   c                   #    U R                  5       (       d3  U R                  5       I S h  vN 7v   U R                  5       (       d  M2  g g  N 7fr(   )at_eofr   )readers    r   chunksTestSendfile.chunksL  s/     --//%% --//%s   )AAA
Ac                    #    SR                  U R                  U5       Vs/ s S h  vN o3PM   N
 Os  snf sn5      U l        UR                  5         U R                  R                  5         g 7f)Nr   )rH   r  server_bufferrr   server)r5   r  writerr@  s       r   handle_new_clientTestSendfile.handle_new_clientQ  sI      XXF8K&L&L1q&L&LMs&   A/31
/1
31
3=A/c                 z  #    SU l         [        R                  " U R                  [        R
                  5      I S h  vN U l        U R                  R                  S   R                  5       n[        R                  " 5       U l
        U R                  R                  S5        [        R                  " 5       R                  U R                  U5      I S h  vN   U R                  R                  5       U l        [!        ["        R$                  S5      U l        U R&                  R                  5       U l        g  N Nd7f)Nr   r   Fr   )r  r)   start_serverr  r   HOSTv4r  socketsgetsocknamesocketclientsetblockingget_running_loopsock_connectr   socknor    r   rj   rI  )r5   server_names     r   
asyncSetUpTestSendfile.asyncSetUpV  s      #001G1G1>1E1EG Gkk))!,88:mmo&&&(55dkk;OOOkk((*))40	ii&&(G
 	Ps#   :D;D7BD;D9A#D;9D;c                    #    U R                   R                  5         U R                  R                  5         U R                  R	                  5       I S h  vN   g  N7fr(   )rI  rr   r  r  wait_closedrl   s    r   asyncTearDownTestSendfile.asyncTearDownb  s9     		kk%%'''s   AAAAc                  n   #    [         R                  " [        R                  /U Q70 UD6I S h  vN $  N7fr(   )r)   	to_threadr   r  )r   r  s     r   async_sendfileTestSendfile.async_sendfileh  s*     &&r{{DTDVDDDDs   ,535c                    #      [         R                  " U 0 UD6I Sh  vN $  N! [         aY  nUR                  [        R                  :X  a  e UR                  [        R
                  [        R                  4;   a   SnAM  e SnAff = f7f)zVA higher level wrapper representing how an application is
supposed to use sendfile().
N)r  r  rL   rM   
ECONNRESETEAGAINEBUSY)r   r  r  s      r   sendfile_wrapperTestSendfile.sendfile_wrapperl  sn     
 
)88$I&IIII 99 0 00YY5<<"==s=   B% #% B% 
BAB<BBBBc                   #    SnSnSnU[        U R                  5      :  a}  U R                  U R                  U R                  X#5      I S h  vN nUS:X  a  OGX$-  nX-  nU R                  XC:*  5        U R                  X!5        U[        U R                  5      :  a  M}  U R                  U[        U R                  5      5        U R                  R                  [        R                  5        U R                  R                  5         U R                  R                  5       I S h  vN   U R                  [        U R                  5      [        U R                  5      5        U R                  U R                  U R                  5        g  GN< Nf7f)Nr      )rA   r  r  r  r   rs   rE   r  shutdownr  	SHUT_RDWRrr   r  r  r  )r5   
total_sentoffsetnbytessents        r   test_send_whole_file!TestSendfile.test_send_whole_file~  s.    
3tyy>)..t{{DKK/5? ?DqyNFJOODN+V0 3tyy>) 	S^4V--.kk%%'''T//0#dii.A++TYY7? 	(s-   A
FFAFBF$F%A$FFc                   #    Sn[        U R                  5      S-  n[        U R                  5      U-
  nSnX:  aX  U R                  U R                  U R                  X$5      I S h  vN nUS:X  a  O"X%-  nX-  nU R                  XT:*  5        X:  a  MX  U R                  R                  [        R                  5        U R                  R                  5         U R                  R                  5       I S h  vN   U R                  [        U R                  5      S-  S  nU R                  U[        U5      5        U R                  [        U R                  5      [        U5      5        U R                  U R                  U5        g  GN N7f)Nr   r}   r  )rA   r  r  r  r   rs   r  r  r  r  rr   r  r  rE   r  )r5   r  r  	must_sendr  r  rU   s          r   test_send_at_certain_offset(TestSendfile.test_send_at_certain_offset  s=    
TYY1$		NV+	$..t{{DKK/5? ?DqyNFJOODN+ $ 	V--.kk%%'''99S^q012S]3T//0#h-@++X6? 	(s,   A$F	&F'+F	A F	4F5BF	F	c                 8  #    [        U R                  5      S-   n U R                  U R                  U R                  US5      I S h  vN nU R                  US5        U R                  R                  [        R                  5        U R                  R                  5         U R                  R                  5       I S h  vN   U R                  U R                   S5        g  N! [         a)  nUR                  [        R                  :w  a  e  S nANS nAff = f NY7f)Nr  r   r   )rA   r  r  r  r   rE   rL   rM   EINVALr  r  r  r  rr   r  r  r  )r5   r  r  r   s       r   test_offset_overflow!TestSendfile.test_offset_overflow  s     TYY$&	&,,T[[$++-3T; ;D T1%V--.kk%%'''++S1; 	ww%,,& '	 	(sM   D+C" C C" A2D>D?!D C" "
D,DDDDc                 6  #    U R                  [        5       nU R                  U R                  U R                  SS5      I S h  vN   S S S 5        U R                  WR                  R                  [        R                  5        g  NA! , (       d  f       NE= f7f)NrA  r  )	r   rL   r  r  r   rE   r  rM   r  r5   r$  s     r   test_invalid_offset TestSendfile.test_invalid_offset  sh     w'2%%dkk4;;DIII (++U\\: J ('s.   B,BBB	=BB
BBc           
         #    U R                  U R                  U R                  SSS9I S h  vN   U R                  (       a2  U R                  U R                  U R                  SSSSSS9I S h  vN   g g  NH N7f)Nr   r  )r   r   r  rV  r+   )r   r   r  rV  headerstrailersr   )r  r  r   SUPPORT_HEADERS_TRAILERSrl   s    r   test_keywordsTestSendfile.test_keywords  s     !!DKK)*$ " 8 	8 	8((%%T[[-.d.02Q & H H H )	8Hs"   *A9A5AA9.A7/A97A9c                   #    SnSU R                   S S -   nU R                  U R                  U R                  SSSS/S9I S h  vN nU R	                  US5        X-  nSnU[        U5      :  ax  [        [        U5      U-
  S5      nU R                  U R                  U R                  XE5      I S h  vN nUS:X  a  O*U R	                  X55        X-  nXC-  nU[        U5      :  a  Mx  U R                  U[        U5      5        U R                  R                  5         U R                  R                  5       I S h  vN   U R                  [        U R                  5      [        U5      5        g  GN* N N87f)	Nr   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyrA  r  s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr  i   )r  r  r  r   assertLessEqualrA   minr  rE   r  rr   r  r  hashr  )r5   r  expected_datar  r  r  s         r   test_headersTestSendfile.test_headers  sZ    
/$))CR.@((dkk1d2<j1I ) K KT#34
3}--]+j8$?F..t{{DKK/5? ?Dqy  .JNF 3}-- 	S%78kk%%'''d00143FG%K? 	(s>   AE4E-A-E41E023E4'AE49E2:4E40E42E4c           	        #    [         R                  S-   nSnU R                  [         R                  U5        [	        X5        [        US5       nU R                  U R                  UR                  5       SSSS/S9I S h  vN   U R                  R                  5         U R                  R                  5       I S h  vN   U R                  U R                  S	5        S S S 5        g  Ne N+! , (       d  f       g = f7f)
Nr  s   abcdefr   r   r   s   123456s   789r  s   abcde123456789)r   rj   r   rk   r%   r    r  r  r   r  rr   r  r  rE   r  )r5   r   	file_datarw   s       r   test_trailersTestSendfile.test_trailers  s     ""S(		(('2G''4 A%%dkk188:q!096/B & D D DKK++))+++T//1BC ! D ,	 ! sB   AC;1C* C&;C*<C(= C*	C;&C*(C**
C84C;c           	      x  #    SU R                   R                  l        U R                  [        5       nU R                  U R                  U R                  SSSS-  /S-  S9I S h  vN   S S S 5        U R                  WR                  R                  [        R                  5        g  NA! , (       d  f       NE= f7f)NFr      x   r  r  r  handler_instance
accumulater   rL   r  r  r   rE   r  rM   r  r  s     r   test_headers_overflow_32bits)TestSendfile.test_headers_overflow_32bits  s      38$$/w'2%%dkk4;;1/3e|nu.D & F F F ( 	++U\\:F ('.   1B:2B)%B'&B)*=B:'B))
B73B:c           	      x  #    SU R                   R                  l        U R                  [        5       nU R                  U R                  U R                  SSSS-  /S-  S9I S h  vN   S S S 5        U R                  WR                  R                  [        R                  5        g  NA! , (       d  f       NE= f7f)NFr   r  r  r  r  r  r  s     r   test_trailers_overflow_32bits*TestSendfile.test_trailers_overflow_32bits  s      38$$/w'2%%dkk4;;104u~/E & G G G ( 	++U\\:G ('r  SF_NODISKIOztest needs os.SF_NODISKIOc                   #     U R                  U R                  U R                  SS[        R                  S9I S h  vN   g  N! [
         a9  nUR                  [        R                  [        R                  4;  a  e  S nAg S nAff = f7f)Nr   r  r   )	r  r  r   r   r  rL   rM   r  r  )r5   r  s     r   
test_flagsTestSendfile.test_flags  sn     	%%dkk4;;4,.NN & < < < 	yyell ;; <	s>   B
8A AA B
A 
B/B=B
BB
)r  rI  r   r  r  r  N)%r`   ra   rb   rc   r  r?   r@   r  r  r   r   requires_headers_trailersmaxsizerequires_32br(  r  r&  rP  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r  rd   r+   r   r   r  r  9  s    $DLL##$LMM  ( 3 34L3!5&&s{{U':68L 0 0 + + & &

)( E E  "8,7.2";
H H H. D D ;  ; ;  ; ]3466 r   r  c                     [        [        S5      (       d  g [        [        R                  SS5       n  [        R
                  " U R                  5       SS5         S S S 5        [        R                  " [        R                  5        g! [         a/     S S S 5        [        R                  " [        R                  5        gf = f! , (       d  f       No= f! [        R                  " [        R                  5        f = f)NsetxattrFr   r   	   user.testr   T)	r   r   r    r   rj   r  r   rL   rk   )r$   s    r   supports_extended_attributesr    s    2z""+)""D!,BIIKs; - 	))*  	 - 	))* -, 	))*sE   C C&B	C 	
CCC CC
CC &C<z(no non-broken extended attribute supportr}   r   '   c                   2    \ rS rSrS rS rS rS rS rSr	g)	ExtendedAttributeTestsi!  c                 t   [         R                  nU R                  [         R                  U5        [	        U5        U R                  [        5       nU" Xq" S5      40 UD6  S S S 5        U R                  WR                  R                  [        R                  5        U" U5      n	U R                  U	[        5        U" Xq" S5      S40 UD6  [        U	5      n
U
R                  S5        U R                  [        U" U5      5      U
5        U R                  U" US40 UD6S5        U" Xq" S5      S[        R                   40 UD6  U R                  U" US40 UD6S5        U R                  [        5       nU" Xq" S5      S[        R"                  40 UD6  S S S 5        U R                  UR                  R                  [        R$                  5        U R                  [        5       nU" Xq" S5      S[        R                   40 UD6  S S S 5        U R                  UR                  R                  [        R                  5        U" Xq" S5      S[        R"                  40 UD6  U
R                  S5        U R                  [        U" U5      5      U
5        U" Xq" S5      40 UD6  U R                  [        5       nU" Xq" S5      40 UD6  S S S 5        U R                  UR                  R                  [        R                  5        U
R'                  S5        U R                  [        U" U5      5      U
5        U R                  U" Xq" S5      40 UD6S5        U" Xq" S5      S40 UD6  U R                  U" Xq" S5      40 UD6S5        U" Xq" S5      40 UD6  [)        S	 [+        S
5       5       5      nU H  nU" X|S40 UD6  M     U R                  [        U" U5      5      [        U	5      [        U5      -  5        g ! , (       d  f       GN= f! , (       d  f       GN{= f! , (       d  f       GN= f! , (       d  f       GNm= f)N	user.testr   r  rB  s   byez
user.test2   foos   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac              3   D   #    U  H  nS R                  U5      v   M     g7f)zuser.test{}N)r  )r  r   s     r   r  ;ExtendedAttributeTests._check_xattrs_str.<locals>.<genexpr>R  s     Ay!m**1--ys        r  )r   rj   r   rk   r%   r   rL   rE   r  rM   ENODATAr2   rB  r  r  r   XATTR_REPLACEXATTR_CREATEEEXISTrK  r  r   )r5   r   getxattrr  removexattr	listxattrr  r  r$  
init_xattrxattrmanythings                r   _check_xattrs_str(ExtendedAttributeTests._check_xattrs_str'  s[   	(("-Bw'2R;262 (++U]];r]
j$/Q{^S3F3J		+Yr]+U3"l=f=sCQ{^Xr/?/?J6J"l=f=xHw'2R;KFK (++U\\:w'2R<&"2B2BMfM (++U]];Q|_fbooHH		,Yr]+U3B+1&1w'2R;262 (++U]];[!Yr]+U3"ao@@&IQ{^X88"an??JB+1&1AuRyAAER// Yr]+S_s4y-HIS (' (' (' ('s0   O20 P! P2P(2
P
P
P%(
P7c                    U R                   " [        /UQ70 UD6  [        R                  " [        R                  5        U R                   " [
        R                  /UQ70 UD6  [        R                  " [        R                  5        g r(   )r	  r3   r   rk   rj   r   r  r  s      r   _check_xattrs$ExtendedAttributeTests._check_xattrsW  s^    s4T4V4))*r{{<T<V<))*r   c                     U R                  [        R                  [        R                  [        R                  [        R
                  5        g r(   r  r   r  r  r  r  rl   s    r   test_simple"ExtendedAttributeTests.test_simple^  s)    2;;R^^<<	)r   c                     U R                  [        R                  [        R                  [        R                  [        R
                  SS9  g )NFr;  r  rl   s    r   
test_lpath!ExtendedAttributeTests.test_lpathb  s1    2;;R^^<< 	 	@r   c                 @    S nS nS nS nU R                  XX45        g )Nc                     [        U S5       n[        R                  " UR                  5       /UQ76 sS S S 5        $ ! , (       d  f       g = fr  )r    r   r  r   rF   r   r$   s      r   r  1ExtendedAttributeTests.test_fds.<locals>.getxattrg  s1    dD!R{{299;66 "!!	   %<
A
c                     [        U SS5       n[        R                  " UR                  5       /UQ76   S S S 5        g ! , (       d  f       g = fNr  r   )r    r   r  r   r  s      r   r  1ExtendedAttributeTests.test_fds.<locals>.setxattrj  s3    dD!$BIIK/$/ %$$	   &=
Ac                     [        U SS5       n[        R                  " UR                  5       /UQ76   S S S 5        g ! , (       d  f       g = fr  )r    r   r  r   r  s      r   r  4ExtendedAttributeTests.test_fds.<locals>.removexattrm  s3    dD!$ryy{2T2 %$$r  c                     [        U S5       n[        R                  " UR                  5       /UQ76 sS S S 5        $ ! , (       d  f       g = fr  )r    r   r  r   r  s      r   r  2ExtendedAttributeTests.test_fds.<locals>.listxattrp  s1    dD!R||BIIK7$7 "!!r  )r  )r5   r  r  r  r  s        r   test_fdsExtendedAttributeTests.test_fdsf  s(    	7	0	3	8 	8{Fr   r+   N)
r`   ra   rb   rc   r	  r  r  r  r"  rd   r+   r   r   r  r  !  s    .J`+)@Gr   r  get_terminal_sizezrequires os.get_terminal_sizec                       \ rS rSrS r\R                  " 5       S 5       r\R                  " \
R                  S:H  S5      S 5       rSrg)	TermsizeTestsiv  c                     [         R                  " 5       nU R                  UR                  S5        U R                  UR                  S5        g! [         a  n[        R                  [        R
                  /n[        R                  S:X  a  UR                  [        R                  5        [        R                  S:X  d  UR                  U;   a  U R                  S5        e SnAff = f)zCheck 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  r   failed to query terminal sizeNr   )r   r$  rL   rM   r  ENOTTYr?   r@   rJ  EACCESr   r  columnsr  )r5   r   r   known_errnoss       r   test_does_not_crash!TermsizeTests.test_does_not_crashx  s    	'')D 	a0

A.  
	!LL%,,7L||y( ##ELL1||w&!''\*A =>
	s   A 
C(B	C##C(c                 f    [         R                  " SS/[         R                  SS9R                  5       n[        WS   5      [        US   5      4n [        R                  " [        R                  R                  5       5      nU R'                  X#5        g
! [        [         R
                  [        4 a    U R                  S5         Nf = f! [         aY  n[        R                  S:X  d.  UR                   [         R"                  [         R$                  4;   a  U R                  S	5        e S
nAff = f)zCheck 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.
sttyr   T)r  r  zstty invocation failedr{   r   r   r(  N)r   r  DEVNULLrW  rK   r  r5  r   r>  r   r$  r?   	__stdin__r   rL   r@   rM   r  r)  rE   )r5   r   rU   r  r   s        r   test_stty_matchTermsizeTests.test_stty_match  s    	4''V$Z-?-?d%'  QL#d1g,/	))#--*>*>*@AF 	* ":#@#@! 	4MM23	4  	||w&!''ellELL5Q*Q =>	s*   4B 2C 0C
	C

D0AD++D0r   zWindows specific testc                 P    [        SS5      nW   [        R                  " UR                  5       5      nSSS5        U R                  WR                  S5        U R                  UR                  S5        g! [         a    U R                  S5         Nf = f! , (       d  f       Nh= f)zBCheck if get_terminal_size() returns a meaningful value in Windowszconout$r  zfailed to open conout$Nr   )	r    rL   r   r   r$  r   r  r+  r  )r5   conoutr   s      r   test_windows_fdTermsizeTests.test_windows_fd  s    	4)S)F ''8D  	a0

A.  	4MM23	4Vs   A6 %B6BB
B%r+   N)r`   ra   rb   rc   r-  r   r  r3  r   r   r?   r@   r7  rd   r+   r   r   r&  r&  v  sP    /.   "+ #+8 02IJ
/ K
/r   r&  memfd_createzrequires os.memfd_creater  r%  c                       \ rS rSrS rSrg)MemfdCreateTestsi  c                 ^   [         R                  " S[         R                  5      nU R                  US5        U R	                  [         R
                  U5        U R                  [         R                  " U5      5        [        USSS9 nUR                  S5        U R                  UR                  5       S5        S S S 5        [         R                  " S5      nU R	                  [         R
                  U5        U R                  [         R                  " U5      5        g ! , (       d  f       Nj= f)NHirA  r  F)closefds   memfd_createrN  )r   r9  MFD_CLOEXECr  r   rr   r3  r6  r    r!   rE   tell)r5   r   rw   r  s       r   test_memfd_create"MemfdCreateTests.test_memfd_create  s    __T2>>2B#"%++B/0"dE*aGGO$QVVXr* + ood##&++C01 +*s   2D
D,r+   N)r`   ra   rb   rc   rA  rd   r+   r   r   r;  r;    s    2r   r;  eventfdzrequires os.eventfdrx  c                   &    \ rS rSrS rS rS rSrg)EventfdTestsi  c                 N   S nSnSn[         R                  " U5      nU R                  US5        U R                  [         R                  U5        U R                  [         R                  " U5      5        [         R                  " XB5      nU R                  XQ" U5      5        [         R                  " XA" S5      5        [         R                  " XB5      nU R                  XQ" S5      5        [         R                  " XA" S5      5        [         R                  " XA" S5      5        [         R                  " XB5      nU R                  XQ" S5      5        [         R                  " US5        [         R                  " US	5        [         R                  " U5      nU R                  US5        g )
Nc                 0    [         R                  " SU 5      $ )z$Pack as native uint64_t
            z@Q)structpack)r  s    r   rI  /EventfdTests.test_eventfd_initval.<locals>.pack  s     ;;tU++r   rK  rM  rA  r  (   r}   r  r  )r   rC  r  r   rr   r3  r6  r   rE   r!   eventfd_writeeventfd_read)r5   rI  r   initvalr   ress         r   test_eventfd_initval!EventfdTests.test_eventfd_initval  s:   	, ZZ B#"%++B/0 ggbd7m,
T"Xggbd2h'
T"X
T!Wggbd2h' 	R 
Qoob!b!r   c                    Sn[         R                  [         R                  -  [         R                  -  n[         R                  " X5      nU R                  US5        U R                  [         R                  U5        [         R                  " U5      nU R                  US5        [         R                  " U5      nU R                  US5        U R                  [        5         [         R                  " U5        S S S 5        U R                  [        5         [         R                  " US5        S S S 5        [         R                  " US5        [         R                  " U5      nU R                  US5        U R                  [        5         [         R                  " U5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr}   rA  r{   rK  )r   EFD_CLOEXECEFD_SEMAPHOREEFD_NONBLOCKrC  r  r   rr   rM  rE   r   rn  r   rL  )r5   rN  r   r   rO  s        r   test_eventfd_semaphore#EventfdTests.test_eventfd_semaphore  s<   !1!11BOOCZZ'B#"% oob!a oob!a /OOB 0/GGBN 0 	Qoob!a /OOB 0/ 0/// 0/s$   "F*F;
G*
F8;
G	
Gc                    [         R                  [         R                  -  n[         R                  " SU5      nU R	                  US5        U R                  [         R                  U5        [        R                  " U/U/U/S5      u  p4nU R                  X4U4/ U// 45        [         R                  " US5        [        R                  " U/U/U/S5      u  p4nU R                  X4U4U/U// 45        U R                  [         R                  " U5      S5        [         R                  " US5        [        R                  " U/U/U/S5      u  p4nU R                  X4U4U// / 45        [         R                  " U5        g )Nr   rA  r  l    )r   rS  rU  rC  r  r   rr   selectrE   rL  rM  )r5   r   r   rfdwfdxfds         r   test_eventfd_select EventfdTests.test_eventfd_select  sB   0ZZ5!B#"% rdRD2$:##C2tR.9 	R rdRD2$:##CB4"r*:;,b1 	[)rdRD2$:##CB4R.9
r   r+   N)r`   ra   rb   rc   rP  rV  r]  rd   r+   r   r   rE  rE    s    "> 4r   rE  timerfd_createzrequires os.timerfd_creater  z#gh-124873: Test is flaky on Androidc                       \ rS rSrSrS\* -  rSS\-
  -  rS rS rS r	S r
\R                  " \R                  R                  S	5      S
5      S 5       rS rS rS rS rS rS rS rS rS rS rSrg)TimerfdTestsi  r}   r|   rL  c                     [         R                  " U0 UD6nU R                  US5        U R                  [         R                  " U5      5        U R                  [         R                  U5        U$ r   )r   r_  r  r3  r6  r   rr   )r5   r   r  r   s       r   r_  TimerfdTests.timerfd_create&  sW    //A&++B/0"%	r   c                 t    [         R                  " US5      n[        R                  U[        R
                  S9$ )NrK  )	byteorder)r   r   r>  
from_bytesr?   re  )r5   r   r   s      r   read_count_signaled TimerfdTests.read_count_signaled-  s(    wwr1~~~dcmm~<<r   c                    U R                  [        R                  5      nSnSn[        R                  " XUS9u  pEU R                  USU R                  S9  U R                  USU R                  S9  [        R                  " XUS9u  pEU R                  XSU R                  S9  U R                  XBU R                  S9  [        R                  " U5      u  pEU R                  XSU R                  S9  U R                  XBU R                  S9  g )N      ?      ?initialintervalr  places)r_  r  CLOCK_REALTIMEr   timerfd_settimerX  CLOCK_RES_PLACEStimerfd_gettime)r5   r   initial_expirationrn  next_expiration	interval2s         r   test_timerfd_initval!TimerfdTests.test_timerfd_initval2  s     !4!45! &(%7%7ai%j"y#d6K6KLD<Q<QR &(%7%7ai%j"y4;P;PQ4K`K`a &(%7%7%;"y4;P;PQ4K`K`ar   c                    U R                  [        R                  [        R                  S9nSn[        R
                  " XSS9  U R                  [        5       nU R                  U5        S S S 5        U R                  WR                  R                  [        R                  5        [        R                  " US-   5        U R                  U R                  U5      S5        g ! , (       d  f       N}= f)Nr  r  r   rl  r{   )r_  r  rq  r   TFD_NONBLOCKrr  r   rL   rg  rE   r  rM   r  r  )r5   r   ru  r  s       r   test_timerfd_non_blocking&TimerfdTests.test_timerfd_non_blockingG  s      !4!4BOO L !
2AF w'3$$R( (,,ell; 	

%+, 	11"5q9 ('s   C""
C0netbsdzIgh-131263: Skip on NetBSD due to system freeze with negative timer valuesc                    SnU R                  [        R                  5      nS[        R                  /n[        [        S5      (       a0  UR                  [        R                  [        R                  -  5        S GH  u  pEU GH  nU R                  XdUS9   U R                  [        5       n[        R                  " X&XES9  S S S 5        U R                  WR                  R                  [        R                  5        U R                  [        5       n[!        X-  5      n[!        X-  5      n	[        R"                  " X&XS9  S S S 5        U R                  UR                  R                  [        R                  5        S S S 5        GM     GM     g ! , (       d  f       N= f! , (       d  f       Nf= f! , (       d  f       GMB  = f)N ʚ;r   TFD_TIMER_CANCEL_ON_SET))rA  r   )r{   rA  )rA  rA  )皙r   )r{   r  )r  r  r   rm  rn  )r_  r  rq  r   TFD_TIMER_ABSTIMEr   rJ  r  rv  r   rL   rr  rE   r  rM   r  r>  timerfd_settime_ns)
r5   one_sec_in_nsecr   r  rm  rn  r   context
initial_nsinterval_nss
             r   test_timerfd_negative"TimerfdTests.test_timerfd_negativeY  sR       !4!45--.
2011b22R5O5OOP "dG#\\\R**73w**2G_ 4$$W%6%6%<%<ellK**73w%(/*C%E
&)?+E&G--bzh 4 $$W%6%6%<%<ellK SR $ "d 43 43 SRs=   F5-F	AF50F$	<F5
F!F5$
F2.F55
Gc                    U R                  [        R                  5      nSnSn[        R                  " XUS9  [        R
                  " U5      u  pEU R                  XSU R                  S9  U R                  XBU R                  S9  Sn[        R                  " 5       n[        U5       H$  nU R                  U R                  U5      S5        M&     [        R                  " 5       U-
  nX#US-
  -  -   n	U R                  XyU R                  -
  5        [        R                  " US-   U-  5        U R                  U R                  U5      U5        g )Nr{         ?rl  ro  r  )r_  r  rq  r   rr  rt  rX  rs  perf_counterr   rE   rg  r  	CLOCK_RESr  )
r5   r   ru  rn  rv  rw  rV  tr  
total_times
             r   test_timerfd_interval"TimerfdTests.test_timerfd_intervalr  s%     !4!45 
2HM &(%7%7%;"y4;P;PQ4K`K`auAT55b91= !#'eai*@@
14>>9: 	

U3Y(*+11"5u=r   c                 V   U R                  [        R                  5      n[        R                  " [        R                  5      nSnX#-   nSn[        R
                  " U[        R                  XES9  [        R                  " U5      u  pgU R                  XuU R                  S9  U R                  XcU R                  S9  [        R                  " 5       nU R                  U5      n	[        R                  " 5       U-
  nU R                  U	S5        U R                  XU R                  -
  5        g )Nr{   r   r  ro  )r_  r  rq  clock_gettimer   rr  r  rt  rX  rs  r  rg  rE   r  r  )
r5   r   r#  r  ru  rn  rv  rw  r  count_signaleds
             r   test_timerfd_TFD_TIMER_ABSTIME+TimerfdTests.test_timerfd_TFD_TIMER_ABSTIME  s      !4!45  !4!45  \
2R%9%9CUi &(%7%7%;"y4;P;PQt?T?TU11"5!#+1t~~56r   c                    U R                  [        R                  [        R                  S9n[
        R
                  " U/U/U/S5      u  p#nU R                  X#U4/ / / 45        SnSn[        R                  " XUS9  Sn[        R                  " 5       n[        U5       H]  n	[
        R
                  " U/U/U/XV-   5      u  p#nU R                  X#U4U// / 45        U R                  U R                  U5      S5        M_     [        R                  " 5       U-
  nXVUS-
  -  -   n
U R                  XU R                  -
  5        g )Nr  r   rj  rk  rl  r  r{   )r_  r  rq  r   r{  rY  rE   rr  r  r   rg  r  r  )r5   r   rZ  r[  r\  ru  rn  rV  r  r  r  s              r   test_timerfd_select TimerfdTests.test_timerfd_select  s-     !4!4BOO LrdRD2$:##C2r2,7 "
2HMuA"MM2$rd<N<YZMCcc_tRn=T55b91=  !#'eai*@@
14>>9:r   c                 L   U R                  [        R                  [        R                  S9n[
        R                  " 5       nUR                  U[
        R                  5        U R                  UR                  5        SnUS-  nUS-  nU(       a  [        R                  " UUUS9  O[        R                  " UXT-  Xd-  S9  SnU(       a  [        R                  " 5       nO[        R                  " 5       n[        U5       H  n	Un
U	S:X  a  XV-   U
-   nOXj-   nUR!                  X-  5      nU R#                  [%        U5      SU5        US   S   nU R#                  U[
        R                  5        U R#                  U R'                  U5      S5        M     XVUS-
  -  -   nU(       a7  [        R                  " 5       U-
  nU R)                  XU R*                  -
  5        O9[        R                  " 5       U-
  nU R)                  XU-  U R,                  -
  5        UR/                  U5        g )	Nr  r  r   rK  rl  r  r   r{   )r_  r  rq  r   r{  	selectorsDefaultSelectorregister
EVENT_READr   rr   r  rr  perf_counter_nsr  r   rY  rE   rA   rg  r  CLOCK_RES_NSr  
unregister)r5   nanosecondsr   selectorsec_to_nsecinitial_expiration_nsr  rV  r  r   timeout_margin_ns
timeout_nsreadyr  r  dts                   r   check_timerfd_pollTimerfdTests.check_timerfd_poll  s     !4!4BOO L,,."i223' +q 0!Q&!!"*?+68 r'<'J(3(AC $$&A!!#AuA +Av2@CTT
(<
OOJ$<=ESZE2!HQKEUI$8$89T55b91=  +EAI-FF
%%'!+Br0A0A#AB""$q(Br#;dnn#LMBr   c                 &    U R                  S5        g r  r  rl   s    r   test_timerfd_pollTimerfdTests.test_timerfd_poll  s    &r   c                 &    U R                  S5        g r5  r  rl   s    r   test_timerfd_ns_poll!TimerfdTests.test_timerfd_ns_poll  s    %r   c                    SnUS-  nU R                  [        R                  5      nSnUS-  n[        R                  " X4US9u  pgU R                  US5        U R                  US5        [        R                  " X4US9u  pgU R                  Xu5        U R                  Xd5        [        R                  " U5      u  pgU R                  Xu5        U R                  Xd5        U R                  XdUS9  g )Nr  r;   r   rl  rE  )	r_  r  rq  r   r  rE   timerfd_gettime_nsr  rX  )r5   r  limit_errorr   r  r  next_expiration_nsinterval_ns2s           r   test_timerfd_ns_initval$TimerfdTests.test_timerfd_ns_initval  s    %.  !4!45 !"%-,.,A,A"ny,z(q)+Q/ ,.+@+@mx+y(3+C ,.+@+@+D(3/G1P[\r   c                    SnUS-  nU R                  [        R                  5      nUnUS-  n[        R                  " X4US9  [        R
                  " U5      u  pgU R                  Xu5        U R                  Xd5        Sn[        R                  " 5       n	[        U5       H$  n
U R                  U R                  U5      S5        M&     [        R                  " 5       U	-
  n	XEUS-
  -  -   nU R                  XU R                  -
  5        [        R                  " US-   U-  U-  5        U R                  U R                  U5      U5        g )Nr  r;   r}   rl  r  r{   r  )r_  r  rq  r   r  r  rE   r  r  r   rg  r  r  r  )r5   r  r  r   r  r  r  r  rV  r  r  total_time_nss               r   test_timerfd_ns_interval%TimerfdTests.test_timerfd_ns_interval  s,   %.  !4!45 !0%*
b+V ,.+@+@+D(3/G  "uAT55b91=   "Q&-uqy0II1d.?.??@ 	

U3Y+-?@11"5u=r   c                 p   SnUS-  nU R                  [        R                  5      n[        R                  " [        R                  5      nUnXE-   nSn[        R
                  " U[        R                  XgS9  [        R                  " U5      u  pU R                  [        X-
  5      U5        U R                  [        X-
  5      U5        [        R                  " 5       n
U R                  U5      n[        R                  " 5       U
-
  n
U R                  US5        U R                  XU R                  -
  5        g )Nr  r;   r   r  r{   )r_  r  rq  clock_gettime_nsr   r  r  r  
assertLessabsr  rg  rE   r  r  )r5   r  r  r   now_ns	offset_nsr  r  r  r  r  r  s               r   !test_timerfd_ns_TFD_TIMER_ABSTIME.TimerfdTests.test_timerfd_ns_TFD_TIMER_ABSTIME/  s   %.  !4!45&&t':':; $	 & 2
b(<(<F[r ,.+@+@+D(L67+F.:;kJ  "11"5  "Q&+1$*;*;;<r   c                    SnU R                  [        R                  [        R                  S9n[
        R
                  " U/U/U/S5      u  p4nU R                  X4U4/ / / 45        US-  nUS-  n[        R                  " X&US9  Sn[        R                  " 5       n	[        U5       H`  n
[
        R
                  " U/U/U/Xg-   S-  5      u  p4nU R                  X4U4U// / 45        U R                  U R                  U5      S	5        Mb     [        R                  " 5       U	-
  n	XgUS	-
  -  -   nU R                  XU R                  -
  5        g )
Nr  r  r   r   rK  rl  r  g    eAr{   )r_  r  rq  r   r{  rY  rE   r  r  r   rg  r  r  )r5   r  r   rZ  r[  r\  r  r  rV  r  r  r  s               r   test_timerfd_ns_select#TimerfdTests.test_timerfd_ns_selectK  sD     !4!4BOO LrdRD2$:##C2r2,7 !01 4%*
b+V  "uA"MM2$rd=R=`dg<giMCcc_tRn=T55b91=    "Q&-uqy0II1d.?.??@r   r+   N)r`   ra   rb   rc   rs  r  r  r_  rg  rx  r|  r   r.  r?   r@   r  r  r  r  r  r  r  r  r  r  r  r  rd   r+   r   r   ra  ra    s    
 '''I!../L=
b*:$ __S\\,,X623L3L,>874;00 d'&]0>>=8Ar   ra  c                        \ rS rSrS rS rSrg)OSErrorTestsie  c                     " S S[         5      n/ U l        / U l        [        R                  b  [        R                  nO[        R
                  nU R                  R                  U5        U R                  R                  U" U5      5        [        R                  b  [        R                  nO$[        R                  " [        R
                  5      nU R                  R                  U5        U R                  U R                  -   U l
        g )Nc                       \ rS rSrSrg)OSErrorTests.setUp.<locals>.Strig  r+   Nr`   ra   rb   rc   rd   r+   r   r   Strr  g      r   r  )r3   bytes_filenamesunicode_filenamesr   r  rj   rJ  TESTFN_UNDECODABLEr   r  r  )r5   r  decodedencodeds       r   rm   OSErrorTests.setUpf  s    	# 	  "!#''322G&&G%%g.%%c'l3''322Gkk)"2"23G##G,--0F0FFr   c                 R	   U R                   [        R                  4U R                   [        R                  4U R                   [        R                  [        R
                  4U R                   [        R                  4U R                   [        R                  4U R                   [        R                  4U R                   [        R                  4U R                   [        R                  S4U R                   [        R                  S4/	n[        R                  " 5       (       a,  UR                  U R                   [        R                  S45        [!        [        S5      (       a-  UR                  U R                   [        R"                  SS45        [!        [        S5      (       a-  UR                  U R                   [        R$                  SS45        [!        [        S5      (       a,  UR                  U R                   [        R&                  S45        [!        [        S5      (       a,  UR                  U R                   [        R(                  S45        [!        [        S5      (       a,  UR                  U R                   [        R*                  S45        [!        [        S	5      (       a+  UR                  U R                   [        R,                  45        [!        [        S
5      (       a,  UR                  U R                   [        R.                  S45        [!        [        S5      (       a  UR1                  U R                   [        R2                  4U R                   [        R4                  S4U R                   [        R6                  SS4U R                   [        R8                  S445        [!        [        S5      (       a,  UR                  U R                   [        R:                  S45        [!        [        S5      (       a+  UR                  U R                   [        R<                  45        U H,  tp#nU H!  n U" U/UQ76   U R?                  SU 35        M#     M.     g ! [@         a1  nU RC                  URD                  U[G        U5      5         S nAM`  S nAf[H         a     Mp  f = f)Nr   r   r  r   lchownr  chflagslchflagschrootr!  r  r  s   userlchmodr   zNo exception thrown by )%r  r   rJ   r  r    r   r  r   rk   r3  r   r   r   	can_chmodrJ  r2  r   r  r  r  r  r  r  r!  rt  r  r  r  r  r  r   r\  rL   r  r"   r3   UnicodeDecodeError)r5   funcsr  func	func_argsr   r  s          r   test_oserror_filename"OSErrorTests.test_oserror_filenamez  s   ^^RXX'^^RXX'^^RWWbkk2^^RXX'^^RWW&^^RYY(^^RZZ)^^RYY.^^RZZ/

   LL$.."((E:;2wLL$.."((Aq9:2x  LL$.."))Q:;2z""LL$.."++q9:2y!!LL$.."**a892z""LL$.."++q9:2x  LL$.."))562vLL$.."''59:2{##LL/k:k7C=	  2x  LL$.."))U;<2z""LL$.."++78+0'Ii!@*	* II 7v>? " ,1  AMM#,,c$i@@) s   9	Q
R&)&RR&%R&)r  r  r  N)r`   ra   rb   rc   rm   r  rd   r+   r   r   r  r  e  s    G(1@r   r  c                   f    \ rS rSrS rS rS r\R                  " \	" \
S5      S5      S 5       rSrg	)
CPUCountTestsi  c                 |    Uc  U R                  S5        U R                  U[        5        U R                  US5        g )N&Could not determine the number of CPUsr   )r   r2   r>  r  r5   cpuss     r   check_cpu_countCPUCountTests.check_cpu_count  s4    <MMBCdC(4#r   c                 P    [         R                  " 5       nU R                  U5        g r(   )r   	cpu_countr  r  s     r   test_cpu_countCPUCountTests.test_cpu_count  s    ||~T"r   c                     [         R                  " 5       nU R                  U[         R                  " 5       5        U R	                  U5        g r(   )r   process_cpu_countr  r  r  r  s     r   test_process_cpu_count$CPUCountTests.test_process_cpu_count  s4    ##%T2<<>2T"r   sched_setaffinityz!don't have sched affinity supportc                    [         R                  " 5       nUc  U R                  S5        [         R                  " S5      n[	        U5      S::  a  U R                  S[        U5       35        U R                  [         R                  S[        U5      5        UR                  5         [         R                  " SU5        [         R                  " 5       nU R                  X1S-
  5        g )Nr  r   r{   z.sched_getaffinity() returns less than 2 CPUs: )r   r  r   sched_getaffinityrA   r  r   r  rB  r  rE   )r5   	affinity1mask	affinity2s       r   test_process_cpu_count_affinity-CPUCountTests.test_process_cpu_count_affinity  s     ((*	MMBC ##A&t9>MM %%+D\N4 5,,ad<

Q% ((*	M2r   r+   N)r`   ra   rb   rc   r  r  r  r   r   r   r   r  rd   r+   r   r   r  r    s=    $##
 %89<>3>3r   r  c                      \ rS rSrS r\R                  " \SL S5      S 5       r\R                  " \SL S5      S 5       r	\R                  " \" \S5      S5      S	 5       rS
 rS r\R                  " \" \S5      S5      S 5       rS rS r\R                  " \R(                  S:H  S5      S 5       r\R                  " \" \S5      S5      S 5       rSrg)FDInheritanceTestsi  c                 \   [         R                  " [        [         R                  5      nU R	                  [         R
                  U5        U R                  [         R                  " U5      S5        [         R                  " US5        U R                  [         R                  " U5      S5        g NFT)	r   r    r   r   r   rr   rE   r6  r7  r   s     r   test_get_set_inheritable+FDInheritanceTests.test_get_set_inheritable  sn    WWXr{{+"%++B/7
2t$++B/6r   Nz
need fcntlc                    [         R                  " [        [         R                  5      nU R	                  [         R
                  U5        U R                  [         R                  " U5      S5        [        R                  " U[        R                  5      nU[        R                  ) -  n[        R                  " U[        R                  U5        U R                  [         R                  " U5      S5        g r	  )r   r    r   r   r   rr   rE   r6  fcntlF_GETFD
FD_CLOEXECF_SETFD)r5   r   r   s      r   test_get_inheritable_cloexec/FDInheritanceTests.test_get_inheritable_cloexec  s    WWXr{{+"%++B/7 B.%""""Bu-++B/6r   c                    [         R                  " [        [         R                  5      nU R	                  [         R
                  U5        U R                  [        R                  " U[        R                  5      [        R                  -  [        R                  5        [         R                  " US5        U R                  [        R                  " U[        R                  5      [        R                  -  S5        g )NTr   )r   r    r   r   r   rr   rE   r	  r	  r	  r7  r   s     r   test_set_inheritable_cloexec/FDInheritanceTests.test_set_inheritable_cloexec  s    WWXr{{+"%R7%:J:JJ))	+ 	2t$R7%:J:JJ	r   O_PATHzneed os.O_PATHc                    [         R                  " [        [         R                  5      nU R	                  [         R
                  U5        U R                  [         R                  " U5      S5        [         R                  " US5        U R                  [         R                  " U5      S5        [         R                  " US5        U R                  [         R                  " U5      S5        g r	  )	r   r    r   r	  r   rr   rE   r6  r7  r   s     r   test_get_set_inheritable_o_path2FDInheritanceTests.test_get_set_inheritable_o_path  s    WWXryy)"%++B/7
2t$++B/6
2u%++B/7r   c                 
   [         R                  " 5       nU R                  [        5       n[        R
                  " U5        S S S 5        U R                  WR                  R                  [        R                  5        U R                  [        5       n[        R                  " US5        S S S 5        U R                  UR                  R                  [        R                  5        U R                  [        5       n[        R                  " US5        S S S 5        U R                  UR                  R                  [        R                  5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       Nf= fNTF)r   r  r   rL   r   r6  rE   r  rM   r  r7  )r5   r   r  s      r   test_get_set_inheritable_badf0FDInheritanceTests.test_get_set_inheritable_badf  s    ""$w'3r" (,,ekk:w'3r4( (,,ekk:w'3r5) (,,ekk: (' (' ('s#   EE#<E4
E #
E14
Fc                     [         R                  " [        [         R                  5      nU R	                  [         R
                  U5        U R                  [         R                  " U5      S5        g r  )r   r    r   r   r   rr   rE   r6  r   s     r   r  FDInheritanceTests.test_open  sC    WWXr{{+"%++B/7r   r  zneed os.pipe()c                 J   [         R                  " 5       u  pU R                  [         R                  U5        U R                  [         R                  U5        U R	                  [         R
                  " U5      S5        U R	                  [         R
                  " U5      S5        g r  )r   r  r   rr   rE   r6  )r5   rZ  r[  s      r   	test_pipeFDInheritanceTests.test_pipe  si    779#&#&++C0%8++C0%8r   c                 N   [         R                  " [        [         R                  5      nU R	                  [         R
                  U5        [         R                  " U5      nU R	                  [         R
                  U5        U R                  [         R                  " U5      S5        g r  )	r   r    r   r   r   rr   r   rE   r6  r5   fd1r  s      r   test_dupFDInheritanceTests.test_dup  sb    ggh,#&ffSk#&++C0%8r   c                     [         R                  " S5      nU R                  [         R                  U5        U R	                  US5        g Nr{   r   )r   r   r   rr   r  r   s     r   test_dup_standard_stream+FDInheritanceTests.test_dup_standard_stream&  s1    VVAY"%2q!r   r   r
  c                 D   [         R                  " S[         R                  5      nU R                  [         R                  U5        [         R
                  " U5      nU R                  [         R                  U5        U R                  [         R                  " U5      5        g )NNUL)r   r    r   r   rr   r   r3  r6  r	  s      r   test_dup_nulFDInheritanceTests.test_dup_nul+  sb     ggeR[[)#&ffSk#&++C01r   r  zneed os.dup2()c                    [         R                  " [        [         R                  5      nU R	                  [         R
                  U5        [         R                  " [        [         R                  5      nU R	                  [         R
                  U5        U R                  [         R                  " X5      U5        U R                  [         R                  " U5      5        [         R                  " [        [         R                  5      nU R	                  [         R
                  U5        U R                  [         R                  " XSS9U5        U R                  [         R                  " U5      5        g )NF)inheritable)r   r    r   r   r   rr   rE   r  rs   r6  r3  )r5   r   r  fd3s       r   r  FDInheritanceTests.test_dup24  s    WWXr{{+"% ggh,#&)3/**3/0 ggh,#&e<cB++C01r   r+   )r`   ra   rb   rc   r	  r   r.  r	  r		  r	  r   r   r   r	  r	  r  r	  r	  r"	  r?   r@   r&	  r  rd   r+   r   r   r  r    s   7 __Ud]L1
7 2
7 __Ud]L1 2 X.0@A	8 B	8;8
 V,.>?9 @99"
 02GH2 I2 V,.>?2 @2r   r  openptyzneed os.openpty()c                      \ rS rSrS rS r\R                  " \" \	S5      S5      \R                  " \" \	S5      S5      \R                  " \" \	S5      S	5      S
 5       5       5       r
\R                  " \" \	S5      S5      \R                  " \" \	S5      S5      \R                  " \" \	S5      S5      \R                  " \" \	S5      S5      \R                  " \" \	S5      S5      \R                  " \" \	S5      S	5      S 5       5       5       5       5       5       r\R                  " \" \	S5      S5      \R                  " 5       S 5       5       rSrg)PseudoterminalTestsiE  c                     [         R                  " 5       u  pU R                  [         R                  U5        U R                  [         R                  U5        X4$ )z/Open a pty fd-pair, and schedule cleanup for it)r   r,	  r   rr   r5   main_fd	second_fds      r   open_ptyPseudoterminalTests.open_ptyG  s=    ZZ\'*),!!r   c                     U R                  5       u  pU R                  [        R                  " U5      S5        U R                  [        R                  " U5      S5        g r  )r3	  rE   r   r6  r0	  s      r   test_openpty PseudoterminalTests.test_openptyN  sF    !]]_++G4e<++I6>r   ptsnamezneed os.ptsname()rq   zneed os.O_RDWRO_NOCTTYzneed os.O_NOCTTYc                 |   U R                  5       u  p[        R                  " U5      n[        R                  " U[        R                  [        R
                  -  5      nU R                  [        R                  U5        [        R                  " US5        U R                  [        R                  " US5      S5        g )Nr  r  )r3	  r   r8	  r    rq   r9	  r   rr   r!   rE   r   )r5   r1	  r2	  second_pathreopened_second_fds        r   test_open_via_ptsname)PseudoterminalTests.test_open_via_ptsnameS  s{     "]]_jj)WW["))BKK2GH"45
#V,!,f5r   posix_openptzneed os.posix_openpt()grantptzneed os.grantpt()unlockptzneed os.unlockpt()c                 R   [         R                  " [         R                  [         R                  -  5      nU R	                  [         R
                  U5        [         R                  " U5        [         R                  " U5        [         R                  " U5      n[         R                  " U[         R                  [         R                  -  5      nU R	                  [         R
                  U5        U R                  [         R                  " U5      [         R                  " U5      5        g r(   )r   r?	  rq   r9	  r   rr   r@	  rA	  r8	  r    rE   r  )r5   	mother_fdson_pathson_fds       r   test_posix_pty_functions,PseudoterminalTests.test_posix_pty_functions^  s     OOBIIbkk$9:	),


9
I::i(299R[[#89&)I.

60BCr   r+  zneed os.spawnl()c                    [         R                  " 5       u  pU R                  [         R                  U5        U R                  [         R                  U5        [        R
                  " SU S35      n[        R                  nU R                  [        R                  [        R                  5        [        US5       n[        X5SS9  S S S 5        [        R                  nXd/n[         R                  S:X  a  SUS   ;   a  S	US    S	3US'   [         R                  " [         R                  U/UQ76 nU R!                  US5        g ! , (       d  f       N= f)
Nz
            import errno
            import os
            import test.support
            try:
                import msvcrt
            except ImportError:
                msvcrt = None

            fd = aA  

            with test.support.SuppressCrashReport():
                if msvcrt is not None:
                    try:
                        handle = msvcrt.get_osfhandle(fd)
                    except OSError as exc:
                        if exc.errno != errno.EBADF:
                            raise
                        # get_osfhandle(fd) failed with EBADF as expected
                    else:
                        raise Exception("get_osfhandle() must fail")

                try:
                    fd3 = os.dup(fd)
                except OSError as exc:
                    if exc.errno != errno.EBADF:
                        raise
                    # os.dup(fd) failed with EBADF as expected
                else:
                    os.close(fd3)
                    raise Exception("dup must fail")
        r  r)  )rI  endr  r  r   r  )r   r  r   rr   r  r  r   rj   rk   r    rP   r?   r   r   r+  r-  rE   )	r5   r   r  r   r"   r$   r   r  r  s	            r   test_pipe_spawnl$PseudoterminalTests.test_pipe_spawnln  s    '')"%#& 	$  	  B ##	(()*:*:;(C B$R( ! ^^
$77d?sc!f}Q]CF99RYY
9S91% ! s   <E
Er+   N)r`   ra   rb   rc   r3	  r6	  r   r   r   r   r=	  rF	  r   r  rJ	  rd   r+   r   r   r.	  r.	  E  so   "?
 Y/1DEX.0@AZ02DE6 F B F6 ^46NOY/1DEZ02FGY/1DEX.0@AZ02DED F B F H F PD X.0BC  "7& # D7&r   r.	  c                   |    \ rS rSrSSSS\R
                  4S4SSS	S\R                  4\" \S
S5      4/rS r	S r
Srg)PathTConverterTestsi  )r   Tr+   N)r  Fr+   Nrt   FN)r  Fr   N)r  FrN	  Nr    rr   c           	         [         R                  n[        R                  S:X  a  S =p#O/[        R                  " [         R                  5      n[        U5      n[        R                  " [        U5      [        R                  [        R                  -  5      nU R                  [         R                  [         R                  5        U R                  [        R                  U5        [        U5      n[        U5      nU R                   H  u  pxpU R                  US9    [        [        U5      nXUU4 H4  nUc  M  U R                  X|S9   U" U/U	Q76 nU
b  U
" U5        S S S 5        M6     U R!                  ["        S5         U" U/U	Q76   S S S 5        U(       a  U" U/U	Q76 nU
b  U
" U5        O(U R!                  ["        S5         U" U/U	Q76   S S S 5        S S S 5        M     g ! [         a     S S S 5        M  f = f! , (       d  f       M  = f! , (       d  f       N= f! , (       d  f       NW= f! , (       d  f       GM:  = f)Nr  r   )r   rF   zto return str or byteszos.PathLike)r   rj   r   r   r  r   r    r   rp   r   rk   rr   	functionsrv  rV  r[  assertRaisesRegexr   )r5   str_filenamebytes_fspathbytes_filenamer   
int_fspath
str_fspathr   allow_fd
extra_args
cleanup_fnr  rF   rb  s                 r   test_path_t_converter)PathTConverterTests.test_path_t_converter  s    ''77d?,00L>[[)9)9:N#N3LWWXl+R[[-CD	(()*:*:;"%b\
l+
6:nn2DJ4( T*B *:)+D| 4;!#D!6:!6%1&v. <;	+ ++!#;=z/J/= 0Z0F!-"6*//%)+ 2+
++1 )( 7E & 	 )( <;
= =+ +1 )(sx   H1G$.H1
G=	"H1
H:H1
H H1$
G:.H19G::H1=
HH1
HH1 
H.*H11
I	c                    SnU R                  [        US-  5         [        R                  " [	        S5      5        S S S 5        U R                  [        US-  5         [        R                  " [	        S5      5        S S S 5        U R                  [        US-  5         [        R                  " [	        [        5       5      5        S S S 5        g ! , (       d  f       N= f! , (       d  f       Ni= f! , (       d  f       g = f)Nz-__fspath__\(\) to return str or bytes, not %sr>  r}   floatgQ@object)rQ	  r   r   r   r   r^	  )r5   r  s     r   &test_path_t_converter_and_custom_class:PathTConverterTests.test_path_t_converter_and_custom_class  s    >##IsV|<GGHQK  =##IsX~>GGHTN# ?##IsY?GGHVX&' @?	 =<>>??s#    C C (C1
C 
C.1
C?r+   )r`   ra   rb   rc   r   F_OKr   rV  rP	  rZ	  r_	  rd   r+   r   r   rM	  rM	    sO     	!"	5277*d+&'	GT(BCI*,X(r   rM	  r:  r;  zCannot unset blocking flagz'Windows only supports blocking on pipesc                       \ rS rSrS rSrg)BlockingTestsi  c                    [         R                  " [        [         R                  5      nU R	                  [         R
                  U5        U R                  [         R                  " U5      S5        [         R                  " US5        U R                  [         R                  " U5      S5        [         R                  " US5        U R                  [         R                  " U5      S5        g r	  )	r   r    r   r   r   rr   rE   r:  r=  r   s     r   r>  BlockingTests.test_blocking  s    WWXr{{+"%,d3
E",e4
D!,d3r   r+   N)r`   ra   rb   rc   r>  rd   r+   r   r   rc	  rc	    s    
	4r   rc	  c                       \ rS rSrS rSrg)ExportsTestsi  c                     U R                  S[        R                  5        U R                  S[        R                  5        g )Nr    r  )r   r   __all__rl   s    r   test_os_allExportsTests.test_os_all  s&    fbjj)fbjj)r   r+   N)r`   ra   rb   rc   rj	  rd   r+   r   r   rg	  rg	    s    *r   rg	  c                   &    \ rS rSrS rS rS rSrg)TestDirEntryi  c                     [         R                  R                  [        R                  5      U l        U R                  [        R                  U R                  5        [         R                  " U R                  5        g r(   )r   rF   realpathr   rj   r   r  rI   rl   s    r   rm   TestDirEntry.setUp  sF    GG$$Y%5%56		(($))4
r   c                 L    U R                  [        [        R                  5        g r(   )r   r   r   DirEntryrl   s    r   test_uninstantiable TestDirEntry.test_uninstantiable
  s    )R[[1r   c                    [        [        R                  R                  U R                  S5      S5      n[        R                  " U R                  5       Vs/ s H  o"PM     snR                  5       nU R                  U[        R                  5        U R                  UR                  S5        SS K
nU R                  [        UR                  X!5        g s  snf )Nr9     pythonr   )r%   r   rF   rH   scandirr  r2   rr	  rE   r   rt  r   r   rw  )r5   r"   entryrt  s       r   test_unpickableTestDirEntry.test_unpickable  s    rww||DIIzBIN$&JJtyy$9:$95$9:>>@eR[[1Z0)V\\5C	 ;s   C)rF   N)r`   ra   rb   rc   rm   rs	  ry	  rd   r+   r   r   rm	  rm	    s    
2Dr   rm	  c                      \ rS rSr\R
                  rS rS%S jrS rS r	S r
S rS rS	 r\R                  " \R"                  S
:g  S5      S 5       rS rS%S jrS rS rS rS rS rS rS rS rS r\R<                  " \R@                  \RB                  ;   S5      S 5       r"\R                  " \#RH                  S5      S 5       r%S r&S r'S r(S r)S  r*S! r+S" r,S#r-g$)&TestScandiri  c                 F   [         R                  R                  [        R                  5      U l        [         R
                  " U R                  5      U l        U R                  [        R                  U R                  5        [         R                  " U R                  5        g r(   )
r   rF   ro	  r   rj   r  
bytes_pathr   r  rI   rl   s    r   rm   TestScandir.setUp  sZ    GG$$Y%5%56	++dii0	(($))4
r   c                     [        U[        5      (       a  U R                  OU R                  n[        R                  R                  X!5      n[        US5        U$ )Nrv	  )r  r\   r~	  rF   r   rH   r%   )r5   r   rF   r"   s       r   r%   TestScandir.create_file  s>    ",T5"9"9ttyy77<<+Hi(r   c                     [        S [        R                  " U R                  5       5       5      nU R	                  [        UR                  5       5      U5        U$ )Nc              3   >   #    U  H  nUR                   U4v   M     g 7fr(   r   r  rx	  s     r   r  *TestScandir.get_entries.<locals>.<genexpr>&  s       ;$95 

E*$9s   )rU  r   rw	  rF   rE   r  keys)r5   namesentriess      r   get_entriesTestScandir.get_entries%  sF     ;$&JJtyy$9; ;/7r   c                     U(       aZ  [        U5       HJ  nUR                  S5      (       d  M  US;   a  M#  U R                  [        X5      [        X$5      XU45        ML     g U R                  X5        g )Nst_)r  r  st_nlinkr  st_ctime_ns)rS  r  rE   rV  )r5   r  r  skip_fieldsrd  s        r   assert_stat_equalTestScandir.assert_stat_equal+  sj    E
u-- + +  !5!(!5"'!57 # U*r   c                     [         R                  " U R                  5      nU R                  [        [        U5      5        UR                  5         g r(   )r   rw	  rF   r   r   r   rr   )r5   scandir_iters     r   rs	  TestScandir.test_uninstantiable9  s5    zz$)),)T,%78r   c                     U R                  S5      n[        R                  " U R                  5      nSS KnU R                  [        UR                  X!5        UR                  5         g )Nr9  r   )	r%   r   rw	  rF   rt  r   r   rw  rr   )r5   r"   r	  rt  s       r   ry	  TestScandir.test_unpickable>  sI    ##J/zz$)),)V\\<Jr   c                    U R                  U[        R                  5        U R                  UR                  U5        U R                  UR
                  [        R
                  R                  U R
                  U5      5        U R                  UR                  5       [        R                  " UR
                  SS9R                  5        [        R                  " UR
                  5      nU R                  UR                  5       [        R                  " UR                  5      5        U R                  UR                  5       [        R                  " UR                  5      5        U R                  UR                  5       [        R
                  R!                  UR
                  5      5        [        R                  " UR
                  SS9nU R                  UR                  SS9[        R                  " UR                  5      5        U R                  UR                  SS9[        R                  " UR                  5      5        U R                  UR#                  5       [        R
                  R%                  UR
                  5      5        U R'                  UR                  5       U[        R                  S:H  =(       a    U(       + 5        U R'                  UR                  SS9U[        R                  S:H  5        g )NFr;  r  )r2   r   rr	  rE   r   rF   rH   inoder   r  is_dirS_ISDIRr^  is_fileS_ISREG
is_symlinkrP  is_junction
isjunctionr	  )r5   rx	  r   r	  r	  r	  
entry_statentry_lstats           r   check_entryTestScandir.check_entryE  s   eR[[1T*RWW\\$))T%BCUCJJ	L WWUZZ(
j&8&89	;j&8&89	;))+

3	5 ggejj%@e<k&9&9:	<u=k&9&9:	< 	**,bgg.@.@.LMuzz|)!ww$Az>	C 	uzz%z@*!ww$	0r   c                    [         R                  " 5       n[         R                  " 5       n[        R                  R                  U R                  S5      n[        R                  " U5        U R                  S5      nU(       a@   [        R                  " U[        R                  R                  U R                  S5      5        U(       a}  [        R                  " U[        R                  R                  U R                  S5      SS9  [        R                  " U[        R                  R                  U R                  S5      5        SS/nU(       a  UR                  S5        U(       a  UR                  S	5        U R                  U5      nUS   nU R                  USSS
S
5        US   nU R                  USS
SS
5        U(       a  US   nU R                  USS
SS
5        U(       a5  US   nU R                  USSS
S5        US   nU R                  USS
SS5        g g ! [         a  nU R                  SU-  5         S nAGNS nAff = f)NrS  r9  zlink_file.txtrL  symlink_dirT)r   symlink_file.txt)r	  r	  F)r   can_hardlinkr0  r   rF   rH   rI   r%   r!  r5  r   r   rJ  rt  r	  r	  )	r5   r!  r   rS   r"   r   r	  r	  rx	  s	            r   test_attributesTestScandir.test_attributesc  s   %%''')'',,tyy%0
##J/3"'',,tyy/"JK JJwTYY F+/1JJxdii9K!LM
#LL)LL<=""5)tUE:
#
E4?O,EUOUD%HM*EUM4E./EU$6tTJ 1 # 3o1223s   ?H 
I(IIr   z/Can only test junctions with creation on win32.c                    [         R                  R                  U R                  S5      n[         R                  " U5        SS Kn UR
                  " U[         R                  R                  U R                  S5      5        U R                  SS/5      nU R                  US   R                  5       S5        U R                  US   R                  5       S5        g ! [         a    [        R                  " S5      ef = f)Ntgtdirr   srcjuncz!creating the test junction failedTF)r   rF   rH   rI   r  r  rL   r   r  r	  rE   r	  )r5   rS   r  r	  s       r   test_attributes_junctions%TestScandir.test_attributes_junctions  s    '',,tyy(3
	I""7BGGLLI,NO ""Ix#89+7794@*668%@  	I##$GHH	Is   ;C !C<c                    [        U[        5      (       a  U R                  OU R                  n[	        [
        R                  " U5      5      nU R                  [        U5      S5        US   nU R                  UR                  U5        U$ r!	  )
r  r\   r~	  rF   rB  r   rw	  rE   rA   r   )r5   r   rF   r	  rx	  s        r   	get_entryTestScandir.get_entry  sf    ",T5"9"9ttyyrzz$'(Wq)
T*r   c                 |    U R                  US9nU R                  [        R                  R	                  U5      5      $ )Nr   )r%   r	  r   rF   basename)r5   r   r"   s      r   create_file_entryTestScandir.create_file_entry  s3    ###.~~bgg..x899r   c                    U R                  5       n[        R                  " 5       n [        R                  " U R                  5        [        S [        R                  " 5        5       5      nU R                  [        UR                  5       5      [        R                  R                  U5      /5        [        R                  " U5        g ! [        R                  " U5        f = f)Nc              3   <   #    U  H  oR                   U4v   M     g 7fr(   r   r	  s     r   r  5TestScandir.test_current_directory.<locals>.<genexpr>  s     IL5JJ.Ls   )r%   r   r1   rJ   rF   rU  rw	  rE   r  r	  r	  )r5   r"   old_dirr	  s       r   test_current_directory"TestScandir.test_current_directory  s    ##%))+		HHTYY IBJJLIIGVGLLN3 gg..x89; HHWBHHWs   BC
 
C"c                 Z    U R                  5       nU R                  [        U5      S5        g )Nz<DirEntry 'file.txt'>)r	  rE   r  r5   rx	  s     r   	test_reprTestScandir.test_repr  s%    &&(e&=>r   c                     U R                  5       nU R                  [        R                  " U5      [        R                  R                  U R                  S5      5        g Nr9  )r	  rE   r   fspathrF   rH   r	  s     r   test_fspath_protocol TestScandir.test_fspath_protocol  s<    &&(5)277<<		:+NOr   c                 B   [         R                  " S5      nU R                  US9n[         R                  " U5      nU R	                  U[
        5        U R                  U[         R                  R                  [         R                  " U R                  5      U5      5        g )Nzbytesfile.txtr   )	r   r  r	  r	  r2   r\   rE   rF   rH   )r5   rT	  bytes_entryr	  s       r   test_fspath_protocol_bytes&TestScandir.test_fspath_protocol_bytes  sq    _5,,.,A;'fe,bkk$))&<^L	Nr   c                    [         R                  R                  U R                  S5      n[         R                  " U5        U R	                  S5      n[         R
                  " U5        [         R                  S:X  a  U R                  UR                  5       5        U R                  UR                  5       5        U R                  UR                  5       5        [         R                  S:X  a@  U R                  [        UR                  5        UR                  5         UR                  SS9  g U R!                  UR                  5       S5        U R                  [        UR                  5        U R                  [        UR                  SS9  g )NrS  r  Fr;  r   )r   rF   rH   rI   r	  r  r   rs   r	  r3  r	  r	  r   rK   r	  r   r  )r5   rF   rx	  s      r   test_removed_dirTestScandir.test_removed_dir  s   ww||DIIu-
u%
 77d?OOELLN+)))+,77d?/=JJLJJuJ-u{{}a0/</USr   c                    U R                  5       n[        R                  " UR                  5        U R	                  UR                  5       5        [        R                  S:X  a  U R                  UR                  5       5        U R	                  UR                  5       5        [        R                  S:X  a@  U R                  [        UR                  5        UR                  5         UR                  SS9  g U R                  UR                  5       S5        U R                  [        UR                  5        U R                  [        UR                  SS9  g )Nr  Fr;  r   )r	  r   rk   rF   r3  r	  r   rs   r	  r	  r   rK   r	  r   r  r	  s     r   test_removed_fileTestScandir.test_removed_file  s    &&(
		%**(77d?OOEMMO,))+,77d?/=JJLJJuJ-u{{}a0/</USr   c                 &   [         R                  " 5       (       d  U R                  S5      $ U R                  S5      n[        R
                  " U[        R                  R                  U R                  S5      5        U R                  SS/5      nUS   n[        R                  " U5        U R                  UR                  5       S5        U R                  UR                  5       5        U R                  UR                  5       5        U R                  UR                  SS95        U R                  UR                  SS95        U R                  UR!                  5       5        U R#                  [$        UR&                  5        UR'                  SS9  g )Nzcannot create symbolic linkr9  zsymlink.txtr   Fr;  )r   r0  r   r%   r   r   rF   rH   r	  rk   r  r	  r3  r	  r	  rs   r	  r   rK   r   )r5   r"   r	  rx	  s       r   test_broken_symlinkTestScandir.test_broken_symlink  s(   $$&&==!>??##J/


877<<		=9	;""J#>?&
		(5;;=!,()e<=u=>((*++UZZ8

5
)r   c           	         U R                  S5        [        R                  " U R                  5      n[	        [        R
                  " U5      5      nU R                  [        U5      SU5        US   nU R                  UR                  S5        U R                  UR                  [        R                  " [        R                  R                  U R                  S5      5      5        g )Nr9  r{   r   s   file.txt)
r%   r   r  rF   rB  rw	  rE   rA   r   rH   )r5   
path_bytesr	  rx	  s       r   r@  TestScandir.test_bytes  s    $[[+
rzz*-.Wq'2
[1RWW\\$))Z%HI	Kr   c                 $   U R                  S5        [        [        4 H]  nU" [        R                  " U R
                  5      5      nU R                  [        5         [        R                  " U5        S S S 5        M_     g ! , (       d  f       Mq  = fr	  )	r%   r   r   r   r  rF   r   r   rw	  )r5   r  r	  s      r   test_bytes_likeTestScandir.test_bytes_like  s_    $j(CR[[34J""9-

:& .- )--s   B  
B	z.fd support for listdir required for this test.c                 j   U R                  [        R                  [        R                  5        U R	                  S5        S/n[
        R                  " 5       (       aP  [        R                  " S[        R                  R                  U R                  S5      5        UR                  S5        [
        R                  " U R                  5       n[        R                  " U5       n[        U5      nS S S 5        W Vs/ s H  oUR                  PM     nnU R                  [        U5      U5        U R                  U[        R                   " U5      5        U GH)  nU R                  UR                  UR                  5        U R                  [        R"                  " U5      UR                  5        U R                  UR%                  5       UR                  S:H  5        [        R&                  [        R(                  ;   d  M  [        R&                  " UR                  US9nU R                  UR'                  5       U5        [        R&                  " UR                  USS9nU R                  UR'                  SS9U5        GM,     S S S 5        g ! , (       d  f       GN= fs  snf ! , (       d  f       g = f)Nr9  r!  r<  F)r   r  r;  )r   r   rw	  r>  r%   r   r0  r   rF   rH   rJ  r  rB  r   rE   r  r3  r	  r	  r   r?  )r5   expected_namesr   ry  r	  rx	  r	  r  s           r   test_fdTestScandir.test_fd  s    	bjj"..1$$  ""JJz277<<		6#BC!!&)""499-B2r(  -45WEZZWE5VE]N;UBJJrN3   UZZ8  5!15::>  !1!1!3UZZ65IJ77b000B7B$$UZZ\26BNB$$UZZZ%FK ! .-5 .-s8   J$$J0J$<JC,J$BJ$
J	J$$
J2zWASI maps '' to cwdc                 N    U R                  [        [        R                  S5        g rV  )r   rK   r   rw	  rl   s    r   test_empty_pathTestScandir.test_empty_path2  s    +RZZ<r   c                    U R                  S5        [        R                  " U R                  5      n[	        U5      nU R                  [        U5      SU5        [	        U5      nU R                  [        U5      SU5        g )Nr9  r{   r   )r%   r   rw	  rF   rB  rE   rA   )r5   r  r	  entries2s       r   test_consume_iterator_twice'TestScandir.test_consume_iterator_twice6  sb    $::dii(x.Wq'2 >X84r   c                 f    S0 / 4 H(  nU R                  [        [        R                  U5        M*     g )NgX9v?)r   r   r   rw	  )r5   objs     r   test_bad_path_typeTestScandir.test_bad_path_typeA  s(    2r?CiS9 #r   c                 4   U R                  S5        U R                  S5        [        R                  " U R                  5      n[	        U5        UR                  5         UR                  5         U R                  5          AS S S 5        g ! , (       d  f       g = fNr9  	file2.txt)r%   r   rw	  rF   rw  rr   check_no_resource_warningr5   r  s     r   
test_closeTestScandir.test_closeE  sf    $%::dii(X++- .--s   >B		
Bc                 (   U R                  S5        U R                  S5        [        R                  " U R                  5       n[	        U5        S S S 5        U R                  5          AS S S 5        g ! , (       d  f       N)= f! , (       d  f       g = fr	  )r%   r   rw	  rF   rw  r	  r	  s     r   test_context_manager TestScandir.test_context_managerP  sc    $%ZZ		"hN #++- .- #"--s   A2'B2
B 
Bc                     U R                  S5        U R                  S5        [        R                  " U R                  5       n[	        U5        UR                  5         S S S 5        g ! , (       d  f       g = fr	  )r%   r   rw	  rF   rw  rr   r	  s     r   test_context_manager_close&TestScandir.test_context_manager_closeX  sM    $%ZZ		"hNNN #""s   A((
A6c                    U R                  S5        U R                  S5        U R                  [        5         [        R                  " U R
                  5       n[        U5        SS-    S S S 5        S S S 5        U R                  5          AS S S 5        g ! , (       d  f       N1= f! , (       d  f       N:= f! , (       d  f       g = f)Nr9  r	  r{   r   )r%   r   ZeroDivisionErrorr   rw	  rF   rw  r	  r	  s     r   test_context_manager_exception*TestScandir.test_context_manager_exception_  s    $%01DII&(X! ' 2 ++- .- '& 21 .-s/   !B&B*B&
B7
B#	B&&
B47
Cc                    U R                  S5        U R                  S5        [        R                  " U R                  5      n[	        U5        U R                  [        5         A[        R                  " 5         S S S 5        [        R                  " U R                  5      n[        U5        U R                  5          AS S S 5        g ! , (       d  f       NT= f! , (       d  f       g = fr	  )r%   r   rw	  rF   rw  assertWarnsResourceWarningr   
gc_collectrB  r	  r	  s     r   test_resource_warning!TestScandir.test_resource_warningi  s    $%::dii(Xo.  / ::dii(X++- .- /. .-s   #C=C
C
C')r~	  rF   N)r9  ).r`   ra   rb   rc   r   r	  rm   r%   r	  r	  rs	  ry	  r	  r	  r   r.  r?   r@   r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r@  r	  r   r   r3  r>  r	  r   r0  r	  r	  r	  r	  r	  r	  r	  r	  rd   r+   r   r   r|	  r|	    s    / I I+
0<'KR __S\\W,._`A aA:?PNT,T&**
K' r~~5IKLKL0 __W__&;<= ==	5:	r   r|	  c                   z    \ rS rSr\" \R                  5      rS rS rS r	S r
S rS rS rS	 rS
 rS rS rSrg)
TestPEP519ix  c                 V    S H#  nU R                  XR                  U5      5        M%     g )N)rB  s   goodbyes   some/path/and/filerE   r	  )r5   bs     r   test_return_bytesTestPEP519.test_return_bytes~  s"    <AQA/ =r   c                 V    S H#  nU R                  XR                  U5      5        M%     g )N)hellogoodbyezsome/path/and/filer
  )r5   r   s     r   test_return_stringTestPEP519.test_return_string  s"    9AQA/ :r   c                    S Hz  n[        U5      nU R                  XR                  U5      5        U R                  S[        R                  " U5      5        U R                  S[        R
                  " U5      5        M|     g )N)path/like/object   path/like/objectr
  r
  )r   rE   r	  r   r  r]   )r5   r{  pathlikes      r   test_fsencode_fsdecode!TestPEP519.test_fsencode_fsdecode  s`    8A{HQH 560"++h2GH/X1FG 9r   c                    U R                  SU R                  [        S5      5      5        U R                  [	        [        [
        R                  5      5        U R                  [        [        S5      [
        R                  5      5        g )Nz#feelthegilr@  )rE   r	  r   rs   
issubclassr   PathLiker  rl   s    r   r:  TestPEP519.test_pathlike  sR    H]4K(LM
8R[[9:
8C="++>?r   c                     [        SS0 5      n[        [         [        U" 5       4 H$  nU R                  [        U R
                  U5        M&     g )Nblahr+   )r   r>  r   r   r   r	  )r5   vaporos      r   test_garbage_in_exception_out(TestPEP519.test_garbage_in_exception_out  s;    VR$dB'Aia8 (r   c                 D    U R                  [        U R                  5        g r(   )r   r   r	  rl   s    r   test_argument_required!TestPEP519.test_argument_required  s    )T[[1r   c                 0   U R                  [        U R                  [        S5      5        [	        SS0 5      nSUl        U R                  [        U R                  U" 5       5        U R                  [        U R                  [        [        5       5      5        g )NrM  foor+   r{   )r   r   r	  r   r   
__fspath__r	  )r5   cs     r   test_bad_pathlikeTestPEP519.test_bad_pathlike  sl    )T[[(2,?B)T[[!#6+T[["#4#67	9r   c                      " S S[         R                  5      nU R                  [        [        U5      5        U R                  [        [        [         R                  5      5        g )Nc                       \ rS rSrSrg)0TestPEP519.test_pathlike_subclasshook.<locals>.Ai  r+   Nr  r+   r   r   Ar%
    r  r   r&
  )r   r
  r3  r
  r   rs   r5   r&
  s     r   test_pathlike_subclasshook%TestPEP519.test_pathlike_subclasshook  s>    	 	Ha01
8R[[9:r   c                 n    U R                  [        R                  [           [        R
                  5        g r(   )r2   r   r
  r\   typesGenericAliasrl   s    r   test_pathlike_class_getitem&TestPEP519.test_pathlike_class_getitem  s!    bkk%0%2D2DEr   c                 v     " S S[         R                  5      nU R                  [        U" 5       S5      5        g )Nc                       \ rS rSrSrS rSrg)2TestPEP519.test_pathlike_subclass_slots.<locals>.Ai  r+   c                     grV  r+   rl   s    r   r
  =TestPEP519.test_pathlike_subclass_slots.<locals>.A.__fspath__  s    r   N)r`   ra   rb   rc   	__slots__r
  rd   r+   r   r   r&
  r1
    s    Ir   r&
  __dict__)r   r
  r3  r   r'
  s     r   test_pathlike_subclass_slots'TestPEP519.test_pathlike_subclass_slots  s+    	 	 	j12r   c                 R    " S S5      n " S S5      n " S SU5      nSR                   nU R                  [        U" S5      5         U R                  U" 5       5        S S S 5        U R	                  U R                  U" 5       5      S5        U R                  [        U" S5      5         U R                  U" 5       5        S S S 5        U R                  [        U" S5      5         [        U" 5       5        S S S 5        U R                  [        U" S5      5         [        U" 5       5        S S S 5        S	R                   nU R                  [        U" S5      5         [        R                  " U" 5       S
5        S S S 5        U R                  [        U" S5      5         [        R                  " U" 5       S5        S S S 5        g ! , (       d  f       GNi= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nc                       \ rS rSrSrSrg)/TestPEP519.test_fspath_set_to_None.<locals>.Fooi  Nr+   r`   ra   rb   rc   r
  rd   r+   r   r   Foor:
        Jr   r<
  c                       \ rS rSrS rSrg)/TestPEP519.test_fspath_set_to_None.<locals>.Bari  c                     g)Nbarr+   rl   s    r   r
  :TestPEP519.test_fspath_set_to_None.<locals>.Bar.__fspath__  s    r   r+   Nr;
  r+   r   r   Barr?
    s    r   rC
  c                       \ rS rSrSrSrg)/TestPEP519.test_fspath_set_to_None.<locals>.Bazi  Nr+   r;
  r+   r   r   BazrE
    r=
  r   rF
  z1expected str, bytes or os.PathLike object, not {}rA
  z.should be string, bytes or os.PathLike, not {}foooobazzz)r  rQ	  r   r	  rE   r    r   r   )r5   r<
  rC
  rF
  good_error_msgother_good_error_msgs         r   test_fspath_set_to_None"TestPEP519.test_fspath_set_to_None  s   	 		 		# 	 AGG 	 ##I~e/DEKK F 	SU+U3##I~e/DEKK F ##I~e/DEK F ##I~e/DEK F >DD 	 ##I/CE/JKIIceW% L ##I/CE/JKIIceW% LK+ FE
 FE FE FE LK LKsH   G)G$G%G6HH
G
G"%
G36
H
H
H&r+   N)r`   ra   rb   rc   rP  r   r	  r
  r
  r
  r:  r
  r
  r!
  r(
  r-
  r6
  rK
  rd   r+   r   r   r	  r	  x  sL     "))$F00H@
9
2	9;F3%&r   r	  c                       \ rS rSrS rSrg)
TimesTestsi  c                    [         R                  " 5       nU R                  U[         R                  5        S H$  n[	        X5      nU R                  U[
        5        M&     [         R                  S:X  aU  U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        g g )N)usersystemchildren_userchildren_systemelapsedr  r   )r   r  r2   times_resultrV  r]	  r   rE   rR
  rS
  rT
  )r5   r  fieldr  s       r   
test_timesTimesTests.test_times  s    
eR__5!EE)E!!%/!
 77d?U00!4U22A6U]]A. r   r+   N)r`   ra   rb   rc   rW
  rd   r+   r   r   rN
  rN
    s    /r   rN
  c                       \ rS rSrS r\R                  " \R                  S;   S5      \R                  " \
SL S5      S 5       5       rS rS	rg)
	ForkTestsi  c                 x    Sn[        SU5        [        R                  (       a  [        SUSS9  g [        SUSS9  g )Nzif 1:
            import os
            from test import support
            pid = os.fork()
            if pid != 0:
                support.wait_process(pid, exitcode=0)
        r   mimalloc_debug)PYTHONMALLOCmalloc_debug)r   r   Py_GIL_DISABLEDr   s     r   	test_forkForkTests.test_fork  s7     	t$""T46FGT4nEr   )r  r  darwinz'Only Linux and macOS detect this today.Nzrequires _testcapic                     Sn[        SUSS9u  p#nU R                  UR                  S5      S5        U R                  UR                  S5      S5        g )Na  if 1:
            import os, threading, warnings
            from _testcapi import _spawn_pthread_waiter, _end_spawned_pthread
            _spawn_pthread_waiter()
            try:
                with warnings.catch_warnings(record=True) as ws:
                    warnings.filterwarnings(
                            "always", category=DeprecationWarning)
                    if os.fork() == 0:
                        assert not ws, f"unexpected warnings in child: {ws}"
                        os._exit(0)  # child
                    else:
                        assert ws[0].category == DeprecationWarning, ws[0]
                        assert 'fork' in str(ws[0].message), ws[0]
                        # Waiting allows an error in the child to hit stderr.
                        exitcode = os.wait()[1]
                        assert exitcode == 0, f"child exited {exitcode}"
                assert threading.active_count() == 1, threading.enumerate()
            finally:
                _end_spawned_pthread()
        r   0)PYTHONOPTIMIZEr   r)  )r   rE   r  r5   r   r  r  r  s        r   -test_fork_warns_when_non_python_thread_exists7ForkTests.test_fork_warns_when_non_python_thread_exists  sO    * 'tT#FG,b1G,b1r   c                 n    Sn[        SU5      u  p#nU R                  SU5        U R                  SU5        g )NaN  if 1:
            import atexit
            import os

            class AtFinalization:
                def __del__(self):
                    print("OK")
                    pid = os.fork()
                    if pid != 0:
                        print("shouldn't be printed")
            at_finalization = AtFinalization()
        r   s   OK
s"   can't fork at interpreter shutdown)r   rE   r   rf
  s        r   test_fork_at_finalization#ForkTests.test_fork_at_finalization  s:     'tT2#&;SAr   r+   )r`   ra   rb   rc   r`
  r   r   r?   r@   r.  	_testcapirg
  rj
  rd   r+   r   r   rZ
  rZ
    sW    F  )GGBD__Y$&(<=2 >D24Br   rZ
  _fspathc                   <    \ rS rSrSr\" \R                  5      rSr	g)TestPEP519PurePythoni3  z>Explicitly test the pure Python implementation of os.fspath().r+   N)
r`   ra   rb   rc   r  rP  r   rm
  r	  rd   r+   r   r   ro
  ro
  3  s    Lbjj)r   ro
  __main__)s   contentr(   )r)   r  
contextlibr  rM   r  r  r  r  r   rt  rY  r  rs  r  r  r   rH  r   r?   	sysconfigrB   r  r  r+
  r   r  r  testr   test.supportr   r   r   r   r   r@   r	   r  ImportErrorr	  r  pwdgetpwallpw_uidr  r[  rl
  r
   r   r  r  test.support.script_helperr   r   test.support.os_helperr   r)  r   r   r   versionr  r  getgidri  r   r%   r.  r3  r,   TestCaser.   rf   r5  r  rQ  BasicTestMappingProtocolrS  r  r   r  r  r  r  r   r+  r0  r@  rG  r^  get_config_varOS_URANDOM_DONT_USE_FDrx  contextmanagerr  r  r  r  rC  r]  r  r  r  r   r  r"  rB  rD  r  r  r  r  r  r  r  r  r  rr  rz  IsolatedAsyncioTestCaser  r  requires_linux_versionr  r&  r;  rE  ra  r  r  r  r.	  rM	  r/  rc	  rg	  rm	  r|	  r	  rN
  requires_forkrZ
  ro
  r`   main)us   0r   <module>r
     s  
          	          
          & " & + ( !#&<<>2>a>2I+1
 8 # + 
2yZZ\Q&M 33??#:#:00;;NK <<**95J"))+:J K  s||'>'>u'E'NP (A8!! A8JZ8!! Z8|
l7** l7^_A"" _AD nJ=99 nJb	t(!! t(n	 
WR)+BC`% `% D`%F6Y 6 
WR)+BC	6j 	6 D	6t8$$ tn 
WR)+@A8#X&& 8# B8#v&:h'' &:R 
"9:,8$$ , ;,*8$$ *> 
WR-/DE'*X&& '* F'*Z ./14 ? 01Q6? 89Q> 
 
'=?	*79J'X&& J'9?J'Z " "@ 
WR)&(e+!! e+(e+P 
S\\W,.DE Bh''  B F BF 
"EFL*H%% L* GL*^ 
WR(*<=#0!! #0 >#0J 
(*@ADAx(( DA BDAL 
(*@AG0(## G0 BG0R 
S\\W,.DEwKX&& wK FwKt 
S\\W,.DE,D)) ,D F,D^ 
RWW_&9:,(++ , ;,^ 
WR,.CD9+H%% 9+ E9+x 
S\\W,.DE
nB)) nB  FnB` 
S\\W,.DE8** 8 F8B 
S\\W,.DET@8$$ T@ FT@n "8,, " ">7h'' 7 1(++ 1$ 	GJx   GJ GJT 	z,"" z, z,~ 
OP	WR,.FG/"" / H Q/ 
WR/NGB4N>@18,, 1@1, 
WR,.HIT833 T JTn  
13?A 	1b)NGX.. NG *ANGb 
WR!457VW@/H%% @/ X@/F 
WR02LM2&2x(( 2 ' N2 
WR+-BC1b)N8$$ N * DN` 
WR!124PQ	*,QR1b)CA8$$ CA * S RCAJ
F@8$$ F@P#3H%% #3N 	n2** n2 n2` 
WR+-@Aa&(++ a& Ba&H?((++ ?(D 
WR0DF	&&(DE	(*ST
4H%% 
4 U FF
4*8$$ *D8$$ D$_(## _De&"" e&N/"" /  	=B!! =B =BD 2y*z * zMMO _h  H  E  G 3^$ I
  +I"{{*Gn+  Ds~   o !o &o  +o4 o/o4 p (p" oooo o,+o,/o4 4
pppp"p.-p.