
    X-Ph}5                        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e          Zd dZd!dZd"dZd#dZd$dZ G d dej                  ZdS )%    )annotationsN)InvalidSourceListSourceFindercreate_source_list)FileSystemCache)BuildSource)Optionsc                  6    e Zd ZddZdd	Zdd
ZddZddZdS )FakeFSCachefilesset[str]returnNonec                (    d |D             | _         d S )Nc                L    h | ]!}t           j                            |          "S  ospathabspath).0fs     [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypy/test/test_find_sources.py	<setcomp>z'FakeFSCache.__init__.<locals>.<setcomp>   s&    888Qbgooa((888    r   )selfr   s     r   __init__zFakeFSCache.__init__   s    88%888


r   r   strboolc                    || j         v S Nr   r   r   s     r   isfilezFakeFSCache.isfile   s    tz!!r   c                                         t          j                  st          j        z  t          fd| j        D                       S )Nc              3  B   K   | ]}|                               V  d S r"   )
startswithr   r   r   s     r   	<genexpr>z$FakeFSCache.isdir.<locals>.<genexpr>   s/      ::!1<<%%::::::r   )endswithr   sepanyr   r#   s    `r   isdirzFakeFSCache.isdir   sI    }}RV$$ 	BFND::::tz::::::r   	list[str]c                                         t          j                  st          j        z  t          fd| j        D                       S )Nc                    h | ]Q}|                               |t                    d                              t          j                  d         RS )Nr   )r'   lensplitr   r+   r(   s     r   r   z&FakeFSCache.listdir.<locals>.<setcomp>   sN    ___ALLY]L^L^_Qs4yy{{^))"&11!4___r   )r*   r   r+   listr   r#   s    `r   listdirzFakeFSCache.listdir   sI    }}RV$$ 	BFND____dj___```r   c                    dS )NFr   r#   s     r   init_under_package_rootz#FakeFSCache.init_under_package_root!   s    ur   N)r   r   r   r   )r   r   r   r    )r   r   r   r.   )__name__
__module____qualname__r   r$   r-   r4   r6   r   r   r   r   r      s|        9 9 9 9" " " "; ; ; ;
a a a a
     r   r   r   r   r   c                    t           j                            |           d         } |                     t           j        d          } | S )N   /)r   r   
splitdrivereplacer+   )r   s    r   normalise_pathr?   %   s6    7d##A&D<<$$DKr   sourceslist[BuildSource]list[tuple[str, str | None]]c                4    t          d | D                       S )Nc              3  ^   K   | ](}|j         |j        t          |j                  nd fV  )d S r"   )modulebase_dirr?   )r   ss     r   r)   z.normalise_build_source_list.<locals>.<genexpr>,   sS         
!*2HN1:...dT     r   )sorted)r@   s    r   normalise_build_source_listrI   +   s0           r   finderr   r   tuple[str, str]c                T    |                      |          \  }}|t          |          fS r"   )crawl_upr?   )rJ   r   rE   rF   s       r   crawlrN   2   s+    q))FH>(++++r   c                    t          |                     t          j                            |                              S r"   )rI   find_sources_in_dirr   r   r   )rJ   r   s     r   rP   rP   7   s-    &v'A'A"'//RSBTBT'U'UVVVr   pathsr.   optionsr	   fscacher   c                V    d | D             } t          t          | ||                    S )Nc                L    g | ]!}t           j                            |          "S r   r   )r   ps     r   
<listcomp>z find_sources.<locals>.<listcomp>>   s&    ///ARW__Q///r   )rI   r   )rQ   rR   rS   s      r   find_sourcesrX   ;   s2     0////E&'9%''R'RSSSr   c                  f    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dZddZddZdS )SourceFinderSuiter   r   c                    t          j                    | _        t          j                    | _        t          j        | j                   d S r"   )tempfilemkdtemptempdirr   getcwdoldcwdchdirr   s    r   setUpzSourceFinderSuite.setUpC   s7    '))ikk
r   c                j    t          j        | j                   t          j        | j                   d S r"   )r   ra   r`   shutilrmtreer^   rb   s    r   tearDownzSourceFinderSuite.tearDownH   s,    
dl#####r   c                   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    sJ t          t          ddh          |          }t	          |d          d	k    sJ t          t          d
dh          |          }t	          |d
          dk    sJ t          t          ddh          |          }t	          |d          dk    sJ t          t          h d          |          }t	          |d          dk    sJ d S )NF	/setup.pysetupr<   /a/setup.pyrk   /a/a/b/setup.pyrk   /a/b/a/__init__.pyza.setupr<   /a/invalid-name/setup.pyrk   z/a/invalid-name   /a/b/c/__init__.pyrr   /a/b/c/setup.pyrx   zc.setuprq   r	   namespace_packagesr   r   rN   r   rR   rJ   s      r   test_crawl_no_namespacez)SourceFinderSuite.test_crawl_no_namespaceL   s   ))%*"k;-88'BBV[))^;;;;k=/::GDDV]++>>>>k?*;<<gFFV_--1BBBBBk=:J*KLLgVVV]++/?????k+EGW*XYY[bccV788<XXXXXk?<L*MNNPWXXV_--1BBBBBSSSTTV]
 
 V.//3FFFFFFFr   c                   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    sJ t          t          ddh          |          }t	          |d          d	k    sJ t          t          d
