U
    ui                     @   s  d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
 dd Zdd	 Zd
d ZG dd dZejdddidddfddidddfi dddfi dddfgdd Zejd d!gd"d#dd$hfd!d%gd"d#dd$d&hfd'd(idd$d%d)hfi dd$d%d)hfgd*d+ Zejd,d-d.gd!gi fd-d/gd!gi fd0d1gdgddifd0d2gdgddifd3d4gd5d6gd7d8d9fd0d/gdd!gd:d;ifgd<d= ZdS )>    N)Path)expand)find_package_path)DistutilsOptionErrorc                 C   s<   |   D ].\}}|| }|jjddd |j|dd qd S )NT)exist_okparentszutf-8)encoding)itemsparentmkdir
write_text)filesroot_dirfilecontentpath r   G/tmp/pip-unpacked-wheel-9osl9suo/setuptools/tests/config/test_expand.pywrite_files   s    r   c                 C   sl   dddddddh}t dd	 |D |  d
ddg}||  tt||ksPttt|| |kshtd S )Nzdir1/dir2/dir3/file1.txtzdir1/dir2/file2.txtzdir1/file3.txtza.inizb.iniz
dir1/c.inizdir1/dir2/a.inic                 S   s   i | ]
}|d qS  r   .0kr   r   r   
<dictcomp>   s      z&test_glob_relative.<locals>.<dictcomp>z**/*.txtz[ab].*z**/[ac].ini)r   chdirsetr   Zglob_relativeAssertionError)tmp_pathmonkeypatchr   patternsr   r   r   test_glob_relative   s    


r!   c              
   C   s2  | d }| d j dd | d   dddd	}t|| tt|d
 }|j dd tddi| | z}|| tt	|dkst
d}tjt|d tdg W 5 Q R X d}tjt|d tdg W 5 Q R X W 5 Q R X tt	||dkst
tjt|d tdg| W 5 Q R X d S )Ndir_Z_dirT)r   a.txtabc)r#   z
dir1/b.txtzdir1/dir2/c.txtsecretszsecrets.txtzsecret keysza
b
czCannot access '.*\.\..a\.txt')matchz../a.txtzCannot access '.*secrets\.txt'z../dir_secrets/secrets.txt)r   touchr   r   strcontextr   r   Z
read_fileslistr   pytestZraisesr   )r   r   r"   r   r'   mZcannot_access_msgZcannot_access_secrets_msgr   r   r   test_read_files'   s(    


 r/   c                   @   sR   e Zd Zejddddgdd Zdd Zejdd	d
gdd Zdd Z	dS )TestReadAttrexamples'   __version__ = 'é'
raise SystemExit(1)
s?   # -*- coding: utf-8 -*-
__version__ = 'é'
raise SystemExit(1)
s?   # -*- coding: latin1 -*-
__version__ = ''
raise SystemExit(1)
c                 C   s(   |d  | tjd|ddks$td S )Nzmod.pyzmod.__version__r      é)write_bytesr   	read_attrr   )selfr1   r   r   r   r   test_read_attr_encoding_cookieE   s    z+TestReadAttr.test_read_attr_encoding_cookiec              	   C   s   dddd}t || | 2}|| tddks<ttddd	i}W 5 Q R X |d
 dksft|d dhksxttjd|ddksttddd	i|}|d dkstd S )Nr   zVERSION = '0.1.1'z@VALUES = {'a': 0, 'b': {42}, 'c': (0, 1, 1)}
raise SystemExit(1))pkg/__init__.pypkg/sub/__init__.pyzpkg/sub/mod.pypkg.sub.VERSION0.1.1zlib.mod.VALUESlibzpkg/subr$   r   r%   *   r2   r&   )r      r>   )r   r+   r   r   r5   r   )r6   r   r   r   r.   valuesr   r   r   test_read_attrS   s    


