
    daf                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dlm"Z" d dl#m$Z$ 	 d dl%Z%	 d dl'Z'	 d dl(Z(	 d dl)Z) e)jT                         D  cg c]  } | jV                   c} Z,	 d d	l.m/Z/m0Z0 	 d dl2Z2d d
l3m4Z4 d dlm5Z5 d dl6m7Z7 dZ8 e9e	d      r e	jt                         d k(  Z8 e9ed      r<ejv                  jx                  r&ejv                  jx                  j{                  d      Z>ndZ>ejF                  j{                  d      xr  e	j~                         d k(  Z@d ZAddZB ej                  ejF                  j{                  d      d      ZDd ZE G d dej                        ZG G d dej                        ZH G d dej                        ZI G d dej                        ZJd dlmKZK  G d  d!eKj                        ZM G d" d#ej                        ZN ej                   e9e	d$      d%       G d& d'eN             ZP G d( d)eN      ZQ ej                   e9e	d$      d%       G d* d+eP             ZR G d, d-ej                        ZS ej                   e9e	d.      d/       G d0 d1ej                               ZT G d2 d3ej                        ZU ej                  ej                  d4       G d5 d6ej                               ZW G d7 d8ej                        ZX ej                   e9e	d9      d:       G d; d<ej                               ZY ej                  d=      d>k(  xs,  ej                  d?      d>k(  xs  ej                  d@      d>k(  Z[ ej                  e[dA       ej                  ejF                  dBk(  dC       G dD dEej                                      Z\ej                  ddF       Z^ ej                   e9e	dG      dH       G dI dJej                               Z_ ej                  ejF                  dKk(  dL       G dM dNej                               Z` ej                  ej                  dO       G dP dQej                               Za ej                   e9e	dR      dS       G dT dUej                               Zb ej                  ejF                  dKk(  dV       G dW dXej                               Zc ej                  ejF                  dKk(  dV       G dY dZej                               Zd ej                  ejF                  dKk(  dL       G d[ d\ej                               Ze ej                  ejF                  dKk(  dL       G d] d^ej                               Zf ej                  e	j                  d_k(  d`       G da dbej                               Zh ej                   e9e	dc      dd       G de dfej                               Zi ej                  ejF                  dKk(  dL      ej                   G dg dhej                                      Zk ej                  ejF                  dKk(  dL       G di djej                               Zl ej                  ejF                  dKk(  dL       G dk dlej                               Zmej                   G dm dnej                               Zn G do dpej                        Zo G dq drej                        Zp ej                          G ds dtej                               Zr ej                          G du dvej                               Zs ej                  dw       ej                   e9e	dx      dy       G dz d{ej                                      Zu ej                   e9e	d|      xr	  e9e	d}      d~       G d dej                               Zv ej                   e9e	d      d       G d dej                               Zxd Zy ej                   ey       d       ej                  ddd       G d dej                                      Z{ ej                   e9e	d      d       G d dej                               Z| ej                   e9e	d      d       ej                  dd       G d dej                                      Z} ej                   e9e	d      d       ej                  ddd       G d dej                                      Z~ G d dej                        Z G d dej                        Z ej                          G d dej                               Z G d dej                        Z ej                   e9e	d      d       ej                  ej                  d       ej                  ejF                  dKk(  d       G d dej                                             Z G d dej                        Z G d dej                        Z G d dej                        Z G d dej                        Z G d dej                        Z ej                          G d dej                               Z e9e	d      r G d de      Zedk(  r ej                          yy# e&$ r dZ%Y 
]w xY w# e&$ r dZ'Y 
fw xY w# e&$ r dZ(Y 
ow xY wc c} w # e&e-f$ r g Z,Y 
Vw xY w# e&$ r ejb                  xZ/Z0Y 
gw xY w# e&$ r dZ2Y 
pw xY w)    N)support)import_helper)	os_helper)socket_helper)set_recursion_limit)warnings_helper)win32_is_iot)INT_MAXPY_SSIZE_T_MAXassert_python_ok)
unix_shell)FakePathFgeteuidthread_infolinuxthreadsfreebsdc                 P    t        j                  t        t        |       d| z        S )Nzrequires os.%s)unittest
skipUnlesshasattrosnames    '/root/Python-3.12.4/Lib/test/test_os.pyrequires_os_funcr   Y   s"    wr402BT2IJJ    c                 j    t        | dd      5 }|j                  |       d d d        y # 1 sw Y   y xY w)Nxbr   )openwrite)filenamecontentfps      r   create_filer%   ]   s1    	ha	  B
  s   )2aixz%on AIX, splice() only accepts socketsc                  .    t        j                  d        y N)asyncioset_event_loop_policy r   r   tearDownModuler,   g   s    !!$'r   c                       e Zd Zd Zd Zd Zy)	MiscTestsc                 X    t        j                         }| j                  |t               y r(   )r   getcwdassertIsInstancestrselfcwds     r   test_getcwdzMiscTests.test_getcwdl   s    iikc3'r   c                 `   d}t         j                  dk(  rd}d}d}|d|t        |      z
  z  z   }t        j                         5 }t        j                  |      5 }|}	 t        j                         }| j                  ||       |t        |      t        t        j                  j                        z   z
  }|dk  rnft        |      |kD  r
|dkD  r|d | }t        j                  j                  ||      }	 t        j                  |       t        j                  |       |}t&        j(                  rt+        dt        |              d d d        d d d        y # t        $ r Y Ct         $ r(}	|	j"                  t"        j$                  k(  rY d }	~	m d }	~	ww xY w# 1 sw Y   PxY w# 1 sw Y   y xY w)	Ni  vxworks     python_test_dir_ar   z!Tested current directory length: )sysplatformlentempfileTemporaryDirectoryr   
change_cwdr   r0   assertEqualpathsepjoinmkdirchdirFileNotFoundErrorOSErrorerrnoENAMETOOLONGr   verboseprint)
r4   min_lendirlendirnametmpdirrD   expectedr5   needexcs
             r   test_getcwd_long_pathzMiscTests.test_getcwd_long_pathp   s     <<9$G$SFS\$9:;((* "	Jf%%f- !J))+C$$S(3"c#hRWW[[1A&ABDqy7|d*tax")%4.77<<g6D"   $H7 : ??=c#hZHIC!J"	J "	J( -  " "99(:(::!!	"1!J !J"	J "	Jsa   F$BF5*E*F	F$	F#F%F-F
FFFFF!	F$$F-c                     t        j                         }| j                  |t               | j	                  t        j
                  |      t        j                                y r(   )r   getcwdbr1   bytesrC   fsdecoder0   r3   s     r   test_getcwdbzMiscTests.test_getcwdb   s<    jjlc5)S)299;7r   N)__name__
__module____qualname__r6   rV   r[   r+   r   r   r.   r.   k   s    (7Jr8r   r.   c                      e Zd Zd ZeZd Z ej                  ej                  d       ej                  ej                  d      d               Zej                  d        Zd Zej                   ej                  eek  d       ej$                  ed	z   d
d      d                      Zd Zd Z ej                  ej.                  dk(  d      d        Zd Zd Zd Zd Zd Z ej                   eed      d      d        Z  ej                   eed      d      d        Z! ej                   eed      d      d        Z" ej                   eed      d      d        Z# ej                   eed      d      e$d                Z% ej                   eed      d      e$d!               Z& ej                   eed      d      e$d"               Z'y#)$	FileTestsc                     t         j                  j                  t        j                        r$t        j
                  t        j                         y y r(   )r   rD   lexistsr   TESTFNunlinkr4   s    r   setUpzFileTests.setUp   s/    77??9++,IIi&&' -r   c                 6   t        j                  t        j                  t         j                  t         j
                  z        }t        j                  |       | j                  t        j                  t        j                  t         j                               y r(   )
r   r    r   rc   O_CREATO_RDWRclose
assertTrueaccessW_OKr4   fs     r   test_accesszFileTests.test_access   sQ    GGI$$bjj&:;
		)"2"2BGG<=r   z"Test is unstable under Emscripten.zWASI does not support dup.c                 F   t        j                  t        j                  t         j                  t         j
                  z        }t        j                  |      }	 d}||dz   k7  rPt        j                  |       |dz  }|dkD  r| j                  d       |t        j                  |      }}||dz   k7  rPt        j                  |       t        j                  ||dz          | j                  t        t         j                  |d       y # t        j                  |       w xY w)Nr      
   z%couldn't allocate two consecutive fds      a)r   r    r   rc   rh   ri   duprj   skipTest
closerangeassertRaisesrJ   r!   )r4   firstsecondretriess       r   test_closerangezFileTests.test_closerange   s     	(("**RYY*>? 
	GEAI%1R<MM"IJ &vv EAI% HHV
eUQY''288UD9 HHVs   AD	 	D c                     t         j                  }t        j                  |      }| j	                  t
        t        j                  |d       t        j                  |      }| j                  ||       y Nr   )	r   rc   r=   getrefcountry   	TypeErrorr   renamerC   )r4   rD   oldnews       r   test_renamezFileTests.test_rename   sQ    ood#)RYYa8ood#c"r   c                    t        t        j                  d      5 }|j                  d       |j	                          |j                         }t        j                  |dd       t        j                  |d      }| j                  t        |      t               | j                  |d       d d d        y # 1 sw Y   y xY w)Nw+b   spamr      )r    r   rc   r!   flushfilenor   lseekreadrC   typerY   )r4   fobjfdss       r   	test_readzFileTests.test_read   s    )""E* 	)dJJwJJLBHHRAAAT!We,Q(	) 	) 	)s   BB44B=zneeds INT_MAX < PY_SSIZE_T_MAXrs   rr   F)sizememusedry_runc                 ^   | j                  t        j                  t        j                         t	        t        j                  d       t        t        j                  d      5 }t        j                  |j                         |      }d d d        | j                  d       y # 1 sw Y   xY w)Ns   testrb)

addCleanupr   rd   rc   r%   r    r   r   r   rC   )r4   r   r$   datas       r   test_large_readzFileTests.test_large_read   s     		(()*:*:;I$$g. )""D) 	.R77299;-D	.
 	w'	. 	.s   #%B##B,c                 f   t        j                  t        j                  t         j                  t         j
                  z        }| j                  t        t         j                  |d       t        j                  |d       t        j                  |t        d             t        j                  |t        d             t        j                  |       t        t        j                  d      5 }| j                  |j                         j                         g d       d d d        y # 1 sw Y   y xY w)Nbeanss   bacon
s   eggs
s   spam
r   )s   bacons   eggsr   )r   r    r   rc   rh   O_WRONLYry   r   r!   	bytearray
memoryviewrj   rC   r   
splitlines)r4   r   r   s      r   
test_writezFileTests.test_write   s    WWY%%rzzBKK'?@)RXXr7;
Z 
Yy)*
Z	*+
)""D) 	.TTYY[335,.	. 	. 	.s   -1D''D0c                 t    t        j                  |t         j                  d      }| j                  |d       y )NT)creationflagsshellr   )
subprocesscallCREATE_NEW_CONSOLErC   )r4   argsretcodes      r   write_windows_consolezFileTests.write_windows_console  s0    //$$77	
 	!$r   win32z$test specific to the Windows consolec                     d}| j                  t        j                  d|       | j                  t        j                  dd|       y )Nzprint('x' * 100000)-cz-u)r   r=   
executabler4   codes     r   test_write_windows_consolez$FileTests.test_write_windows_console  s7     %""3>>4>""3>>4tDr   c                     t        j                  t        j                  t         j                        }t        j
                  |g|ddi}|j                          y )Nencodingutf-8)r   r    r   rc   O_RDONLYfdopenrj   )r4   r   r   ro   s       r   fdopen_helperzFileTests.fdopen_helper  s=    WWY%%r{{3IIb242'2		r   c                    t        j                  t        j                  t         j                  t         j
                  z        }t        j                  |       | j                          | j                  d       | j                  dd       y )Nrd   )r   r    r   rc   rh   ri   rj   r   r4   r   s     r   test_fdopenzFileTests.test_fdopen  sZ    WWY%%rzz"))';<
33$r   c                 F   t         j                  dz   }| j                  t         j                  t         j                         | j                  t         j                  |       t	        t         j                  d       t	        |d       t        j                  t         j                  |       | j                  t        t
        j                  t         j                         t        |dd      5 }| j                  |j                         d       d d d        y # 1 sw Y   y xY w)Nz.2   1   2r   r   r   1)r   rc   r   rd   r%   r   replacery   rI   statr    rC   r   )r4   TESTFN2ro   s      r   test_replacezFileTests.test_replace'  s    ""T)	(()*:*:;	(('2I$$d+GT"


9##W-+RWWi6F6FG'31 	,QQVVXs+	, 	, 	,s   -!DD c                     t        j                  t        t         j                  dd       }t        j                  |       y )N  )rD   flagsmodedir_fd)r   r    __file__r   rj   rn   s     r   test_open_keywordszFileTests.test_open_keywords4  s(    GG5
r   c                     t        j                  t        d      }	  |dt        j                  dd        y # t
        t        f$ r Y y w xY w)NsymlinktargetF)srcdsttarget_is_directoryr   )r   get_attributer   r   rc   NotImplementedErrorrJ   )r4   r   s     r   test_symlink_keywordszFileTests.test_symlink_keywords9  sG    ''I6	i&6&6$)$8#W- 		s   7 A	A	copy_file_rangeztest needs os.copy_file_range()c                     | j                  t              5  t        j                  ddd       d d d        y # 1 sw Y   y xY wNr   rr   i)ry   
ValueErrorr   r   re   s    r   #test_copy_file_range_invalid_valuesz-FileTests.test_copy_file_range_invalid_valuesA  s7    z* 	*q!S)	* 	* 	*	   7A c                 p   t         j                  dz   }d}t        t         j                  |       | j                  t         j                  t         j                         t        t         j                  d      }| j                  |j                         |j                         }t        |d      }| j                  t         j                  |       | j                  |j                         |j                         }	 t        j                  ||d      }| j                  |t        dd             t        |d      5 }| j                  |j                         |d |        d d d        y # 1 sw Y   y xY w# t        $ r9}|j                  t        j                   k7  r | j#                  |       Y d }~y d }~ww xY w)N.3
   0123456789r   r      r      )r   rc   r%   r   rd   r    rj   r   r   r   assertInrangerC   r   rJ   rK   ENOSYSrw   )	r4   r   r   in_filein_fdout_fileout_fdies	            r   test_copy_file_rangezFileTests.test_copy_file_rangeF  sL   ""T)I$$d+	(()*:*:;y''.& '	(('2'"	;""5&!4A MM!U1a[)gt$ ;  bq:; ; ;  	 ww%,,&MM!	s$   ;E3 :$E''E03	F5</F00F5c                    t         j                  dz   }d}d}d}d}t        t         j                  |       | j                  t         j                  t         j                         t        t         j                  d      }| j                  |j                         |j                         }t        |d      }| j                  t         j                  |       | j                  |j                         |j                         }		 t        j                  ||	|||      }
| j                  |
t        d	|d
z                t        |d      5 }|j                         }d d d        | j                  d | d|z         | j                  ||d  ||||
z           y # 1 sw Y   =xY w# t        $ r9}|j                  t        j                   k7  r | j#                  |       Y d }~y d }~ww xY w)N.4r   r      r   r   r   )
offset_src
offset_dstr   rr       )r   rc   r%   r   rd   r    rj   r   r   r   r   r   r   rC   rJ   rK   r   rw   )r4   TESTFN4r   bytes_to_copyin_skipout_seekr   r   r   r   r   r   r   s                r   test_copy_file_range_offsetz%FileTests.test_copy_file_range_offseth  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!(/GG!spliceztest needs os.splice()c                     | j                  t              5  t        j                  ddd       d d d        y # 1 sw Y   y xY wr   )ry   r   r   r   re   s    r   test_splice_invalid_valuesz$FileTests.test_splice_invalid_values  s5    z* 	!IIaC 	! 	! 	!r   c                    t         j                  dz   }d}t        t         j                  |       | j                  t         j                  t         j                         t        t         j                  d      }| j                  |j                         |j                         }t        j                         \  | j                  fd       | j                  fd       	 t        j                  |d      }| j                  |t        dd             | j                  t        j                  d	      |d |        y # t        $ r9}|j                   t         j"                  k7  r | j%                  |       Y d }~y d }~ww xY w)
Nr   r   r   c                  .    t        j                         S r(   r   rj   read_fds   r   <lambda>z'FileTests.test_splice.<locals>.<lambda>       1 r   c                  .    t        j                         S r(   r   write_fds   r   r   z'FileTests.test_splice.<locals>.<lambda>       2 r   r   r   r   r   )r   rc   r%   r   rd   r    rj   r   r   piper   r   r   rC   r   rJ   rK   r   rw   )	r4   r   r   r   r   r   r   r   r  s	          @@r   test_splicez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/E??Fc                 *  
 t         j                  dz   }d}d}d}t        t         j                  |       | j                  t         j                  t         j                         t        t         j                  d      }| j                  |j                         |j                         }t        j                         \  
| j                  
fd       | j                  fd       	 t        j                  |||      }| j                  |t        d	|d
z                t        j                  
d      }| j                  |||||z           y # t        $ r9}	|	j                   t         j"                  k7  r | j%                  |	       Y d }	~	y d }	~	ww xY w)Nr   r   r   r   r   c                  .    t        j                         S r(   r   r   s   r   r   z1FileTests.test_splice_offset_in.<locals>.<lambda>  r   r   c                  .    t        j                         S r(   r   r  s   r   r   z1FileTests.test_splice_offset_in.<locals>.<lambda>  r  r   )r   r   rr   r   )r   rc   r%   r   rd   r    rj   r   r   r  r   r   r   r   rC   rJ   rK   r   rw   )r4   r   r   r   r   r   r   r   r   r   r   r  s             @@r   test_splice_offset_inzFileTests.test_splice_offset_in  s=    ""T)I$$d+	(()*:*:;y''.& GGI1223	<		%=WMA MM!U1mAo67777C(D T4	#:;  	 ww%,,&MM!	s   )E 	F/FFc                    t         j                  dz   }d}d}d}t        t         j                  |       | j                  t         j                  t         j                         t        j                         \  | j                  fd       | j                  fd       t        j                  |       t        |d      }| j                  t         j                  |       | j                  |j                         |j                         }	 t        j                  |||      }| j                  |t        d	|d
z                t        |d      5 }|j                         }	d d d        | j                  	d | d|z         | j                  |	|d  |d |        y # 1 sw Y   :xY w# t         $ r9}
|
j"                  t"        j$                  k7  r | j'                  |
       Y d }
~
y d }
~
ww xY w)Nr   r   r   r   c                  .    t        j                         S r(   r   r   s   r   r   z2FileTests.test_splice_offset_out.<locals>.<lambda>  r   r   c                  .    t        j                         S r(   r   r  s   r   r   z2FileTests.test_splice_offset_out.<locals>.<lambda>  r  r   r   )r   r   rr   r   r   )r   rc   r%   r   rd   r   r  r!   r    rj   r   r   r   r   r   rC   rJ   rK   r   rw   )r4   r   r   r   r   r   r   r   r   r   r   r   r  s              @@r   test_splice_offset_outz FileTests.test_splice_offset_out  s    ""T)I$$d+	(()*:*:;GGI1223
4 '	(('2'"	8		'6=XNA MM!U1mAo67gt$ &||~& T)8_gh.>? T()_d2Ah7& &  	 ww%,,&MM!	s$   F+ FF(+	G-4/G((G-N)(r\   r]   r^   rf   tearDownrp   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  r+   r   r   r`   r`      s}   ( H>
 X__C X__5::* # #)  X>19;WWr\!UC( D; (
.% X0?AEAE
%,
 X%679Z[* \* X%679Z[; \;B X%679Z[*6 \*6X XX.0HI! J! XX.0HI>  J>> XX.0HI"<  J"<H XX.0HI'8  J'8r   r`   c                   f   e Zd Zd Zd Zd Zd Zd Z ej                   e
