
    7bhw                     N   	 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m	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 ej6                  j8                  r e j:                  d	      d dlZej>                  duZ da!d
 Z"d Z# G d de jH                        Z% G d de&      Z' G d de jH                        Z( G d de jH                        Z) G d de jH                        Z*e+dk(  r e jX                          yy)    N)support)	os_helper)socket_helper)captured_stderr)TESTFNEnvironmentVarGuard)mock)copyzPython was invoked with -Sc                     t         j                  d d  at        j                  rvt
        j                  j                  t        j                        sH	 t        j                  t        j                         t        j                  t        j                         y y y # t        $ r.} t        j                  dt        j                  d|       d } ~ ww xY w)Nz&unable to create user site directory (z): )syspathOLD_SYS_PATHsiteENABLE_USER_SITEosisdir	USER_SITEmakedirs
addsitedirPermissionErrorunittestSkipTest)excs    8/opt/python-3.12.12/usr/lib/python3.12/test/test_site.pysetUpModuler   ,   s    88A;LRWW]]4>>%B	=KK'OODNN+ &C  	=##'+~~s%< = =	=s   AB 	C$)CCc                  2    t         t        j                  d d  y N)r   r   r        r   tearDownModuler    ;   s    CHHQKr   c                   ^   e Zd Z	 d Zd Zd Zd Zd Zd Zde	fdZ
d	 Zd
 Zd Zd Zd Zd Z ej$                   eed      d      d        Z ej$                  ej.                  dk(  d       ej2                         d               Zd Z ej$                  ed      d        Z ej$                  ej>                  d       ej2                         d               Z  ej$                  ed      d        Z! ej$                  ed      d        Z"d Z# ej$                  ed      d        Z$d Z%y) HelperFunctionsTestsc                    	 t         j                  d d  | _        t        j                  | _        t        j                  | _        t        j                  | _	        t        j                  | _        t        t        j                        | _        y r   )r   r   sys_pathr   	USER_BASEold_baser   old_sitePREFIXESold_prefixes	sysconfig_CONFIG_VARSoriginal_varsr
   old_varsselfs    r   setUpzHelperFunctionsTests.setUpC   sV    % MM&33Y334r   c                    	 | j                   t        j                  d d  | j                  t        _        | j                  t        _        | j                  t        _	        | j                  t        _        t        j                  Ht        j                  j                          t        j                  j                  | j                         y y r   )r$   r   r   r&   r   r%   r'   r   r)   r(   r,   r*   r+   clearupdater-   r.   s    r   tearDownzHelperFunctionsTests.tearDownL   s    mm))!%!3!3	!!-""((*""))$--8 .r   c                    d}t        j                  j                  | }t        j                  | \  }}| j                  t         j                  j                  |      |       |t         j                  j                  |      k(  r| j                  ||       y | j                  t         j                  j                  |      |       y )N)	BeginningEnd)r   r   joinr   makepathassertEqualabspathnormcase)r/   
path_partsoriginal_dirabs_dirnorm_dirs        r   test_makepathz"HelperFunctionsTests.test_makepathX   s     *
ww||Z0 MM:66@277++L99Wh/RWW--g6Ar   c                    t        j                         }t        j                  D cg c];  }|r7t        j                  j                  |      rt        j                  |      d   = c}D ]  }| j                  |||d|        y c c}w )N   z> from sys.path not found in set returned by _init_pathinfo(): )r   _init_pathinfor   r   r   existsr9   assertIn)r/   dir_setr   entrys       r   test_init_pathinfoz'HelperFunctionsTests.test_init_pathinfoe   su    %%'9< :BGGNN4$8 mmD)!, :EMM%7<gGH: :s   A Bc                 f   	 | j                  |j                  t        j                  d|j                  z         | j                  t	        j
                  |j                        d   t        j                         | j                  t        j                  j                  |j                               y )Nz%s not in sys.modulesr   )rF   importedr   modulesr   r9   good_dir_pathr   assertFalser   rE   bad_dir_pathr/   pth_files     r   pth_file_testsz#HelperFunctionsTests.pth_file_testsm   su    Lh''-0A0AA	CdmmH$:$:;A>I(=(=>?r   c                 0   t               }|j                  d       	 |j                          t        j                  |j
                  |j                  t                      | j                  |       |j                          y # |j                          w xY wNTprep)	PthFilecleanupcreater   
