B
    '(b5                 @   s6  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mZmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZ d dlmZ G dd deZeed	d
dZee ee	eee f  dddZeee	eef dddZeeee	eee f  dddZee eeee	eee f  dddZG dd dejZdS )    N)ListOptionalSetTuple)InvalidSourceListSourceFindercreate_source_list)FileSystemCache)Options)BuildSourcec               @   sd   e Zd Zee ddddZeedddZeedd	d
Zee	e dddZ
eedddZdS )FakeFSCacheN)filesreturnc             C   s   dd |D | _ d S )Nc             S   s   h | ]}t j|qS  )ospathabspath).0fr   r   J/home/dcms/DCMS/lib/python3.7/site-packages/mypy/test/test_find_sources.py	<setcomp>   s    z'FakeFSCache.__init__.<locals>.<setcomp>)r   )selfr   r   r   r   __init__   s    zFakeFSCache.__init__)filer   c             C   s
   || j kS )N)r   )r   r   r   r   r   isfile   s    zFakeFSCache.isfile)dirr   c                s.     tjs tj7  t fdd| jD S )Nc             3   s   | ]}|  V  qd S )N)
startswith)r   r   )r   r   r   	<genexpr>   s    z$FakeFSCache.isdir.<locals>.<genexpr>)endswithr   sepanyr   )r   r   r   )r   r   isdir   s    
zFakeFSCache.isdirc                s.     tjs tj7  t fdd| jD S )Nc                s2   h | ]*}|  r|t d  tjd qS )Nr   )r   lensplitr   r   )r   r   )r   r   r   r      s    z&FakeFSCache.listdir.<locals>.<setcomp>)r   r   r   listr   )r   r   r   )r   r   listdir   s    
zFakeFSCache.listdirc             C   s   dS )NFr   )r   r   r   r   r   init_under_package_root   s    z#FakeFSCache.init_under_package_root)__name__
__module____qualname__r   strr   boolr   r!   r   r%   r&   r   r   r   r   r      s
   r   )r   r   c             C   s"   t j| d } | t jd} | S )N   /)r   r   
splitdrivereplacer   )r   r   r   r   normalise_path#   s    r0   )sourcesr   c             C   s   t dd | D S )Nc             s   s,   | ]$}|j |jd k	rt|jnd fV  qd S )N)modulebase_dirr0   )r   sr   r   r   r   +   s   z.normalise_build_source_list.<locals>.<genexpr>)sorted)r1   r   r   r   normalise_build_source_list)   s    r6   )finderr   r   c             C   s   |  |\}}|t|fS )N)Zcrawl_upr0   )r7   r   r2   r3   r   r   r   crawl0   s    r8   c             C   s   t | tj|S )N)r6   find_sources_in_dirr   r   r   )r7   r   r   r   r   r9   5   s    r9   )pathsoptionsfscacher   c             C   s   dd | D } t t| ||S )Nc             S   s   g | ]}t j|qS r   )r   r   r   )r   pr   r   r   
<listcomp><   s    z find_sources.<locals>.<listcomp>)r6   r   )r:   r;   r<   r   r   r   find_sources9   s    r?   c               @   s   e Zd ZddddZddddZddddZddd	d
ZddddZddddZddddZ	ddddZ
ddddZddddZddddZdS )SourceFinderSuiteN)r   c             C   s$   t  | _t | _t| j d S )N)tempfilemkdtemptempdirr   getcwdoldcwdchdir)r   r   r   r   setUpA   s    

zSourceFinderSuite.setUpc             C   s   t | j t| j d S )N)r   rF   rE   shutilrmtreerC   )r   r   r   r   tearDownF   s    zSourceFinderSuite.tearDownc             C   s
  t  }d|_ttdh|}t|ddks.tttdh|}t|ddksPtttdh|}t|ddksrtttddh|}t|dd	kstttd