ed      d      d        Z ej                   e
ed      d	      d
        Z ej                  ej                  dk(  d      d        Z ej                  ej                  dk(  d       ej                   e
ed      d      d               Zd Z ej                  ej                  dk(  d      d        Z ej                  ej                  dk(  d      d        Z ej                  ej                  dk(  d      d        Zy)StatAttributeTestsc                     t         j                  | _        | j                  t         j                  | j                         t        | j                  d       y )N   ABC)r   rc   fnamer   rd   r%   re   s    r   rf   zStatAttributeTests.setUp  s5    %%
	(($**5DJJ'r   c           	         t        j                  |      }| j                  |t        j                     d       | j                  |j                  d       t        |      }t        t              D ]x  }|d d dk(  s|j                         }|j                  d      rd }nd }| j                   |t        ||            |t        t        |                | j                  ||       z dj                         D ]@  }t        t        ||      dz        }t        ||dz         d	z  }| j                  ||d
       B 	 t        |j                  dz        }|j                  d	z  }| j                  ||d
       	 |d    | j!                  d       	 d|_        | j!                  d       	 d|_        | j!                  d       	 d|_        | j!                  d       	 t        j,                  d      }	| j!                  d       	 t        j,                  d      }	y # t        $ r Y w xY w# t"        $ r Y w xY w# t        $ r Y w xY w# t        t(        f$ r Y w xY w# t        $ r Y w xY w# t(        $ r Y sw xY w# t(        $ r Y y w xY w)Nr   ST_TIMEc                     t        |       S r(   )intxs    r   truncz7StatAttributeTests.check_stat_attributes.<locals>.trunc!  s
    Q-r   c                     | S r(   r+   r  s    r   r!  z7StatAttributeTests.check_stat_attributes.<locals>.trunc#  s    (r   zst_atime st_mtime st_ctimei _nsi'  rt   deltar:   No exception raisedrr   rs   r   rr   rt   r   r   r   r         	   rs               )r   r   rC   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)
r4   r  resultmembersr   attrr!  floatynanosecondyresult2s
             r   check_stat_attributesz(StatAttributeTests.check_stat_attributes  s    	-q1+ f+I 		-DBQx5 zz|==(/*  wvt'<!="(t)<"=?dG,		- 1668 	AD.78F!&$,75@K""6;a"@	A	A,,v56F 00E9K ""6;a"@	3KII+,
	FNII+,	FNII+,	FMII+,
	nnU+GII+,
	nn%IJGO  		  		  		 	* 		  		  		  		s~   >'H :H( H7 *I I &I* I9 	H%$H%(	H43H47	IIII	I'&I'*	I65I69	JJc                 :    | j                  | j                         y r(   )rG  r  re   s    r   test_stat_attributesz'StatAttributeTests.test_stat_attributes^  s    ""4::.r   c                     	 | j                   j                  t        j                               }| j                         y # t        $ r! | j                  d| j                   z         Y ;w xY w)Nz#cannot encode %a for the filesystem)r  encoder=   getfilesystemencodingUnicodeEncodeErrorrw   rG  )r4   r  s     r   test_stat_attributes_bytesz-StatAttributeTests.test_stat_attributes_bytesa  s^    	NJJ%%c&?&?&ABE 	""5) " 	NMM?$**LM	Ns   -A 'A+*A+c                    t        j                  | j                        }t        t        j
                  dz         D ]  }| j                  d|       5  t	        j                  ||      }| j                  d|       |dk  r| j                  d|       t	        j                  |      }| j                  ||       d d d         y # 1 sw Y   xY w)Nrr   z	protocol s   stat_resultr   s   cos
stat_result
)r   r   r  r   pickleHIGHEST_PROTOCOLsubTestdumpsr   loadsrC   r4   rA  protop	unpickleds        r   test_stat_result_picklez*StatAttributeTests.test_stat_result_pickleh  s    $622Q67 	4E	%12 4LL/na019MM"7;"LLO	  34 4	44 4s   A'CC	statvfsztest needs os.statvfs()c                    t        j                  | j                        }| j                  |j                  |d          d}t        |      D ]'  \  }}| j                  t        |d|z         ||          ) | j                  t        |j                  t                     | j                  t        |      d       	 d|_        | j                  d       	 d|_        | j                  d       	 t        j                  d      }| j                  d       	 t        j                  d      }y # t        $ r Y bw xY w# t        $ r Y Xw xY w# t         $ r Y @w xY w# t         $ r Y y w xY w)	Nr   )
bsizefrsizeblocksbfreebavailfilesffreefavailflagnamemaxf_rs   rr   r&  r'  r(  )r   rZ  r  rC   f_bfree	enumerater5  rk   
isinstancef_fsidr  r?   r;  r:  r?  statvfs_resultr   )r4   rA  rB  valuememberrF  s         r   test_statvfs_attributesz*StatAttributeTests.test_statvfs_attributess  sT   DJJ' 	3:&w/ 	LME6WVTF];VE]K	L 	
6==#67 	Vb)	FNII+,	FMII+,
	''.GII+,
	''(LMG%  		  		  		  		sH   ;D* D9 -&E E *	D65D69	EE	EE	E#"E#need os.statvfs()c                 P   t        j                  | j                        }t        t        j
                  dz         D ]h  }t	        j                  ||      }| j                  d|       |dk  r| j                  d|       t	        j                  |      }| j                  ||       j y )Nrr   s   statvfs_resultr   s   cos
statvfs_result
)
r   rZ  r  r   rP  rQ  rS  r   rT  rC   rU  s        r   test_statvfs_result_picklez-StatAttributeTests.test_statvfs_result_pickle  s     DJJ'622Q67 	0EVU+AMM+Q/qy6:QIVY/	0r   r   Win32 specific testsc                     	 t        j                  d       y # t        $ r | j                  d       Y y t        $ r}| j                  d       Y d }~y d }~ww xY w)Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)r   r   rI   rw   rJ   r;  r4   r   s     r   test_1686475zStatAttributeTests.test_1686475  sI    	5GG&'  	=MM;< 	5II344	5s    AAAAr  zrequires os.pipe()c                    t        j                         \  }}	 t        j                  |       t        j                  |       t        j                  |       | j	                  t
              5 }t        j                  |       d d d        | j                  j                  j                  t        j                         y # t        j                  |       t        j                  |       w xY w# 1 sw Y   mxY wr(   )
r   r  r   rj   ry   rJ   rC   	exceptionrK   EBADF)r4   r   wctxs       r   
test_15261zStatAttributeTests.test_15261  s     wwy1	GGAJHHQKHHQKw' 	3GGAJ	,,ekk:	 HHQKHHQK	 	s   C  -C/ ,C,/C8c                     | j                  t        |d             | j                  t        |j                  t                     | j                  d|j                  cxk  xr
 dk         y c        y )Nst_file_attributesr       )rk   r   ri  r}  r  )r4   rA  s     r   check_file_attributesz(StatAttributeTests.check_file_attributes  sQ    (<=>
6#<#<cBCV66D*DEDEr   z$st_file_attributes is Win32 specificc                    t        j                  | j                        }| j                  |       | j	                  |j
                  t        j                  z  d       t        j                  dz   }t        j                  |       | j                  t         j                  |       t        j                  |      }| j                  |       | j	                  |j
                  t        j                  z  t        j                         y )Nr   r2  )r   r   r  r  rC   r}  FILE_ATTRIBUTE_DIRECTORYr   rc   rG   r   rmdir)r4   rA  rQ   s      r   test_file_attributesz'StatAttributeTests.test_file_attributes  s     $""6*%%(E(EE	
 ""U*
'*!""6*%%(E(EE))	+r   c                    t         j                  j                  t         j                  d   | j                  dz         }| j                  t        j                  |       t        |d       d}t        j                  d|ddg|       t        j                  |      }| j                  |j                  d	       | j                  t         j                  j                  |             y )
NTEMP_accessr  r*  z
icacls.exez/denyz*S-1-5-32-545:(S)r   r   )r   rD   rF   environr  r   r   rd   r%   r   
check_callr   assertNotEqualr1  rk   isfile)r4   r  DETACHED_PROCESSrA  s       r   test_access_deniedz%StatAttributeTests.test_access_denied  s     RZZ/i1GH	((%0E6"  5'+>?*		
 FNNA.u-.r   c                     dt         j                  j                  t        j                               d   z   }t        j                  |      }| j                  |j                  t        j                         y )Nz//./r   )r   rD   
splitdriver0   r   rC   r=  S_IFBLK)r4   r  rA  s      r   test_stat_block_devicez)StatAttributeTests.test_stat_block_device  sM     ++BIIK8;;6r   N)r\   r]   r^   rf   rG  rI  rN  rY  r   r   r   r   rn  rq  r=   r>   ru  r{  r  r  r  r  r+   r   r   r  r    s   (
HT/*	4 XY/1JK) L)V XY/,.	0.	0 X02HI5 J5 X02HIXV,.BC
; D J
;F
 X0?A+A+& X02HI/ J/* X02HI7 J7r   r  c                      e Zd Zd Zd ZddZd Zed        Zd Z	d Z
 ej                  ej                  ej                  v d	      d
        Z ej                  ej                  ej"                  v d      d        Z ej                  ej                  ej&                  v d      d        Zd Zd Zd Zd Zd Zd Zd Zej:                  d        Zy)
UtimeTestsc                 H   t         j                  | _        t        j                  j                  | j                  d      | _        | j                  t         j                  | j                         t        j                  | j                         t        | j                         y )Nf1)r   rc   rQ   r   rD   rF   r  r   rmtreerG   r%   re   s    r   rf   zUtimeTests.setUp  s]     ''WW\\$,,5
	(($,,7
DJJr   c                     t        j                  |      }|j                  |d   k7  xs& |j                  |d   k7  xs |j                  |d   k7  S )Nr)  r*  r+  )r   r   st_atimest_mtimest_ctime)r4   r"   sts      r   support_subsecondzUtimeTests.support_subsecond  sQ     WWX1% *KK2a5(*KK2a5(	+r   Nc                    |s| j                   }| j                  |      }|rd}d}nd}d} ||||f       t        j                  |      }|rC| j	                  |j
                  |dz  d       | j	                  |j                  |dz  d       n>| j                  |j
                  |dz         | j                  |j                  |dz         | j                  |j                  |       | j                  |j                  |       y )Ni8Z;l   
o]     rT l    P9 &.>gư>r$  )
r  r  r   r   r7  r  r  rC   st_atime_nsst_mtime_ns)r4   set_timer"   r  atime_nsmtime_nsr  s          r   _test_utimezUtimeTests._test_utime  s    zzH 228< "H!H !H HHh/0WWX""2;;4t"L""2;;4t"LR[[(T/:R[[(T/:22r   c                 ,    d }| j                  |       y )Nc                 2    t        j                  | |       y Nnsr   utimer"   r  s     r   r  z'UtimeTests.test_utime.<locals>.set_time.      HHX"%r   r  r4   r  s     r   
test_utimezUtimeTests.test_utime-  s    	& 	"r   c                     | dz  dz   S )Nr  g&.>r+   r  s    r   	ns_to_seczUtimeTests.ns_to_sec3  s    
 T	V##r   c                 2      fd} j                  |       y )Nc                     |\  }}j                  |      }j                  |      }t        j                  | ||f       y r(   r  r   r  r"   r  r  r  atimemtimer4   s         r   r  z2UtimeTests.test_utime_by_indexed.<locals>.set_time<  s=    !#HhNN8,ENN8,E HHXu~.r   r  r  s   ` r   test_utime_by_indexedz UtimeTests.test_utime_by_indexed:  s    	/ 	"r   c                 2      fd} j                  |       y )Nc                     |\  }}j                  |      }j                  |      }t        j                  | ||f       y )N)timesr  r  s         r   r  z0UtimeTests.test_utime_by_times.<locals>.set_timeF  s;    !#HhNN8,ENN8,EHHXeU^4r   r  r  s   ` r   test_utime_by_timeszUtimeTests.test_utime_by_timesE  s    	5 	"r   z9follow_symlinks support for utime required for this test.c                 ,    d }| j                  |       y )Nc                 4    t        j                  | |d       y )NF)r  follow_symlinksr  r  s     r   r  z9UtimeTests.test_utime_nofollow_symlinks.<locals>.set_timeR  s     HHX"e<r   r  r  s     r   test_utime_nofollow_symlinksz'UtimeTests.test_utime_nofollow_symlinksN  s    	= 	"r   z,fd support for utime required for this test.c                 ,    d }| j                  |       y )Nc                     t        | dd      5 }t        j                  |j                         |       d d d        y # 1 sw Y   y xY w)Nwbr   r  )r    r   r  r   )r"   r  r$   s      r   r  z*UtimeTests.test_utime_fd.<locals>.set_time[  s;    ha( -B ,- - -s	   &=Ar  r  s     r   test_utime_fdzUtimeTests.test_utime_fdX  s    	-
 	"r   z0dir_fd support for utime required for this test.c                 ,    d }| j                  |       y )Nc                     t         j                  j                  |       \  }}t        j                  |      5 }t        j
                  |||       d d d        y # 1 sw Y   y xY w)N)r   r  )r   rD   r6  r   open_dir_fdr  )r"   r  rQ   r   dirfds        r   r  z.UtimeTests.test_utime_dir_fd.<locals>.set_timee  sM    GGMM(3MGT&&w/ 45e34 4 4s   AA#r  r  s     r   test_utime_dir_fdzUtimeTests.test_utime_dir_fdb  s    	4
 	"r   c                 D    d }| j                  || j                         y )Nc                 2    t        j                  | |       y r  r  r  s     r   r  z1UtimeTests.test_utime_directory.<locals>.set_timem  r  r   )r"   )r  rQ   r  s     r   test_utime_directoryzUtimeTests.test_utime_directoryl  s     	& 	DLL9r   c                 P   t        j                          } || j                         | j                  | j                        sd}nd}t        j                  | j                        }d|j
                  d|d|j
                  |z
  }| j                  |j
                  |||       y )Ng      ?g?zst_time=z
, current=z, dt=)r%  msg)timer  r  r   r   r  r7  )r4   r  currentr%  r  r  s         r   _test_utime_currentzUtimeTests._test_utime_currentr  s    ))+ 	%%djj1E EWWTZZ ++wg(=?r{{G%* 	 	5r   c                 2      fd} j                  |       y )Nc                 D    t        j                  j                         y r(   r   r  r  r"   r4   s    r   r  z/UtimeTests.test_utime_current.<locals>.set_time  s    HHTZZ r   r  r  s   ` r   test_utime_currentzUtimeTests.test_utime_current  s    	! 	  *r   c                 2      fd} j                  |       y )Nc                 F    t        j                  j                  d        y r(   r  r  s    r   r  z3UtimeTests.test_utime_current_old.<locals>.set_time  s    HHTZZ&r   r  r  s   ` r   test_utime_current_oldz!UtimeTests.test_utime_current_old  s    	' 	  *r   c                 f   t         j                  dk(  rt        j                  j	                  t        j                  j                  |            d   dz   }dd l}|j                  j                  }|j                  dd      }|j                  |d dd d d |t        |            }|r|j                  S y y )Nr   r   \ r   )r=   r>   r   rD   r  abspathctypeswindllkernel32create_unicode_bufferGetVolumeInformationWr?   rl  )r4   rD   rootr  r  bufoks          r   get_file_systemzUtimeTests.get_file_system  s    <<7"77%%bggood&;<Q?$FD}}--H..r37C//dA04dD03SX?B yy   #r   c                    | j                  | j                        dk7  r| j                  d       d}t        j                  | j
                  ||f       | j                  t        j                  | j
                        j                  |       y )NNTFSzrequires NTFSr  )	r  rQ   rw   r   r  r  rC   r   r  )r4   larges     r   test_large_timezUtimeTests.test_large_time  se     -7MM/*
eU^,,55u=r   c                    | j                  t              5  t        j                  | j                  dd       d d d        | j                  t
              5  t        j                  | j                  ddg       d d d        | j                  t
              5  t        j                  | j                  d       d d d        | j                  t
              5  t        j                  | j                  d       d d d        | j                  t
              5  t        j                  | j                  ddg       d d d        | j                  t
              5  t        j                  | j                  d       d d d        | j                  t
              5  t        j                  | j                  d       d d d        t        j                  t        j                  vr@| j                  t              5  t        j                  | j                  dd       d d d        t        j                  t        j                  vrbt        | j                  dd	      5 }| j                  t
              5  t        j                  |j                         d       d d d        d d d        t        j                  t        j                  vrA| j                  t              5  t        j                  | j                  dd	
       d d d        y y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   exY w# 1 sw Y   4xY w# 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   IxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N)r   r   r  r   )r   )r   r   r   Fr  r  r   r   )ry   r   r   r  r  r   supports_follow_symlinksr   supports_fdr    r   supports_dir_fd)r4   r$   s     r   test_utime_invalid_argumentsz'UtimeTests.test_utime_invalid_arguments  s   z* 	4HHTZZF3	4y) 	)HHTZZ!Q(	)y) 	'HHTZZ&	'y) 	,HHTZZ+	,y) 	,HHTZZQF+	,y) 	*HHTZZD)	*y) 	/HHTZZI.	/ 882666""#67 DVUCD882>>)djj$* 2b&&y1 2HHRYY[&122 882---""#67 7VA67 7 .-	4 	4	) 	)	' 	'	, 	,	, 	,	* 	*	/ 	/D D2 22 27 7s   #L #L!L!L'$L4"M"M1#MM4)%M(M4#N  L
LL$'L14L>MMM%(M1	-M44M= N	c                    d }| j                  t              5  t        j                  | j                   |d      df       d d d        | j                  t              5  t        j                  | j                   |d      df       d d d        | j                  t              5  t        j                  | j                   |d      df       d d d        y # 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   y xY w)Nc                 *      G  fdd      } |       S )Nc                       e Zd Z fdZy)?UtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadIntc                      S r(   r+   )r   divmod_ret_vals    r   
__divmod__zJUtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadInt.__divmod__  s	    ))r   N)r\   r]   r^   r  )r  s   r   BadIntr    s    *r   r  r+   )r  r  s   ` r   get_bad_intz/UtimeTests.test_issue31577.<locals>.get_bad_int  s    * * 8Or   *   rr   r  r+   )rr   rt   r   )ry   r   r   r  r  )r4   r  s     r   test_issue31577zUtimeTests.test_issue31577  s    	
 y) 	:HHTZZ[_a$89	:y) 	:HHTZZ[_a$89	:y) 	AHHTZZ[%;Q$?@	A 	A		: 	:	: 	:	A 	As#   *C *C&'*C2C#&C/2C;r(   )r\   r]   r^   rf   r  r  r  staticmethodr  r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r+   r   r   r  r    s    +3># $ $	## XR%@%@@*+#+# XR^^3GI#I# XR%7%77KM#M#:5,++
!>78 A Ar   r  )mapping_testsc                      e Zd ZdZdZd Zd Zd Zd Z e	j                  exr ej                  j                  e      d       e	j                   eed      d	       ej"                         d
                      Z e	j                  exr ej                  j                  e      d       e	j                   eed      d	       ej"                         d                      Zd Zd Zd Zd Z e	j                  ej0                  d      d        Z ej"                         d        Z ej6                  dd      d        Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d  Z'y)!EnvironTestsz8check that os.environ object conform to mapping protocolNc                    t        t        j                        | _        t        j                  rt        t        j
                        | _        | j                         j                         D ]  \  }}|t        j                  |<    y r(   )	dictr   r  _EnvironTests__savesupports_bytes_environenvironb_EnvironTests__saveb
_referenceitemsr4   keyrl  s      r   rf   zEnvironTests.setUp  s[    2::&$$,DL//+113 	$JC#BJJsO	$r   c                 B   t         j                  j                          t         j                  j                  | j                         t         j
                  rHt         j                  j                          t         j                  j                  | j                         y y r(   )r   r  clearupdater  r  r  r	  re   s    r   r  zEnvironTests.tearDown  s\    





$++&$$KKKKt||, %r   c                     ddddS )NVALUE1VALUE2VALUE3)KEY1KEY2KEY3r+   re   s    r   r
  zEnvironTests._reference  s    BBr   c                 ^    t         j                  j                          t         j                  S r(   )r   r  r  re   s    r   _empty_mappingzEnvironTests._empty_mapping  s    


zzr   zrequires a shellpopenzneeds os.popen()c                 B   t         j                  j                          t         j                  j                  d       t        j                  dt
        z        5 }|j                         j                         }| j                  |d       d d d        y # 1 sw Y   y xY w)NWorld)HELLOz%s -c 'echo $HELLO')	r   r  r  r  r  r   r   striprC   )r4   r  rl  s      r   test_update2zEnvironTests.test_update2  sv    
 	




(XX+j89 	-UJJL&&(EUG,	- 	- 	-s   1BBc                 T   t        j                  dt        z        5 }t        |      }| j	                  t        |      d       | j	                  t        |      d       | j	                  t        |      d       | j                  t        t
        |       d d d        y # 1 sw Y   y xY w)Nz %s -c 'echo "line1
line2
line3"'zline1
zline2
zline3
)r   r  r   iterrC   nextry   StopIteration)r4   r  its      r   test_os_popen_iterzEnvironTests.test_os_popen_iter  s    
 XX<"# $ 	7',eBT"Xy1T"Xy1T"Xy1mT26	7 	7 	7s   A8BB'c                     t         j                  j                         D ]C  \  }}| j                  t	        |      t
               | j                  t	        |      t
               E y r(   )r   r  r  rC   r   r2   )r4   r  vals      r   test_keyvalue_typesz EnvironTests.test_keyvalue_types  sJ    

((* 	-HCT#Y,T#Y,	-r   c                     | j                         j                         D ]4  \  }}| j                  t        j                  j                  |      |       6 y r(   )r
  r  rC   r   r  getr  s      r   
test_itemszEnvironTests.test_items  sB    //+113 	9JCRZZ^^C0%8	9r   c                     t         j                  }dj                  d |j                         D              }| j	                  t        |      d| d       y)z>Check that the repr() of os.environ looks like environ({...}).z, c              3   0   K   | ]  \  }}|d |  yw)z: Nr+   ).0r  rl  s      r   	<genexpr>z-EnvironTests.test___repr__.<locals>.<genexpr>  s'      $
U gRy!$
s   z	environ({z})N)r   r  rF   r  rC   repr)r4   envformatted_itemss      r   test___repr__zEnvironTests.test___repr__  sL    jj)) $
!iik$
 
 	cj0A$EFr   c                 z   t         j                  j                  t         j                        }g d}dt         j                  j	                  |      i}t         j
                  }	 t        |      t         _        | j                  |t        j                                | j                  |t        j                  d              |t         _        | j                  |t        j                  i              | j                  dt        j                  ddi             | j                  |t        j                  |             t         j                  r	 t        j                  d      5  dd	d
}d d d        | j                  t        t         j                         | j                  t        j                  ddi      dg       | j                  t        j                  ddi      dg       | j                  t        j                  ddi      dg       y y # |t         _        w xY w# 1 sw Y   xY w# t        $ r Y w xY w)N)z/montyz/pythonr  z/flying/circusPATHr1  r  r  T)recordr   r   )r5     PATHr9     abcabc)r   defpathr6  pathseprF   r  r  assertSequenceEqualget_exec_pathr  warningscatch_warningsry   r   BytesWarning)r4   defpath_list	test_pathtest_envsaved_environ	mixed_envs         r   test_get_exec_pathz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= = s7   $AH H. %H"+H. H"H+'H. .	H:9H:z#os.environb required for this test.c                 r   d}	 |j                  t        j                         d      }|t
        j                  d<   | j                  t
        j                  d   |       | j                  t
        j                  d          d}|t
        j                  d<   | j                  t
        j                  d   |       |j                  t        j                         d      }| j                  t
        j                  d   |       y # t        $ r, dt        j                         }| j	                  |       Y w xY w)	Nu   euro€surrogateescapez%U+20AC character is not encodable to unicodes   unicode   s   bytesrY   )
rK  r=   rL  rM  rw   r   r  rC   r  decode)r4   rl  value_bytesr  	value_strs        r   test_environbzEnvironTests.test_environbJ  s     	,,s'@'@'B'8:K !&

9I.6Z0+>  %HX.6LL!:!:!<>OP	G,i8 " 	))+.CMM#	s   $D 1D65D6c                    d}d}d|d}t        j                         5 }|j                  |d        t        j                  ||       t        j                  t        j                  d|gdt
        j                  d      }| j                  |j                  j                         t        |             t        j                  |       t        j                  t        j                  d|gdt
        j                  d      }| j                  |j                  j                         t        d              d d d        y # 1 sw Y   y xY w)NPYTHONTESTVAR	testvaluez%import os; print(repr(os.environ.get(z)))r   T)checkstdouttext)r   EnvironmentVarGuardpopr   putenvr   runr=   r   PIPErC   rU  rstripr0  unsetenv)r4   r   rl  r   r1  procs         r   test_putenv_unsetenvz!EnvironTests.test_putenv_unsetenva  s    6thcB**, 	?GGD$IIdE">>3>>4">d)3tEDT[[//14;?KK>>3>>4">d)3tEDT[[//14:>	? 	? 	?s   DD<<Ers   r   c                 x   dD ]Y  }| j                  t        t        ft        j                  |d       | j                  t        t        ft        j
                  |       [ dD ]M  }| j                  t        t        j                  |d       | j                  t        t        j
                  |       O t        j                  dk(  rwddz  }| j                  t        t        j                  |d       | j                  t        t        j                  d|       | j                  t        t        j
                  |       y y )	N)r  z=namezna=mezname=rl  )zname zna mer   r      r   X)ry   rJ   r   r   rY  r]  r=   r>   )r4   r   longstrs      r   test_putenv_unsetenv_errorz'EnvironTests.test_putenv_unsetenv_erroru  s     4 	HDw
3RYYgNw
3R[[$G	H ) 	=Dj"))T7Cj"++t<	= <<7" FlGj"))WcBj"))S'Bj"++w? #r   c                 p   d}| j                  |t        j                         | j                  t              5 }t        j                  |    d d d        | j                  j                  j                  d   |       | j                  |j                  j                         | j                  t              5 }t        j                  |= d d d        | j                  |j                  j                  d   |       | j                  |j                  j                         y # 1 sw Y   xY w# 1 sw Y   dxY w)N
missingkeyr   )
assertNotInr   r  ry   KeyErrorassertIsrw  r   rk   __suppress_context__)r4   missingcms      r   test_key_typezEnvironTests.test_key_type  s    "**-x( 	 BJJw	 bll''*G499:x( 	$B

7#	$bll''*G499:	  	 
	$ 	$s   D 7D, D),D5c                    t        |      }d}t        |       dt        j                  |<   	 t        |       | j	                  t        j                  |   d       t        j                  |= y # t        j                  |= w xY w)N__new_key__test_environ_iteration)r!  r"  r   r  rC   )r4   
collectioniteratornew_keys       r   _test_environ_iterationz$EnvironTests._test_environ_iteration  sg    
#X 7

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

7#

7#s   .A- -B c                 B    | j                  t        j                         y r(   )rt  r   r  re   s    r   (test_iter_error_when_changing_os_environz5EnvironTests.test_iter_error_when_changing_os_environ  s    $$RZZ0r   c                 ^    | j                  t        j                  j                                y r(   )rt  r   r  r  re   s    r   .test_iter_error_when_changing_os_environ_itemsz;EnvironTests.test_iter_error_when_changing_os_environ_items  s    $$RZZ%5%5%78r   c                 ^    | j                  t        j                  j                                y r(   )rt  r   r  valuesre   s    r   /test_iter_error_when_changing_os_environ_valuesz<EnvironTests.test_iter_error_when_changing_os_environ_values  s    $$RZZ%6%6%89r   c                 B   t         r#t        j                  j                  t               sy t        j
                  sy t        j                  t          d| d      5 }|j                         j                         }d d d        | j                  |       y # 1 sw Y   xY w)Nz -c 'echo $')
r   r   rD   existsr   has_subprocess_supportr  r   r  rC   )r4   varrS   r  rl  s        r   _test_underlying_process_envz)EnvironTests._test_underlying_process_env  sy    rww~~j9//XXKuA67 	)5JJL&&(E	) 	5)	) 	)s   BBc                    d}d}|t         j                  |<   dddd|di}t        t         j                        }|j                  |       t         j                  |z  }| j	                  ||       | j                  d||          |j                         }| j                  t        t         j                  j                  |             | j                  dd       | j                  ||       y 	N
_TEST_VAR_original_value_A_r   _B_23r  )r   r  r  r  assertDictEqualrC   r  ri  NotImplemented__or__r  r4   overridden_keyr  new_vars_dictrS   actualnew_vars_itemss          r   test_or_operatorzEnvironTests.test_or_operator  s    %)%3

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

#&m+Xv.f^45&,,.nbjj&7&7&GH))%4))..Ir   c                    d}dt         j                  |<   dddd|di}t        t         j                        }|j                  |       t         xj                  |z  c_        | j	                  |t         j                         | j	                  dt         j                  |          | j                  dd       | j                  |d       y )Nr  r  r  r   r  r  r  r   r  r  r  rC   r  )r4   r  r  rS   s       r   test_ior_operatorzEnvironTests.test_ior_operator  s    %%5

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

#&


m#
2::.bjj89))%5)).#>r   c                    t         j                  j                         }| j                  t              5  ddi}t         xj                  |z  c_        d d d        | j                  t              5  ddi}t         xj                  |z  c_        d d d        | j                  |t         j                         y # 1 sw Y   exY w# 1 sw Y   6xY w)Nrr   r  )r   r  copyry   r   rC   )r4   os_environ_copydict_with_bad_keydict_with_bad_vals       r   test_ior_operator_invalid_dictsz,EnvironTests.test_ior_operator_invalid_dicts  s    **//+y) 	,!"E
JJ++J	, y) 	,!&
JJ++J	,
 	"**5	, 	,	, 	,s   B6/C6B?Cc                    d}dt         j                  |<   dd|dff}t        t         j                        }|j                  |       t         xj                  |z  c_        | j	                  |t         j                         | j	                  dt         j                  |          | j                  dd       | j                  |d       y )Nr  r  )r  r   )r  r  r  r  r   r  )r4   r  r  rS   s       r   $test_ior_operator_key_value_iterablez1EnvironTests.test_ior_operator_key_value_iterable  s    %%5

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

#'


n$
2::.bjj89))%5)).#>r   c                    d}d}|t         j                  |<   dddd|di}t        |      }|j                  t         j                         |t         j                  z  }| j	                  ||       | j                  |||          |j                         }| j                  t        t         j                  j                  |             | j                  dd       | j                  ||       y r  )r   r  r  r  r  rC   r  ri  r  __ror__r  r  s          r   test_ror_operatorzEnvironTests.test_ror_operator  s    %)%3

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

#+Xv.)?@&,,.nbjj&8&8&HI))%4))..Ir   )(r\   r]   r^   __doc__	type2testrf   r  r
  r  r   r   r   r   rD   r~  r   r   requires_subprocessr  r%  r(  r+  r3  rH  r  rP  r_  requires_mac_verrd  rm  rt  rv  rx  r{  r  r  r  r  r  r  r+   r   r   r  r    s   BI$-C
 XBz(B+-XW-/AB W  "- # C-- XBz(B+-XW-/AB W  "7 # C-7-
9
G'R X22>@9@9* !W  "? #?& Wb!$@ %@$;$19:	*J&?6?Jr   r  c                   d   e Zd ZdZdZd Zd Zd ZddZd Z	d	 Z
d
 Zd Zd Z ej                   eed      d       ej$                  ej(                  dk(  d      d               Z ej                   eed      d       ej$                  ej(                  dk(  d      d               Zd Zd Zy)	WalkTestszTests for os.walk().Fc                 ^    d|v r|j                  d      |d<   t        j                  |fi |S Nr  followlinks)rX  r   walk)r4   topkwargss      r   r  zWalkTests.walk  s2    &$*JJ/@$AF=!wws%f%%r   c                 <   t         j                  j                  }| j                  t        j
                  t        j                          |t        j                  d      | _         || j                  d      | _         || j                  d      | _	         || j                  d      } ||d      } || j                  d      | _
         || j                  d      } ||d      } ||d      } ||d	      | _         |t        j                  d
      } |t        j                  d