addpackagebase_dirfilenamesetrR   rP   s     r   test_addpackagez$HelperFunctionsTests.test_addpackaget   sp    
 9d#	OOOOH--x/@/@#%H)Hs   AB B.c                 *   t         j                  j                  |      }|dz   }t         j                  j                  ||      t	        dd      5 }| j                  fd       |j                  |       d d d        ||fS # 1 sw Y   ||fS xY w)N.pthwutf-8encodingc                  .    t        j                         S r   )r   remove)pth_fns   r   <lambda>z/HelperFunctionsTests.make_pth.<locals>.<lambda>   s    BIIf$5r   )r   r   r;   r8   open
addCleanupwrite)r/   contentspth_dirpth_namepth_basenamerQ   rh   s         @r   make_pthzHelperFunctionsTests.make_pth   s    ''//'*&(g|4&#0HOO56NN8$ 1 $$ 1 $$s   &BBc           	      J   | j                  d      \  }}t               5 }t        j                  ||t	                      d d d        | j                  j                         d       | j                  |j                         t        j                  t        j                  j                  ||                   | j                  |j                         d       | j                  |j                         d       | j                  |j                         d       y # 1 sw Y   xY w)Nzimport bad-syntax
zline 1	Tracebackzimport bad-syntaxSyntaxErrorrq   r   r   rZ   r]   assertRegexgetvaluereescaper   r   r8   r/   rn   rh   err_outs       r   !test_addpackage_import_bad_syntaxz6HelperFunctionsTests.test_addpackage_import_bad_syntax   s    --(=>'OOGVSU3 ))+X6))+IIbggll7F34	6
 	))+[9))+-AB))+]; s    DD"c           	      
   | j                  d      \  }}t               5 }t        j                  ||t	                      d d d        | j                  j                         d       | j                  |j                         t        j                  t        j                  j                  ||                   | j                  |j                         d       | j                  |j                         d       y # 1 sw Y   xY w)Nzrandompath
import nosuchmodule
zline 2rs   ModuleNotFoundErrorru   rz   s       r   test_addpackage_import_bad_execz4HelperFunctionsTests.test_addpackage_import_bad_exec   s    --(KL'OOGVSU3 ))+X6))+IIbggll7F34	6 	))+[9))+-BC s    C99Dc                     | j                  d      \  }}t        j                  ||t                     }| j	                  |t                      y )Nz

  

)rq   r   rZ   r]   r:   )r/   rn   rh   known_pathss       r   test_addpackage_empty_linesz0HelperFunctionsTests.test_addpackage_empty_lines   s:    --5oogvsu=ce,r   c           	         | j                  d      \  }}t               5 }| j                  t        j                  ||t                            d d d        d | _        | j                  j                         d       t        j                  D ]%  }t        |t              s| j                  d|       ' y # 1 sw Y   ixY w)Nzabc def
 zabc def)rq   r   rN   r   rZ   r]   maxDiffr:   rw   r   r   
