o
    2gt5                     @  s   d dl 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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d%ddZd&ddZd'ddZd(ddZd)d!d"ZG d#d$ d$ejZdS )*    )annotationsN)InvalidSourceListSourceFindercreate_source_list)FileSystemCache)BuildSource)Optionsc                   @  s>   e Zd ZdddZdd
dZdddZdddZdddZdS )FakeFSCachefilesset[str]returnNonec                 C  s   dd |D | _ d S )Nc                 S  s   h | ]}t j|qS  ospathabspath.0fr   r   S/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/test/test_find_sources.py	<setcomp>       z'FakeFSCache.__init__.<locals>.<setcomp>r
   )selfr
   r   r   r   __init__   s   zFakeFSCache.__init__filestrboolc                 C  s
   || j v S Nr   r   r   r   r   r   isfile   s   
zFakeFSCache.isfiledirc                   .     tjs tj7  t fdd| jD S )Nc                 3  s    | ]}|  V  qd S r   )
startswithr   r"   r   r   	<genexpr>   s    z$FakeFSCache.isdir.<locals>.<genexpr>)endswithr   sepanyr
   r   r"   r   r%   r   isdir      
zFakeFSCache.isdir	list[str]c                   r#   )Nc                   s2   h | ]}|  r|t d  tjd qS )Nr   )r$   lensplitr   r(   r   r%   r   r   r      s   2 z&FakeFSCache.listdir.<locals>.<setcomp>)r'   r   r(   listr
   r*   r   r%   r   listdir   r,   zFakeFSCache.listdirc                 C  s   dS )NFr   r    r   r   r   init_under_package_root!   s   z#FakeFSCache.init_under_package_rootN)r
   r   r   r   )r   r   r   r   )r"   r   r   r   )r"   r   r   r-   )__name__
__module____qualname__r   r!   r+   r1   r2   r   r   r   r   r	      s    



r	   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   r:   sourceslist[BuildSource]list[tuple[str, str | None]]c                 C  s   t dd | D S )Nc                 s  s.    | ]}|j |jd urt|jnd fV  qd S r   )modulebase_dirr:   )r   sr   r   r   r&   ,   s
    
z.normalise_build_source_list.<locals>.<genexpr>)sorted)r;   r   r   r   normalise_build_source_list+   s   rB   finderr   r   tuple[str, str]c                 C  s   |  |\}}|t|fS r   )crawl_upr:   )rC   r   r>   r?   r   r   r   crawl2   s   rF   c                 C  s   t | tj|S r   )rB   find_sources_in_dirr   r   r   )rC   r   r   r   r   rG   7   s   rG   pathsr-   optionsr   fscacher   c                 C  s   dd | D } t t| ||S )Nc                 S  s   g | ]}t j|qS r   r   )r   pr   r   r   
<listcomp>>   r   z find_sources.<locals>.<listcomp>)rB   r   )rH   rI   rJ   r   r   r   find_sources;   s   rM   c                   @  sz   e Zd ZdddZdddZdddZdd	d
ZdddZdddZdddZ	dddZ
dddZdddZdddZdS )SourceFinderSuiter   r   c                 C  s$   t  | _t | _t| j d S r   )tempfilemkdtemptempdirr   getcwdoldcwdchdirr   r   r   r   setUpC   s   