d      } ||d      | _         ||d      }	 ||d      }
t        j                  | j                         t        j                  |       t        j                  |       t        j                  |       | j                  ||||fD ]0  }t        |dd      5 }|j                  d|z   dz          d d d        2 t	        j                          rt        j"                  t         j                  j%                  |      | j                         t        j"                  d| j                  d       t        j"                   |dd      |	d       t        j"                   |dd      |
d       |dd	gg df| _        n|dgdgf| _        t(        j*                  st        j,                  |d       	 t        j.                  |       t        j,                  |t0        j2                         t        j4                  |       t        j6                  |       | j&                  d   d d= y # 1 sw Y   xY w# t8        $ r2 | j                  t         j,                  |t0        j2                         Y y w xY w)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   rr   )r   rD   rF   r   r   r  rc   	walk_path	sub1_path
sub11_path	tmp1_path	link_pathbroken_link_pathmakedirsr    r!   can_symlinkr   r  	sub2_treer   r  chmodlistdirr   S_IRWXUrd   r  PermissionError)r4   rF   	sub2_path
sub21_path	tmp2_path	tmp3_path	tmp5_patht2_path	tmp4_pathbroken_link2_pathbroken_link3_pathrD   ro   s                r   rf   z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NNIy)YN 	ODdC'2 Oa(MMNO O	O   "JJrwww/@JJx!6!6=JJtFH-/@$GJJtGV,.?F''6):'(DN ('VH=DN$$HHZ#	&JJz" HHZ.IIi HHZ q!"1"%3O O&  	@OOBHHj$,,?	@s   MM  M	 8NNc                 f   t        | j                  | j                              }| j                  t	        |      d       |d   d   d   dk7  }|d   d   j                          |dd|z  z
     d   j                          |dd|z  z
     d   j                          | j                  |d   | j                  ddgd	gf       | j                  |d|z      | j                  d
gdgf       | j                  |d|z      | j                  g g f       | j                  |dd|z  z
     | j                         y )Nr   r   rr   r  r   rt   r  r  r  r  )	listr  r  rC   r?   sortr  r  r  r4   allflippeds      r   test_walk_topdownzWalkTests.test_walk_topdown]  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                    || j                   }g }| j                  |      D ]0  \  }}}|j                  |||f       d|v s |j                  d       2 | j	                  t        |      d       | j	                  |d   | j                   dgdgf       |d   d   j                          |d   d   j                          | j	                  |d   | j                         y )Nr  rt   r   r  r  rr   r  )r  r  appendremoverC   r?   r  r  )r4   r  r  r  dirsra  s         r   test_walk_prunezWalkTests.test_walk_prunen  s    I!%9!5 	$D$JJdE*+~F#	$ 	S1%Q$..6(VH!EFAr
Aq	Q0r   c                 L    | j                  t        | j                               y r(   )r  r   r  re   s    r   test_file_like_pathzWalkTests.test_file_like_path  s    Xdnn56r   c                 f   t        | j                  | j                  d            }| j                  t	        |      d|       |d   d   d   dk7  }|d   d   j                          |dd|z  z
     d	   j                          |dd|z  z
     d   j                          | j                  |d   | j                  dd
gdgf       | j                  ||   | j                  g g f       | j                  ||dz      | j                  dgdgf       | j                  |dd|z  z
     | j                         y )NFtopdownr   r   rr   r   r  rt   r  r  r  r  r  )	r  r  r  rC   r?   r  r  r  r  r  s      r   test_walk_bottom_upzWalkTests.test_walk_bottom_up  s5   499T^^U9;<S1c* a&)A,&(Aq	AGOR %%'AGOQ$$&Q..66*:VHE	GW//2r2	4Wq[)..7)fX>	@QW_-	)r   c                    t        j                         s| j                  d       | j                  | j                  d      }|D ]<  \  }}}|| j
                  k(  s| j                  |g        | j                  |dg        n | j                  d       | j                  | j                  d      }| j                  r| j                  t        t        |       | j                  t        t        |       y )Nzneed symlink supportTr  r  z+Didn't follow symlink with followlinks=True)r   r  rw   r  r  r  rC   r;  r  is_fwalkry   rI   r"  r#  )r4   walk_itr  r  ra  s        r   test_walk_symlinkzWalkTests.test_walk_symlink  s    $$&MM01 ))DNND)A!( 	ED$t~~%  r*  1		E IICD))D114)H==/w?-w7r   c                    g }| j                  | j                  |j                        }t        |      \  }}}| j	                  |g        d}t
        j                  j                  ||      }t
        j                  j                  ||dz         }t        j                  ||       	 |D 	
cg c]  \  }	}
}|	
 }}
}	}| j                  |       | j                  ||       | j                  ||       |D ]8  }||k7  s	| j                  t
        j                  j                  ||      |       : 	 t        j                  ||       y c c}}
}	w # t        j                  ||       w xY w)Nonerrorr  z.new)r  r  r  r"  rC   r   rD   rF   r   rk   rg  r   )r4   errorsr  r  r  ra  dir1path1path1newr   dro   rootsdir2s                 r   test_walk_bad_dirzWalkTests.test_walk_bad_dir  s)   ))DNNFMM)B MdE$T4(77<<dVm4
		%"		'&-..71aQ.E.OOF#UE*Xu- C4<MM"'',,tT":EBC IIh& / IIh&s%   'E -E:AE >2E E E'c                 ~   | j                  d      }| j                  r| j                  t        t        |       | j                  t
        t        |       | j                  dd      }| j                  r| j                  t        t        |       | j                  t
        t        |       | j                  | j                        }| j                  t
        t        |       | j                  | j                  d      }| j                  r| j                  t        t        |       | j                  t
        t        |       y )NnonexistingTr  )r  r  ry   rI   r"  r#  r  NotADirectoryError)r4   r  s     r   test_walk_bad_dir2z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()r8   z%fifo requires special path on VxWorksc                    t         j                  dz   }t        j                  |       | j	                  t        j
                  |       | j                  |      }| j                  t        t        |       | j                  |d      }| j                  r| j                  t        t        |       | j                  t        t        |       y )Nz-pipeTr  )r   rc   r   r  r   rd   r  ry   r#  r"  r  r  )r4   rD   r  s      r   test_walk_named_pipezWalkTests.test_walk_named_pipe  s     ')
		$		4())D/-w7))D$)7==0$@-w7r   c                    t         j                  dz   }t        j                  |       | j	                  t
        j                  |       t        j                  t        j                  j                  |d             g }| j                  ||j                        }t        |       | j                  t        t        |       | j                  |g        g }| j                  ||j                        }t        |      \  }}}| j                  ||       | j                  |g        | j                  |dg       |j!                  |       |j#                          | j$                  r| j                  t&        t        |       | j                  t        t        |       | j$                  r| j                  |g        y | j                  t)        |      d|       | j+                  |d   t&               y )Nz-dirmypiper  rr   r   )r   rc   r   rG   r   shutilr  r  rD   rF   r  r  r"  ry   r#  rC   extendr  r  r  r?   r1   )r4   rD   r  r  r  r  ra  s          r   test_walk_named_pipe2zWalkTests.test_walk_named_pipe2  sp    &(
t,
		"'',,tX./))D&--)8W-w7$))D&--)8 MdEt$r"
+E==0$@-w7==VR(S[!V4!!&)-?@r   c                    d}t         j                  j                  t        j                  d      }t        j                  j                  |gdg|z   }t        j
                  |       t        d      D cg c]  }| j                  |d       }}t        |dz         D ]M  }||rdgng g f}|D ]  }| j                  t        |      |        t         j                  j                  |      }O t        d      D cg c]  }| j                  |d       }}|}t        |dz         D ]Q  }|||k  rdgng g f}|D ]  }| j                  t        |      |        t         j                  j                  |d      }S y c c}w c c}w )	N   deepr  r   Fr  rr   T)r   rD   rF   r   rc   r  r   r  rC   r"  rQ   )	r4   depthbaserW  jitersr   rS   r$  s	            r   test_walk_many_open_filesz#WalkTests.test_walk_many_open_files  sh   ww||I,,f5GGLL.#u.
A9>sDA4/DDuqy! 	#AAC52r2H 5  b845"A		# 9>c
C14.CCuqy! 	%AAIC52r:H 5  b845Q$A		% E Ds   7E?>Fc                    d}t        j                  t        j                  j                  | j                  gdg|z          t        |dz
        5  t        | j                  | j                              }d d d        | j                  d   }D ],  \  }}}||k(  s|j                          |j                          . g }| j                  }t        |      D ]7  }	t         j                  j                  |d      }|j                  |dgg f       9 |d   d   j                          | j                  dgdgf| j                  g g fg| j                  g|d	}
|d   d   }| j                  |d
gfg}|D ]  }|j                  |
|           | j!                  t#        |      |dz          | j!                  t%        |      g d	       | j!                  ||       y # 1 sw Y   dxY w)N2   r  r   r   r  rr   r  r  )r  r  r  r  r   )r   r  rD   rF   r  r   r  r  r  r  r   r  r  r  r  r   rC   r?   sorted)r4   r  r  r  r  r  ra  	d_entriesd_path_sectionsrS   r  s                r   test_walk_above_recursion_limitz)WalkTests.test_walk_above_recursion_limit  s   
BGGLLBC55=BC + 	2tyy01C	2 NN1%	!$ 	D$y 		

	
 	u 	2AWW\\&#.FfseR01	2 	"a 
 'VH5"b) ^^$
 1vay^^TF845 	)AOOHQK(	) 	S519-'<=h'G	2 	2s   %GG#r(   )r\   r]   r^   r  r  r  rf   r  r  r  r  r  r  r  r   r   r   r   r  r=   r>   r  r  r	  r  r+   r   r   r  r    s    H&
E&N?"1&7)*8&'*8& XX.0FGX__S\\Y.;=8= H8 XX.0FGX__S\\Y.;=A= HA:%*&(r   r  fwalkzTest needs os.fwalk()c                      e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
 ej                  ej                  d	      d
        Z ej                  ej                  d	       ej                  ej                   d      d               ZdZy)
FwalkTestszTests for os.fwalk().Tc              +   T   K    | j                   |fi |D ]  \  }}}}|||f  y wr(   )r  )r4   r  r  r  r  ra  root_fds          r   r  zFwalkTests.walkG  s;     *4$**S*CF*C 	&&D$wu%%	&s   &(c                 ,    t        j                  |i |S r(   )r   r  r4   r   r  s      r   r  zFwalkTests.fwalkK  s    xx(((r   c           	         |j                         }|j                         }t        j                  dd      D ]  \  }}|j                  ||       |j                  ||       i }t	        j
                  di |D ]  \  }}}t        |      t        |      f||<   !  | j                  di |D ]B  \  }}}}	| j                  ||       | j                  ||   t        |      t        |      f       D  y)z.
        compare with walk() results.
        TFrt   repeat)r  r  )r  r  Nr+   )
r  	itertoolsproductr  r   r  setr  r   rC   )
r4   walk_kwargsfwalk_kwargsr  r  rS   r  r  ra  rootfds
             r   _compare_to_walkzFwalkTests._compare_to_walkN  s     "&&(#((*(1(9(9-PQ(R 
	J$G_wOLQH%'WW%;{%; 9!dE"%d)SZ!89 .8TZZ-G,-G J)dE6dH-  $#d)SZ1HIJ
	Jr   c                 L    dt         j                  i}| j                  ||       y )Nr  )r   rc   r#  )r4   r  s     r   test_compare_to_walkzFwalkTests.test_compare_to_walk`  s"    ))*ff-r   c                    	 t        j                  dt         j                        }dt        j                  i}|j                         }||d<   | j                  ||       t        j                  |       y # t        j                         w xY w)N.r  r   )r   r    r   r   rc   r  r#  rj   )r4   r   r   r!  s       r   test_dir_fdzFwalkTests.test_dir_fdd  sj    	bkk*B )"2"23K&++-L%'L"!!+|<HHRLBHHRLs   AA5 5Bc           	      z   t        j                  dd      D ]  \  }}t        j                  |d f} | j                  |d|iD ]t  \  }}}}t        j                  |       t        j                  |       | j                  t        t        j                  |            t        |      t        |      z         v  y )Nr  rt   r  r  )r  r  r   rc   r  r   fstatr   rC   r  r  )r4   r  r  r   r  r  ra  r"  s           r   test_yields_correct_dir_fdz%FwalkTests.test_yields_correct_dir_fdn  s    (1(9(9-PQ(R 	R$G_##Wd2D-7TZZ-_-_ R)dE6   RZZ%7!8#d)c%j:PQR	Rr   zCannot dup stdout on Emscriptenc                 N   t        j                  d      }t        j                  |       t        d      D ]&  }| j	                  t
        j                        D ]  } ( t        j                  d      }| j                  t         j                  |       | j                  ||       y )Nrr      )	r   rv   rj   r   r  r   rc   r   rC   )r4   minfdr   r   newfds        r   test_fd_leakzFwalkTests.test_fd_leakz  s     q	
s 	AZZ	 0 01 	 q	%(&r   z,dup return value is unpredictable on Androidc                 (   d }dD ]  } |       }| j                  t        j                  |      }| j                   |       |       t	        |       | j                   |       |       |j                          | j                   |       |        y )Nc                  Z    t        j                  d      } t        j                  |        | S Nrr   )r   rv   rj   )r   s    r   getfdz.FwalkTests.test_fd_finalization.<locals>.getfd  s    BHHRLIr   )FTr  )r  r   rc   rC   r"  assertGreaterrj   )r4   r4  r  old_fdr$  s        r   test_fd_finalizationzFwalkTests.test_fd_finalization  s}    	 % 	.GWFI,,g>BUWf-Huw/HHJUWf-	.r   N)r\   r]   r^   r  r  r  r  r#  r%  r(  r+  r   r  r   r  r0  
is_androidr7  r	  r+   r   r   r  r  B  s    H&)J$.
R X__@'' X__@ X__J..  !%r   r  c                       e Zd ZdZd Zy)BytesWalkTestsTests for os.walk() with bytes.c              +     K   d|v r|j                  d      |d<   t        j                  t        j                  |      fi |D ]  \  }}}t        j                  |      }t        t        t        j                  |            }t        t        t        j                  |            }|||f t        t        t        j                  |            |d d  t        t        t        j                  |            |d d   y wr  )rX  r   r  fsencoderZ   r  map)	r4   r  r  brootbdirsbfilesr  r  ra  s	            r   r  zBytesWalkTests.walk  s     &$*JJ/@$AF=!$&GGBKK,<$G$G 	6 E5&;;u%DBKK/0DR[[&12Eu%%CT23E!HSe45F1I	6s   C:C<N)r\   r]   r^   r  r  r+   r   r   r:  r:    s
    )	6r   r:  c                       e Zd ZdZddZy)BytesFwalkTestsr;  c              /     K   t        j                  t        j                  |      g|i |D ]  \  }}}}t        j                  |      }t	        t        t         j                  |            }	t	        t        t         j                  |            }
||	|
|f t	        t        t         j                  |	            |d d  t	        t        t         j                  |
            |d d   y wr(   )r   r  r=  rZ   r  r>  )r4   r  r   r  r?  r@  rA  topfdr  r  ra  s              r   r  zBytesFwalkTests.fwalk  s     +-88BKK4D+Vt+Vv+V 	6'E5&%;;u%DBKK/0DR[[&12Eue,,CT23E!HSe45F1I	6s   C'C)N)r'  )r\   r]   r^   r  r  r+   r   r   rC  rC    s
    )6r   rC  c                      e Zd Zd Zd Z ej                  ej                  xs ej                  d      d        Z
 ej                  ej                  xs ej                  d      d        Z ej                  ej                  xs ej                  d      d        Zd Z ej                  ej                   dk(  d	      d
        Zd Zy)MakedirTestsc                 J    t        j                  t        j                         y r(   r   rG   r   rc   re   s    r   rf   zMakedirTests.setUp  s    
!!"r   c           
         t         j                  }t        j                  j	                  |ddd      }t        j
                  |       t        j                  j	                  |dddd      }t        j
                  |       | j                  t        t        j
                  t        j                         t        j                  j	                  |dddddt        j                        }t        j
                  |       t        j                  j	                  |dt        j                  ddddd      }t        j
                  |       y Nr  r  dir3dir4dir5dir6)	r   rc   r   rD   rF   r  ry   rJ   curdir)r4   r  rD   s      r   test_makedirz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                    t        j                  d      5  t         j                  }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  |d       | j                  t        j                  j                  |             | j                  t        j                  j                  |             t        j                  dk7  rd| j                  t        j                  |      j                  dz  d       | j                  t        j                  |      j                  dz  d       d d d        y # 1 sw Y   y xY w)Nrt   r  r  im  ntr   i  )r   
temp_umaskrc   r   rD   rF   r  rk   r~  isdirr   rC   r   r=  )r4   r  parentrD   s       r   	test_modezMakedirTests.test_mode  s    
 !!%( 		I##DWW\\$/F77<</DKKe$OOBGGNN401OOBGGMM$/0ww$  !6!6!>F  !8!85!@%H		I 		I 		Is   D:EE"c                 H   t         j                  j                  t        j                  d      }d}t        j
                  d      }t        j                  ||       | j                  t        t         j                  ||       | j                  t        t         j                  ||d       t        j                  |dd       t        j                  ||d       t        j
                  |       t        j                  t         j                  j                  d	      d       y )
Nr  r      Fexist_oki  T)r   r[  /)
r   rD   rF   r   rc   umaskr  ry   rJ   r  )r4   rD   r   old_masks       r    test_exist_ok_existing_directoryz-MakedirTests.test_exist_ok_existing_directory  s    
 ww||I,,f588E?
D$'2;;d;'2;;dUK
D%$/
Dtd3
 	BGGOOC(48r   c                    t         j                  j                  t        j                  d      }t
        j                  }d}t        j                  d      }	 t        j                  t        j                  t        j                        j                        }	 t        j                  t        j                  ||z         t        j                  t        j                        j                  |z  |k7  rt        j                  d      t        j                  |||z         t        j                  ||d       t        j                  |t        j                  t        j                  |      j                        | z         t        j                  |||z  d       t        j                  |       y # t        $ r t        j                  d      w xY w# t        j                  |       w xY w)Nr  r   rY  zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.TrZ  )r   rD   rF   r   rc   r   S_ISGIDr]  S_IMODElstatr=  r  r  r   SkipTestr  )r4   rD   ra  r   r^  existing_testfn_modes         r   test_exist_ok_s_isgid_directoryz,MakedirTests.test_exist_ok_s_isgid_directory  sa   
 ww||I,,f5,,88E?	#'<<HHY--.66$8 G))+?'+IJ ))*22W<G''(JKK KKdWn- KKdT2HHT4<<(>(>?7(JKKKdWnt<HHX # G''(EFFG HHXs&   A G 'F3 ?CG 3GG G,c                    t         j                  }t        j                  j	                  t         j                  d      }t        |dd      5 }|j                  d       d d d        | j                  t        t        j                  |       | j                  t        t        j                  |d       | j                  t        t        j                  |d       t        j                  |       y # 1 sw Y   xY w)	Nr  ry  r   r   r;  FrZ  T)r   rc   r   rD   rF   r    r!   ry   rJ   r  r  )r4   r  rD   ro   s       r   #test_exist_ok_existing_regular_filez0MakedirTests.test_exist_ok_existing_regular_file  s    ww||I,,f5$g. 	!GGEN	'2;;5'2;;uE'2;;tD
		$	 	s   C00C9rS  zrequires Windowsc                    t         j                  }t        j                  j	                  t        j                  j                  t         j                  d            }t        j                  |d       t        j                  d|dgd      }t        j                  |       | j                  |j                         | d       y )	Nr2  i  )r   z	cacls.exez/soemr   z6 "D:P(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;OW)")r   rc   r   rD   r  rF   rG   r   check_outputr  rC   r  )r4   r  rD   outs       r   test_win32_mkdir_700z!MakedirTests.test_win32_mkdir_700  s    wwrww||I,<,<eDE
E"%%{D$&?%P
IIKfJK	
r   c           	         t         j                  j                  t        j                  dddddd      }t         j                  j                  |      se|t        j                  k7  rRt         j                  j                  |      }t         j                  j                  |      s|t        j                  k7  rRt        j                  |       y rK  )r   rD   rF   r   rc   r~  rQ   
removedirsr4   rD   s     r   r  zMakedirTests.tearDown'  s    ww||I,,fff"FF4
 ''..&493C3C+C77??4(D ''..&493C3C+C 	dr   N)r\   r]   r^   rf   rQ  r   r  r   r  r  rW  r_  rf  rh  r   r   r   rm  r  r+   r   r   rG  rG    s    # X__0.
I	
I X__0.9	9 X__0.	6 XD*<=	
 >	
	r   rG  chownzrequires os.chown()c                      e Zd Zed        Zd Z ej                   ee	d      d      d        Z
 ej                  exr  ee      dkD  d      d        Z ej                  e xr  ee      dkD  d	      d
        Zed        Zy)ChownFileTestsc                 J    t        j                  t        j                         y r(   rI  clss    r   
setUpClasszChownFileTests.setUpClass6      
!!"r   c                    t        j                  t        j                        }|j                  }|j
                  }ddt        j                  d      t        j                  dd      fD ]l  }| j                  t        t         j                  t        j                  ||       | j                  t        t         j                  t        j                  ||       n | j                  t        j                  t        j                  ||             | j                  t        j                  t        j                  dd             y )Ng      y             r  rt   )r   r   r   rc   st_uidst_giddecimalDecimal	fractionsFractionry   r   rq  assertIsNone)r4   r   uidgidrl  s        r   *test_chown_uid_gid_arguments_must_be_indexz9ChownFileTests.test_chown_uid_gid_arguments_must_be_index:  s    wwy''(kkkkC!4i6H6HQ6OP 	QEi93C3CUCPi93C3CS%P	Q 	"((9#3#3S#>?"((9#3#3R<=r   	getgroupszneed os.getgroupsc                 d   t        j                         }t        |      dk  r| j                  d       |d d \  }}t        j                  t
        j                        j                  }t        j                  t
        j                  ||       t        j                  t
        j                        j                  }| j                  ||       t        j                  t
        j                  ||       t        j                  t
        j                        j                  }| j                  ||       y )Nrt   ztest needs at least 2 groups)r   r  r?   rw   r   r   rc   r{  rq  r|  rC   )r4   groupsgid_1gid_2r  r  s         r   test_chown_gidzChownFileTests.test_chown_gidD  s    v;?MM89bqzuggi&&'..
!!3.ggi&&'..e$
!!3.ggi&&'..e$r   rr   z0test needs root privilege and more than one userc                    t         d d \  }}t        j                  t        j                        j
                  }t        j                  t        j                  ||       t        j                  t        j                        j                  }| j                  ||       t        j                  t        j                  ||       t        j                  t        j                        j                  }| j                  ||       y Nrt   )		all_usersr   r   r   rc   r|  rq  r{  rC   )r4   uid_1uid_2r  r  s        r   test_chown_with_rootz#ChownFileTests.test_chown_with_rootU  s     !!}uggi&&'..
!!5#.ggi&&'..e$
!!5#.ggi&&'..e$r   z2test needs non-root account and more than one userc                 ^   t         d d \  }}t        j                  t        j                        j
                  }| j                  t              5  t        j                  t        j                  ||       t        j                  t        j                  ||       d d d        y # 1 sw Y   y xY wr  )	r  r   r   r   rc   r|  ry   r  rq  )r4   r  r  r  s       r   test_chown_without_permissionz,ChownFileTests.test_chown_without_permissiona  s|     !!}uggi&&'../ 	3HHY%%uc2HHY%%uc2	3 	3 	3s   AB##B,c                 J    t        j                  t        j                         y r(   )r   r  r   rc   ru  s    r   tearDownClasszChownFileTests.tearDownClassj  rx  r   N)r\   r]   r^   classmethodrw  r  r   r   r   r   r  root_in_posixr?   r  r  r  r  r+   r   r   rs  rs  3  s     # #> X[13FG% H%  X=3y>A+=KM%M% X]*As9~/AMO3O3 # #r   rs  c                   *    e Zd Zd Zd Zd Zd Zd Zy)RemoveDirsTestsc                 J    t        j                  t        j                         y r(   )r   r  r   rc   re   s    r   rf   zRemoveDirsTests.setUpp  s    
I$$%r   c                 J    t        j                  t         j                         y r(   )r   r  rc   re   s    r   r  zRemoveDirsTests.tearDowns  s    ))*r   c                 N   t         j                  j                  t        j                  d      }t        j
                  |       t         j                  j                  |d      }t        j
                  |       t        j                  |       | j                  t         j                  j                  |             | j                  t         j                  j                  |             | j                  t         j                  j                  t        j                               y )Ndiradirb)	r   rD   rF   r   rc   rG   ro  assertFalser~  r4   r  r  s      r   test_remove_allzRemoveDirsTests.test_remove_allv  s    ww||I,,f5
ww||D&)