dh          |          }t	          |d
          dk    sJ t          t          ddh          |          }t	          |d          dk    sJ t          t          h d          |          }t	          |d          dk    sJ d S )NTri   rj   rl   rm   ro   rp   rr   rs   rt   ru   z	a.b.setupr<   rv   rx   za.b.c.setupr<   rz   r|   s      r   test_crawl_namespacez&SourceFinderSuite.test_crawl_namespaceg   s   ))%)"k;-88'BBV[))^;;;;k=/::GDDV]++>>>>k?*;<<gFFV_--1BBBBBk=:J*KLLgVVV]++/?????k+EGW*XYY[bccV788<XXXXXk?<L*MNNPWXXV_--1CCCCCSSSTTV]
 
 V.//3GGGGGGGr   c                z   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    sJ t          t	          d
dh          |          }t          |d
          dk    sJ t          t	          ddh          |          }t          |d          dk    sJ t          t	          h d          |          }t          |d          dk    sJ dg|_        t          t	          dh          |          }t          |d          dk    sJ t          t	          h d          |          }t          |d          dk    sJ ddg|_        t          t	          dh          |          }t          |d          dk    sJ d S )NTri   rj   rl   rm   ro   rp   rr   rs   rt   ru   r   rv   rx   r   rq   ry   /a/b/c)rk   r   )r	   r{   explicit_package_basesr   r   rN   	mypy_pathr|   s      r   "test_crawl_namespace_explicit_basez4SourceFinderSuite.test_crawl_namespace_explicit_base   s}   ))%)")-&k;-88'BBV[))^;;;;k=/::GDDV]++>>>>k?*;<<gFFV_--1BBBBBk=:J*KLLgVVV]++/?????k+EGW*XYY[bccV788<XXXXXk?<L*MNNPWXXV_--1CCCCCSSSTTV]
 
 V.//3GGGGG $Hk+<*=>>HHV.//3FFFFFSSSTTV]
 
 V.//3FFFFF#X.k+<*=>>HHV.//3FFFFFFFr   c                    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 )NTrn   /b/a/pkg/a.py/b/pkg/b.pyzpkg.arn   zpkg.br   )r	   r{   r   r   r   r   rN   r|   s      r   test_crawl_namespace_multi_dirz0SourceFinderSuite.test_crawl_namespace_multi_dir   s    ))%)")-&!4Lk=-*HII7SSV]++>>>>V]++>>>>>>r   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.pyr<   )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	   r{   r   r   rP   r   rR   r   rJ   s       r   %test_find_sources_in_dir_no_namespacez7SourceFinderSuite.test_find_sources_in_dir_no_namespace   sw    ))%*"
 
 
 k%00'::"63// 4
 4
 4
 
 
 
 
 
 
r   c                    t                      }d|_        h d}t          t          |          |          }t	          |d          g dk    sJ d S )NTr   r<   )r   z
a2.b.c.d.er   za2.b.fr   r   r   r   r   s       r   "test_find_sources_in_dir_namespacez4SourceFinderSuite.test_find_sources_in_dir_namespace   sw    ))%)"
 
 
 k%00'::"63// 4
 4
 4
 
 
 
 
 
 
r   c                :   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    sJ d S )NTr<   r   ))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<   r   ))z
a1.b.c.d.er   )za1.b.fr   r   r   r   r	   r{   r   r   r   r   rP   r   s       r   0test_find_sources_in_dir_namespace_explicit_basezBSourceFinderSuite.test_find_sources_in_dir_namespace_explicit_base   s    ))%)")-& E
 
 
 k%00'::"63// 4
 4
 4
 
 
 
 
 $Hk%00'::"63// 4
 4
 4
 
 
 
 
 
 