isinstancestrassertNotIn)r/   rn   rh   r{   r   s        r   #test_addpackage_import_bad_pth_filez8HelperFunctionsTests.test_addpackage_import_bad_pth_file   s    --7'T__WfceDE ))+R0HHD$$  t4 	 s   /B66B?c                    t               }|j                  d       	 |j                          t        j                  |j
                  t                      | j                  |       |j                          y # |j                          w xY wrT   )rW   rX   rY   r   r   r[   r]   rR   rP   s     r   test_addsitedirz$HelperFunctionsTests.test_addsitedir   sh     9d#	OOOOH--su5)Hs   A	A8 8B
c                    t        d      }|j                  d       	 |j                          t        j                  |j
                  t                      | j                  t        j                  |j                        d   t        j                         | j                  |j
                  t        j                         |j                          y # |j                          w xY w)Nz.dotfileTrU   r   )rW   rX   rY   r   r   r[   r]   r   r9   rM   r   r   rF   rP   s     r   test_addsitedir_dotfilez,HelperFunctionsTests.test_addsitedir_dotfile   s    :&d#	OOOOH--su5T]]8+A+AB1EsxxPMM(++SXX6Hs   B"C C$chflagsztest needs os.chflags()c                    t               }|j                  d       	 |j                          t        j                  |j
                        }t        j                  |j
                  |j                  t        j                  z         t        j                  |j                  t                      | j                  t        j                  |j                        d   t         j"                         | j%                  |j                  t         j"                         |j                          y # |j                          w xY w)NTrU   r   )rW   rX   rY   r   stat	file_pathr   st_flags	UF_HIDDENr   r   r[   r]   r   r9   rM   r   r   rF   )r/   rQ   sts      r   test_addsitedir_hidden_flagsz1HelperFunctionsTests.test_addsitedir_hidden_flags   s    9d#	OO++,BJJx))2;;+GHOOH--su5T]]8+A+AB1EsxxPMM(++SXX6Hs   C<D+ +D=win32ztest needs Windowsc                    t               }|j                  d       	 |j                          t        j                  dd|j
                  g       t        j                  |j                  t                      | j                  t        j                  |j                        d   t        j                         | j                  |j                  t        j                         |j                          y # |j                          w xY w)NTrU   attribz+Hr   )rW   rX   rY   
subprocess
check_callr   r   r   r[   r]   r   r9   rM   r   r   rF   rP   s     r   %test_addsitedir_hidden_file_attributez:HelperFunctionsTests.test_addsitedir_hidden_file_attribute   s     9d#	OO!!8T83E3E"FGOOH--su5T]]8+A+AB1EsxxPMM(++SXX6Hs   CC3 3Dc                 p    | j                  t        j                         t        j                                y r   )r:   r   _getuserbaser*   r.   s    r   test__getuserbasez&HelperFunctionsTests.test__getuserbase   s$    **,i.D.D.FGr   zneed user sitec                 F   t         j                  dk(  rt         j                  rd}nt        j                  dz   }| j                  t        j                  j                  t        j                  t        j                                     t        j                  d|             y )Ndarwinosx_framework_user_userpurelib)r   platform
_frameworkr   namer:   r   normpathr   	_get_pathr   r*   get_path)r/   schemes     r   test_get_pathz"HelperFunctionsTests.test_get_path   si    <<8#)FWWw&F))$..9J9J9L*MN"++Iv>	@r   z<requires access to PEP 370 user-site (site.ENABLE_USER_SITE)c                 @   t         j                  j                  t        j                        }| j                  |t        j                         t         j                  j                         }t        j                  t        j                  dd|z  g|      }| j                  |d       t         j                  j                         }t        j                  t        j                  ddd|z  g|      }|t        j                         d   k(  r| j                  |d       n| j                  |dd       t         j                  j                         }d|d	<   t        j                  t        j                  dd|z  g|      }|t        j                         d   k(  r| j                  |d       n| j                  |dd
       t         j                  j                         }d|d<   t        j                  t        j                  ddg|      }| j                  |dd       y )N-cz$import sys; sys.exit(%r in sys.path)envrC   z-sr   z%User site still added to path with -s1PYTHONNOUSERSITEz3User site still added to path with PYTHONNOUSERSITEz/tmpPYTHONUSERBASEz=import sys, site; sys.exit(site.USER_BASE.startswith("/tmp"))z#User base not set by PYTHONUSERBASE)r   r   r   r   r   rF   r   environr
   r   call
executabler:   getsitepackages)r/   usersiter   rcs       r   test_s_optionz"HelperFunctionsTests.test_s_option   s   
 77##DNN3h)jjoo__cnnd2X=? 	Qjjoo__cnndD2X=? t++-a00R#R$KLjjoo"%__cnnd2X=? t++-a00R#RMO jjoo &__cnndKM 	Q=	?r   c                    d t         _        t        j                         }| j                  t         j                  |       d t         _        dd l}d |_        t               5 }d|d<   | j                  t        j                         j                  d      t        j                                d d d        y # 1 sw Y   y xY w)Nr   xoxor   )	r   r%   getuserbaser:   r*   r+   r   