d-.-.	(8(89:r   c                    t         j                  j                  t        j                  d      }t        j
                  |       t         j                  j                  |d      }t        j
                  |       t        t         j                  j                  |d             t        j                  |       | j                  t         j                  j                  |             | j                  t         j                  j                  |             | j                  t         j                  j                  t        j                               y Nr  r  file.txt)r   rD   rF   r   rc   rG   r%   ro  r  r~  rk   r  s      r   test_remove_partialz#RemoveDirsTests.test_remove_partial  s    ww||I,,f5
ww||D&)
BGGLLz23
d-.t,-y'7'789r   c                    t         j                  j                  t        j                  d      }t        j
                  |       t         j                  j                  |d      }t        j
                  |       t        t         j                  j                  |d             | j                  t              5  t        j                  |       d d d        | j                  t         j                  j                  |             | j                  t         j                  j                  |             | j                  t         j                  j                  t        j                               y # 1 sw Y   xY wr  )r   rD   rF   r   rc   rG   r%   ry   rJ   ro  rk   r~  r  s      r   test_remove_nothingz#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   7E..E7N)r\   r]   r^   rf   r  r  r  r  r+   r   r   r  r  o  s    &+;	:
:r   r  zWASI has no /dev/nullc                       e Zd Zd Zy)DevNullTestsc                 D   t        t        j                  dd      5 }|j                  d       |j	                          d d d        t        t        j                  d      5 }| j                  |j                         d       d d d        y # 1 sw Y   MxY w# 1 sw Y   y xY w)Nr  r      hellor   r   )r    r   devnullr!   rj   rC   r   rn   s     r   test_devnullzDevNullTests.test_devnull  s    "**dA& 	!GGHGGI	 "**d# 	,qQVVXs+	, 	,	 		, 	,s   "B
 !B
BBN)r\   r]   r^   r  r+   r   r   r  r    s    ,r   r  c                   $    e Zd Zd Zd Zd Zd Zy)URandomTestsc                    | j                  t        t        j                  d            d       | j                  t        t        j                  d            d       | j                  t        t        j                  d            d       | j                  t        t        j                  d            d       | j                  t        t        j                  d            d       y )Nr   rr   rs   r   r9   )rC   r?   r   urandomre   s    r   test_urandom_lengthz URandomTests.test_urandom_length  s    RZZ]+Q/RZZ]+Q/RZZ^,b1RZZ_-s3RZZ-.5r   c                     t        j                  d      }| j                  |t               t        j                  d      }| j	                  ||       y N   )r   r  r1   rY   r  r4   data1data2s      r   test_urandom_valuezURandomTests.test_urandom_value  s<    

2eU+

2E5)r   c                     dj                  dd|z  ddf      }t        d|      }|d   }| j                  t        |      |       |S )N
zimport os, syszdata = os.urandom(%s)zsys.stdout.buffer.write(data)zsys.stdout.buffer.flush()r   rr   )rF   r   rC   r?   )r4   countr   rl  rU  s        r   get_urandom_subprocessz#URandomTests.get_urandom_subprocess  sV    yy#e++'	) *
 tT*QVe,r   c                 l    | j                  d      }| j                  d      }| j                  ||       y r  )r  r  r  s      r   test_urandom_subprocessz$URandomTests.test_urandom_subprocess  s2    ++B/++B/E5)r   N)r\   r]   r^   r  r  r  r  r+   r   r   r  r    s    6*	*r   r  	getrandomzneed os.getrandom()c                   :    e Zd Zed        Zd Zd Zd Zd Zd Z	y)GetRandomTestsc                     	 t        j                  d       y # t        $ r8}|j                  t        j                  k(  rt        j                  d       d }~ww xY w)Nrr   z%getrandom() syscall fails with ENOSYS)r   r  rJ   rK   r   r   rd  )rv  rU   s     r   rw  zGetRandomTests.setUpClass  sI    	LLO 	yyELL( ''(OPP	s    	A3AAc                     t        j                  d      }| j                  |t               | j	                  t        |      d       y r  )r   r  r1   rY   rC   r?   )r4   r   s     r   test_getrandom_typez"GetRandomTests.test_getrandom_type  s4    ||BdE*TB'r   c                 R    t        j                  d      }| j                  |d       y )Nr   r   )r   r  rC   )r4   emptys     r   test_getrandom0zGetRandomTests.test_getrandom0  s    Q$r   c                 B    | j                  t        t        d             y )NGRND_RANDOM)rk   r   r   re   s    r   test_getrandom_randomz$GetRandomTests.test_getrandom_random  s    M23r   c                 l    	 t        j                  dt         j                         y # t        $ r Y y w xY wr3  )r   r  GRND_NONBLOCKBlockingIOErrorre   s    r   test_getrandom_nonblockz&GetRandomTests.test_getrandom_nonblock  s-    	LLB,,- 		s   $' 	33c                 |    t        j                  d      }t        j                  d      }| j                  ||       y r  )r   r  r  r  s      r   test_getrandom_valuez#GetRandomTests.test_getrandom_value  s.    R R E5)r   N)
r\   r]   r^   r  rw  r  r  r  r  r  r+   r   r   r  r    s-    	 	(
%4*r   r  HAVE_GETENTROPYrr   HAVE_GETRANDOMHAVE_GETRANDOM_SYSCALLz*os.random() does not use a file descriptorr8   z$VxWorks can't set RLIMIT_NOFILE to 1c                   J    e Zd Z ej                  ed      d        Zd Zd Zy)URandomFDTestsz!test requires the resource modulec                      d}t        d|       y )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_failurez#URandomFDTests.test_urandom_failure  s     	t$r   c                 (    d}t        d|      \  }}}y )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   )r4   r   rcrl  errs        r   test_urandom_fd_closedz%URandomFDTests.test_urandom_fd_closed  s     (t4Cr   c                    | j                  t        j                  t        j                         t	        t        j                  d       dj                  t        j                        }t        d|      \  }}}| j                  t        |      d       | j                  |dd |dd        t        d|      \  }}}| j                  t        |      d       | j                  ||       y )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))
            )rc   r  r*  r   r   )
r   r   rd   rc   r%   formatr   rC   r?   r  )r4   r   r  rl  r  out2err2s          r   test_urandom_fd_reopenedz'URandomFDTests.test_urandom_fd_reopened  s     		(()*:*:;I$$j10 i../1 	2 (t4CS1%C!Hc!Ah/)%6D$TA&D#&r   N)	r\   r]   r^   r   r   resourcer  r  r  r+   r   r   r  r    s1    
 X#FG% H%,5$'r   r  c              #   d  K   g fd}fd}	 t         j                  }t         j                  }t         j                  }|t         _        |t         _        | | t         _         |t         _        |t         _        |t         _        y# t         _        t         _        t         _        w xY ww)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                 B    j                  d| |f       t        d      )Nexecvzexecv called)r  RuntimeErrorr   r   callss     r   
mock_execvz#_execvpe_mockup.<locals>.mock_execvO  s!    gtT*+>**r   c                 `    j                  d| |f       t        t        j                  d      )Nexecvezexecve called)r  rJ   rK   ENOTDIRr  s     r   mock_execvez$_execvpe_mockup.<locals>.mock_execveS  s'    hd+,emm_55r   N)r   r  r  r<  )r<  r  r  
orig_execvorig_execveorig_defpathr  s         @r   _execvpe_mockupr  D  s      E+6"XX
iizz	 BJ	!
 	!
s   B0AB
 ("B0
#B--B0r  zneed os.execv()c                       e Zd Z ej                  ed      d        Zd Zd Z ej                   e
ed      d      d        Zd Zd	 Z ej                  ej                   d
k(  d      d        Zy)	ExecTestsz4avoid triggering a linuxthreads bug: see issue #4970c                 T    | j                  t        t        j                  ddgd        y )Nzno such app-)ry   rJ   r   execvpere   s    r   test_execvpe_with_bad_programz'ExecTests.test_execvpe_with_bad_programh  s$     	'2::~)*D	2r   c                 6   | j                  t        t        j                  dd       | j                  t        t        j                  dg        | j                  t        t        j                  dd       | j                  t        t        j                  ddg       y )Nnotepadr+   r7  r  )ry   r   r   r  re   s    r   test_execv_with_bad_arglistz%ExecTests.test_execv_with_bad_arglistn  sd    *bhh	2>*bhh	2>*bhh	5A*bhh	B4@r   c                     | j                  t        t        j                  dg d        | j                  t        t        j                  dg i        | j                  t        t        j                  ddgi        y )Nr  r  )ry   r   r   r  re   s    r   test_execvpe_with_bad_arglistz'ExecTests.test_execvpe_with_bad_arglistt  sR    *bjj)RF*bjj)RD*bjj)bT2Fr   _execvpez)No internal os._execvpe function to test.c                    t         j                  dz   }|t        u r<d}t         j                  j	                  t        j
                  |      |      }|}g d}nQd}g d}t         j                  j	                  ||      }t         j                  dk7  rt        j
                  |      }n|}ddi}t               5 }| j                  t        t         j                  ||       | j                  t        |      d	       | j                  |d
   d||ff       d d d        t        |      5 }| j                  t        t         j                  |||       | j                  t        |      d	       | j                  |d
   d|||ff       d d d        t               5 }|j                         }	|t        u r||	d<   n||	d<   | j                  t        t         j                  |||	       | j                  t        |      d	       | j                  |d
   d|||	ff       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nabsolutepaths
   executable)s   prognamearg1arg2r   )prognamer  r   rS  spamr   rr   r   r  )r<  r6  r  r9  r5  )r   rE   rY   rD   rF   r=  r   r  ry   r  r  rC   r?   rJ   r>  r  )
r4   	test_typeprogram_pathprogramfullpathnative_fullpath	argumentsr1  r  env_paths
             r   _test_internal_execvpez ExecTests._test_internal_execvpey  s    vv.#Gww||BKK$=wGH&O5I"G4Iww||L':Hww$"$++h"7"*w  	J%lXy2SZ+U1XI<'HI		J \2 	?egWiS  :SZ+$$U1X?Y,<=?		?  
	D%xxzHE!$0!#/ gWiX  ?SZ+$$U1X?Y,ABD
	D 
	D#	J 	J	? 	?
	D 
	Ds'   7AH &AH-BH9 H*-H69Ic                     | j                  t               t        j                  dk7  r| j                  t               y y )NrS  )r
  r2   r   r   rY   re   s    r   test_internal_execvpe_strz#ExecTests.test_internal_execvpe_str  s.    ##C(77d?''. r   c                    t         j                  ddg}t        j                  j	                         }d|d<   | j                  t              5  t        j                  |d   ||       d d d        t        j                  j	                         }d|d<   | j                  t              5  t        j                  |d   ||       d d d        t        j                  j	                         }d|d	<   | j                  t              5  t        j                  |d   ||       d d d        y # 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   y xY w)
Nr   passcabbageFRUIT VEGETABLEr   orange VEGETABLE=cabbageFRUITlemonFRUIT=ORANGE)r=   r   r   r  r  ry   r   r  )r4   r   newenvs      r   test_execve_invalid_envz!ExecTests.test_execve_invalid_env  s   f- "%.!"z* 	-IId1gtV,	- "5wz* 	-IId1gtV,	- "!(~z* 	-IId1gtV,	- 	-	- 	-	- 	-	- 	-s$   D&'D2D>&D/2D;>Er   zWin32-specific testc                     	 t        j                  ddgi        | j                  d       y # t        $ r8}| j	                  |j
                  d u xs |j
                  dk7         Y d }~y d }~ww xY w)Nr  argzNo OSError raisedr   )r   r  r;  rJ   rk   winerrorrt  s     r   test_execve_with_empty_pathz%ExecTests.test_execve_with_empty_path  sa    	+IIb5'2& II)*  	COOAJJ$.A!**/BB	Cs   , 	A-.A((A-N)r\   r]   r^   r   r  USING_LINUXTHREADSr  r  r  r   r   r   r
  r  r  r=   r>   r  r+   r   r   r  r  e  s     X__'KM2M2AG
 XZ0DF-DF-D^/
-* X02GH+ I+r   r  r   rr  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	Win32ErrorTestsc                 "   	 t        j                  t        j                         | j	                  dt        j                  z         y # t
        $ r d}Y y t        $ r1}d}| j	                  dt        j                  d|       Y d }~y d }~ww xY w)Nzfile %s must not existFTzfile z% must not exist; os.stat failed with )r   r   r   rc   r;  rI   rJ   )r4   r~  rU   s      r   rf   zWin32ErrorTests.setUp  sy    		CGGI$$% II.1A1AAB ! 	F 	1FII"))30 1 1	1s   #A BB'B		Bc                     | j                  t        t        j                  t        j
                  t        j
                  dz          y )Nz.bak)ry   rJ   r   r   r   rc   re   s    r   r   zWin32ErrorTests.test_rename  s,    '299i.>.>	@P@PQW@WXr   c                 j    | j                  t        t        j                  t        j
                         y r(   )ry   rJ   r   r  r   rc   re   s    r   test_removezWin32ErrorTests.test_remove  s    '299i.>.>?r   c                 j    | j                  t        t        j                  t        j
                         y r(   )ry   rJ   r   rH   r   rc   re   s    r   
test_chdirzWin32ErrorTests.test_chdir  s    '288Y-=-=>r   c                 $   | j                  t        j                  t        j                         t	        t        j                  d      5 }| j                  t        t        j                  t        j                         d d d        y # 1 sw Y   y xY w)Nr   )	r   r   rd   rc   r    ry   rJ   r   rG   rn   s     r   
test_mkdirzWin32ErrorTests.test_mkdir  sc    	(()*:*:;)""C( 	CAgrxx1A1AB	C 	C 	Cs   	4BBc                 l    | j                  t        t        j                  t        j
                  d        y r(   )ry   rJ   r   r  r   rc   re   s    r   r  zWin32ErrorTests.test_utime  s     '288Y-=-=tDr   c                 l    | j                  t        t        j                  t        j
                  d       y r   )ry   rJ   r   r  r   rc   re   s    r   
test_chmodzWin32ErrorTests.test_chmod  s     '288Y-=-=qAr   N)
r\   r]   r^   rf   r   r!  r#  r%  r  r(  r+   r   r   r  r    s+    
CY@?CEBr   r  z!Cannot create invalid FD on WASI.c                      e Zd Zg dZd ZeD ]  Z ee       e       dez   <    d Zd Z e	j                   eed      d      d        Z e	j                   eed	      d
      d        Z e	j                   eed      d      d        Z e	j                   eed      d       e	j                   ej$                  d      d               Z e	j                   eed      d      d        Z e	j                   eed      d      d        Z e	j                   eed      d       e	j                   ej$                  xs ej,                  d      d               Z e	j                   eed      d      d        Z e	j                   eed      d      d         Z e	j                   eed!      d"      d#        Z e	j                   eed$      d%      d&        Z e	j                   eed'      d(      d)        Z e	j                   eed*      d+      d,        Z e	j                   eed-      d.      d/        Z ej>                         d0        Z  e	j                   eed1      d2      d3        Z!y4)5TestInvalidFD)fchdirrv   	fdatasyncr*  fstatvfsfsync	tcgetpgrpttynamec                       fd}|S )Nc                 f    t        t              r | j                  t        t                     y y r(   )r   r   rT  r5  rn   s    r   helperz(TestInvalidFD.get_single.<locals>.helper  s#    A

72q>* r   r+   )ro   r3  s   ` r   
get_singlezTestInvalidFD.get_single  s    	+ r   test_c                     	  |t        j                         g|i | | j                  d|z         y # t        $ r4}| j	                  |j
                  t
        j                         Y d }~y d }~ww xY w)Nz5%r didn't raise an OSError with a bad file descriptor)r   make_bad_fdr;  rJ   rC   rK   rx  )r4   ro   r   r  r   s        r   rT  zTestInvalidFD.check	  sh    	i##%777 IIM   	3QWWekk22	3s   5 	A2*A--A2c                 F    | j                  t        j                  d       y )Nr   r   )rT  r   r   re   s    r   r   zTestInvalidFD.test_fdopen
	  s    

299w
/r   isattyztest needs os.isatty()c                 r    | j                  t        j                  t        j                               d       y NF)rC   r   r9  r   r7  re   s    r   test_isattyzTestInvalidFD.test_isatty	  s$    9#8#8#:;UCr   rx   ztest needs os.closerange()c                 (   t        j                         }t        d      D ]  }t        j                  ||z           n dk  rt        j                  d      | j                  t        j                  |||z   dz
        d        y # t
        $ r Y pw xY w)Nrs   rt   z5Unable to acquire a range of invalid file descriptorsrr   )
r   r7  r   r   r*  rJ   r   rd  rC   rx   )r4   r   r   s      r   r}   zTestInvalidFD.test_closerange	  s    ""$ r 	A"Q$ 	 q5##GI Ir26!84d;  s   B	BBdup2ztest needs os.dup2()c                 D    | j                  t        j                  d       y )N   )rT  r   r>  re   s    r   	test_dup2zTestInvalidFD.test_dup2!	  s    

277Br   z@dup2() with negative fds is broken on Emscripten (see gh-102179)c                     t        j                  t        t         j                        }| j	                  t         j
                  |       |ddg}t        j                  |d      D ]  \  }}||k7  s| j                  ||      5  | j                  t              5 }t        j                  ||       d d d        | j                  j                  j                  t        j                         d d d         y # 1 sw Y   HxY w# 1 sw Y   xY w)Nr  i   rt   r  )r   fd2)r   r    r   r   r   rj   r  r  rR  ry   rJ   r>  rC   rw  rK   rx  )r4   valid_fdfdsr   rC  rz  s         r   test_dup2_negative_fdz#TestInvalidFD.test_dup2_negative_fd%	  s     778R[[1(+

 !((Q7 	GGBSy\\RS\1 G**73 )sC()$$S]]%8%8%++FG G	G) )G Gs$   DC81<D8D=DD	fchmodztest needs os.fchmod()c                 D    | j                  t        j                  d       y r   )rT  r   rG  re   s    r   test_fchmodzTestInvalidFD.test_fchmod9	  s    

299a r   fchownztest needs os.fchown()c                 F    | j                  t        j                  dd       y )Nr  )rT  r   rJ  re   s    r   test_fchownzTestInvalidFD.test_fchown=	  s    

299b"%r   	fpathconfztest needs os.fpathconf()z-musl libc issue on Emscripten/WASI, bpo-46390c                     | j                  t        j                  d       | j                  t        j                  d       y )NPC_NAME_MAX)rT  r   pathconfrM  re   s    r   test_fpathconfzTestInvalidFD.test_fpathconfA	  s(     	

2;;.

2<</r   	ftruncateztest needs os.ftruncate()c                     | j                  t        j                  d       | j                  t        j                  d       y r   )rT  r   truncaterR  re   s    r   test_ftruncatezTestInvalidFD.test_ftruncateJ	  s&    

2;;"

2<<#r   r   ztest needs os.lseek()c                 F    | j                  t        j                  dd       y r   )rT  r   r   re   s    r   
test_lseekzTestInvalidFD.test_lseekO	  s    

288Q"r   r   ztest needs os.read()c                 D    | j                  t        j                  d       y r3  )rT  r   r   re   s    r   r   zTestInvalidFD.test_readS	  s    

277Ar   readvztest needs os.readv()c                 \    t        d      }| j                  t        j                  |g       y )Nrs   )r   rT  r   rY  )r4   r  s     r   
test_readvzTestInvalidFD.test_readvW	  s    m

288cU#r   	tcsetpgrpztest needs os.tcsetpgrp()c                 D    | j                  t        j                  d       y r   )rT  r   r\  re   s    r   test_tcsetpgrptzTestInvalidFD.test_tcsetpgrpt\	  s    

2<<#r   r!   ztest needs os.write()c                 D    | j                  t        j                  d       y )N    )rT  r   r!   re   s    r   r   zTestInvalidFD.test_write`	  s    

288T"r   writevztest needs os.writev()c                 F    | j                  t        j                  dg       y )Nr:  )rT  r   ra  re   s    r   test_writevzTestInvalidFD.test_writevd	  s    

299vh'r   c                     | j                  t        j                         | j                  t        j                  d       y NT)rT  r   get_inheritableset_inheritablere   s    r   test_inheritablezTestInvalidFD.test_inheritableh	  s(    

2%%&

2%%t,r   get_blocking-needs os.get_blocking() and os.set_blocking()c                     | j                  t        j                         | j                  t        j                  d       y re  )rT  r   ri  set_blockingre   s    r   test_blockingzTestInvalidFD.test_blockingm	  s&     	

2??#

2??D)r   N)"r\   r]   r^   singlesr4  ro   localsrT  r   r   r   r   r   r<  r}   rA  r  r   r  rF  rI  rL  r  rQ  rU  rW  r   r[  r^  r   rc  r  rh  rm  r+   r   r   r*  r*    s>   <G
  ,(m,0 XX.0HID JD X\24PQ< R< XV,.DE  F  XV,.DEX__JG	 F
G XX.0HI! J! XX.0HI& J& X[13NOX__070	 P
0 X[13NO$ P$ XW-/FG# H# XV,.DE F XW-/FG$ H$ X[13NO$ P$ XW-/FG# H# XX.0HI( J( !W  "- #- X^4HJ*J*r   r*  r  zrequires os.linkc                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)	LinkTestsc                     t         j                  | _        t        j                  j                  t         j                  dz         | _        y )Nr  )r   rc   file1r   rD   rF   file2re   s    r   rf   zLinkTests.setUpv	  s.    %%
WW\\)"2"2S"89
r   c                     | j                   | j                  fD ]7  }t        j                  j	                  |      s#t        j
                  |       9 y r(   )rs  rt  r   rD   r~  rd   )r4   files     r   r  zLinkTests.tearDownz	  s9    ZZ, 	 Dww~~d#		$	 r   c           	         t        |       	 t        j                  ||       t        |d      5 }t        |d      5 }| j                  t        j                  j                  |j                         |j                                      d d d        d d d        y # t        $ r}| j	                  d|z         Y d }~d }~ww xY w# 1 sw Y   <xY w# 1 sw Y   y xY w)Nos.link(): %sr   )