r   c                    t                      }d|_        d|_        ddg|_        t	          t          ddh          |          }t          |d          ddgk    sJ d S )	NTrn   r   r   r   r<   r   r   r   r|   s      r   ,test_find_sources_in_dir_namespace_multi_dirz>SourceFinderSuite.test_find_sources_in_dir_namespace_multi_dir   si    ))%)")-&!4Lk=-*HII7SS"63//O_3UUUUUUUr   c                   t                      }d|_        dD ]}t          dd| dh          }t          dg||          dgk    sJ t	          j        t                    5  t          dg||           d d d            n# 1 swxY w Y   t          d| g||          dd| fgk    sJ t          d| dg||          dd| fgk    sJ h d	}d
g|_        t          |          }t          dg||          g dk    sJ t          dg||          dgk    sJ t          dg||          dgk    sJ dg|_        t          |          }t          dg||          g dk    sJ t	          j        t                    5  t          dg||           d d d            n# 1 swxY w Y   t	          j        t                    5  t          dg||           d d d            n# 1 swxY w Y   t	          j        t                    5  t          dg||           d d d            n# 1 swxY w Y   dg|_        t          dg||          ddgk    sJ dg|_        t          |          }t          dg||          g dk    sJ t	          j        t                    5  t          dg||           d d d            n# 1 swxY w Y   dgddgddgfD ]2}||_        t          |          }t          dg||          g dk    sJ 3dg|_        t          |          }t          dg||          g dk    sJ g d}d                    |          g}||fD ]}||_        t          |          }t          t          dg||                    t          |          k    sJ h d}t          |          }t          t          dg||                    t          |          k    sJ d S ) NT)zsite-packagesz	.whatevernode_modulesz.x/.zz	/dir/a.pyz
/dir/venv/z/b.pyr<   )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	   r{   r   rX   pytestraisesr   excludejoinr1   )	r   rR   excluded_dirrS   r   orredbig_exclude1big_exclude2big_excludes	            r   test_find_sources_excludez+SourceFinderSuite.test_find_sources_exclude  sq   ))%)" T 
	 
	L!;0P\0P0P0P"QRRGw88]OKKKK011 ? ?l^Wg>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?!<l!<!< =wPP1<112U      !Al!A!A!A BGWUU1<112Z     
 
 
 &,e$$SE7G44 9
 9
 9
 
 
 
 

 -.AAFXEYYYYY-.AAFXEYYYYY "(e$$SE7G44 9
 9
 9
 
 
 
 

 ],-- 	8 	8)gw777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8],-- 	9 	9*w888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9],-- 	: 	:+999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: #)YK'::"?
 
 
 
 
 &,e$$SE7G44 9
 9
 9
 
 
 
 

 ],-- 	8 	8)gw777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 #mdD\D$<@ 	 	E#GO!%((Gw88 = = =      "(e$$SE7G44 9
 9
 9
 
 
 
 


 

 

 ../(,7 	L 	LK)GO!%((G|SE7G<<==UKKKK  E "%((G|SE7G<<==UKKKKK	L 	LsZ   !B  B	B	 FF#&F#G""G&)G&H%%H),H)J;;J?J?N)r   r   )r7   r8   r9   rc   rg   r}   r   r   r   r   r   r   r   r   r   r   r   rZ   rZ   B   s          
$ $ $ $G G G G6H H H H6)G )G )G )GV? ? ? ?
 
 
 
(
 
 
 
(
 
 
 
@V V V VpL pL pL pL pL pLr   rZ   )r   r   r   r   )r@   rA   r   rB   )rJ   r   r   r   r   rK   )rJ   r   r   r   r   rB   )rQ   r.   rR   r	   rS   r   r   rB   )
__future__r   r   re   r\   unittestr   mypy.find_sourcesr   r   r   mypy.fscacher   mypy.modulefinderr   mypy.optionsr	   r   r?   rI   rN   rP   rX   TestCaserZ   r   r   r   <module>r      sy   " " " " " " 				     Q Q Q Q Q Q Q Q Q Q ( ( ( ( ( ( ) ) ) ) ) )                /   *      , , , ,
W W W WT T T TvL vL vL vL vL) vL vL vL vL vLr   