assertTrue
startswith)r/   	user_baser*   r   s       r   test_getuserbasez%HelperFunctionsTests.test_getuserbase%  s    $$&	 	3 !%	 "g(.G$%OOD,,.99&A ,,.0 #""s    AB44B=c                 Z   d t         _        d t         _        t        j                         }| j	                  t         j                  |       | j                  |j                  t         j                        |       | j	                  t         j                  t        j                                y r   )r   r   r%   getusersitepackagesr:   r   r   r   )r/   	user_sites     r   test_getusersitepackagesz-HelperFunctionsTests.test_getusersitepackages7  sn    ,,.	 	3	,,T^^<iH)9)9);<r   c                    dgt         _        t        j                         }t        j                  dk(  rt
        j                  dk7  ru| j                  t        |      d       t        j                  j                  dt
        j                  dt
        j                  d d z  d      }| j                  |d   |       n| j                  t        |      d       t        j                  j                  dddt
        j                  d d z  d      }| j                  |d	   |       y | j                  t        |      d       | j                  |d   d       t        j                  j                  ddd      }| j                  t        j                  j                  |d         t        j                  j                  |             y )
Nr   /lib   zpython%d.%dzsite-packagesr   rC   )r   r(   r   r   sepr   
platlibdirr:   lenr   r8   version_infor<   )r/   dirswanteds      r   test_getsitepackagesz)HelperFunctionsTests.test_getsitepackagesB  sY   ##%66S=~~&  TA.fcnn&3c6F6Fr6J&J&57   a&1  TA.WW\\&%"/#2B2B2A2F"F"13F T"Xv. SY*T!Wf-WW\\&%AFRWW--d1g6WW--f57r   c                    d t         _        d t         _        t               5 }t	        j
                  dd       5  |j                  dd       t        j                         }| j                  |j                  dt        j                  z         |       t        j                         }| j                  |j                  |      |       d d d        d d d        t	        j
                  dd      5 }t        j
                  j                  t         d	      5 }t        j                  t         d
d      5  t!               }t        j"                  |       |j%                         |j'                          | j)                  |       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   2xY w# 1 sw Y   6xY w# 1 sw Y   y xY w)Nzos.path.expanduserc                     | S r   r   )r   s    r   ri   z=HelperFunctionsTests.test_no_home_directory.<locals>.<lambda>d  s    4r   r   APPDATA~zos.path.isdirF)return_valuer   r   T)r   r   r%   r   r	   patchunsetr   r   r   r   r   r   objectr   	swap_attrr]   addusersitepackagesassert_called_once_withassert_not_calledrN   )r/   r   r   r   
mock_isdirmock_addsitedirr   s          r   test_no_home_directoryz+HelperFunctionsTests.test_no_home_directory[  sY   
  "gZZ,.?@MM*I6((*IOOI00rvv>%' 002IOOI00;YG A # ZZe<
ZZt\2ot%7> %K$$[1..y9--/[) ? 3 =< A@ #" ?> 32 =<s`   F&BFF&.%G
F>/AF2F>	G
F#	F&&F/2F;7F>>G	G

Gc                    d}d|dz   fdfD ]  \  }}t        j                  dt        j                  |            5  t        j                  dt        j                               5  t        j                  |       | j                  t        j                  j                         |       d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)Nzbla-bla-blaT
)Fr   z	sys.flags)verbosez
sys.stderr)r	   r   MockioStringIOr   _tracer:   r   stderrrw   )r/   messager   outs       r   
test_tracezHelperFunctionsTests.test_trace{  s    !7T>2K?LGSK7)CDJJ|R[[];G$  !4!4!6< < ED @;; EDs$   )C%AB<)C<CCC	N)&__name__
__module____qualname__r0   r4   rA   rI   rR   r^   r   rq   r|   r   r   r   r   r   r   
skipUnlesshasattrr   r   r   r   r   requires_subprocessr   r   HAS_USER_SITEr   r   r   r   r   r   r   r   r   r   r   r   r"   r"   ?   s   5
9BH@ *-v %<
D-	5	 XY/1JK L X02FG W  "
 # H