r%   r   r  r  rw   r    rk   rD   sameopenfiler   )r4   rs  rt  r   r  f2s         r   
_test_linkzLinkTests._test_link	  s    E	/GGE5! % 	L"d5$&7 	L2OOBGG00biikJK	L 	L 	L  	/MM/A-..	/	L 	L 	L 	Ls:   B CACC	C "B;;C C	CCc                 P    | j                  | j                  | j                         y r(   )r{  rs  rt  re   s    r   	test_linkzLinkTests.test_link	  s    

DJJ/r   c                     | j                  t        | j                  t        j                               t        | j
                  t        j                                      y r(   )r{  rY   rs  r=   rL  rt  re   s    r   test_link_byteszLinkTests.test_link_bytes	  s<    djj#*C*C*EFdjj#*C*C*EF	Hr   c                    	 t        j                  d       | xj
                  dz  c_        | j
                  dz   | _        | j                  | j
                  | j                         y # t        $ r t        j                  d      w xY w)N   ñz#Unable to encode for this platform.r  )r   r=  UnicodeErrorr   rd  rs  rt  r{  re   s    r   test_unicode_namezLinkTests.test_unicode_name	  so    	KKK 	

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

DJJ/  	K##$IJJ	Ks   A' 'BN)	r\   r]   r^   rf   r  r{  r}  r  r  r+   r   r   rq  rq  t	  s"    : 
L0H0r   rq  zPosix specific testsc                      e Zd ZdZdZ ej                   eed      d      d        Z	 ej                   eed      d      d        Z
 ej                   eed      d	      d
        Z ej                   eed      d      d        Z ej                   eed      d      d        Z ej                   eed      d       ej                         d               Z ej                   eed      d       ej                         d               Z ej                   eed      d       ej                         d               Zy)PosixUidGidTests        setuidztest needs os.setuid()c                 $   t        j                         dk7  r%| j                  t        t         j                  d       | j                  t
        t         j                  d       | j                  t        t         j                  | j                         y Nr   z
not an int)r   getuidry   rJ   r  r   OverflowErrorUID_OVERFLOWre   s    r   test_setuidzPosixUidGidTests.test_setuid	  sX    99;!gryy!4)RYY=-D4E4EFr   setgidztest needs os.setgid()c                 0   t        j                         dk7  r+t        s%| j                  t        t         j
                  d       | j                  t        t         j
                  d       | j                  t        t         j
                  | j                         y r  )	r   r  HAVE_WHEEL_GROUPry   rJ   r  r   r  GID_OVERFLOWre   s    r   test_setgidzPosixUidGidTests.test_setgid	  s[    99;!$4gryy!4)RYY=-D4E4EFr   seteuidztest needs os.seteuid()c                 $   t        j                         dk7  r%| j                  t        t         j                  d       | j                  t
        t         j                  d       | j                  t        t         j                  | j                         y r  )	r   r  ry   rJ   r  r   setegidr  r  re   s    r   test_seteuidzPosixUidGidTests.test_seteuid	  sX    99;!grzz15)RZZ>-T5F5FGr   r  ztest needs os.setegid()c                 0   t        j                         dk7  r+t        s%| j                  t        t         j
                  d       | j                  t        t         j
                  d       | j                  t        t         j
                  | j                         y r  )	r   r  r  ry   rJ   r  r   r  r  re   s    r   test_setegidzPosixUidGidTests.test_setegid	  s[    99;!$4grzz15)RZZ>-T5F5FGr   setreuidztest needs os.setreuid()c                    t        j                         dk7  r&| j                  t        t         j                  dd       | j                  t
        t         j                  dd       | j                  t
        t         j                  dd       | j                  t        t         j                  | j                  d       | j                  t        t         j                  d| j                         y r  )r   r  ry   rJ   r  r   r  r  re   s    r   test_setreuidzPosixUidGidTests.test_setreuid	  s    99;!gr{{Aq9)R[[,B)R[[!\B-d6G6GK-a9J9JKr   c                 P    t        j                  t        j                  ddg       y )Nr   z,import os,sys;os.setreuid(-1,-1);sys.exit(0)r   r  r=   r   re   s    r   test_setreuid_neg1z#PosixUidGidTests.test_setreuid_neg1	  %    
 	>@ 	Ar   setregidztest needs os.setregid()c                    t        j                         dk7  r,t        s&| j                  t        t         j
                  dd       | j                  t        t         j
                  dd       | j                  t        t         j
                  dd       | j                  t        t         j
                  | j                  d       | j                  t        t         j
                  d| j                         y r  )	r   r  r  ry   rJ   r  r   r  r  re   s    r   test_setregidzPosixUidGidTests.test_setregid	  s     99;!$4gr{{Aq9)R[[,B)R[[!\B-d6G6GK-a9J9JKr   c                 P    t        j                  t        j                  ddg       y )Nr   z,import os,sys;os.setregid(-1,-1);sys.exit(0)r  re   s    r   test_setregid_neg1z#PosixUidGidTests.test_setregid_neg1	  r  r   N)r\   r]   r^   r  r  r   r   r   r   r  r  r  r  r  r   r  r  r  r  r+   r   r   r  r  	  s    LLXX.0HIG JG XX.0HIG JG XY/1JKH LH XY/1JKH LH XZ02LML NL XZ02LM W  "A # NA XZ02LM W  "L # NL XZ02LM W  "A # NAr   r  c                   j    e Zd Zd Zd Zd Zd Z ej                   e	e
d      d      d        Zd Zy	)
Pep383Testsc                    t         j                  rt         j                  | _        n;t         j                  rt         j                  | _        nt         j                  | _        t        j                  | j                        | _        g fd} |t         j                         t         j                  r |t         j                         t         j                  r |t         j                         s| j                  d       t               | _        t        j                  | j                         	 D ]  }t        j                  t
        j                  j                  | j                  |             t        j                   |      }|| j                  v rt#        d      | j                  j%                  |        y #  t'        j(                  | j                          xY w)Nc                 r    	 t        j                  |       } j                  |        y # t        $ r Y y w xY wr(   )r   r=  rM  r  )fnbytesfns    r   add_filenamez'Pep383Tests.setUp.<locals>.add_filename	  s7    [[_ NN2 & s   * 	66z&couldn't create any non-ascii filenamezduplicate filename)r   TESTFN_UNENCODABLEr2  TESTFN_NONASCIIrc   r   r=  bdirTESTFN_UNICODErw   r  	unicodefnrG   create_empty_filerD   rF   rZ   r   addr  r  )r4   r  r  r  s      @r   rf   zPep383Tests.setUp	  sG   '' 33DH&& 00DH ''DHKK)		 	Y--.''556$$223MMBC
		 '++BGGLLB,GH[[_'$%9::""2&'	MM$((#s   2BG   "G"c                 B    t        j                  | j                         y r(   )r  r  r2  re   s    r   r  zPep383Tests.tearDown
  s    dhhr   c                    | j                   }t        t        j                  | j                              }| j                  ||       t        j                         }	 t        j                  t        j                         | j                  t        t        j                               t        t        j                  t        j                                     t        j                  |       y # t        j                  |       w xY wr(   )	r  r  r   r  r2  rC   r0   rH   rE   )r4   rS   foundcurrent_directorys       r   test_listdirzPep383Tests.test_listdir
  s    >>BJJtxx())IIK	(HHRVVS.BJJrvv4F0GHHH&'BHH&'s   A:C, ,Dc                     | j                   D ]F  }t        t        j                  j	                  | j
                  |      d      }|j                          H y Nr   )r  r    r   rD   rF   r2  rj   )r4   r  ro   s      r   	test_openzPep383Tests.test_open
  s=    .. 	BRWW\\$((B/6AGGI	r   rZ  ro  c                     | j                   D ]A  }t        j                  j                  | j                  |      }t        j
                  |       C y r(   )r  r   rD   rF   r2  rZ  )r4   r  fullnames      r   test_statvfszPep383Tests.test_statvfs
  s;     .. 	!Bww||DHHb1HJJx 	!r   c                     | j                   D ]?  }t        j                  t        j                  j	                  | j
                  |             A y r(   )r  r   r   rD   rF   r2  )r4   r  s     r   	test_statzPep383Tests.test_stat%
  s4    .. 	0BGGBGGLL2./	0r   N)r\   r]   r^   rf   r  r  r  r   r   r   r   r  r  r+   r   r   r  r  	  sI    #J 
(
 XY//1!1!0r   r  c                       e Zd Zd Zd Zd Z ej                  edu d      d        Z	 ej                  d       ej                         d               Z ej                         d	        Zy)
Win32KillTestsc                    dd l }ddl m} dd l}|j                  j                  j
                  }|j                  |_        |j                  |j                  |j                        |j                  |j                  |j                        |j                  |j                        |j                  |j                        f|_        d}t        j                  t        j                   ddj#                  |      gt        j$                  t        j$                  t        j$                        }| j'                  |j(                  j*                         | j'                  |j,                  j*                         | j'                  |j.                  j*                         d\  }}	||	k  r|j1                         |j3                  t5        |            }
 ||j7                  |j(                  j9                               |
|j;                  |
      d d d       }| j=                  |dd       |
j>                  r+| jA                  ||
j>                  jC                                nAtE        jF                  d	       |d
z  }||	k  r|j1                         | jI                  d       tK        jL                  |jN                  |       | jA                  |jQ                         |       y )Nr   wintypesrunningr   z<import sys;sys.stdout.write('{}');sys.stdout.flush();input())rU  stderrstdin)r   r   zPeekNamedPipe failedg?rr   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   rU  rj   r  r  pollcreate_string_bufferr?   get_osfhandler   sizeofr  rl  rC   rM  r  sleepr;  r   killpidwait)r4   sigr  r  r  r  r  r^  r  maxr  rslts               r   _killzWin32KillTests._kill+
  s   
 	# ..<< ("*//"(.."?"*.."(.."@"(.."@"(.."@"B "+ ,26#;	!8
 (2'1&0oo7 	))*))*

(()
sckdiik1--c#h7C !!5!5dkk6H6H6J!K!$fmmC&8$dLDa)?@yy  cii&6&6&89JJsOQJE ckdiik1 IIIJ
#c*r   c                 B    | j                  t        j                         y r(   )r  signalSIGTERMre   s    r   test_kill_sigtermz Win32KillTests.test_kill_sigterma
  s    

6>>"r   c                 &    | j                  d       y )Nr   )r  re   s    r   test_kill_intzWin32KillTests.test_kill_inte
  s    

3r   Nzrequires mmapc                 T   dt        j                         z  }t        j                  dd|      }d|d<   t        j                  j                  t        j                  j                  t              d      }t        j                  ||g}t        j                  |t        j                        }|5  t        j                  t        j                        D ]  }|j!                          n" |j#                          | j%                  d       t        j"                  |j&                  |       	 |j)                  t        j                         d d d        y # t        j*                  $ r3 |j#                          | j%                  d	j-                  |             Y Nw xY w# 1 sw Y   y xY w)
Nz
test_os_%sr  rr   r   zwin_console_handler.pyr  z'Subprocess didn't finish initialization)timeoutzsubprocess did not stop on {})uuiduuid1mmapr   rD   rF   rQ   r   r=   r   r   r  CREATE_NEW_PROCESS_GROUPr   sleeping_retrySHORT_TIMEOUTr  r  r;  r  r  TimeoutExpiredr  )	r4   eventr   tagnamemscriptcmdr^  r  s	            r   _kill_with_eventzWin32KillTests._kill_with_eventi
  sT   -IIb!W%! bggooh768~~vw/.8.Q.QS  	H++G,A,AB E99;&E
 				CDGGDHHe$H 		'"7"7	8	H 	H  ,, H				9@@FGH!	H 	Hs2   /7F'AF, EAFFFFF'z.subprocesses aren't inheriting Ctrl+C propertyc                 d   ddl m} dd l } |j                  |j                               }|j                  j
                  j                  }|j                  |j                        |j                  f|_        |j                  |_	         ||d       | j                  t        j                  d       y )Nr   r  CTRL_C_EVENT)r  r  r  c_intr  r  SetConsoleCtrlHandlerr  r  r  r  r  r  )r4   r  r  NULLr  s        r   test_CTRL_C_EVENTz Win32KillTests.test_CTRL_C_EVENT
  s     	$ ,v~~fll+- & 6 6 L L*0..*F*2--*9&(0%
 	dA&f11>Br   c                 D    | j                  t        j                  d       y )NCTRL_BREAK_EVENT)r  r  r  re   s    r   test_CTRL_BREAK_EVENTz$Win32KillTests.test_CTRL_BREAK_EVENT
  s    f557IJr   )r\   r]   r^   r  r  r  r   r  r  r  skipr   r  r  r  r+   r   r   r  r  )
  s    4+l# X__TT\?3H 4HB X]]CD W  "C # EC$ !W  "K #Kr   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)Win32ListdirTestszTest listdir on Windows.c                    g | _         t        d      D ]  }d|z  }t        j                  j	                  t
        j                  |      }d|z  }t        j                  j	                  t
        j                  |      }t        j                  |       t        |dd      5 }|j                  d|z         d d d        | j                   j                  ||g        | j                   j                          y # 1 sw Y   CxY w)Nrt   zSUB%dzFILE%dry  r   r   z'I'm %s and proud of it. Blame test_os.
)created_pathsr   r   rD   rF   r   rc   r  r    r!   r   r  )r4   r   dir_namedir_path	file_name	file_pathro   s          r   rf   zWin32ListdirTests.setUp
  s    q 	=A{Hww||I$4$4h?H 1IY%5%5yAIKK!iw7 P1BYNOP%%x&;<	= 	!P Ps   C66C?	c                 J    t        j                  t        j                         y r(   )r  r  r   rc   re   s    r   r  zWin32ListdirTests.tearDown
  s    i&&'r   c           	         | j                  t        t        j                  t        j
                              | j                         | j                  t        t        j                  t        j                  t        j
                                    | j                  D cg c]  }t        j                  |       c}       yc c}w )z-Test when the path is not an "extended" path.N)rC   r  r   r  r   rc   r   r=  rp  s     r   test_listdir_no_extended_pathz/Win32ListdirTests.test_listdir_no_extended_path
  s     	rzz)"2"234""	$
 	rzz"++i.>.>"?@A/3/A/ABtT"B	DBs   C
c           	         dt         j                  j                  t        j                        z   }| j                  t        t        j                  |            | j                         dt        j                  t         j                  j                  t        j                              z   }| j                  t        t        j                  |            | j                  D cg c]  }t        j                  |       c}       yc c}w )z&Test when the path starts with '\\?\'.\\?\   \\?\N)
r   rD   r  r   rc   rC   r  r  r   r=  rp  s     r   test_listdir_extended_pathz,Win32ListdirTests.test_listdir_extended_path
  s     277??9+;+;<<rzz$'(""	$
 BKK	8H8H(IJJrzz$'(/3/A/ABtT"B	DBs   "D
N)r\   r]   r^   r  rf   r  r  r  r+   r   r   r  r  
  s    ""(
DDr   r  rS  zNT specific testsc                   (    e Zd ZdZd Zd Zd Zd Zy)Win32ListdriveTestsz5Test listdrive, listmounts and listvolume on Windows.c           	         t        j                  g dt        j                  j	                  t        j
                  dd      d      dd      }|j                         }|D ch c]  }|j                  d      s| c}| _        |D ch c]  }|d	d  d
k(  s| c}| _	        |D ch c]  }|d	d d
k(  s| c}| _
        y c c}w c c}w c c}w )N)z
fsutil.exevolumer  
SystemRootz\WindowsSystem32mbcsignore)r5   r   r  r	  rr   z:\r   )r   rk  r   rD   rF   getenvr   
startswithknown_volumesknown_drivesknown_mounts)r4   rl  linesls       r   rf   zWin32ListdriveTests.setUp
  s    %%,RYY|[A:N	
  ).JA!,,y2IaJ(-@112%Q@(-A11Q5QA K@As$   "C9C	CC'C5Cc                     t        j                         }| j                  |t               | j	                  | j
                  | j
                  t        |      z         y r(   )r   
listdrivesr1   r  assertSetEqualr  r  )r4   drivess     r   test_listdrivesz#Win32ListdriveTests.test_listdrives
  sF    fd+F+	
r   c                     t        j                         }| j                  |t               | j	                  | j
                  | j
                  t        |      z         y r(   )r   listvolumesr1   r  r  r  r  )r4   volumess     r   test_listvolumesz$Win32ListdriveTests.test_listvolumes
  sG    .."gt,W-	
r   c                 X   t        j                         D ]_  }	 t        j                  |      }| j                  |t               | j                  t        |      | j                  t        |      z         a y # t        $ r(}t        j                  rt        d|d|       Y d }~d }~ww xY w)NSkippingz
because of)r   r!  
listmountsr1   r  r  r  r  rJ   r   rM   rN   )r4   r  mountsexs       r   test_listmountsz#Win32ListdriveTests.test_listmounts
  s    nn& 	F
v.
 %%fd3##K%%F3	  @??*flB?@s   A88	B)B$$B)N)r\   r]   r^   r  rf   r  r#  r)  r+   r   r   r  r  
  s    ?B

r   r  readlinkzneeds os.readlink()c                      e Zd ZdZej
                  j                  e      Z ej                  e      Z
 ej                  e      Zd Zd Zd Zd Zej"                  d        Zej"                  d        Zej"                  d        Zy	)
ReadlinkTestsreadlinktestc                    t         j                  j                  |      }t         j                  j                  |      }t        j                  dk(  rd } ||      r|dd  } ||      r|dd  }| j                  ||       y )Nr   c                 P    | j                  t        | t              rd      S d      S )Nr
  r	  )r  ri  rY   )rW  s    r   r   z/ReadlinkTests.assertPathEqual.<locals>.<lambda>  s'    1<<(E2
$C 8A$C r   r   )r   rD   normcaser=   r>   rC   )r4   leftright
has_prefixs       r   assertPathEqualzReadlinkTests.assertPathEqual  st    ww%  '<<7"CJ$ABx% ab	u%r   c                    | j                  t        j                  j                  | j                               | j                  t        j                  j                  | j
                               | j                  t        j                  j                  | j                               | j                  t        j                  j                  | j                               y r(   )	rk   r   rD   r~  filelink_targetfilelinkb_targetr  filelink	filelinkbre   s    r   rf   zReadlinkTests.setUp  s~    t';';<=t'<'<=>6778r   c                     t        | j                        }| j                  t        t        j
                  | j                         | j                  t        t        j
                  |       y r(   )r   r6  ry   rJ   r   r*  )r4   r6  s     r   test_not_symlinkzReadlinkTests.test_not_symlink  sD    "4#7#78'2;;0D0DE'2;;@r   c                     | j                  t        t        j                  d       | j                  t        t        j                  t	        d             y )Nzmissing-link)ry   rI   r   r*  r   re   s    r   test_missing_linkzReadlinkTests.test_missing_link$  s8    +R[[.I+R[[">2	4r   c                 4   t        j                  | j                  | j                         | j	                  t
        j                  | j                         t        | j                        }| j                  t        j                  |      | j                         y r(   )
r   r   r6  r8  r   r   rd   r   r4  r*  )r4   r8  s     r   test_pathlikezReadlinkTests.test_pathlike)  s_    


4''7	(($--8DMM*R[[2D4H4HIr   c                 `   t        j                  | j                  | j                         | j	                  t
        j                  | j                         t        j                  t        | j                              }| j                  || j                         | j                  |t               y r(   )r   r   r7  r9  r   r   rd   r*  r   r4  r1   rY   rp  s     r   test_pathlike_bytesz!ReadlinkTests.test_pathlike_bytes0  so    


4(($..9	(($..9{{8DNN34T4#8#89dE*r   c                 N   t        j                  | j                  | j                         | j	                  t
        j                  | j                         t        j                  | j                        }| j                  || j                         | j                  |t               y r(   )r   r   r7  r9  r   r   rd   r*  r4  r1   rY   rp  s     r   
test_byteszReadlinkTests.test_bytes8  sj    


4(($..9	(($..9{{4>>*T4#8#89dE*r   N)r\   r]   r^   r8  r   rD   r  r   r6  r=  r9  r7  r4  rf   r;  r=  r   skip_unless_symlinkr?  rA  rC  r+   r   r   r,  r,    s    Hggooh/OH%I"r{{?3&9A
4
 ""J #J ""+ #+ ""+ #+r   r,  c                   j   e Zd ZdZej
                  j                  e      ZdZ	ej
                  j                  e      ZdZd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Z ej0                  ej
                  j3                  d      xr ej
                  j5                  d      d      d        Zd Zd Zy)Win32SymlinkTestsfilelinktestdirlinktestzmissing linkc                    t         j                  j                  | j                        sJ t         j                  j                  | j                        sJ t         j                  j                  | j
                        rJ t         j                  j                  | j                        rJ t         j                  j                  | j                        rJ y r(   )r   rD   r~  dirlink_targetr6  dirlinkr8  missing_linkre   s    r   rf   zWin32SymlinkTests.setUpJ  s    ww~~d11222ww~~d2233377>>$,,///77>>$--00077>>$"3"34444r   c                    t         j                  j                  | j                        rt        j                  | j                         t         j                  j                  | j
                        rt        j                  | j
                         t         j                  j                  | j                        r t        j                  | j                         y y r(   )	r   rD   r~  r8  r  rK  r  rb   rL  re   s    r   r  zWin32SymlinkTests.tearDownQ  sw    77>>$--(IIdmm$77>>$,,'HHT\\"77??4,,-IId''( .r   c                    t        j                  | j                  | j                         | j	                  t         j
                  j                  | j                               | j	                  t         j
                  j                  | j                               | j	                  t         j
                  j                  | j                               | j                  | j                  | j                         y r(   )
r   r   rJ  rK  rk   rD   r~  rU  islink
check_statre   s    r   test_directory_linkz%Win32SymlinkTests.test_directory_linkY  s    


4&&5t||45dll34t||45d&9&9:r   c                    t        j                  | j                  | j                         | j	                  t         j
                  j                  | j                               | j	                  t         j
                  j                  | j                               | j	                  t         j
                  j                  | j                               | j                  | j                  | j                         y r(   )
r   r   r6  r8  rk   rD   r~  r  rO  rP  re   s    r   test_file_linkz Win32SymlinkTests.test_file_link`  s    


4''7t}}56t}}56t}}56t';';<r   c                     | j                   }t        j                  j                  |      rt        j                  |       d}t        j                  j                  |      rJ d}t        j                  |||       y)z2Create a "directory" link to a non-existent targetz"c:\\target does not exist.29r3c740TN)rL  r   rD   rb   r  r~  r   )r4   linknamer   target_is_dirs       r   _create_missing_dir_linkz*Win32SymlinkTests._create_missing_dir_linkg  sY    $$77??8$IIh677>>&)))


68]3r   c                 b    | j                          t        j                  | j                         y r(   )rW  r   r  rL  re   s    r   ,test_remove_directory_link_to_missing_targetz>Win32SymlinkTests.test_remove_directory_link_to_missing_targetq  s"    %%' 			$##$r   c                     | j                          | j                  t        j                  j	                  | j
                               y r(   )rW  r  r   rD   rU  rL  re   s    r   .test_isdir_on_directory_link_to_missing_targetz@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_targetx  s/    %%'t'8'89:r   c                 b    | j                          t        j                  | j                         y r(   )rW  r   r  rL  re   s    r   .test_rmdir_on_directory_link_to_missing_targetz@Win32SymlinkTests.test_rmdir_on_directory_link_to_missing_target|  s     %%'
""#r   c                    | j                  t        j                  |      t        j                  |             | j                  t        j                  |      t        j                  |             t        j
                  |      }| j                  t        j                  |      t        j                  |             | j                  t        j                  |      t        j                  |             y r(   )rC   r   r   r  rc  r=  )r4   r  r   
bytes_links       r   rP  zWin32SymlinkTests.check_stat  s    8BHHTNBGGDM:[[&
,bggfo>BHHZ0"''*2EFr   c                 
   t         j                  j                  t        j                        }t         j                  j                  |d      }t         j                  j                  |d      }| j                  t        j                  |       t        j                  |       t        j                  |       t        j                  |       t         j                  j                  t         j                  j                  |d            }t        |       t        j                         }	 t        j                  |       t         j                  j                  |d      }t        j                  t         j                  j                  |      d       | j                  dt        j                  t        j                                      | j!                  t        j"                  |      t        j"                  d             t        j                  |       | j!                  t        j"                  |      t        j"                  t         j                  j                  |                   t        j                  |       | j!                  t        j"                  |      t        j"                  t         j                  j                  |                   t        j                  |       y # t        j                  |       w xY w)Nlevel2level3rs  r  )r   rD   r  r   rc   rF   r   r  rG   r%   r0   rH   r   relpathr   r  rC   r   )r4   level1ra  rb  rs  orig_dirr  s          r   
test_12084z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   *F+K+ +LC:\Users\All UsersC:\ProgramDatazTest directories not foundc                     t        j                  d      }| j                  t         j                  j	                  |d             y )Nrg  rh  )r   r*  rk   rD   samefile)r4   r   s     r   
test_29248zWin32SymlinkTests.test_29248  s1     23((1BCDr   c                    d}t        j                  j                  |gdz   }d|z   |f||f|d d |d d fg}|D ]  \  }}	 t        j                  ||       	 t        j                  |       	 t        j                  t        j                  |      t        j                  |             	 t        j                  |        y # t
        $ r Y aw xY w# t        $ r Y pw xY w# t
        $ r Y w xY w# t        $ r Y w xY w)NXXXXXXXXXXXXXXXXXXXXXXXXXXXrs   r     )r   rD   rF   r   r  rJ   rI   r=  )r4   segmentrD   
test_casesr   dests         r   test_buffer_overflowz&Win32SymlinkTests.test_buffer_overflow  s    ww||gY^, D['"dO$3Zds$

 $ 	IC

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

2;;s+R[[->?IIdO#	   %    % sH    CC-<C/*C 	CC	CC 	C,+C,/	C;:C;c                 R   t         j                  j                  d      }t         j                  j                  |      s| j	                  d       t        j                  t        j                  |      d      D cg c]"  }t         j                  j                  ||      $ }}|D ]  }t        j                  rt                t        d|       t        j                  |      }| j                  |t        j                  |             | j                  t        j                   |j"                               | j                  |j$                  t        j&                         | j)                  t         j                  j+                  |              y  | j	                  d       y c c}w )Nz$%LOCALAPPDATA%\Microsoft\WindowsAppsz%test requires a WindowsApps directoryz*.exezTesting withz$test requires an app execution alias)r   rD   
expandvarsrU  rw   fnmatchfilterr  rF   r   rM   rN   rc  rC   r   r  S_ISLNKr=  st_reparse_tagIO_REPARSE_TAG_APPEXECLINKrk   r  )r4   r  r<   aliasesaliasr  s         r   test_appexeclinkz"Win32SymlinkTests.test_appexeclink  s/   ww!!"IJww}}T"MMAB $NN2::d+;WEG 77<<a( G G  	BEne,%BR0T\\"**56R..0O0OPOOBGGNN512	B MM@AGs   ;'F$N)r\   r]   r^   r8  r   rD   r  r   r6  rK  rQ   rJ  rL  rf   r  rQ  rS  rW  rY  r[  r]  rP  rf  r   r   rb   r~  rk  rr  r|  r+   r   r   rF  rF  A  s     Hggooh/OGWW___5N!L5);=4%;$G!F X)>? B "/@ A8:
E:
E!FBr   rF  c                       e Zd ZdZej
                  j                  ej
                  j                  e            Z	d Z
d Zd Zd Zy)Win32JunctionTestsjunctiontestc                     t         j                  j                  | j                        sJ t         j                  j	                  | j
                        rJ y r(   )r   rD   r~  junction_targetrb   junctionre   s    r   rf   zWin32JunctionTests.setUp  s;    ww~~d2233377??4==1111r   c                     t         j                  j                  | j                        r t        j                  | j                         y y r(   )r   rD   rb   r  rd   re   s    r   r  zWin32JunctionTests.tearDown  s+    77??4==)IIdmm$ *r   c                 4   t        j                  | j                  | j                         | j	                  t
        j                  j                  | j                               | j	                  t
        j                  j                  | j                               | j	                  t
        j                  j                  | j                               | j                  t        j                  | j                        t        j                  | j                               | j                  t        j                  | j                        t        j                  | j                               | j                  t
        j                  j                  | j                               | j                  t
        j                  j!                  d| j                  z         t
        j                  j!                  t        j"                  | j                                     y )Nr	  )_winapiCreateJunctionr  r  rk   r   rD   rb   r~  rU  r  r   rc  rC   r  rO  r0  r*  re   s    r   test_create_junctionz'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                    t        j                  | j                  | j                         | j	                  t
        j                  j                  | j                               | j	                  t
        j                  j                  | j                               t        j                  | j                         | j                  t
        j                  j                  | j                               y r(   )r  r  r  r  rk   r   rD   r~  rb   rd   r  re   s    r   test_unlink_removes_junctionz/Win32JunctionTests.test_unlink_removes_junction  s    t33T]]Ct}}5667
		$-- 67r   N)r\   r]   r^   r  r   rD   rQ   r  r   r  rf   r  r  r  r+   r   r   r~  r~    s;    Hggoobggooh&?@O2%G8r   r~  c                   n    e Zd Zd Z ej
                         d        Z ej
                         d        Zy)Win32NtTestsc                    t        j                  d      }t        j                  d      }dd l}|j                  dd      }|j                  j
                  |j                  _        |j                  j                  |j                  _        |j                  j
                  |j                  j                  f|j                  _        |j                         }|j                  j                         }|j                  ||j                  |            }| j                  d|       |j                  }dd	d
