
    6 ft5                        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     Q/var/www/equiseq/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   filestrboolc                    || j         v S Nr   r   r   s     r   isfilezFakeFSCache.isfile   s    tz!!r   dirc                                         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/      991<<$$999999r   )endswithr   sepanyr   r   r&   s    `r   isdirzFakeFSCache.isdir   sI    ||BF## 	26MC9999dj999999r   	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    ]]]1<<X[K\K\]Qs3xxzz]((003]]]r   )r,   r   r-   listr   r/   s    `r   listdirzFakeFSCache.listdir   sI    ||BF## 	26MC]]]]TZ]]]^^^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!   )r&   r    r   r1   )__name__
__module____qualname__r   r%   r0   r7   r9   r   r   r   r   r      s|        9 9 9 9" " " ": : : :
_ _ _ _
     r   r   r   r    r   c                    t           j                            |           d         } |                     t           j        d          } | S )N   /)r   r   
splitdrivereplacer-   )r   s    r   normalise_pathrB   %   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_dirrB   )r   ss     r   r+   z.normalise_build_source_list.<locals>.<genexpr>,   sS         
!*2HN1:...dT     r   )sorted)rC   s    r   normalise_build_source_listrL   +   s0           r   finderr   r   tuple[str, str]c                T    |                      |          \  }}|t          |          fS r#   )crawl_uprB   )rM   r   rH   rI   s       r   crawlrQ   2   s+    q))FH>(++++r   c                    t          |                     t          j                            |                              S r#   )rL   find_sources_in_dirr   r   r   )rM   r   s     r   rS   rS   7   s-    &v'A'A"'//RSBTBT'U'UVVVr   pathsr1   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   )rL   r   )rT   rU   rV   s      r   find_sourcesr[   ;   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   rd   rc   shutilrmtreera   re   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rn   /a/a/b/setup.pyrn   /a/b/a/__init__.pyza.setupr?   /a/invalid-name/setup.pyrn   z/a/invalid-name   /a/b/c/__init__.pyru   /a/b/c/setup.pyr{   zc.setuprt   r	   namespace_packagesr   r   rQ   r   rU   rM   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 )NTrl   rm   ro   rp   rr   rs   ru   rv   rw   rx   z	a.b.setupr?   ry   r{   za.b.c.setupr?   r}   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 )NTrl   rm   ro   rp   rr   rs   ru   rv   rw   rx   r   ry   r{   r   rt   r|   /a/b/c)rn   r   )r	   r~   explicit_package_basesr   r   rQ   	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 )NTrq   /b/a/pkg/a.py/b/pkg/b.pyzpkg.arq   zpkg.br   )r	   r~   r   r   r   r   rQ   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   rS   r   rU   r   rM   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   rS   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 )	NTrq   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   r[   pytestraisesr   excludejoinr4   )	r   rU   excluded_dirrV   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   )r:   r;   r<   rf   rj   r   r   r   r   r   r   r   r   r   r   r   r   r]   r]   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   r]   )r   r    r   r    )rC   rD   r   rE   )rM   r   r   r    r   rN   )rM   r   r   r    r   rE   )rT   r1   rU   r	   rV   r   r   rE   )
__future__r   r   rh   r_   unittestr   mypy.find_sourcesr   r   r   mypy.fscacher   mypy.modulefinderr   mypy.optionsr	   r   rB   rL   rQ   rS   r[   TestCaser]   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   