H X(89@ :@ X.. 1> ? W  "%? #?%?N X(890 :0" X(89= :=72 X(89* :*>=r   r"   c                   ,    e Zd Z	 edddfdZd ZddZy)	rW   time__testdir____badc                    	 |dz   | _         t        j                  j                  d      | _        t        j                  j                  | j                  | j                         | _        || _        || _        || _	        t        j                  j                  | j                  | j                        | _
        t        j                  j                  | j                  | j                        | _        y )Nra   r   )r\   r   r   r;   r[   r8   r   rK   good_dirnamebad_dirnamerM   rO   )r/   filename_baserK   r   r   s        r   __init__zPthFile.__init__  s    +%.+dmmT]]C (&WW\\$--9J9JKGGLL8H8HIr   c                    	 t        | j                  d      }	 t        d|       t        d|       t        d| j                  z  |       t        | j                  |       t        | j
                  |       |j                          t        j                  | j                         y # |j                          w xY w)Nrb   z#import @bad module namefiler   z	import %s)
rj   r   printrK   r   r   closer   mkdirrM   )r/   FILEs     r   rY   zPthFile.create  s    		 DNNC(	,48$T"+-D9$##$/$"".JJL
##$ JJLs   A"B+ +B=c                    	 t         j                  j                  | j                        rt        j                  | j                         |rVt
        j                  j                  | j                        | _	        | j                  rOt
        j                  | j                  = n3| j                  r'| j                  t
        j                  | j                  <   t         j                  j                  | j                        rt        j                  | j                         t         j                  j                  | j                        r t        j                  | j                         y y r   )r   r   rE   r   rg   r   rL   getrK   imported_modulerM   rmdirrO   )r/   rV   s     r   rX   zPthFile.cleanup  s    	% 77>>$..)IIdnn%#&;;??4==#AD ##KK.##-1-A-ADMM*77>>$,,-HHT''(77>>$++,HHT&&' -r   N)F)r   r   r   r   r   rY   rX   r   r   r   rW   rW     s    9%+f!.G
J%,(r   rW   c                   0   e Zd Z	 d Zd Zd Zd Z ej                  d      d        Z	d Z
d Zd	 Zd
 Z ej                   eej"                  d      d      ej&                  j)                  d      ej&                  j*                  d                      Zy)ImportSideEffectTestsc                 6    	 t         j                  d d  | _        y r   )r   r   r$   r.   s    r   r0   zImportSideEffectTests.setUp  s    %r   c                 @    	 | j                   t        j                  d d  y r   )r$   r   r   r.   s    r   r4   zImportSideEffectTests.tearDown  s    mmr   c                     	 d t         j                  d   _        t        j                          | j                  t         j                  d   j                         y )Ntest)r   rL   
__cached__r   	abs_pathsassertIsNoner.   s    r   test_abs_paths_cached_Nonez0ImportSideEffectTests.test_abs_paths_cached_None  sA    	 *.F&#++f-889r   c                     t        j                          t               }t        j                  D ]%  }| j                  ||       |j                  |       ' y r   )r   removeduppathsr]   r   r   r   add)r/   
seen_pathsr   s      r   test_no_duplicate_pathsz-ImportSideEffectTests.test_no_duplicate_paths  sA     	U
HHDT:.NN4  r   ztest not implementedc                      y r   r   r.   s    r   test_add_build_dirz(ImportSideEffectTests.test_add_build_dir  s    
 	r   c                     | j                  t        t        d             | j                  t        t        d             y )Nquitexitr   r   builtinsr.   s    r   test_setting_quitz'ImportSideEffectTests.test_setting_quit  s(    &12&12r   c                     | j                  t        t        d             | j                  t        t        d             | j                  t        t        d             y )N	copyrightcreditslicenser  r.   s    r   test_setting_copyrightz,ImportSideEffectTests.test_setting_copyright  s;    +67)45)45r   c                 B    | j                  t        t        d             y )Nhelpr  r.   s    r   test_setting_helpz'ImportSideEffectTests.test_setting_help  s    &12r   c                 t    dt         j                  vr	 dd l}| j                  d       y y # t        $ r Y y w xY w)Nsitecustomizer   z(sitecustomize not imported automatically)r   rL   r&  failImportError)r/   r&  s     r   test_sitecustomize_executedz1ImportSideEffectTests.test_sitecustomize_executed  s?    #++-F$ 		DE .  s   + 	77HTTPSHandlerz$need SSL support to download licensenetworkc                 R   t         j                  j                         d   }t        j                  j                  |d      }| j                  t        j                  j                         	 t        j                  |      5  t        j                  j                  |      5 }|j                         }d d d        d d d        | j                  dd|z          y # 1 sw Y   )xY w# 1 sw Y   -xY w# t        j                  j                  $ r}|j                  }Y d }~^d }~ww xY w)NrC   HEAD)method   zCan't find )msg)r   _Printer__dataspliturllibrequestRequestrk   