zTestReadAttr.test_read_attrz3VERSION: str
VERSION = '0.1.1'
raise SystemExit(1)
z+VERSION: str = '0.1.1'
raise SystemExit(1)
c                 C   s.   d|d}t || tjd|ddks*td S )Nr   )r8   r9   r:   r2   r;   r   r   r5   r   )r6   r   r1   r   r   r   r   test_read_annotated_attrk   s
    	
z%TestReadAttr.test_read_annotated_attrc                 C   s<   dddd}t || d}ddi}t|||dks8td	S )
a*  
        Sometimes the import machinery will import the parent package of a nested
        module, which triggers side-effects and might create problems (see issue #3176)

        ``read_attr`` should bypass these limitations by resolving modules statically
        (via ast.literal_eval).
        z1from .main import func
from .about import versionz2import super_complicated_dep
def func(): return 42zversion = '42')zsrc/pkg/__init__.pysrc/pkg/main.pyzsrc/pkg/about.pyzpkg.about.versionr   srcZ42NrA   )r6   r   r   Z	attr_descpackage_dirr   r   r   test_import_order{   s    	
zTestReadAttr.test_import_orderN)
__name__
__module____qualname__r-   markparametrizer7   r@   rB   rF   r   r   r   r   r0   D   s"   


	r0   z'package_dir, file, module, return_valuer   rD   rC   zpkg.mainr=   pkgr<   zlib/main.py   zsingle_module.pyZsingle_moduleF   zflat_layout/pkg.pyzflat_layout.pkgiD  c                 C   sP   |  tdi  |d| i}t|| t| d||}|  |ksLtd S )Nmodulesz,class Custom:
    def testing(self): return z.Custom)setattrsysr   r   Zresolve_classZtestingr   )r   r   rE   r   moduleZreturn_valuer   clsr   r   r   test_resolve_class   s
    

rT   z
args, pkgs.F)where
namespacesotherZdir1Zdir2rW   Tz	dir1.dir2c           	         s   dddh}t dd |D   i } |d|}|ddg}ttjf ||ksVt|D ] }t|| }tj	|sZtqZ fd	d
|
ddgD }ttjf d|i||kstd S )Nr8   zother/__init__.pyzdir1/dir2/__init__.pyc                 S   s   i | ]
}|d qS r   r   r   r   r   r   r      s      z&test_find_packages.<locals>.<dictcomp>)r   fill_package_dirrV   rU   c                    s&   g | ]}t  |  tjd qS )/)r*   resolvereplaceossep)r   pr   r   r   
<listcomp>   s   z&test_find_packages.<locals>.<listcomp>)r   getr   r   find_packagesr   r   r]   r   existspop)	r   argspkgsr   rE   kwargsrV   rL   pkg_pathr   r`   r   test_find_packages   s     
rj   z"files, where, expected_package_dirzpkg1/__init__.pyzpkg1/other.pyzpkg2/__init__.pyzsrc/pkg1/__init__.pyzsrc/pkg1/other.pyzsrc/pkg2/__init__.pyzsrc1/pkg1/__init__.pyzsrc2/pkg2/__init__.pyZsrc1Zsrc2z	src1/pkg1z	src2/pkg2)pkg1Zpkg2rk   zsrc/pkg1c           	      C   s~   t dd |D |  i }| |dd}tjf d|i|}t| t| ksTt|D ] }t||| }tj	|sXtqXd S )Nc                 S   s   i | ]
}|d qS r   r   r   r   r   r   r      s      z)test_fill_package_dir.<locals>.<dictcomp>F)r   rY   rW   rV   )
r   r   rc   r   r	   r   r   r]   r   rd   )	r   r   rV   Zexpected_package_dirZpkg_dirrh   rg   rL   ri   r   r   r   test_fill_package_dir   s    rl   )r]   rQ   pathlibr   r-   Zsetuptools.configr   Zsetuptools.discoveryr   distutils.errorsr   r   r!   r/   r0   rJ   rK   rT   rj   rl   r   r   r   r   <module>   sZ   K

	
	