dh|}t|d
dkstttddh|}t|ddkstttdddh|}t|ddkstd S )NFz	/setup.py)setupr-   z/a/setup.py)rK   z/az/a/b/setup.py)rK   z/a/bz/a/__init__.py)za.setupr-   z/a/invalid-name/setup.py)rK   z/a/invalid-namez/a/b/c/setup.pyz/a/b/c/__init__.py)zc.setupz/a/b)r
   namespace_packagesr   r   r8   AssertionError)r   r;   r7   r   r   r   test_crawl_no_namespaceJ   s(    
z)SourceFinderSuite.test_crawl_no_namespacec             C   s
  t  }d|_ttdh|}t|ddks.tttdh|}t|ddksPtttdh|}t|ddksrtttddh|}t|dd	kstttd
dh|}t|d
dkstttddh|}t|ddkstttdddh|}t|ddkstd S )NTz	/setup.py)rK   r-   z/a/setup.py)rK   z/az/a/b/setup.py)rK   z/a/bz/a/__init__.py)za.setupr-   z/a/invalid-name/setup.py)rK   z/a/invalid-name)z	a.b.setupr-   z/a/b/c/setup.pyz/a/b/c/__init__.py)za.b.c.setupr-   )r
   rL   r   r   r8   rM   )r   r;   r7   r   r   r   test_crawl_namespacei   s(    
z&SourceFinderSuite.test_crawl_namespacec             C   s  t  }d|_d|_ttdh|}t|ddks4tttdh|}t|ddksVtttdh|}t|ddksxtttddh|}t|dd	kstttd
dh|}t|d
dkstttddh|}t|ddkstttdddh|}t|ddkstdg|_ttdh|}t|ddks8tttdddh|}t|ddks`tddg|_ttdh|}t|ddkstd S )NTz	/setup.py)rK   r-   z/a/setup.py)rK   z/az/a/b/setup.py)rK   z/a/bz/a/__init__.py)za.setupr-   z/a/invalid-name/setup.py)rK   z/a/invalid-name)z	a.b.setupr-   z/a/b/c/setup.pyz/a/b/c/__init__.py)za.b.c.setupr-   z/a/b)zc.setupz/a/bz/a/b/c)rK   z/a/b/c)r
   rL   explicit_package_basesr   r   r8   rM   	mypy_path)r   r;   r7   r   r   r   "test_crawl_namespace_explicit_base   s>    

z4SourceFinderSuite.test_crawl_namespace_explicit_basec             C   sV   t  }d|_d|_ddg|_ttddh|}t|ddks@tt|ddksRtd S )NTz/az/bz/a/pkg/a.pyz/b/pkg/b.py)zpkg.az/a)zpkg.bz/b)r
   rL   rP   rQ   r   r   r8   rM   )r   r;   r7   r   r   r   test_crawl_namespace_multi_dir   s    
z0SourceFinderSuite.test_crawl_namespace_multi_dirc             C   sH   t  }d|_dddddh}tt||}t|ddd	d
ddgksDtd S )NFz/pkg/a1/b/c/d/e.pyz/pkg/a1/b/f.pyz/pkg/a2/__init__.pyz/pkg/a2/b/c/d/e.pyz/pkg/a2/b/f.pyr-   )a2z/pkg)ez/pkg/a1/b/c/d)rU   z/pkg/a2/b/c/d)r   z	/pkg/a1/b)r   z	/pkg/a2/b)r
   rL   r   r   r9   rM   )r   r;   r   r7   r   r   r   %test_find_sources_in_dir_no_namespace   s    z7SourceFinderSuite.test_find_sources_in_dir_no_namespacec             C   sH   t  }d|_dddddh}tt||}t|ddd	d
ddgksDtd S )NTz/pkg/a1/b/c/d/e.pyz/pkg/a1/b/f.pyz/pkg/a2/__init__.pyz/pkg/a2/b/c/d/e.pyz/pkg/a2/b/f.pyr-   )rT   z/pkg)z
a2.b.c.d.ez/pkg)za2.b.fz/pkg)rU   z/pkg/a1/b/c/d)r   z	/pkg/a1/b)r
   rL   r   r   r9   rM   )r   r;   r   r7   r   r   r   "test_find_sources_in_dir_namespace   s    z4SourceFinderSuite.test_find_sources_in_dir_namespacec             C   s   t  }d|_d|_dg|_dddddh}tt||}t|ddd	d
ddgksRtdg|_tt||}t|ddddddgkstd S )NTr-   z/pkg/a1/b/c/d/e.pyz/pkg/a1/b/f.pyz/pkg/a2/__init__.pyz/pkg/a2/b/c/d/e.pyz/pkg/a2/b/f.py)zpkg.a1.b.c.d.er-   )z
pkg.a1.b.fr-   )zpkg.a2r-   )zpkg.a2.b.c.d.er-   )z
pkg.a2.b.fr-   z/pkg)z
a1.b.c.d.ez/pkg)za1.b.fz/pkg)rT   z/pkg)z
a2.b.c.d.ez/pkg)za2.b.fz/pkg)r
   rL   rP   rQ   r   r   r9   rM   )r   r;   r   r7   r   r   r   0test_find_sources_in_dir_namespace_explicit_base   s0    zBSourceFinderSuite.test_find_sources_in_dir_namespace_explicit_basec             C   sH   t  }d|_d|_ddg|_ttddh|}t|dddgksDtd S )	NTz/az/bz/a/pkg/a.pyz/b/pkg/b.pyr-   )zpkg.az/a)zpkg.bz/b)r
   rL   rP   rQ   r   r   r9   rM   )r   r;   r7   r   r   r   ,test_find_sources_in_dir_namespace_multi_dir
  s    
z>SourceFinderSuite.test_find_sources_in_dir_namespace_multi_dirc       	   
   C   sP  t  }d|_xdD ]}tdd| dh}tdg||dgksBttt tdg|| W d Q R X td| g||dd| fgksttd| dg||dd| fgkstqW d	d
dddh}dg|_t|}tdg||dddgksttd
g||dgksttdg||dgks*tdg|_t|}tdg||dddgksXttt tdg|| W d Q R X tt tdg|| W d Q R X tt tdg|| W d Q R X dg|_tdg||ddgkstdg|_t|}tdg||dddgksttt tdg|| W d Q R X xJdgddgddggD ]2}||_t|}tdg||dddgksPtqPW dg|_t|}tdg||dddgkstdddd d!d"d#d$g}d%	|g}xv||gD ]j}||_t|}t
tdg||t
|kstd&d'd(d)d*h}t|}t
td+g||t
|kstqW d S ),NT)zsite-packagesz	.whateverZnode_modulesz.x/.zz	/dir/a.pyz
/dir/venv/z/b.pyr-   )az/dirbz/pkg/a1/b/c/d/e.pyz/pkg/a1/b/f.pyz/pkg/a2/__init__.pyz/pkg/a2/b/c/d/e.pyz/pkg/a2/b/f.pyz/f\.py$)rT   z/pkg)z
a2.b.c.d.ez/pkg)rU   z/pkg/a1/b/c/d)r   z	/pkg/a1/b)za2.b.fz/pkgz/a1/z/pkg/a1z/pkg/a1/z	/pkg/a1/bz/a1/$z	/(a1|a3)/Za1a3zb/c/z/pkg/a/z/2z/1z/pk/z/kgz/g.pyz/bcz#/xxx/pkg/a2/b/f.pyxxx/pkg/a2/b/f.py|zpkg/a1/b/c/d/e.pyzpkg/a1/b/f.pyzpkg/a2/__init__.pyzpkg/a2/b/c/d/e.pyzpkg/a2/b/f.py.)r
   rL   r   r?   rM   pytestZraisesr   excludejoinr"   )	r   r;   Zexcluded_dirr<   r   ZorredZbig_exclude1Zbig_exclude2Zbig_excluder   r   r   test_find_sources_exclude  s    
 z+SourceFinderSuite.test_find_sources_exclude)r'   r(   r)   rG   rJ   rN   rO   rR   rS   rV   rW   rX   rY   rb   r   r   r   r   r@   @   s   0
 	r@   )r   r_   rH   rA   Zunittesttypingr   r   r   r   Zmypy.find_sourcesr   r   r   Zmypy.fscacher	   Zmypy.optionsr
   Zmypy.modulefinderr   r   r*   r0   r6   r8   r9   r?   ZTestCaser@   r   r   r   r   <module>   s"   $"