urlcleanupr   transient_interneturlopengetcodeerror	HTTPErrorcoder:   )r/   urlreqdatar<  es         r   test_license_exists_at_urlz0ImportSideEffectTests.test_license_exists_at_url  s     $$**,Q/nn$$S$8112	11#6^^++C0D<<>D 1 7
 	s(;<	 10 76 ||%% 	66D	sH   -C3  C'"C3C';C3 C$	 C''C0,C3 3D&D!!D&N)r   r   r   r0   r4   r  r  r   skipr  r  r!  r$  r)  r   r   r3  r4  r  r   requires_resourcesystem_must_validate_certrA  r   r   r   r  r    s    2$$	:! X]])* +3
63F X@?A	\\##I.	\\++= , /A=r   r  c                       e Zd Z ej                         d        Z ej                         d        Z ej                         d        Z ej                         d        Zy)StartupImportTestsc           	      X   t        j                  t        j                  dddddgt         j                  dd      }|j                         d	   }| j                  |j                  d	t        |             t        j                  |      }|D ]k  }t        j                  t        j                  j                  t        j                  |      d
            }|sL| j!                  dt#        |       d|        m t        j                  t        j                  ddddddgt         j                  t         j                  dd      }|j                         \  }}| j                  |j                  d	||f       t        j                  |      }| j%                  d|       h d}| j'                  |j)                  |      |       | j+                  d||       | j+                  d||       h dj-                  t        j.                        }	| j'                  |j)                  |	      |       y )N-Xutf8-Ir   z!import sys; print(repr(sys.path))rc   surrogateescape)stdoutre   errorsr   z*.pthzfound z .pth files in: z-vz#import sys; print(set(sys.modules)))rL  r   re   rM  r   >   
re._parserre._compilerre._constantsrx   _srelocalecopyreg>
   heapqtypeskeywordreprlibweakrefoperator	functools	itertoolscollections_collections)r   Popenr   r   PIPEcommunicater:   
returncodereprastliteral_evalglobr   r   r8   ry   skipTestr   rF   rN   intersectionr   
differencebuiltin_module_names)
r/   popenrL  isolated_pathsr   	pth_filesr   rL   re_modscollection_modss
             r   test_startup_importsz'StartupImportTests.test_startup_imports  s      #..$"&(K"M(2*1(9	;
 ""$Q'))1d6l;))&1
 #D		"'',,t{{4/@'"JKIs9~&66FtfMN #   #..$d"&(M"O(2(2*1(9; **,))1vv.>?""6*fg& P--g6? 	7F3 	GV4 'Js'?'?@ 	 	--o>Gr   c                     t        j                  t        j                  ddg      j	                         }| j                  |d       y )Nr   9import sys; sys.exit(hasattr(sys, "__interactivehook__"))z''__interactivehook__' not added by siter   r^  r   r   waitr   r/   rs     r   test_startup_interactivehookz/StartupImportTests.test_startup_interactivehookC  s=    cnndGI JJN$& 	
