U
    f"                     @   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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mZ ddlmZ ddlmZ ejdd	d
d Zdd Zejjeed ddZG dd dZG dd dZejdd Zdd Zdd Z ejdd Z!dd Z"ejj#ddd d! Z$d"d# Z%d$d% Z&dS )&z"Tests for the 'setuptools' package    N)DistutilsSetupError)	Extension)ZipFile)Require)VersionT)Zautousec                 c   s
   d V  d S N )Z
tmpdir_cwdr   r   ?lib/python3.8/site-packages/setuptools/tests/test_setuptools.pyisolated_dir   s    r
   c                  K   s6   dt j_| ddg ztjf | W S dt j_X dS )zDReturn distribution from 'setup(**args)', without executing commandsZcommandlineZscript_argsZinstallN)	distutilscoreZ_setup_stop_after
setdefault
setuptoolsZsetup)argsr   r   r	   	makeSetup   s
    r   get_module_constantzbytecode support not available)reasonc                   @   s@   e Zd Zdd Zdd Zedd Zedd Zed	d
 ZdS )TestDependsc                 C   sx   t tdsd S dd }|j}t|ddd ks2tt|dddksHtt|dddks^tt|d	dd ksttd S )
Nextract_constantc                   S   s   da tad S )Ntest)xzyr   r   r   r	   f15   s    z(TestDepends.testExtractConst.<locals>.f1qr   r   r   r   )hasattrdep__code__r   AssertionError)selfr   Zfcr   r   r	   testExtractConst0   s    
zTestDepends.testExtractConstc              	   C   s\   t t td W 5 Q R X t t td W 5 Q R X td\}}}|  d S )Nzno-such.-thingzsetuptools.non-existentzsetuptools.tests)pytestraisesImportErrorr   find_moduleclose)r    fpir   r   r	   testFindModuleH   s    zTestDepends.testFindModulec                 C   sN   ddl m} tdd|ks ttddtjks6ttddtksJtd S )	Nr   __version__jsonr,   sysversionz setuptools.tests.test_setuptools__doc__)r-   r,   r   r   r   r.   r/   r0   )r    r,   r   r   r	   testModuleExtractP   s    
zTestDepends.testModuleExtractc                 C   s   t ddd}|jdkst|jdks(t|jtdks:t|jdksHt| dksXtddlm	} t
| |ksxt|dst|d	rt|d
rt| st| stt ddd}| rt| rtd S )NZJsonz1.0.3r-   r,   z
Json-1.0.3r   r+   z1.0.9z0.9.1unknownzDo-what-I-meanz1.0zd-w-i-m)r   namer   modulerequested_versionr   	attribute	full_namer-   r,   strZget_versionZ
version_ok
is_present
is_current)r    reqr,   r   r   r	   testRequire[   s     zTestDepends.testRequirec                 C   s   t dd ddd}|jd kst|jd ks,t|jd ks:t| dksJt|jdksXtddlm} dd |D }|	|st|
|std S )	NZTestsZtestszhttp://example.com)homepager   )__path__c                 S   s   g | ]}t j|qS r   )ospathdirname).0r(   r   r   r	   
<listcomp>   s     z4TestDepends.test_require_present.<locals>.<listcomp>)r   formatr   r6   r5   r7   r=   Zsetuptools.testsr>   r9   r:   )r    r;   r>   pathsr   r   r	   test_require_presents   s    z TestDepends.test_require_presentN)	__name__
__module____qualname__r!   r*   needs_bytecoder1   r<   rF   r   r   r   r	   r   /   s   