t         g}t#        d      D ]1  }	|D ]*  }
	 |j%                  |
       	 t)        j*                  |
       , 3 |j                  ||j                  |            }| j                  d|       |j                  |z
  }| j                  d|       y # t&        $ r Y zw xY w# t&        $ r Y w xY w)NrS  r  r   zKernel32.dllT)use_last_errorrr   z\\?\C:z\\?\NULz	\\?\CONINrs   )r   import_modulectypes.wintypesWinDLLr  r  GetCurrentProcessr  r  GetProcessHandleCountLPDWORDr  r  byrefrC   rl  r   r   _getfinalpathname	Exceptionr   r   )r4   rS  r  kernelhprochandle_countr  before_count	filenamesr  r   handle_deltas               r   test_getfinalpathname_handlesz*Win32NtTests.test_getfinalpathname_handles  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           	         t         j                  }| j                  t         j                  |       t	        j                         dz   }t        j                  d      }t        j                  t        j                  d||t        |      g      5 }t	        j                         |k  r.	 t        j                  |       t	        j                         |k  r.	 |j!                  d       d d d        y # t        $ r}|j                  dk(  sJ Y d }~Rd }~ww xY w# t        j"                  $ r |j%                          Y Uw xY w# 1 sw Y   y xY w)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   rt   rr   )r   rc   r   rd   r  textwrapdedentr   r  r=   r   r2   r   r   rI   r  r  r  	terminate)r4   r"   deadlinecommandr^  r   s         r   test_stat_unlink_racez"Win32NtTests.test_stat_unlink_raceG  s    $$	(((399;?// # ( s~~tWhHVW 		![_))+(+GGH% ))+(
!		!		! 		! ) +::?*?+ ,, ! !		! 		!sT   D?'C/<D?D/	D8D	D?DD?#D<9D?;D<<D??Ec                    t         j                  t        j                  j	                  d      t        d      5 }|j                  d       d d d        t        j                        }	 t        j                  dgt        j                         fd
}| j+                  |       t        j                  rt        d       t        d|       t        j                        }t        j                  rt        d|       | j-                  |j.                  d|j.                  f       | j-                  |j0                  d|j0                  f       | j3                  |j4                  |j4                         | j3                  |j6                  |j6                         | j3                  |j8                  |j8                         | j3                  |j:                  |j:                         | j=                  |j>                  |j>                         y # 1 sw Y   xY w# t        j                  $ r}t        j                  rAt        dd       t        |j                  j!                  dd      j#                                	 t        j$                         n# t&        $ r Y nw xY w| j)                  d	       Y d }~-d }~ww xY w)Nz %SystemRoot%\System32\icacls.exer  s	   Test dataz/inheritance:rr  zfailed.rj  r   z"Unable to create inaccessible filec                      t        j                   ddgt         j                         t        j                         y )Nz/grantz*WD:(D)r  )r   rk  STDOUTr   rd   )ICACLSr"   s   r   cleanupz9Win32NtTests.test_stat_inaccessible_file.<locals>.cleanup  s1    ##VXx$K+5+<+<>IIhr   zFile:zstat with access:z without access:r   ) r   rc   r   rD   rt  r    r!   r   r   rk  r  CalledProcessErrorr   rM   rN   rU  rM  r\  rd   rJ   rw   r   r   st_devst_inorC   r=  r1  r  r  assertGreaterEqualr  )r4   ro   stat1r(  r  stat2r  r"   s         @@r   test_stat_inaccessible_filez(Win32NtTests.test_stat_inaccessible_fileq  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.(H" H"K5AKJK	J)&K(J))KKN)r\   r]   r^   r  r   r  r  r  r+   r   r   r  r    sI    .*` !W  "'! #'!R !W  "7@ #7@r   r  c                       e Zd Zd Zd Zd Zy)NonLocalSymlinkTestsc                 .    t        j                  d       y)zM
        Create this structure:

        base
         \___ some_dir
        zbase/some_dirN)r   r  re   s    r   rf   zNonLocalSymlinkTests.setUp  s     	O$r   c                 .    t        j                  d       y )Nr  )r  r  re   s    r   r  zNonLocalSymlinkTests.tearDown  s    fr   c                     t         j                  j                  dd      }t        j                  d|       t         j                  j	                  |      sJ y)a  
        The symlink target should resolve relative to the link, not relative
        to the current directory.

        Then, link base/some_link -> base/some_dir and ensure that some_link
        is resolved as a directory.

        In issue13772, it was discovered that directory detection failed if
        the symlink target was not specified relative to the current
        directory, which was a defect in the implementation.
        r  	some_linksome_dirN)r   rD   rF   r   rU  )r4   r   s     r   test_directory_link_nonlocalz1NonLocalSymlinkTests.test_directory_link_nonlocal  s<     ggll6;/


:s#ww}}S!!!r   N)r\   r]   r^   rf   r  r  r+   r   r   r  r    s    %"r   r  c                       e Zd Zd Zd Zy)FSEncodingTestsc                     | j                  t        j                  d      d       | j                  t        j                  d      d       y )Ns   abcu   abcŁ)rC   r   r=  rZ   re   s    r   test_nopzFSEncodingTests.test_nop  s4    Z0*=[1;?r   c                     dD ]=  }	 t        j                  |      }| j                  t        j                  |      |       ? y # t        $ r Y Lw xY w)N)u	   unicodeŁu   latinéascii)r   r=  rM  rC   rZ   )r4   r  r  s      r   test_identityzFSEncodingTests.test_identity  sR    9 	7B++b/ R[[126	7 & s   A	AAN)r\   r]   r^   r  r  r+   r   r   r  r    s    @7r   r  c                      e Zd Zd Z ej
                   ej                  d      xr;  e        xr1 e	j                  j                  d      xs  eed      xr	  eed      d       ej                  ej                   d      d               Zy	)
DeviceEncodingTestsc                 L    | j                  t        j                  d             y )Ni@ )r  r   device_encodingre   s    r   test_bad_fdz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                     t        j                  d      }| j                  |       | j                  t	        j
                  |             y r   )r   r  assertIsNotNonerk   codecslookup)r4   r   s     r   test_device_encodingz(DeviceEncodingTests.test_device_encoding  s7     %%a(X&h/0r   N)r\   r]   r^   r  r   r   r   r9  r	   r=   r>   r  r   localer  r   r  r  r+   r   r   r  r    s    6 X1 Mln*< M#,,BYBYZ_B` CLV]+J	0JLN X__K1N1r   r  c                   8   e Zd Z ej                   eed      d      d        ZddZd Z	d Z
 ej                  ej                  dk(  d	      d
        Z ej                  ej                  dk(  d	      d        Z ej                   eed      d      d        Zy)PidTestsgetppidztest needs os.getppidc                 2   t        j                  t        j                  ddgt         j                  t         j                        }|j                         \  }}| j                  |d       | j                  t        |      t        j                                y )Nr   zimport os; print(os.getppid()))rU  r  r   )
r   r  r=   _base_executabler[  communicaterC   r  r   getpid)r4   rW  rU  errors       r   test_getppidzPidTests.test_getppid  sn    c22D>@$.OO$.OO5 $Vbiik2r   Nc                    t         j                  dk(  rdt         j                   ddd| dg}nt         j                  d|g}t        j                  t        j
                  t         j                  |      }| ||       t        j                  |d      \  }}| j                  t        j                  |      |       | j                  ||       y )Nr   "r   r   )	r=   r>   r   r   spawnvP_NOWAITwaitpidrC   waitstatus_to_exitcode)r4   r   exitcodecallbackr   r  pid2statuss           r   check_waitpidzPidTests.check_waitpid  s    <<7" 'q)41TF!=DNND$/DiiS^^T:SM zz#q)f226:HEs#r   c                 *    | j                  dd       y )Nr  r   )r   r  r  re   s    r   test_waitpidzPidTests.test_waitpid  s    3r   c                     d}d| d}| j                  ||       | j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY w)N   zimport sys; sys.exit()r  g        )r  ry   r   r   r  )r4   r  r   s      r   test_waitstatus_to_exitcodez$PidTests.test_waitstatus_to_exitcode  sY    &xj24(3y) 	+%%c*	+ 	+ 	+s   AAr   win32-specific testc                 :    d}d| d}| j                  ||       y )Nl   :   z$import _winapi; _winapi.ExitProcess(r  r  r  )r4   STATUS_CONTROL_C_EXITr   s      r   test_waitpid_windowszPidTests.test_waitpid_windows  s.     !+56K5LAN4*?@r   c                 v   d}ddd|fD ]*  }| j                  t        j                  |dz        |       , | j                  t              5  t        j                  |dz   dz         d d d        | j                  t
              5  t        j                  d       d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)Nr~  r   rr   r   r*  r  )rC   r   r  ry   r   r  )r4   max_exitcoder  s      r   #test_waitstatus_to_exitcode_windowsz,PidTests.test_waitstatus_to_exitcode_windows   s    "Aq,/ 	'HR66x1}E%'	'
 z* 	?%%|a'7A&=>	?}- 	*%%b)	* 	*	? 	?	* 	*s   B#B/#B,/B8SIGKILLzneed signal.SIGKILLc                     dt         j                   d}t        j                  fd}| j	                  | |       y )Nzimport time; time.sleep(r  c                 2    t        j                  |        y r(   )r   r  )r  signums    r   kill_processz?PidTests.test_waitstatus_to_exitcode_kill.<locals>.kill_process3  s    GGC r   )r  r  )r   LONG_TIMEOUTr  r  r  )r4   r   r  r  s      @r    test_waitstatus_to_exitcode_killz)PidTests.test_waitstatus_to_exitcode_kill.  s?    )'*>*>)?qA	! 	46'LIr   r(   )r\   r]   r^   r   r   r   r   r  r  r  r  r=   r>   r  r  r  r  r+   r   r   r  r    s    XY/1HI3 J3$$4+ X02GHA IA X02GH
* I
* X35JKJ LJr   r  c                      e Zd Zed        ZddddZ ed      d        Z ed      d        Z ed	      d
        Z	 ed      d        Z
 ed      d        Z ed      d        Z ed      d        Z ed      d        Z ed      d        Z ed      d        Z ed      d        Z ed      d        Z ed      d        Z ed      d        Zd Z ed      d        Z ed      d        Zy)
SpawnTestsc                     t         j                  dk7  r| S | D cg c]  }d|j                         v rd| dn| c}S c c}w )NrS   r  )r   r   r  )r   r  s     r   
quote_argszSpawnTests.quote_args;  sB     77d?KEIJccSYY[0!C5
c9JJJs   !>Fwith_env	use_bytesc                   d| _         t        j                  }| j                  t        j                  |       |sd| j                   z  }nt        t        j                        | _        t        t        j                               | _        | j                  | j                  | j                  <   d| j                  d| j                   d}t        |dd      5 }|j                  |       d d d        t        j                   }| j#                  ||g      }|rt        j$                  |      }|D cg c]  }t        j$                  |       }}| j                  j'                         D 	
ci c].  \  }	}
t        j$                  |	      t        j$                  |
      0 c}
}	| _        ||fS # 1 sw Y   xY wc c}w c c}
}	w )	N   zimport sys; sys.exit(%s)z#import sys, os; magic = os.environ[z]; sys.exit(r  ry  r   r   )r  r   rc   r   rd   r  r   r  r1  r2   r  uuid4r  r    r!   r=   r   r  r=  r  )r4   r  r   r"   r   r$   r  r   r<   kvs              r   create_argszSpawnTests.create_argsC  sT   ##	(((3-=DBJJ'DH4::<(DH!%DHHTXX xx0D (C'2 	bHHTN	 ..23kk'*G,01qBKKN1D1$(HHNN$46 Aq AA6 6DH }	 	 26s   F+0F7+3F<+F4spawnlc                     | j                         \  }}t        j                  t        j                  |g| }| j	                  || j
                         y r(   )r  r   r  P_WAITrC   r  r4   r  r   r  s       r   test_spawnlzSpawnTests.test_spawnla  sA    ((*99RYY7$74==1r   spawnlec                     | j                  d      \  }}t        j                  t        j                  |g|| j                   }| j                  || j                         y NT)r  )r  r   r  r	  r1  rC   r  r
  s       r   test_spawnlezSpawnTests.test_spawnleg  sO    (($(7::biiB4BB4==1r   spawnlpc                     | j                         \  }}t        j                  t        j                  |g| }| j	                  || j
                         y r(   )r  r   r  r	  rC   r  r
  s       r   test_spawnlpzSpawnTests.test_spawnlpm  sA    ((*::bii8484==1r   spawnlpec                     | j                  d      \  }}t        j                  t        j                  |g|| j                   }| j                  || j                         y r  )r  r   r  r	  r1  rC   r  r
  s       r   test_spawnlpezSpawnTests.test_spawnlpes  sO    (($(7;;ryy'CDC$((C4==1r   r  c                 @   | j                         \  }}t        j                  t        j                  ||      }| j	                  || j
                         t        j                  t        j                  t        |      |      }| j	                  || j
                         y r(   )r  r   r  r	  rC   r  r   r
  s       r   test_spawnvzSpawnTests.test_spawnvy  so    ((*99RYY64==1 99RYY(94@4==1r   spawnvec                     | j                  d      \  }}t        j                  t        j                  ||| j                        }| j                  || j                         y r  r  r   r  r	  r1  rC   r  r
  s       r   test_spawnvezSpawnTests.test_spawnve  sI    (($(7::bii$A4==1r   spawnvpc                     | j                         \  }}t        j                  t        j                  ||      }| j	                  || j
                         y r(   )r  r   r  r	  rC   r  r
  s       r   test_spawnvpzSpawnTests.test_spawnvp  s>    ((*::bii$74==1r   spawnvpec                     | j                  d      \  }}t        j                  t        j                  ||| j                        }| j                  || j                         y r  )r  r   r  r	  r1  rC   r  r
  s       r   test_spawnvpezSpawnTests.test_spawnvpe  sI    (($(7;;ryy'4B4==1r   c                     | j                         \  }}t        j                  t        j                  ||      }t	        j
                  || j                         y )Nr  )r  r   r  r  r   wait_processr  )r4   r  r   r  s       r   test_nowaitzSpawnTests.test_nowait  s>    ((*iiWd3S4==9r   c                     | j                  dd      \  }}t        j                  t        j                  ||| j                        }| j                  || j                         y )NTr  r  r
  s       r   test_spawnve_byteszSpawnTests.test_spawnve_bytes  sM     (($$(G::bii$A4==1r   c                     | j                         \  }}| j                  t        t        j                  t        j
                  |       | j                  t        t        j                  t        j
                  |d       y Nr  )r  ry   r   r   r  r  r4   r  __s      r   test_spawnl_noargszSpawnTests.test_spawnl_noargs  sN    &&(*biigF*biigrJr   c                     | j                         \  }}| j                  t        t        j                  t        j
                  |i        | j                  t        t        j                  t        j
                  |di        y r(  )r  ry   r   r   r  r  r)  s      r   test_spawnle_noargszSpawnTests.test_spawnle_noargs  sR    &&(*bjj"++wK*bjj"++wBOr   c                    | j                         \  }}| j                  t        t        j                  t        j
                  |d       | j                  t        t        j                  t        j
                  |g        | j                  t        t        j                  t        j
                  |d       | j                  t        t        j                  t        j
                  |dg       y Nr+   r7  r  )r  ry   r   r   r  r  r)  s      r   test_spawnv_noargszSpawnTests.test_spawnv_noargs  s    &&(*biigrJ*biigrJ*biiguM*biigtLr   c                    | j                         \  }}| j                  t        t        j                  t        j
                  |di        | j                  t        t        j                  t        j
                  |g i        | j                  t        t        j                  t        j
                  |di        | j                  t        t        j                  t        j
                  |dgi        y r/  )r  ry   r   r   r  r  r)  s      r   test_spawnve_noargszSpawnTests.test_spawnve_noargs  s    &&(*bjj"++wBO*bjj"++wBO*bjj"++wrR*bjj"++wbQr   c                    t         j                  }| j                  |ddg      }t        j                  j                         }d|d<   	  |t        j                  |||      }| j                  |d       t        j                  j                         }d|d<   	  |t        j                  |||      }| j                  |d       t        j                  j                         }d|d	<   	  |t        j                  |||      }| j                  |d       t        j                  }| j                  t        j                  |       t        |d
d      5 }|j                  d       d d d        | j                  ||g      }t        j                  j                         }d|d<    |t        j                  |||      }| j                  |d       y # t        $ r Y dw xY w# t        $ r Y %w xY w# t        $ r Y w xY w# 1 sw Y   xY w)Nr   r  r  r     r  r  r  r  ry  r   r   zPimport sys, os
if os.getenv("FRUIT") != "orange=lemon":
    raise AssertionErrorzorange=lemonr   )r=   r   r  r   r  r  r	  rC   r   r   rc   r   rd   r    r!   )r4   spawnr  r   r  r  r"   r$   s           r   _test_invalid_envzSpawnTests._test_invalid_env  s   ..v67 "%.!"	,RYYv>H Xs+ "5w	,RYYv>H Xs+ "!(~	,RYYv>H Xs+ ##	(((3(C'2 	1bHH 0 1	1
 23"(wGT6:1%K  		  		  			1 	1sB   	G G 'G, G;	GG	G)(G),	G87G8;Hc                 B    | j                  t        j                         y r(   )r6  r   r  re   s    r   test_spawnve_invalid_envz#SpawnTests.test_spawnve_invalid_env  s    rzz*r   c                 B    | j                  t        j                         y r(   )r6  r   r  re   s    r   test_spawnvpe_invalid_envz$SpawnTests.test_spawnvpe_invalid_env  s    r{{+r   N)r\   r]   r^   r   r  r  r   r  r  r  r  r  r  r  r!  r$  r&  r+  r-  r0  r2  r6  r8  r:  r+   r   r   r  r  9  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                       e Zd Zd Zy)
LoginTestsc                 b    t        j                         }| j                  t        |      d       y r   )r   r;  r  r?   )r4   	user_names     r   test_getloginzLoginTests.test_getlogin  s!    KKM	C	NA.r   N)r\   r]   r^   r@  r+   r   r   r=  r=    s    /r   r=  getprioritysetpriorityz'needs os.getpriority and os.setpriorityc                       e Zd ZdZd Zy)ProgramPriorityTestsz0Tests for os.getpriority() and os.setpriority().c                     t        j                  t         j                  t        j                               }d| d}t	        d|      \  }}}t        |      }|dk\  r||k  rt        j                  d|z        | j                  ||dz          y )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 %srr   )	r   rA  PRIO_PROCESSr  r   r  r   rd  rC   )r4   r  r   r  rl  new_prios         r   test_set_get_priorityz*ProgramPriorityTests.test_set_get_priority  s    ~~booryy{;66:V <	 %T40	3s82:(d*## %BDH%I J J Xtax0r   N)r\   r]   r^   r  rI  r+   r   r   rD  rD    s     ;1r   rD  sendfileztest needs os.sendfile()c                   J   e Zd Zddz  Zej
                  j                  d       xr: ej
                  j                  d       xr ej
                  j                  d       Z ej                  ed      Z
 ej                  ej                  dk  d      Zed	        Zed
        Zed        Zd Zd Zd Zed        Zed        Zd Zd Zd Zd Zd Ze
d        Ze
d        Ze
ed               Ze
ed               Ze
 ej                   e e!d      d      d               Z"y)TestSendfiles   12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcdei   linuxsolarissunosz%requires headers and trailers supportr  z(test is only meaningful on 32-bit buildsc                 L    t        t        j                  | j                         y r(   )r%   r   rc   DATAru  s    r   rw  zTestSendfile.setUpClass%  s    I$$chh/r   c                 J    t        j                  t         j                         y r(   )r   rd   rc   ru  s    r   r  zTestSendfile.tearDownClass)  s    ))*r   c                   K   | j                         s-| j                          d {    | j                         s,y y 7 wr(   )at_eofr   )readers    r   chunkszTestSendfile.chunks-  s,     --/%% --/%s   $AAAAc                    K   dj                  | j                  |      2 cg c3 d {   }|7 6 nc c}w c}      | _        |j                          | j                  j                          y w)Nr   )rF   rV  server_bufferrj   server)r4   rU  writerr   s       r   handle_new_clientzTestSendfile.handle_new_client2  sN      XXF8K&L&L1q&L&L&LMs&   A/31
/1
31
3=A/c                 t  K   d| _         t        j                  | j                  t        j
                         d {   | _        | j                  j                  d   j                         }t        j                         | _
        | j                  j                  d       t        j                         j                  | j                  |       d {    | j                  j                         | _        t!        t"        j$                  d      | _        | j&                  j                         | _        y 7 7 dw)Nr   r   Fr   )rX  r)   start_serverr[  r   HOSTv4rY  socketsgetsocknamesocketclientsetblockingget_running_loopsock_connectr   socknor    r   rc   rv  )r4   server_names     r   
asyncSetUpzTestSendfile.asyncSetUp7  s      #001G1G1>1E1EG Gkk))!,88:mmo&&&(55dkk;OOOkk((*))40	ii&&(G
 	Ps#   9D8D4BD8D6A#D86D8c                    K   | j                   j                          | j                  j                          | j                  j	                          d {    y 7 wr(   )rv  rj   rb  rY  wait_closedre   s    r   asyncTearDownzTestSendfile.asyncTearDownC  s:     		kk%%'''s   AAAAc                  l   K   t        j                  t        j                  g| i | d {   S 7 wr(   )r)   	to_threadr   rJ  )r   r  s     r   async_sendfilezTestSendfile.async_sendfileI  s+     &&r{{DTDVDDDDs   +424c                    K   	 	 t        j                  | i | d{   S 7 # t        $ rU}|j                  t        j                  k(  r |j                  t        j
                  t        j                  fv rY d}~y d}~ww xY ww)zfA higher level wrapper representing how an application is
        supposed to use sendfile().
        N)rL  rn  rJ   rK   
ECONNRESETEAGAINEBUSY)r   r  r  s      r   sendfile_wrapperzTestSendfile.sendfile_wrapperM  so     
 
)88$I&IIII 99 0 00YY5<<"==s=   B$ "$ B$ 	BA
A=7B<A==BBc                    K   d}d}d}|t        | j                        k  r| j                  | j                  | j                  ||       d {   }|dk(  rnI||z  }||z  }| j                  ||k         | j                  ||       |t        | j                        k  r| j                  |t        | j                               | j                  j                  t        j                         | j                  j                          | j                  j                          d {    | j                  t        | j                        t        | j                               | j                  | j                  | j                         y 7 =7 fw)Nr      )r?   rQ  rs  rf  r   rk   rC   rb  shutdownra  	SHUT_RDWRrj   rY  rj  rX  )r4   
total_sentoffsetnbytessents        r   test_send_whole_filez!TestSendfile.test_send_whole_file_  s:    
3tyy>)..t{{DKK/5v? ?DqydNF$JOODFN+VZ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                   K   d}t        | j                        dz  }t        | j                        |z
  }d}||k  rZ| j                  | j                  | j                  ||       d {   }|dk(  rn$||z  }||z  }| j                  ||k         ||k  rZ| j                  j                  t        j                         | j                  j                          | j                  j                          d {    | j                  t        | j                        dz  d  }| j                  |t        |             | j                  t        | j                        t        |             | j                  | j                  |       y 7 7 w)Nr   rt   ru  )r?   rQ  rs  rf  r   rk   rb  rv  ra  rw  rj   rY  rj  rC   rX  )r4   rx  ry  	must_sendrz  r{  rS   s          r   test_send_at_certain_offsetz(TestSendfile.test_send_at_certain_offsetu  sK    
TYY1$		NV+	9$..t{{DKK/5v? ?DqydNF$JOODFN+ 9$ 	V--.kk%%'''99S^q012S]3T//0#h-@++X6? 	(s,   A%F'F(-FA F6F	7BF	Fc                 4  K   t        | j                        dz   }	 | j                  | j                  | j                  |d       d {   }| j                  |d       | j                  j                  t        j                         | j                  j                          | j                  j                          d {    | j                  | j                   d       y 7 # t        $ r(}|j                  t        j                  k7  r Y d }~d }~ww xY w7 Ww)Nru  r   r   )r?   rQ  rn  rf  r   rC   rJ   rK   EINVALrb  rv  ra  rw  rj   rY  rj  rX  )r4   ry  r{  r   s       r   test_offset_overflowz!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                 ,  K   | j                  t              5 }| j                  | j                  | j                  dd       d {    d d d        | j                  j                  j                  t        j                         y 7 A# 1 sw Y   @xY ww)Nr  ru  )	ry   rJ   rn  rf  r   rC   rw  rK   r  r4   rl  s     r   test_invalid_offsetz TestSendfile.test_invalid_offset  su     w' 	J2%%dkk4;;DIII	J++U\\: J	J 	Js.   B,BBB	=BBBBc           	         K   | j                  | j                  | j                  dd       d {    | j                  r5| j                  | j                  | j                  ddddd       d {    y y 7 F7 w)Nr   ru  )r   r   ry  r  r+   )r   r   ry  r  headerstrailersr   )rn  rf  r   SUPPORT_HEADERS_TRAILERSre   s    r   test_keywordszTestSendfile.test_keywords  s     !!DKK)*$ " 8 	8 	8((%%T[[-.d.02Q & H H H )	8Hs!   -A:A6?A:/A80A:8A:c                   K   d}d| j                   d d z   }| j                  | j                  | j                  ddddg       d {   }| j	                  |d       ||z  }d}|t        |      k  ryt        t        |      |z
  d      }| j                  | j                  | j                  ||       d {   }|dk(  rn+| j	                  ||       ||z  }||z  }|t        |      k  ry| j                  |t        |             | j                  j                          | j                  j                          d {    | j                  t        | j                        t        |             y 7 +7 7 8w)	Nr   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr  ru  s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr  i   )rQ  rn  rf  r   assertLessEqualr?   minrs  rC   rb  rj   rY  rj  hashrX  )r4   rx  expected_datar{  ry  rz  s         r   test_headerszTestSendfile.test_headers  sg    
/$))CR.@((dkk1d2<j1I ) K KT#34d
3}--]+j8$?F..t{{DKK/5v? ?Dqy  v.$JdNF 3}-- 	S%78kk%%'''d00143FG%K? 	(s>   AE8E1A.E85E464E8+AE8=E6>4E84E86E8c           	        K   t         j                  dz   }d}| j                  t         j                  |       t	        ||       t        |d      5 }| j                  | j                  |j                         ddddg       d {    | j                  j                          | j                  j                          d {    | j                  | j                  d	       d d d        y 7 e7 +# 1 sw Y   y xY ww)
Nr  s   abcdefr   r   r   s   123456s   789r  s   abcde123456789)r   rc   r   rd   r%   r    rn  rf  r   rb  rj   rY  rj  rC   rX  )r4   r   	file_dataro   s       r   test_trailerszTestSendfile.test_trailers  s     ""S(		(('2GY''4  	DA%%dkk188:q!096/B & D D DKK++))+++T//1BC	D 	DD ,		D 	DsB   AC:4C.C*;C. C, C.!	C:*C.,C..C73C:c           	      t  K   d| j                   j                  _        | j                  t              5 }| j                  | j                  | j                  ddddz  gdz         d {    d d d        | j                  j                  j                  t        j                         y 7 A# 1 sw Y   @xY ww)NFr      x   ra  r  rY  handler_instance
accumulatery   rJ   rn  rf  r   rC   rw  rK   r  r  s     r   test_headers_overflow_32bitsz)TestSendfile.test_headers_overflow_32bits  s      38$$/w' 	F2%%dkk4;;1/3e|nu.D & F F F	F 	++U\\:F	F 	F.   1B85B,(B*)B,-=B8*B,,B51B8c           	      t  K   d| j                   j                  _        | j                  t              5 }| j                  | j                  | j                  ddddz  gdz         d {    d d d        | j                  j                  j                  t        j                         y 7 A# 1 sw Y   @xY ww)NFr   r  r  ra  r  r  r  s     r   test_trailers_overflow_32bitsz*TestSendfile.test_trailers_overflow_32bits  s      38$$/w' 	G2%%dkk4;;104u~/E & G G G	G 	++U\\:G	G 	Gr  SF_NODISKIOztest needs os.SF_NODISKIOc                   K   	 | j                  | j                  | j                  ddt        j                         d {    y 7 # t
        $ r7}|j                  t        j                  t        j                  fvr Y d }~y d }~ww xY ww)Nr   ru  )r   )	rn  rf  r   r   r  rJ   rK   rr  rq  )r4   r  s     r   