DEr   c                     t        j                  t        j                  dddg      j	                         }| j                  |d       y )NrJ  r   rq  z,'__interactivehook__' added in isolated mode)r   r^  r   r   rs  rN   rt  s     r   %test_startup_interactivehook_isolatedz8StartupImportTests.test_startup_interactivehook_isolatedI  sC     cnndDGI JJN$& 	
JKr   c                     t        j                  t        j                  dddg      j	                         }| j                  |d       y )NrJ  r   zYimport site, sys; site.enablerlcompleter(); sys.exit(hasattr(sys, "__interactivehook__"))z6'__interactivehook__' not added by enablerlcompleter()rr  rt  s     r   .test_startup_interactivehook_isolated_explicitzAStartupImportTests.test_startup_interactivehook_isolated_explicitP  sC     cnndDgi jjnjnjp 	
STr   N)	r   r   r   r   r   ro  rv  rx  rz  r   r   r   rF  rF    s     W  "0H #0Hd !W  "F #F
 !W  "L #L !W  "U #Ur   rF  c                   
   e Zd Zej                  dk(  rddZnddZd ZdedefdZ	 e
j                         d        Z e
j                         d	        Z e
j                         d
        Z e
j                         d        Zy)_pthFileTestsr   c           
         dd l }t        j                         }| j                  t        j
                  |       t        j                  j                  |t        j                  j                  t        j                        d         }|j                  t        j                        }t        j                  j                  |t        j                  j                  |      d         }t        j                  t        j                  |       t        j                  ||       t!        j                   t        j                  j                  t        j                  j                  |      d   d            D ]V  }t        j                  |t        j                  j                  |t        j                  j                  |      d                X |r&t        j                  j#                  |      d   dz   }	n%t        j                  j#                  |      d   dz   }	t%        |	dd      5 }
|D ]  }t'        ||
        	 d d d        |S # 1 sw Y   |S xY w)	Nr   rC   zvcruntime*.dll._pthrb   rI  rd   r   )_winapitempfilemkdtemprk   r   rmtreer   r   r8   r2  r   r   GetModuleFileName	dllhandleshutilr
   re  splitextrj   r   )r/   linesexe_pthr  temp_direxe_filedll_src_filedll_filefn	_pth_fileflines               r   _create_underpth_exez"_pthFileTests._create_underpth_exeZ  s   '')HOOI,,h7ww||HbggmmCNN.KA.NOH"44S]]CLww||HbggmmL.I!.LMHKK1KKh/iiRWW]]<-H-KM] ^_BXrww}}R7H7K LM `GG,,X6q9GC	GG,,X6q9GC	iv6!!D$Q' " 7 O 7 Os   'IIc                    |st        j                  d      t        j                         }| j	                  t
        j                  |       t        j                  j                  |t        j                  j                  t        j                        d         }t        j                  t        j                  |       |dz   }t        |d      5 }|D ]  }t        ||        	 d d d        |S # 1 sw Y   |S xY w)Nz1library ._pth file not supported on this platformrC   r~  rb   r   )r   r   r  r  rk   r   r  r   r   r8   r2  r   r   symlinkrj   r   )r/   r  r  r  r  r  r  r  s           r   r  z"_pthFileTests._create_underpth_exen  s    ''([\\'')HOOI,,h7ww||HbggmmCNN.KA.NOHJJs~~x0 7*Ii%!D$Q' " & O & Os   C//C9c                     g }|D ][  }|r|d   dk(  rt         j                  j                  t         j                  j                  ||            }|j	                  |       ] |S )Nr   #)r   r   r;   r8   append)r/   
sys_prefixr  r$   r  abs_paths         r   "_calc_sys_path_for_underpth_nositez0_pthFileTests._calc_sys_path_for_underpth_nosite{  sU    D47c>wwrww||J'EFHOOH%	 
 r   libpathimport_sitec                (   dg}t        j                  d            }t        dd|z        }|dk  r| j                  d|dd       |j	                  fd	t        |      D               |j	                  d
dg       |r|j                  d       |S )Nfake-path-namerc   r/  i0u  r   z Python stdlib path is too long (,z bytes)c              3   "   K   | ]  }  y wr   r   ).0_r  s     r   	<genexpr>z/_pthFileTests._get_pth_lines.<locals>.<genexpr>  s     =*<Q*<s   r   z	# commentzimport site)r   encodeminrf  extendranger  )r/   r  r  	pth_linesencoded_libpath_lengthrepetitionss    `    r   _get_pth_linesz_pthFileTests._get_pth_lines  s    %&	 "%W^^G%<!=#u(>>?!MM23I!2LGTV=%*<=="k*+]+r   c                 v   ddgt         j                  dd}| j                  |      }| j                  t        j                  j                  |      |      }t        j                  |ddddgd	d
      }|j                         j                  d      }| j                  |d       | j                  ||d       y )Nz#.z# ..r_   z..rH  rI  r   Cimport sys; print("\n".join(sys.path) if sys.flags.no_site else "")rc   rK  )re   rM  r   sys.flags.no_site was Falsesys.path is incorrect)r   r   r  r  r   dirnamer   check_outputrstripr2  r   r:   )r/   r  r  r$   outputactual_sys_paths         r   test_underpth_basicz!_pthFileTests.test_underpth_basic  s    68CHH8c848	,,Y7::GGOOH% (((D&$R*