r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )
TestDistroc                 C   sH   t ddg| _t ddg| _tddddd	gd
dg| j| jfi d| _d S )Nzbar.extzbar.czc.yzy.caza.bza.b.cbczb.dr   )packages
py_modulesext_modulespackage_dir)r   e1e2r   dist)r    methodr   r   r	   setup_method   s    
zTestDistro.setup_methodc                 C   s   t | jtjjstd S r   )
isinstancerU   r   ZDistributionr   r    r   r   r	   testDistroType   s    zTestDistro.testDistroTypec                 C   s   | j d | j jddgks t| j d | j jdgks>t| j jdgksPt| j j| j| jgksht| j d | j jg kst| j jdgkst| j j| jgkstt d d S )NrL   rM   rN   r   )	rU   exclude_packagerO   r   rP   rQ   rS   rT   r   rY   r   r   r	   testExcludePackage   s    zTestDistro.testExcludePackagec                 C   s~   | j j| jgd | j j| jgks&t| j j| jgd | j j| j| jgksPt| j j| jgd | j j| j| jgksztd S )NrQ   )rU   excluderS   rQ   rT   r   includerY   r   r   r	   testIncludeExclude   s    zTestDistro.testIncludeExcludec                 C   sN   | j jdddgd | j jg ks$t| j jdgks6t| j j| jgksJtd S )NrN   rM   rL   rO   r   )rU   r^   rO   r   rP   rQ   rS   rY   r   r   r	   testExcludePackages   s    zTestDistro.testExcludePackagesc                 C   s@   t  }|jdgdg| jgd t  }|jdgdg| jgd d S )NrL   rM   )rO   rP   rQ   )r   r_   rT   r^   )r    rU   r   r   r	   	testEmpty   s    zTestDistro.testEmptyc                 C   s   | j dst| j d | j dr,t| j ds<t| j d | j drXt| j dsht| j d | j drtd S )NrL   rM   rN   )rU   Zhas_contents_forr   r[   rY   r   r   r	   testContents   s    zTestDistro.testContentsc              	   C   s8  t t | jjdd W 5 Q R X t t | jjdd W 5 Q R X t t | jjddid W 5 Q R X t t | jjddid W 5 Q R X t t | jjddid W 5 Q R X t t | jjddid W 5 Q R X t t | jjdgd W 5 Q R X t t | jjdgd W 5 Q R X d S )Nr   )Znonexistent_optionr   ra   r]   r   )rR   )r"   r#   r   rU   r_   r^   rY   r   r   r	   testInvalidIncludeExclude   s     z$TestDistro.testInvalidIncludeExcludeN)rG   rH   rI   rW   rZ   r\   r`   rb   rc   rd   re   r   r   r   r	   rK      s   rK   c                 C   s*   |  d | d d | d d | S )Nfoo
foo/bar.py 
readme.txt)mkdirwrite)tmpdirr   r   r	   example_source   s    
rm   c                    s<   t tt }ddg} fdd|D }||ks8td S )Nri   rg   c                    s   g | ]}  |qS r   )join)rB   fnrm   r   r	   rC      s     z test_findall.<locals>.<listcomp>)listr   findallr8   r   rm   foundZexpectedr   rp   r	   test_findall   s    ru   c              	   C   sB   |    tt }W 5 Q R X dtjddg}||ks>td S )Nri   rf   zbar.py)as_cwdrq   r   rr   r?   r@   rn   r   rs   r   r   r	   test_findall_curdir   s    
rw   c              
   C   sL   d}d}zt || W n$ tttfk
r<   td Y nX t | dS )z/
    Skip if cannot create a symbolic link
    linktargetzCannot create symbolic linksN)r?   symlinkOSErrorNotImplementedErrorAttributeErrorr"   skipremove)rl   Zlink_fnZ	target_fnr   r   r	   can_symlink   s    r   c              	   C   s<   |   * tdd tt }|g ks.tW 5 Q R X d S )Nrf   Zbar)rv   r?   rz   rq   r   rr   r   )rl   r   rt   r   r   r	   test_findall_missing_symlink  s    
r   z$unable to exclude tests; #4475 #3260c              	   C   s@   t | }dd | D }W 5 Q R X |D ]}d|ks*tq*d S )Nc                 S   s   g | ]}| tjd qS /replacer?   seprB   r'   r   r   r	   rC     s     z=test_its_own_wheel_does_not_contain_tests.<locals>.<listcomp>z/tests/)r   namelistr   )setuptools_wheelzipfilecontentsmemberr   r   r	   )test_its_own_wheel_does_not_contain_tests  s    
r   c              	   C   s@   t | }dd | D }W 5 Q R X tdd |D s<td S )Nc                 S   s   g | ]}| tjd qS r   r   r   r   r   r	   rC     s     z3test_wheel_includes_cli_scripts.<locals>.<listcomp>c                 s   s   | ]}d |kV  qdS )z
cli-64.exeNr   rB   r   r   r   r	   	<genexpr>  s     z2test_wheel_includes_cli_scripts.<locals>.<genexpr>r   r   anyr   r   r   r   r   r   r	   test_wheel_includes_cli_scripts  s    
r   c              	   C   s@   t | }dd | D }W 5 Q R X tdd |D s<td S )Nc                 S   s   g | ]}| tjd qS r   r   r   r   r   r	   rC     s     z9test_wheel_includes_vendored_metadata.<locals>.<listcomp>c                 s   s   | ]}t d |V  qdS )z_vendor/.*\.dist-info/METADATAN)researchr   r   r   r	   r     s    z8test_wheel_includes_vendored_metadata.<locals>.<genexpr>r   r   r   r   r	   %test_wheel_includes_vendored_metadata  s
    
r   )'r0   r   r.   r?   Zdistutils.corer   Zdistutils.cmdZdistutils.errorsr   r   r   r   r"   r   Zsetuptools.distZsetuptools.dependsZdependsr   r   Zpackaging.versionr   Zfixturer
   r   ZmarkZskipifr   rJ   r   rK   rm   ru   rw   r   r   Zxfailr   r   r   r   r   r   r	   <module>   sD   


WZ