test_flagszTestSendfile.test_flags  so     	%%dkk4;;4,.NN & < < < 	yyell ;; <	s?   B
;A A A B
A 	B-B=B
BB
N)#r\   r]   r^   rQ  r=   r>   r  r  r   r   requires_headers_trailersmaxsizerequires_32br  rw  r  r   rV  r[  rh  rk  rn  rs  r|  r  r  r  r  r  r  r  r  r   r   r  r+   r   r   rL  rL    s    $D#&<<#:#:7#CC  D#&<<#:#:9#EE D#&<<#:#:7#CC  !4 3 34L3!5&8&&s{{U':68L 0 0 + + & &

)( E E  "8,7.2";
H H H. D D ;  ; ;  ; X]3466 r   rL  c                     t        t        d      sy	 t        t        j                  dd      5 } 	 t        j
                  | j                         dd       	 d d d        t        j                  t        j                         y# t        $ r. Y d d d        t        j                  t        j                         yw xY w# 1 sw Y   gxY w# t        j                  t        j                         w xY w)NsetxattrFr   r   	   user.testr   T)	r   r   r    r   rc   r  r   rJ   rd   )r$   s    r   supports_extended_attributesr    s    2z"+)""D!, 	BIIKs;	 	))*  		 	))*	 	 	))*sE   C B<%BC 	B9B<C 8B99B<<CC %C-z(no non-broken extended attribute supportrt   r   '   c                   *    e Zd Zd Zd Zd Zd Zd Zy)ExtendedAttributeTestsc                 b   t         j                  }| j                  t         j                  |       t	        |       | j                  t              5 } || |d      fi | d d d        | j                  j                  j                  t        j                          ||      }	| j                  |	t                || |d      dfi | t        |	      }
|
j                  d       | j                  t         ||            |
       | j                   ||dfi |d        || |d      dt        j                   fi | | j                   ||dfi |d       | j                  t              5 } || |d      dt        j"                  fi | d d d        | j                  |j                  j                  t        j$                         | j                  t              5 } || |d      dt        j                   fi | d d d        | j                  |j                  j                  t        j                          || |d      dt        j"                  fi | |
j                  d       | j                  t         ||            |
        || |d      fi | | j                  t              5 } || |d      fi | d d d        | j                  |j                  j                  t        j                         |
j'                  d       | j                  t         ||            |
       | j                   || |d      fi |d        || |d      dfi | | j                   || |d      fi |d        || |d      fi | t)        d	 t+        d
      D              }|D ]  } |||dfi |  | j                  t         ||            t        |	      t        |      z         y # 1 sw Y   xY w# 1 sw Y   xxY w# 1 sw Y   xY w# 1 sw Y   \xY w)N	user.testr   r  r  s   byez
user.test2s   foos   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac              3   >   K   | ]  }d j                  |        yw)zuser.test{}N)r  )r.  r   s     r   r/  z;ExtendedAttributeTests._check_xattrs_str.<locals>.<genexpr>3  s     B!m**1-Bs   r   r  )r   rc   r   rd   r%   ry   rJ   rC   rw  rK   ENODATAr1   r  r  r  r   XATTR_REPLACEXATTR_CREATEEEXISTr  r  r   )r4   r   getxattrr  removexattr	listxattrr  r  rl  
init_xattrxattrmanythings                r   _check_xattrs_strz(ExtendedAttributeTests._check_xattrs_str  s   	(("-Bw' 	32R;262	3++U]];r]
j$/Q{^S3F3J		+Yr]+U3"l=f=sCQ{^Xr/?/?J6J"l=f=xHw' 	L2R;KFK	L++U\\:w' 	N2R<&"2B2BMfM	N++U]];Q|_fbooHH		,Yr]+U3B+1&1w' 	32R;262	3++U]];[!Yr]+U3"ao@@&IQ{^Y9&9"an??KB+1&1BuSzBB 	0ER//	0Yr]+S_s4y-HIS	3 	3	L 	L	N 	N	3 	3s0   O=3!P
%!P9P$=P
PP!$P.c                     | j                   t        g|i | t        j                  t        j                          | j                   t
        j                  g|i | t        j                  t        j                         y r(   )r  r2   r   rd   rc   r   r=  r  s      r   _check_xattrsz$ExtendedAttributeTests._check_xattrs8  sb    s4T4V4))*r{{<T<V<))*r   c                     | j                  t        j                  t        j                  t        j                  t        j
                         y r(   r  r   r  r  r  r  re   s    r   test_simplez"ExtendedAttributeTests.test_simple?  s)    2;;R^^<<	)r   c                     | j                  t        j                  t        j                  t        j                  t        j
                  d       y )NFr  r  re   s    r   
test_lpathz!ExtendedAttributeTests.test_lpathC  s1    2;;R^^<< 	 	@r   c                 D    d }d }d }d }| j                  ||||       y )Nc                     t        | d      5 }t        j                  |j                         g| cd d d        S # 1 sw Y   y xY wr  )r    r   r  r   rD   r   r$   s      r   r  z1ExtendedAttributeTests.test_fds.<locals>.getxattrH  s:    dD! 7R{{299;667 7 7	   $;Ac                     t        | dd      5 }t        j                  |j                         g|  d d d        y # 1 sw Y   y xY wNr  r   )r    r   r  r   r  s      r   r  z1ExtendedAttributeTests.test_fds.<locals>.setxattrK  s<    dD!$ 0BIIK/$/0 0 0	   %<Ac                     t        | dd      5 }t        j                  |j                         g|  d d d        y # 1 sw Y   y xY wr  )r    r   r  r   r  s      r   r  z4ExtendedAttributeTests.test_fds.<locals>.removexattrN  s<    dD!$ 3ryy{2T23 3 3r  c                     t        | d      5 }t        j                  |j                         g| cd d d        S # 1 sw Y   y xY wr  )r    r   r  r   r  s      r   r  z2ExtendedAttributeTests.test_fds.<locals>.listxattrQ  s:    dD! 8R||BIIK7$78 8 8r  )r  )r4   r  r  r  r  s        r   test_fdszExtendedAttributeTests.test_fdsG  s,    	7	0	3	8 	8X{IFr   N)r\   r]   r^   r  r  r  r  r  r+   r   r   r  r    s    .J`+)@Gr   r  get_terminal_sizezrequires os.get_terminal_sizec                   d    e Zd Zd Zd Z ej                  ej                  dk(  d      d        Z	y)TermsizeTestsc                 b   	 t        j                         }| j                  |j                  d       | j                  |j                  d       y# t        $ rV}t        j                  dk(  s,|j
                  t
        j                  t
        j                  fv r| j                  d        d}~ww xY w)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   failed to query terminal sizeNr   )r   r  rJ   r=   r>   rK   r  ENOTTYrw   r  columnsr  )r4   r   r   s      r   test_does_not_crashz!TermsizeTests.test_does_not_crashY  s    	'')D 	a0

A.  	||w&!''ellELL5Q*Q =>	s   A 	B.AB))B.c                 `   	 t        j                  ddgt         j                  d      j                         }t        d         t        |d         f}	 t        j                  t        j                  j                               }| j'                  ||       y
# t        t         j
                  t        f$ r | j                  d       Y w xY w# t        $ rV}t        j                  dk(  s,|j                   t         j"                  t         j$                  fv r| j                  d	        d
}~ww xY w)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  rV  zstty invocation failedrr   r   r   r  N)r   rk  DEVNULLr6  rI   r  r  rw   r  r   r  r=   	__stdin__r   rJ   r>   rK   r  r  rC   )r4   r   rS   r  r   s        r   test_stty_matchzTermsizeTests.test_stty_matchk  s    	4''V$Z-?-?d%'  QL#d1g,/	))#--*>*>*@AF 	6* ":#@#@! 	4MM23	4  	||w&!''ellELL5Q*Q =>	s*   6B 1C /C
C	D-AD((D-r   zWindows specific testc                 B   	 t        dd      }5  t        j                  |j                               }ddd       | j                  j                  d       | j                  |j                  d       y# t        $ r | j                  d       Y w xY w# 1 sw Y   bxY w)zBCheck if get_terminal_size() returns a meaningful value in Windowszconout$ry  zfailed to open conout$Nr   )	r    rJ   rw   r   r  r   r  r  r  )r4   conoutr   s      r   test_windows_fdzTermsizeTests.test_windows_fd  s    	4)S)F  	9''8D	9 	a0

A.  	4MM23	4	9 	9s   A5 $B5BBBN)
r\   r]   r^   r  r  r   r   r=   r>   r  r+   r   r   r  r  W  s:    /$+8 X02IJ
/ K
/r   r  memfd_createzrequires os.memfd_creater   r  c                       e Zd Zd Zy)MemfdCreateTestsc                 R   t        j                  dt         j                        }| j                  |d       | j	                  t         j
                  |       | j                  t        j                  |             t        |dd      5 }|j                  d       | j                  |j                         d       d d d        t        j                  d      }| j	                  t         j
                  |       | j                  t        j                  |             y # 1 sw Y   cxY w)NHir  r  F)closefds   memfd_creater-  )r   r  MFD_CLOEXECr  r   rj   r  rf  r    r!   rC   tell)r4   r   ro   rC  s       r   test_memfd_createz"MemfdCreateTests.test_memfd_create  s    __T2>>2B#"%++B/0"dE* 	+aGGO$QVVXr*	+ ood##&++C01	+ 	+s   	2DD&N)r\   r]   r^   r  r+   r   r   r  r    s    2r   r  eventfdzrequires os.eventfdr  c                       e Zd Zd Zd Zd Zy)EventfdTestsc                 J   d }d}d}t        j                  |      }| j                  |d       | j                  t         j                  |       | j                  t        j                  |             t        j                  ||      }| j                  | ||             t        j                  | |d             t        j                  ||      }| j                  | |d             t        j                  | |d             t        j                  | |d             t        j                  ||      }| j                  | |d             t        j                  |d       t        j                  |d	       t        j                  |      }| j                  |d       y )
Nc                 .    t        j                  d|       S )z$Pack as native uint64_t
            z@Q)structpack)rl  s    r   r  z/EventfdTests.test_eventfd_initval.<locals>.pack  s     ;;tU++r   r*  r  r  r  (   rt   r@  r   )r   r  r  r   rj   r  rf  r   rC   r!   eventfd_writeeventfd_read)r4   r  r   initvalr   ress         r   test_eventfd_initvalz!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                    d}t         j                  t         j                  z  t         j                  z  }t        j                  ||      }| j                  |d       | j                  t         j                  |       t        j                  |      }| j                  |d       t        j                  |      }| j                  |d       | j                  t              5  t        j                  |       d d d        | j                  t              5  t        j                  |d       d d d        t        j                  |d       t        j                  |      }| j                  |d       | j                  t              5  t        j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nrt   r  rr   r*  )r   EFD_CLOEXECEFD_SEMAPHOREEFD_NONBLOCKr  r  r   rj   r  rC   ry   r  r   r  )r4   r  r   r   r  s        r   test_eventfd_semaphorez#EventfdTests.test_eventfd_semaphore  sW   !1!11BOOCZZ'B#"% oob!a oob!a / 	 OOB	 / 	GGBN	 	Qoob!a / 	 OOB	  	 	  	 	 		  	 s$    F#F/F;#F,/F8;Gc                    t         j                  t         j                  z  }t        j                  d|      }| j	                  |d       | j                  t         j                  |       t        j                  |g|g|gd      \  }}}| j                  |||fg |gg f       t        j                  |d       t        j                  |g|g|gd      \  }}}| j                  |||f|g|gg f       | j                  t        j                  |      d       t        j                  |d       t        j                  |g|g|gd      \  }}}| j                  |||f|gg g f       t        j                  |       y )Nr   r  r  l    )r   r  r  r  r  r   rj   selectrC   r  r  )r4   r   r   rfdwfdxfds         r   test_eventfd_selectz EventfdTests.test_eventfd_select  sN   0ZZ5!B#"% rdRD2$:S##sC2tR.9 	R rdRD2$:S##sCB4"r*:;,b1 	[)rdRD2$:S##sCB4R.9
r   N)r\   r]   r^   r  r  r  r+   r   r   r  r    s    "> 4r   r  c                       e Zd Zd Zd Zy)OSErrorTestsc                     G d dt               }g | _        g | _        t        j                  t        j                  }nt        j
                  }| j                  j                  |       | j                  j                   ||             t        j                  t        j                  }n#t        j                  t        j
                        }| j                  j                  |       | j                  | j                  z   | _
        y )Nc                       e Zd Zy)OSErrorTests.setUp.<locals>.StrNr\   r]   r^   r+   r   r   Strr        r   r  )r2   bytes_filenamesunicode_filenamesr   r  rc   r  TESTFN_UNDECODABLEr   r=  r  )r4   r  decodedencodeds       r   rf   zOSErrorTests.setUp  s    	# 	  "!#''322G&&G%%g.%%c'l3''322Gkk)"2"23G##G,--0F0FFr   c                    | j                   t        j                  f| j                   t        j                  f| j                   t        j                  t        j
                  f| j                   t        j                  f| j                   t        j                  f| j                   t        j                  f| j                   t        j                  f| j                   t        j                  df| j                   t        j                  dfg	}t        j                         r,|j                  | j                   t        j                  df       t!        t        d      r-|j                  | j                   t        j"                  ddf       t!        t        d      r-|j                  | j                   t        j$                  ddf       t!        t        d      r,|j                  | j                   t        j&                  df       t!        t        d      r,|j                  | j                   t        j(                  df       t!        t        d      r,|j                  | j                   t        j*                  df       t!        t        d	      r+|j                  | j                   t        j,                  f       t!        t        d
      r,|j                  | j                   t        j.                  df       t!        t        d      r|j1                  | j                   t        j2                  f| j                   t        j4                  df| j                   t        j6                  ddf| j                   t        j8                  dff       t!        t        d      r,|j                  | j                   t        j:                  df       t!        t        d      r+|j                  | j                   t        j<                  f       |D ]*  ^}}}|D ]   }	  ||g|  | j?                  d|        " , y # t@        $ r0}| jC                  |jD                  |tG        |             Y d }~Zd }~wtH        $ r Y hw xY w)Nr   r   rq  r   lchownrT  chflagslchflagschrootr  r  r  s   userlchmodr*  zNo exception thrown by )%r  r   rH   rc  r    r   r  r   rd   r  r   r   r   	can_chmodr  r  r   rq  r  rT  r  r  r  r  r   r  r  r  r  r  r*  r;  rJ   ri  r"   r2   UnicodeDecodeError)r4   funcsr  func	func_argsr   r  s          r   test_oserror_filenamez"OSErrorTests.test_oserror_filename  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 		@'Iti! @@*	* II 7v>?@		@  AMM#,,c$i@@) s   	P$$	Q'-&QQ'&Q'N)r\   r]   r^   rf   r  r+   r   r   r  r    s    G(1@r   r  c                       e Zd Zd Zy)CPUCountTestsc                     t        j                         }|)| j                  |t               | j	                  |d       y | j                  d       y )Nr   z&Could not determine the number of CPUs)r   	cpu_countr1   r  r5  rw   )r4   cpuss     r   test_cpu_countzCPUCountTests.test_cpu_countB  s@    ||~!!$,tQ'MMBCr   N)r\   r]   r^   r  r+   r   r   r  r  A  s    Dr   r  c                      e Zd Zd Z ej
                  edu d      d        Z ej
                  edu d      d        Z ej                   e
ed      d      d        Zd	 Zd
 Z ej                   e
ed      d      d        Zd Zd Z ej                  ej&                  dk(  d      d        Z ej                   e
ed      d      d        Z ej                   e
ed      d      d        Zy)FDInheritanceTestsc                 T   t        j                  t        t         j                        }| j	                  t         j
                  |       | j                  t        j                  |      d       t        j                  |d       | j                  t        j                  |      d       y NFT)	r   r    r   r   r   rj   rC   rf  rg  r   s     r   test_get_set_inheritablez+FDInheritanceTests.test_get_set_inheritableN  sn    WWXr{{+"%++B/7
2t$++B/6r   Nz
need fcntlc                    t        j                  t        t         j                        }| j	                  t         j
                  |       | j                  t        j                  |      d       t        j                  |t        j                        }|t        j                   z  }t        j                  |t        j                  |       | j                  t        j                  |      d       y r   )r   r    r   r   r   rj   rC   rf  fcntlF_GETFD
FD_CLOEXECF_SETFD)r4   r   r   s      r   test_get_inheritable_cloexecz/FDInheritanceTests.test_get_inheritable_cloexecV  s    WWXr{{+"%++B/7 B.%""""Bu-++B/6r   c                    t        j                  t        t         j                        }| j	                  t         j
                  |       | j                  t        j                  |t        j                        t        j                  z  t        j                         t        j                  |d       | j                  t        j                  |t        j                        t        j                  z  d       y )NTr   )r   r    r   r   r   rj   rC   r#  r$  r%  rg  r   s     r   test_set_inheritable_cloexecz/FDInheritanceTests.test_set_inheritable_cloexecc  s    WWXr{{+"%R7%:J:JJ))	+ 	2t$R7%:J:JJ	r   O_PATHzneed os.O_PATHc                    t        j                  t        t         j                        }| j	                  t         j
                  |       | j                  t        j                  |      d       t        j                  |d       | j                  t        j                  |      d       t        j                  |d       | j                  t        j                  |      d       y r   )	r   r    r   r*  r   rj   rC   rf  rg  r   s     r   test_get_set_inheritable_o_pathz2FDInheritanceTests.test_get_set_inheritable_o_pathn  s    WWXryy)"%++B/7
2t$++B/6
2u%++B/7r   c                    t        j                         }| j                  t              5 }t	        j
                  |       d d d        | j                  j                  j                  t        j                         | j                  t              5 }t	        j                  |d       d d d        | j                  |j                  j                  t        j                         | j                  t              5 }t	        j                  |d       d d d        | j                  |j                  j                  t        j                         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY wNTF)r   r7  ry   rJ   r   rf  rC   rw  rK   rx  rg  )r4   r   rz  s      r   test_get_set_inheritable_badfz0FDInheritanceTests.test_get_set_inheritable_badfz  s   ""$w' 	#3r"	#,,ekk:w' 	)3r4(	),,ekk:w' 	*3r5)	*,,ekk:	# 	#	) 	)	* 	*s#   EE9E&EE#&E/c                     t        j                  t        t         j                        }| j	                  t         j
                  |       | j                  t        j                  |      d       y r;  )r   r    r   r   r   rj   rC   rf  r   s     r   r  zFDInheritanceTests.test_open  sC    WWXr{{+"%++B/7r   r  zneed os.pipe()c                 F   t        j                         \  }}| j                  t         j                  |       | j                  t         j                  |       | j	                  t        j
                  |      d       | j	                  t        j
                  |      d       y r;  )r   r  r   rj   rC   rf  )r4   r  r  s      r   	test_pipezFDInheritanceTests.test_pipe  sk    779S#&#&++C0%8++C0%8r   c                 H   t        j                  t        t         j                        }| j	                  t         j
                  |       t        j                  |      }| j	                  t         j
                  |       | j                  t        j                  |      d       y r;  )	r   r    r   r   r   rj   rv   rC   rf  r4   fd1rC  s      r   test_dupzFDInheritanceTests.test_dup  sb    ggh,#&ffSk#&++C0%8r   c                     t        j                  d      }| j                  t         j                  |       | j	                  |d       y Nrr   r   )r   rv   r   rj   r5  r   s     r   test_dup_standard_streamz+FDInheritanceTests.test_dup_standard_stream  s1    VVAY"%2q!r   r   r  c                 >   t        j                  dt         j                        }| j                  t         j                  |       t        j
                  |      }| j                  t         j                  |       | j                  t        j                  |             y )NNUL)r   r    r   r   rj   rv   r  rf  r4  s      r   test_dup_nulzFDInheritanceTests.test_dup_nul  sb     ggeR[[)#&ffSk#&++C01r   r>  zneed os.dup2()c                    t        j                  t        t         j                        }| j	                  t         j
                  |       t        j                  t        t         j                        }| j	                  t         j
                  |       | j                  t        j                  ||      |       | j                  t        j                  |             t        j                  t        t         j                        }| j	                  t         j
                  |       | j                  t        j                  ||d      |       | j                  t        j                  |             y )NF)inheritable)r   r    r   r   r   rj   rC   r>  rk   rf  r  )r4   r   rC  fd3s       r   rA  zFDInheritanceTests.test_dup2  s    WWXr{{+"% ggh,#&S)3/**3/0 ggh,#&Se<cB++C01r   openptyzneed os.openpty()c                 F   t        j                         \  }}| j                  t         j                  |       | j                  t         j                  |       | j	                  t        j
                  |      d       | j	                  t        j
                  |      d       y r;  )r   r@  r   rj   rC   rf  )r4   	master_fdslave_fds      r   test_openptyzFDInheritanceTests.test_openpty  sl     jjl	8),(+++I6>++H5u=r   )r\   r]   r^   r!  r   r  r#  r'  r)  r   r   r   r,  r/  r  r2  r6  r9  r=   r>   r<  rA  rD  r+   r   r   r  r  L  sC   7 X__Ud]L1
7 2
7 X__Ud]L1 2 XX.0@A	8 B	8;8
 XV,.>?9 @99"
 X02GH2 I2 XV,.>?2 @2  XY/1DE> F>r   r  c                   t    e Zd Zddddej                  fdfddddej
                  f eed	d      fgZd
 Zd Z	y)PathTConverterTests)r   Tr+   N)rc  Fr+   Nrl   FN)r  Fr   N)r  FrG  Nr    rj   c           	      N   t         j                  }t        j                  dk(  rd x}}n.t        j                  t         j                        }t        |      }t        j                  t        |      t        j                  t        j                  z        }| j                  t         j                  t         j                         | j                  t        j                  |       t        |      }t        |      }| j                  D ]  \  }}}	}
| j                  |      5  	 t        t        |      }||||fD ]4  }|| j                  ||      5   ||g|	 }|
 |
|       d d d        6 | j!                  t"        d      5   ||g|	  d d d        |r ||g|	 }|
1 |
|       n(| j!                  t"        d      5   ||g|	  d d d        d d d         y # t        $ r Y d d d        w xY w# 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   CxY w# 1 sw Y   xY w)NrS  r   )r   rD   zto return str or byteszos.PathLike)r   rc   r   r   r=  r   r    r   rh   r   rd   rj   	functionsrR  r5  r:  assertRaisesRegexr   )r4   str_filenamebytes_fspathbytes_filenamer   
int_fspath
str_fspathr   allow_fd
extra_args
cleanup_fnr  rD   rA  s                 r   test_path_t_converterz)PathTConverterTests.test_path_t_converter  s    ''77d?,00L>[[)9)9:N#N3LWWXl+R[[-CD	(()*:*:;"%b\
l+
6:nn 	,2D(J
4( , T*B *>:)+ /D| 4d; /!#D!6:!6%1&v./ /	/ ++!#;= 0z/J/0 0Z0F!-"6*//%)+ , 2+
+,1, ,	, & 	, ,/ /
0 0, ,1, ,sx   H!G1HG6	$ H
H4H
HH	G3(H2G33H6G?;HHHHHH$	c                    d}| j                  t        |dz        5  t        j                  t	        d             d d d        | j                  t        |dz        5  t        j                  t	        d             d d d        | j                  t        |dz        5  t        j                  t	        t                            d d d        y # 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   y xY w)Nz-__fspath__\(\) to return str or bytes, not %sr  rt   floatgQ@object)rJ  r   r   r   r   rV  )r4   r  s     r   &test_path_t_converter_and_custom_classz:PathTConverterTests.test_path_t_converter_and_custom_class  s    >##IsV|< 	!GGHQK 	!##IsX~> 	$GGHTN#	$##IsY? 	(GGHVX&'	( 	(		! 	!	$ 	$	( 	(s#   CC'C$CC!$C-)
r\   r]   r^   r   F_OKr   r5  rI  rS  rW  r+   r   r   rF  rF    sO     	!"	5277*d+&'	GT(BCI*,X(r   rF  ri  rj  zCannot unset blocking flagz'Windows only supports blocking on pipesc                       e Zd Zd Zy)BlockingTestsc                    t        j                  t        t         j                        }| j	                  t         j
                  |       | j                  t        j                  |      d       t        j                  |d       | j                  t        j                  |      d       t        j                  |d       | j                  t        j                  |      d       y r.  )	r   r    r   r   r   rj   rC   ri  rl  r   s     r   rm  zBlockingTests.test_blocking  s    WWXr{{+"%,d3
E",e4
D!,d3r   N)r\   r]   r^   rm  r+   r   r   rZ  rZ    s    
	4r   rZ  c                       e Zd Zd Zy)ExportsTestsc                     | j                  dt        j                         | j                  dt        j                         y )Nr    r  )r   r   __all__re   s    r   test_os_allzExportsTests.test_os_all  s&    fbjj)fbjj)r   N)r\   r]   r^   r`  r+   r   r   r]  r]    s    *r   r]  c                       e Zd Zd Zd Zd Zy)TestDirEntryc                     t         j                  j                  t        j                        | _        | j                  t        j                  | j                         t        j                  | j                         y r(   )r   rD   realpathr   rc   r   r  rG   re   s    r   rf   zTestDirEntry.setUp!  sF    GG$$Y%5%56		(($))4