$57 !--///5)FG#	
r   c                    t         j                  j                  }t        j                  j                  t        j                        }| j                  |d      }| j                  |      }| j                  t        j                  j                  |      |      }t        j                  j                         }d|d<   dj                  |t        j                  t        j                  d            |d<   t!        j"                  |ddg|d	d
      }|j%                         j'                  d      }| j)                  |d       | j+                  ||d       y )NFr  from-env
PYTHONPATHz{}{}{}PATHr   r  rc   rK  )r   re   rM  r   r  r  )r  r   
STDLIB_DIRr   r   r  r   r   r  r  r  r   r
   formatpathsepgetenvr   r  r  r2  r   r:   )	r/   r  
exe_prefixr  r  r$   r   r  r  s	            r   test_underpth_nosite_filez'_pthFileTests.test_underpth_nosite_file  s   ,,))WW__S^^4
''U'C	,,Y7::GGOOH% jjoo&Looj"**bii>OPF(((DR*
W->@ !--///5)FG#	
r   c                    t         j                  j                  }t        j                  j                  t        j                        }| j                  | j                  |d            }t        j                  j                  |      }t        j                  j                         }d|d<   dj                  |t        j                  d            |d<   t        j                  |ddt        j                  j!                  |d	      d
|d
t        j                  j!                  |d      dg|      }| j#                  |d       y )NTr  r  r  {};{}r  r   /import sys; sys.exit(not sys.flags.no_site and r   in sys.path and L not in sys.path and all("\r" not in p and "\n" not in p for p in sys.path))r   r  r  r   r  r   r   r  r   r   r  r  r   r
   r  r  r   r   r8   r   r/   r  r  r  r  r   r   s          r   test_underpth_filez _pthFileTests.test_underpth_file  s    ,,))WW__S^^4
,,T:<WW__X.
jjoo&LnnZ61BCF__h Z)9:Z4  	34r   c                    t         j                  j                  }t        j                  j                  t        j                        }| j                  | j                  |d      d      }t        j                  j                  |      }t        j                  j                         }d|d<   dj                  |t        j                  d            |d<   t        j                  |d	d
t        j                  j!                  |d      d|dt        j                  j!                  |d      dg|      }| j#                  |d       y )NTr  F)r  r  r  r  r  r   r  r  r  r  r   r  r  r  s          r   test_underpth_dll_filez$_pthFileTests.test_underpth_dll_file  s    ,,))WW__S^^4
,,T:E - KWW__X.
jjoo&LnnZ61BCF__h Z)9:Z4  	34r   N)T)r   r   r   r   r   r  r  r   boolr  r   r   r  r  r  r  r   r   r   r|  r|  W  s    
||w	(	c 4   !W  "
 #
$ !W  "
 #
. !W  "5 #5& !W  "5 #5r   r|  __main__)-r   test.supportr  r   r   r   r   test.support.os_helperr   r   rc  r  re  r   r   rx   r  r   r   r   r*   r  urllib.errorr3  urllib.requestr	   r
   flagsno_siter   r   r   r   r   r   r    TestCaser"   r   rW   r  rF  r|  r   mainr   r   r   <module>r     s      " & ( > 
   	 	 	    
      
 99
(

8
99  t+=B=8,, B=J
5(f 5(nP=H-- P=fGU** GURN5H%% N5b zHMMO r   