zSourceFinderSuite.setUpc                 C  s   t | j t| j d S r   )r   rT   rS   shutilrmtreerQ   rU   r   r   r   tearDownH   s   zSourceFinderSuite.tearDownc                 C  s  t  }d|_ttdh|}t|ddksJ ttdh|}t|ddks(J ttdh|}t|ddks9J ttddh|}t|dd	ksKJ ttd
dh|}t|d
dks]J ttddh|}t|ddksoJ tth d|}t|ddksJ d S )NF	/setup.pysetupr7   /a/setup.pyr\   /a/a/b/setup.pyr\   /a/b/a/__init__.pyza.setupr7   /a/invalid-name/setup.pyr\   z/a/invalid-name   /a/b/c/__init__.pyrc   /a/b/c/setup.pyri   zc.setuprb   r   namespace_packagesr   r	   rF   r   rI   rC   r   r   r   test_crawl_no_namespaceL   $   z)SourceFinderSuite.test_crawl_no_namespacec                 C  s  t  }d|_ttdh|}t|ddksJ ttdh|}t|ddks(J ttdh|}t|ddks9J ttddh|}t|dd	ksKJ ttd
dh|}t|d
dks]J ttddh|}t|ddksoJ tth d|}t|ddksJ d S )NTrZ   r[   r]   r^   r`   ra   rc   rd   re   rf   z	a.b.setupr7   rg   ri   za.b.c.setupr7   rk   rm   r   r   r   test_crawl_namespaceg   ro   z&SourceFinderSuite.test_crawl_namespacec                 C  s  t  }d|_d|_ttdh|}t|ddksJ ttdh|}t|ddks+J ttdh|}t|ddks<J ttddh|}t|dd	ksNJ ttd
dh|}t|d
dks`J ttddh|}t|ddksrJ tth d|}t|ddksJ dg|_ttdh|}t|ddksJ tth d|}t|ddksJ ddg|_ttdh|}t|ddksJ d S )NTrZ   r[   r]   r^   r`   ra   rc   rd   re   rf   rp   rg   ri   rq   rb   rj   /a/b/c)r\   rs   )r   rl   explicit_package_basesr   r	   rF   	mypy_pathrm   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 J t|ddks)J d S )NTr_   /b/a/pkg/a.py/b/pkg/b.pyzpkg.ar_   zpkg.brw   )r   rl   rt   ru   r   r	   rF   rm   r   r   r   test_crawl_namespace_multi_dir   s   
z0SourceFinderSuite.test_crawl_namespace_multi_dirc                 C  <   t  }d|_h d}tt||}t|dg dksJ d S )NF   /pkg/a1/b/c/d/e.py/pkg/a2/b/c/d/e.py/pkg/a2/__init__.py/pkg/a1/b/f.py/pkg/a2/b/f.pyr7   )a2/pkgez/pkg/a1/b/c/d)r   z/pkg/a2/b/c/dr   	/pkg/a1/b)r   z	/pkg/a2/br   rl   r   r	   rG   r   rI   r
   rC   r   r   r   %test_find_sources_in_dir_no_namespace   
   z7SourceFinderSuite.test_find_sources_in_dir_no_namespacec                 C  r}   )NTr~   r7   )r   z
a2.b.c.d.er   za2.b.fr   r   r   r   r   r   r   r   "test_find_sources_in_dir_namespace   r   z4SourceFinderSuite.test_find_sources_in_dir_namespacec                 C  sv   t  }d|_d|_dg|_h d}tt||}t|dg dks#J dg|_tt||}t|dg dks9J d S )NTr7   r~   ))zpkg.a1.b.c.d.er7   )z
pkg.a1.b.fr7   )zpkg.a2r7   )zpkg.a2.b.c.d.er7   )z
pkg.a2.b.fr7   r   ))z
a1.b.c.d.er   )za1.b.fr   r   r   r   r   rl   rt   ru   r   r	   rG   r   r   r   r   0test_find_sources_in_dir_namespace_explicit_base   s   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s"J d S )	NTr_   rw   rx   ry   r7   rz   r{   r   rm   r   r   r   ,test_find_sources_in_dir_namespace_multi_dir   s   
z>SourceFinderSuite.test_find_sources_in_dir_namespace_multi_dirc           	   	   C  s  t  }d|_dD ]]}tdd| dh}tdg||dgks J tt tdg|| W d    n1 s7w   Y  td| g||dd| fgksPJ td| dg||dd| fgkseJ qh d	}d
g|_t|}tdg||g dksJ tdg||dgksJ tdg||dgksJ dg|_t|}tdg||g dksJ tt tdg|| W d    n1 sw   Y  tt tdg|| W d    n1 sw   Y  tt tdg|| W d    n1 sw   Y  dg|_tdg||ddgksJ dg|_t|}tdg||g dks(J tt tdg|| W d    n	1 s@w   Y  dgddgddgfD ]}||_t|}tdg||g dksfJ qOdg|_t|}tdg||g dks~J g d}d|g}||fD ]2}||_t|}t	tdg||t	|ksJ h d}t|}t	tdg||t	|ksJ qd S ) NT)zsite-packagesz	.whatevernode_modulesz.x/.zz	/dir/a.pyz
/dir/venv/z/b.pyr7   )az/dirbr~   z/f\.py$)r   r   r   r   r   r   r   z/a1/)r   r   r   z/pkg/a1z/pkg/a1/r   z/a1/$r   z	/(a1|a3)/a1a3zb/c/)r   r   r   )	z/pkg/a/z/2z/1z/pk/z/kgz/g.pyz/bcz/xxx/pkg/a2/b/f.pyzxxx/pkg/a2/b/f.py|>   pkg/a1/b/f.pypkg/a2/b/f.pypkg/a1/b/c/d/e.pypkg/a2/b/c/d/e.pypkg/a2/__init__.py.)
r   rl   r	   rM   pytestraisesr   excludejoinr.   )	r   rI   excluded_dirrJ   r
   orredbig_exclude1big_exclude2big_excluder   r   r   test_find_sources_exclude  sx   
	  $z+SourceFinderSuite.test_find_sources_excludeN)r   r   )r3   r4   r5   rV   rY   rn   rr   rv   r|   r   r   r   r   r   r   r   r   r   rN   B   s    





+




 	rN   )r   r   r   r   )r;   r<   r   r=   )rC   r   r   r   r   rD   )rC   r   r   r   r   r=   )rH   r-   rI   r   rJ   r   r   r=   )
__future__r   r   rW   rO   unittestr   mypy.find_sourcesr   r   r   mypy.fscacher   mypy.modulefinderr   mypy.optionsr   r	   r:   rB   rF   rG   rM   TestCaserN   r   r   r   r   <module>   s"    




