o
    LK&h4                     @   s   d 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mZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZ ddlZejddd	d
 Zej !dG dd dZ"dS )zTests for distutils.util.    N)copy)	sysconfigutil)DistutilsByteCompileErrorDistutilsPlatformError)
byte_compilechange_rootcheck_environconvert_pathget_host_platformget_platformgrok_environment_errorrfc822_escapesplit_quoted	strtoboolT)autousec                 C   s   |  tdtj |  tdtj |  tdtj |  tdtj |  tjdtjj |  tjdtjj	 |  tjdtjj
 |  tdttj d S )	Nnameplatformversionsepjoinisabs
splitdrive_config_vars)setattrosr   sysr   r   r   pathr   r   r   r   r   r   )monkeypatch r   X/var/www/html/venv/lib/python3.10/site-packages/setuptools/_distutils/tests/test_util.pyenvironment   s   r!   save_envc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	
ddd Zdd Zdd ZdZej	ddde de de fdde dfddde de de d e fgd!d" Zd#d$ Zd%d& Zd'S )(TestUtilc              	   C   s   t ddB t dd t dksJ W d    n1 sw   Y  t dd t dks2J W d    n1 s<w   Y  W d    n1 sKw   Y  t dd	 t t ks`J W d    d S 1 skw   Y  d S )
Nos.namentzsys.versionz... [... (ARM64)]	win-arm64z... [... (ARM)]	win-arm32zsys.version_info)   	   r   finalr   )mockpatchr   stdlib_sysconfigr   selfr   r   r    test_get_host_platform-   s   "zTestUtil.test_get_host_platformc              	   C   sB  t dd t jdddi t dksJ W d    n1 s"w   Y  t jdddi t dks8J W d    n1 sBw   Y  t jddd	i t d
ksXJ W d    n1 sbw   Y  t jdddi t dksxJ W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr$   r%   z
os.environVSCMD_ARG_TGT_ARCHx86win32x64z	win-amd64armr'   arm64r&   )r+   r,   dictr   r.   r   r   r    test_get_platform7   s    "zTestUtil.test_get_platformc                 C   sH   t jd}td|ksJ ttd|ksJ tdt jks"J d S )N) hometomystuffz/home/to/my/stuff.)r   r   r   r
   pathlibPathcurdir)r/   expectedr   r   r    test_convert_pathB   s   zTestUtil.test_convert_pathc                 C   s   dt _dd }|t j_dd }|t j_tdddksJ tdd	d
ks%J dt _dt _dd }|t j_dd }|t j_dd }|t j_tdddksLJ tdddksUJ dt _t	t
 tdd W d    d S 1 snw   Y  d S )Nposixc                 S   s   | d dkS )Nr   /r   r   r   r   r    _isabsL   s   z)TestUtil.test_change_root.<locals>._isabsc                  W   
   d | S )NrE   r   rF   r   r   r    _joinQ      
z(TestUtil.test_change_root.<locals>._joinz/rootz/old/its/herez/root/old/its/herezits/herez/root/its/herer%   \c                 S   s
   |  dS )Nzc:\)
startswithrF   r   r   r    rG   ]   rK   c                 S   s"   |  drd| ddfS d| fS )Nzc:r9   )rM   replacerF   r   r   r    _splitdriveb   s   
z.TestUtil.test_change_root.<locals>._splitdrivec                  W   rH   )NrL   rI   rF   r   r   r    rJ   i   rK   zc:\rootzc:\old\its\herezc:\root\old\its\herezits\herezc:\root\its\here	BugsBunny)r   r   r   r   r   r   r   r   pytestraisesr   )r/   rG   rJ   rO   r   r   r    test_change_rootH   s*   "zTestUtil.test_change_rootc                 C   s6   t j  tjdd  t  tjd t ksJ d S )NHOMEPLAT)r   r	   cache_clearr   environpopr   r.   r   r   r    test_check_environz   s   
zTestUtil.test_check_environzos.name != 'posix'c                 C   s   t j  tjdd  dd l}|d}tj	j
|d|d t  tjd dks+J W d    n1 s5w   Y  t j  tjdd  tj	j
|dtd t  dtjvsZJ W d    d S 1 sew   Y  d S )NrT   r   )NNNNN/home/distutilsNgetpwuid)return_valuerZ   )side_effect)r   r	   rV   r   rW   rX   pwdstruct_passwdr+   r,   objectKeyError)r/   r^   resultr   r   r    test_check_environ_getpwuid   s   

	
"z$TestUtil.test_check_environ_getpwuidc                 C   s   t dg dks
J d S )Nz""one"" "two" 'three' \four)onetwothreefour)r   r.   r   r   r    test_split_quoted   s   zTestUtil.test_split_quotedc                 C   s8   d}d}|D ]}t |sJ q|D ]}t |rJ qd S )N)
yYyesTruettruerl   Onon1)	nnoffalseoff0OffNoN)r   )r/   rk   rs   ri   rr   r   r   r    test_strtobool   s   zTestUtil.test_strtoboolz        zgiven,wantedzhello
world
zhello
zworld
zhelloworldzhelloworld)r9   r9   zI am a
poor
lonesome
header
zI am a
zpoor
z	lonesome
zheader
c           
      C   s   t |}tjjdddd}t (}d| d}t|}tjj||d	| |
d t|}W d   n1 s<w   Y  ||fD ]"}	|	 d	ksOJ |	d
 dksWJ t|	d  t| ksgJ qE||ksnJ dS )a{  
        We want to ensure a multi-line header parses correctly.

        For interoperability, the escaped value should also "round-trip" over
        `email.generator.Generator.flatten` and `email.message_from_*`
        (see pypa/setuptools#4033).

        The main issue is that internally `email.policy.EmailPolicy` uses
        `splitlines` which will split on some control chars. If all the new lines
        are not prefixed with spaces, the parser will interrupt reading
        the current header and produce an incomplete value, while
        incorrectly interpreting the rest of the headers as part of the payload.
        TFr   )utf8mangle_from_max_line_lengthzheader: z
other-header: 42

payload
)policyNzpayload
zother-header42header)r   emailr   EmailPolicyioStringIOmessage_from_string	generator	Generatorflattenseekmessage_from_fileget_payloadset
splitlines)
r/   givenwantedresr   bufferraworigregenmsgr   r   r    test_rfc822_escape   s$   


"zTestUtil.test_rfc822_escapec                 C   s`   t j}dt _z%tt tg  W d    n1 sw   Y  W |t _d S W |t _d S |t _w )NT)r   dont_write_bytecoderQ   rR   r   r   )r/   old_dont_write_bytecoder   r   r    test_dont_write_bytecode   s   

z!TestUtil.test_dont_write_bytecodec                 C   s    t d}t|}|dksJ d S )NzUnable to find batch filez error: Unable to find batch file)OSErrorr   )r/   excr   r   r   r    test_grok_environment_error   s   z$TestUtil.test_grok_environment_errorN)__name__
__module____qualname__r0   r8   rC   rS   rY   rQ   markskipifrc   rh   r{   indentparametrizer   r   r   r   r   r   r    r#   +   s0    
2



$r#   )#__doc__r   email.generatoremail.policyr   r   r?   r   r   r-   unittest.mockr+   r   	distutilsr   distutils.errorsr   r   distutils.utilr   r   r	   r
   r   r   r   r   r   r   rQ   fixturer!   r   usefixturesr#   r   r   r   r    <module>   s&    0