r   c                 L    | j                  t        t        j                         y r(   )ry   r   r   DirEntryre   s    r   test_uninstantiablez TestDirEntry.test_uninstantiable&  s    )R[[1r   c                    t        t        j                  j                  | j                  d      d      }t        j                  | j                        D cg c]  }| c}j                         }| j                  |t        j                         | j                  |j                  d       dd l
}| j                  t        |j                  ||       y c c}w )Nr     pythonr   )r%   r   rD   rF   scandirrX  r1   rf  rC   r   rP  ry   r   rS  )r4   r"   entryrP  s       r   test_unpickablezTestDirEntry.test_unpickable)  s    rww||DIIzBIN$&JJtyy$9:5:>>@eR[[1Z0)V\\5(C	 ;s   	CN)r\   r]   r^   rf   rg  rl  r+   r   r   rb  rb     s    
2Dr   rb  c                      e Zd Zej                  Zd Zd#dZd Zd Zd Z	d Z
d Zd Z ej                  ej                   d	k7  d
      d        Zd Zd#dZd Zd Zd Zd Zd Zd Zd Zd Zd Z ej:                  ej>                  ej@                  v d      d        Z! ej                  e"jF                  d      d        Z$d Z%d Z&d Z'd Z(d Z)d  Z*d! Z+y")$TestScandirc                 B   t         j                  j                  t        j                        | _        t        j
                  | j                        | _        | j                  t        j                  | j                         t        j                  | j                         y r(   )
r   rD   rd  r   rc   r=  
bytes_pathr   r  rG   re   s    r   rf   zTestScandir.setUp5  sZ    GG$$Y%5%56	++dii0	(($))4
r   c                     t        |t              r| j                  n| j                  }t        j                  j                  ||      }t        |d       |S )Nri  )ri  rY   rp  rD   r   rF   r%   )r4   r   rD   r"   s       r   r%   zTestScandir.create_file;  s=    ",T5"9ttyy77<<d+Hi(r   c                     t        d t        j                  | j                        D              }| j	                  t        |j                               |       |S )Nc              3   8   K   | ]  }|j                   |f  y wr(   r   r.  rk  s     r   r/  z*TestScandir.get_entries.<locals>.<genexpr>B  s!      ;  

E* ;   )r  r   rj  rD   rC   r  keys)r4   namesentriess      r   get_entrieszTestScandir.get_entriesA  sF     ;$&JJtyy$9; ;/7r   c                     |rRt        |      D ]C  }|j                  d      s|dv r| j                  t        ||      t        ||      |||f       E y | j                  ||       y )Nst_)r  r  st_nlinkr  st_ctime_ns)r2  r  rC   r5  )r4   r  r  skip_fieldsrC  s        r   assert_stat_equalzTestScandir.assert_stat_equalG  st    E
 7u- + +  !5!(!5"'!577 UE*r   c                     t        j                  | j                        }| j                  t        t        |             |j                          y r(   )r   rj  rD   ry   r   r   rj   )r4   scandir_iters     r   rg  zTestScandir.test_uninstantiableU  s5    zz$)),)T,%78r   c                     | j                  d      }t        j                  | j                        }dd l}| j                  t        |j                  ||       |j                          y )Nr  r   )	r%   r   rj  rD   rP  ry   r   rS  rj   )r4   r"   r  rP  s       r   rl  zTestScandir.test_unpickableZ  sK    ##J/zz$)),)V\\<Jr   c                    | j                  |t        j                         | j                  |j                  |       | j                  |j
                  t        j
                  j                  | j
                  |             | j                  |j                         t        j                  |j
                  d      j                         t        j                  |j
                        }| j                  |j                         t        j                  |j                               | j                  |j                         t        j                  |j                               | j                  |j                         t        j
                  j!                  |j
                               t        j                  |j
                  d      }| j                  |j                  d      t        j                  |j                               | j                  |j                  d      t        j                  |j                               | j                  |j#                         t        j
                  j%                  |j
                               | j'                  |j                         |t        j                  dk(  xr |        | j'                  |j                  d      |t        j                  dk(         y )NFr  rS  )r1   r   rf  rC   r   rD   rF   inoder   r  is_dirS_ISDIRr=  is_fileS_ISREG
is_symlinkrO  is_junction
isjunctionr  )r4   rk  r   r  r  r  
entry_statentry_lstats           r   check_entryzTestScandir.check_entrya  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                 H   t        t        d      }t        j                         }t        j                  j                  | j                  d      }t        j                  |       | j                  d      }|r?	 t        j                  |t        j                  j                  | j                  d             |r~t        j                  |t        j                  j                  | j                  d      d       t        j                  |t        j                  j                  | j                  d	             ddg}|r|j                  d       |r|j                  d
       | j                  |      }|d   }| j                  |dddd       |d   }| j                  |dddd       |r|d   }| j                  |dddd       |r5|d   }| j                  |dddd       |d	   }| j                  |d	ddd       y y # t        $ r}| j                  d|z         Y d }~fd }~ww xY w)Nr  r2  r  zlink_file.txtrx  symlink_dirT)r   symlink_file.txt)r  r  F)r   r   r   r  rD   rF   rG   r%   r  r  rw   r   r  r   ry  r  )	r4   r  r   rQ   r"   r   rw  rx  rk  s	            r   test_attributeszTestScandir.test_attributes  s   r6"'')'',,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   8>G9 9	H!HH!r   z/Can only test junctions with creation on win32.c                    t         j                  j                  | j                  d      }t        j                  |       dd l}	  |j
                  |t         j                  j                  | j                  d             | j                  ddg      }| j                  |d   j                         d       | j                  |d   j                         d       y # t        $ r t        j                  d      w xY w)Ntgtdirr   srcjuncz!creating the test junction failedTF)r   rD   rF   rG   r  r  rJ   r   rd  ry  rC   r  )r4   rQ   r  rx  s       r   test_attributes_junctionsz%TestScandir.test_attributes_junctions  s    '',,tyy(3
	I"G""7BGGLLI,NO ""Ix#89+7794@*668%@  	I##$GHH	Is   ;C C9c                 
   t        |t              r| j                  n| j                  }t	        t        j                  |            }| j                  t        |      d       |d   }| j                  |j                  |       |S r8  )
ri  rY   rp  rD   r  r   rj  rC   r?   r   )r4   r   rD   rx  rk  s        r   	get_entryzTestScandir.get_entry  sc    ",T5"9ttyyrzz$'(Wq)
T*r   c                     | j                  |      }| j                  t        j                  j	                  |            S )Nr   )r%   r  r   rD   basename)r4   r   r"   s      r   create_file_entryzTestScandir.create_file_entry  s3    ###.~~bgg..x899r   c                    | j                         }t        j                         }	 t        j                  | j                         t        d t        j                         D              }| j                  t        |j                               t        j                  j                  |      g       t        j                  |       y # t        j                  |       w xY w)Nc              3   8   K   | ]  }|j                   |f  y wr(   r   rt  s     r   r/  z5TestScandir.test_current_directory.<locals>.<genexpr>  s     I5EJJ.Iru  )r%   r   r0   rH   rD   r  rj  rC   r  rv  r  )r4   r"   old_dirrx  s       r   test_current_directoryz"TestScandir.test_current_directory  s    ##%))+		HHTYY IBJJLIIGVGLLN3 gg..x89; HHWBHHWs   B
C Cc                 Z    | j                         }| j                  t        |      d       y )Nz<DirEntry 'file.txt'>)r  rC   r0  r4   rk  s     r   	test_reprzTestScandir.test_repr  s%    &&(e&=>r   c                     | j                         }| j                  t        j                  |      t        j                  j                  | j                  d             y Nr  )r  rC   r   fspathrD   rF   r  s     r   test_fspath_protocolz TestScandir.test_fspath_protocol  s<    &&(5)277<<		:+NOr   c                 B   t        j                  d      }| j                  |      }t        j                  |      }| j	                  |t
               | j                  |t         j                  j                  t        j                  | j                        |             y )Nzbytesfile.txtr   )	r   r=  r  r  r1   rY   rC   rD   rF   )r4   rM  bytes_entryr  s       r   test_fspath_protocol_bytesz&TestScandir.test_fspath_protocol_bytes  sq    _5,,.,A;'fe,bkk$))&<^L	Nr   c                    t         j                  j                  | j                  d      }t        j                  |       | j	                  d      }t        j
                  |       t         j                  dk(  r| j                  |j                                | j                  |j                                | j                  |j                                t         j                  dk(  rC| j                  t        |j                         |j                          |j                  d       y | j!                  |j                         d       | j                  t        |j                         | j                  t        |j                  d       y )Nr2  rS  Fr  r   )r   rD   rF   rG   r  r  r   rk   r  r  r  r  ry   rI   r  r   r5  )r4   rD   rk  s      r   test_removed_dirzTestScandir.test_removed_dir  s   ww||DIIu-
u%
 77d?OOELLN+)))+,77d?/=JJLJJuJ-u{{}a0/</USr   c                    | j                         }t        j                  |j                         | j	                  |j                                t        j                  dk(  r| j                  |j                                | j	                  |j                                t        j                  dk(  rC| j                  t        |j                         |j                          |j                  d       y | j                  |j                         d       | j                  t        |j                         | j                  t        |j                  d       y )NrS  Fr  r   )r  r   rd   rD   r  r  r   rk   r  r  ry   rI   r  r   r5  r  s     r   test_removed_filezTestScandir.test_removed_file  s    &&(
		%**(77d?OOEMMO,))+,77d?/=JJLJJuJ-u{{}a0/</USr   c                 (   t        j                         s| j                  d      S | j                  d      }t	        j
                  |t        j                  j                  | j                  d             | j                  ddg      }|d   }t	        j                  |       | j                  |j                         d       | j                  |j                                | j                  |j                                | j                  |j                  d             | j                  |j                  d             | j                  |j!                                | j#                  t$        |j&                         |j'                  d       y )Nzcannot create symbolic linkr  zsymlink.txtr   Fr  )r   r  rw   r%   r   r   rD   rF   ry  rd   r5  r  r  r  r  rk   r  ry   rI   r   )r4   r"   rx  rk  s       r   test_broken_symlinkzTestScandir.test_broken_symlink  s%   $$&==!>??##J/


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

5
)r   c           	         | j                  d       t        j                  | j                        }t	        t        j
                  |            }| j                  t        |      d|       |d   }| j                  |j                  d       | j                  |j                  t        j                  t        j                  j                  | j                  d                   y )Nr  rr   r   s   file.txt)
r%   r   r=  rD   r  rj  rC   r?   r   rF   )r4   
path_bytesrx  rk  s       r   rC  zTestScandir.test_bytes   s    $[[+
rzz*-.Wq'2
[1RWW\\$))Z%HI	Kr   c                    | j                  d       t        t        fD ]Z  } |t        j                  | j
                              }| j                  t              5  t        j                  |       d d d        \ y # 1 sw Y   gxY wr  )	r%   r   r   r   r=  rD   ry   r   rj  )r4   rv  r  s      r   test_bytes_likezTestScandir.test_bytes_like,  so    $j( 	'CR[[34J""9- '

:&' '	'' 's   A<<B	z.fd support for listdir required for this test.c                 B   | j                  t        j                  t        j                         | j	                  d       dg}t        j                         rOt        j                  dt        j                  j                  | j                  d             |j                  d       t        j                  | j                        5 }t        j                  |      5 }t        |      }d d d        D cg c]  }|j                   }}| j                  t        |      |       | j                  |t        j                   |             |D ]+  }| j                  |j                  |j                         | j                  t        j"                  |      |j                         | j                  |j%                         |j                  dk(         t        j&                  t        j(                  v st        j&                  |j                  |      }| j                  |j'                         |       t        j&                  |j                  |d      }| j                  |j'                  d      |       . 	 d d d        y # 1 sw Y   xY wc c}w # 1 sw Y   y xY w)Nr  r  r  F)r   r  r  )r   r   rj  r  r%   r   r  r   rD   rF   r  r  r  r   rC   r  r  r  r  r   r  )r4   expected_namesr   r$  rx  rk  rw  r  s           r   test_fdzTestScandir.test_fd4  s    	bjj"..1$$  "JJz277<<		6#BC!!&)""499- 	LB #2r(#-45EUZZ5E5VE]N;UBJJrN3  L  UZZ8  5!15::>  !1!1!3UZZ65IJ77b000B7B$$UZZ\26BNB$$UZZZ%FKL	L 	L# #5	L 	Ls8   JJ'J3JC*J1BJJ	JJzWASI maps '' to cwdc                 N    | j                  t        t        j                  d       y r(  )ry   rI   r   rj  re   s    r   test_empty_pathzTestScandir.test_empty_pathN  s    +RZZ<r   c                     | j                  d       t        j                  | j                        }t	        |      }| j                  t        |      d|       t	        |      }| j                  t        |      d|       y )Nr  rr   r   )r%   r   rj  rD   r  rC   r?   )r4   rr  rx  entries2s       r   test_consume_iterator_twicez'TestScandir.test_consume_iterator_twiceR  sb    $::dii(x.Wq'2 >X84r   c                 b    di g fD ]'  }| j                  t        t        j                  |       ) y )NgX9v?)ry   r   r   rj  )r4   objs     r   test_bad_path_typezTestScandir.test_bad_path_type]  s-    2r? 	:CiS9	:r   c                 (   | j                  d       | j                  d       t        j                  | j                        }t	        |       |j                          |j                          | j                         5  ~d d d        y # 1 sw Y   y xY wNr  	file2.txt)r%   r   rj  rD   r"  rj   check_no_resource_warningr4   rr  s     r   
test_closezTestScandir.test_closea  so    $%::dii(X++- 		 	 	s   =BBc                    | j                  d       | j                  d       t        j                  | j                        5 }t	        |       d d d        | j                         5  ~d d d        y # 1 sw Y   $xY w# 1 sw Y   y xY wr  )r%   r   rj  rD   r"  r  r  s     r   test_context_managerz TestScandir.test_context_managerl  su    $%ZZ		" 	hN	++- 		 		 		 	s   A1&A=1A:=Bc                     | j                  d       | j                  d       t        j                  | j                        5 }t	        |       |j                          d d d        y # 1 sw Y   y xY wr  )r%   r   rj  rD   r"  rj   r  s     r   test_context_manager_closez&TestScandir.test_context_manager_closet  sV    $%ZZ		" 	hNNN	 	 	s   A''A0c                 p   | j                  d       | j                  d       | j                  t              5  t        j                  | j
                        5 }t        |       ddz   d d d        d d d        | j                         5  ~d d d        y # 1 sw Y   ,xY w# 1 sw Y   0xY w# 1 sw Y   y xY w)Nr  r  rr   r   )r%   ry   ZeroDivisionErrorr   rj  rD   r"  r  r  s     r   test_context_manager_exceptionz*TestScandir.test_context_manager_exception{  s    $%01 	DII& (X!	 ++- 		 	 	 		 	s/    B B)B 	B,B	B  B),B5c                    | j                  d       | j                  d       t        j                  | j                        }t	        |       | j                  t              5  ~t        j                          d d d        t        j                  | j                        }t        |       | j                         5  ~d d d        y # 1 sw Y   NxY w# 1 sw Y   y xY wr  )r%   r   rj  rD   r"  assertWarnsResourceWarningr   
gc_collectr  r  r  s     r   test_resource_warningz!TestScandir.test_resource_warning  s    $%::dii(Xo. 	! 	! ::dii(X++- 		 		! 	!	 	s   "C:CCCN)r  ),r\   r]   r^   r   r  rf   r%   ry  r  rg  rl  r  r  r   r  r=   r>   r  r  r  r  r  r  r  r  r  r  rC  r  r   r   r  r  r  r   r  r  r  r  r  r  r  r  r  r+   r   r   rn  rn  2  s"    / I I+
0<'KR X__S\\W,._`A aA:?PNT,T&**
K' Xr~~5IKLKL0 X__W__&;<= ==	5:	r   rn  c                   f    e Zd Z eej
                        Zd Zd Zd Zd Z	d Z
d Zd Zd Zd	 Zy
)
TestPEP519c                 T    dD ]#  }| j                  || j                  |             % y )N)r  s   goodbyes   some/path/and/filerC   r  )r4   bs     r   test_return_byteszTestPEP519.test_return_bytes  s)    < 	0AQA/	0r   c                 T    dD ]#  }| j                  || j                  |             % y )N)hellogoodbyezsome/path/and/filer  )r4   r   s     r   test_return_stringzTestPEP519.test_return_string  s)    9 	0AQA/	0r   c                     dD ]x  }t        |      }| j                  || j                  |             | j                  dt        j                  |             | j                  dt        j
                  |             z y )N)path/like/object   path/like/objectr  r  )r   rC   r  r   r=  rZ   )r4   rW  pathlikes      r   test_fsencode_fsdecodez!TestPEP519.test_fsencode_fsdecode  si    8 	HA{HQH 560"++h2GH/X1FG	Hr   c                    | j                  d| j                  t        d                   | j                  t	        t        t
        j                               | j                  t        t        d      t
        j                               y )Nz#feelthegilr   )rC   r  r   rk   
issubclassr   PathLikeri  re   s    r   r?  zTestPEP519.test_pathlike  sR    H]4K(LM
8R[[9:
8C="++>?r   c                     t        ddi       }t        t         t         |       fD ]#  }| j                  t        | j
                  |       % y )Nblahr+   )r   r  r   ry   r   r  )r4   vaporos      r   test_garbage_in_exception_outz(TestPEP519.test_garbage_in_exception_out  s@    VR$dB' 	9Aia8	9r   c                 D    | j                  t        | j                         y r(   )ry   r   r  re   s    r   test_argument_requiredz!TestPEP519.test_argument_required  s    )T[[1r   c                 0   | j                  t        | j                  t        d             t	        ddi       }d|_        | j                  t        | j                   |              | j                  t        | j                  t        t                            y )Nr  foor+   rr   )ry   r   r  r   r   
__fspath__r  )r4   cs     r   test_bad_pathlikezTestPEP519.test_bad_pathlike  sl    )T[[(2,?B)T[[!#6+T[["#4#67	9r   c                      G d dt         j                        }| j                  t        t        |             | j                  t        t        t         j                               y )Nc                       e Zd Zy)0TestPEP519.test_pathlike_subclasshook.<locals>.ANr  r+   r   r   Ar    r  r   r  )r   r  r  r  r   rk   )r4   r  s     r   test_pathlike_subclasshookz%TestPEP519.test_pathlike_subclasshook  s>    	 	Ha01
8R[[9:r   c                 n    | j                  t        j                  t           t        j
                         y r(   )r1   r   r  rY   typesGenericAliasre   s    r   test_pathlike_class_getitemz&TestPEP519.test_pathlike_class_getitem  s!    bkk%0%2D2DEr   N)r\   r]   r^   r   r   r  r  r  r  r?  r  r  r  r  r  r+   r   r   r  r    sB     "))$F00H@
9
2	9;Fr   r  c                       e Zd Zd Zy)
TimesTestsc                    t        j                         }| j                  |t         j                         dD ]$  }t	        ||      }| j                  |t
               & t         j                  dk(  rU| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       y y )N)usersystemchildren_userchildren_systemelapsedrS  r   )r   r  r1   times_resultr5  rU  r   rC   r  r  r  )r4   r  fieldrl  s       r   
test_timeszTimesTests.test_times  s    
eR__5! 	0EE5)E!!%/	0
 77d?U00!4U22A6U]]A. r   N)r\   r]   r^   r  r+   r   r   r  r    s    /r   r  c                   b    e Zd Zd Z ej
                  ej                  dv d      d        Zd Z	y)	ForkTestsc                 <    d}t        d|       t        d|d       y )Nzif 1:
            import os
            from test import support
            pid = os.fork()
            if pid != 0:
                support.wait_process(pid, exitcode=0)
        r   malloc_debug)PYTHONMALLOCr   r   s     r   	test_forkzForkTests.test_fork  s!     	t$t.Ar   )rM  darwinz'Only Linux and macOS detect this today.c                     d}t        d|d      \  }}}| j                  |j                  d      d       | j                  |j                  d      d       y )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   rC   rM  r4   r   r  rl  r  s        r   -test_fork_warns_when_non_python_thread_existsz7ForkTests.test_fork_warns_when_non_python_thread_exists  sQ    * 'tT#F3G,b1G,b1r   c                 p    d}t        d|      \  }}}| j                  d|       | j                  d|       y )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   rC   r   r  s        r   test_fork_at_finalizationz#ForkTests.test_fork_at_finalization	  s<     'tT23#&;SAr   N)
r\   r]   r^   r  r   r   r=   r>   r  r  r+   r   r   r  r    s@    B X)<<BD2D24Br   r  _fspathc                   4    e Zd ZdZ eej                        Zy)TestPEP519PurePythonz>Explicitly test the pure Python implementation of os.fspath().N)r\   r]   r^   r  r   r   r  r  r+   r   r   r  r    s    Lbjj)r   r  __main__)s   contentr(   )r)   r  
contextlibr}  rK   ru  r  r  r  r   rP  r  r  r  ra  r   r  r   r=   	sysconfigr@   r  r  r  r   r  r@  testr   test.supportr   r   r   r   r   r>   r	   r  ImportErrorr#  r  pwdgetpwallpw_uidr  r:  	_testcapir
   r   r  r  test.support.script_helperr   r   test.support.os_helperr   r  r   r   r   versionr  r  getgidr  r   r%   r  r  r,   TestCaser.   r`   r  r  r  BasicTestMappingProtocolr  r  r   r  r:  rC  rG  rs  r  r  r  r  r  get_config_varOS_URANDOM_DONT_USE_FDr  contextmanagerr  r  r  r*  rq  r  r  r  r  r   r  r,  rD  rF  r~  r  r  r  r  r  r  r  r  r=  rD  IsolatedAsyncioTestCaserL  r  requires_linux_versionr  r  r  r  r  r  r  rF  r  rZ  r]  rb  rn  r  r  requires_forkr  r  r\   main)us   0r   <module>r,     sQ  
          	         
          & " & , ( !#/3<<>2a2I+1 8 # + 
2yRZZ\Q&M 33??#:#:00;;NK <<**95J)"))+:J K 'xs||'>'>u'E'NP (A8!! A8JZ8!! Z8|
l7** l7^XA"" XAv nJ=99 nJb	t(!! t(n	 WR)+BC]% ]% D]%@6Y 6 WR)+BC	6j 	6 D	6s8$$ sl WR)+@A8#X&& 8# B8#v&:h'' &:R "9:,8$$ , ;,*8$$ *> WR-/DE'*X&& '* F'*Z I./14 ?y 01Q6?y 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}*H%% }* G}*@ WR(*<=#0!! #0 >#0J (*@ADAx(( DA BDAL (*@AE0(## E0 BE0N 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S@8$$ S@ FS@l "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U833 U JUp  13?A  1b)NGX.. NG *ANGb WR!457VW:/H%% :/ X:/z WR02LM2&2x(( 2 ' N2 WR+-BC1b)N8$$ N * DNbF@8$$ F@PDH%% D v>** v> v>r?((++ ?(D WR0DF&&(DE(*ST
4H%% 
4 U FF
4*8$$ *D8$$ D$_(## _D7F"" 7Ft/"" /  9B!! 9B 9B| 2y*z * zHMMO wW  H  E  G 3^$ I  +"{{*Gn+
  Ds~   k/ k= "l 'l >ll l. m /k:9k:=lllll 	l+*l+.mmmm