a
    äzeÓ%  ć                   @   s2  d 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 ej	Z
e
d ZdZdZej e	”Zd ” Zej e
”ZdZd	Zd
ZG dd dZG dd deZG dd deZG dd deejZG dd deejZG dd deejZG dd deejZG dd dejZG dd dejZ e!dkr.e "”  dS )z  Tests for the linecache module é    N)Śsupportz.missingz
!@$)(!@#_1Ś zlinecache abcz3
" Docstring "

def function():
    return result

z%
def f():
    return 1 + 1

a = f()

z
def f():
    return 3c                       s   e Zd Z fddZ  ZS )ŚTempFilec                    s^   t   ”  tjdd$}|j| _| | j” W d    n1 s@0    Y  |  t	j
| j” d S )NF)Śdelete)ŚsuperŚsetUpŚtempfileŚNamedTemporaryFileŚnameŚ	file_nameŚwriteŚfile_byte_stringŚ
addCleanupr   Śunlink)ŚselfŚfp©Ś	__class__© ś)/usr/lib/python3.9/test/test_linecache.pyr   *   s
    
*zTempFile.setUp)Ś__name__Ś
__module__Ś__qualname__r   Ś__classcell__r   r   r   r   r   (   s   r   c                       s,   e Zd Z fddZdd Zdd Z  ZS )ŚGetLineTestsGoodDatac                    s"   d  | j” d”| _t  ”  d S )Nr   śutf-8)ŚjoinŚ	file_listŚencoder   r   r   ©r   r   r   r   r   5   s    zGetLineTestsGoodData.setUpc                 C   sr   t  | j”R}t|D ]8\}}| d”s0|d7 }t | j|d ”}|  ||” qW d    n1 sd0    Y  d S )NŚ
é   )ŚtokenizeŚopenr   Ś	enumerateŚendswithŚ	linecacheŚgetlineŚassertEqual)r   r   ŚindexŚlineZcached_liner   r   r   Śtest_getline9   s    
z!GetLineTestsGoodData.test_getlinec                 C   s   t  | j”}|  || j” d S ©N)r&   Śgetlinesr   r(   r   ©r   Ślinesr   r   r   Śtest_getlinesB   s    z"GetLineTestsGoodData.test_getlines)r   r   r   r   r+   r0   r   r   r   r   r   r   2   s   	r   c                   @   s   e Zd Zdd Zdd ZdS )ŚGetLineTestsBadDatac                 C   s   |   ttftj| jd” d S )Nr!   )ŚassertRaisesŚSyntaxErrorŚUnicodeDecodeErrorr&   r'   r   r   r   r   r   r+   J   s    

’z GetLineTestsBadData.test_getlinec                 C   s   |   ttftj| j” d S r,   )r2   r3   r4   r&   r-   r   r   r   r   r   r0   N   s    
’z!GetLineTestsBadData.test_getlinesN)r   r   r   r+   r0   r   r   r   r   r1   G   s   r1   c                   @   s   e Zd Zg ZdS )Ś	EmptyFileN©r   r   r   r   r   r   r   r   r5   S   s   r5   c                   @   s   e Zd ZdgZdS )ŚSingleEmptyLiner    Nr6   r   r   r   r   r7   W   s   r7   c                   @   s   e Zd Zg d¢ZdS )ŚGoodUnicode)u   Ć”
zb
zabcdef
u   Ć”Ć”Ć”Ć”Ć”
Nr6   r   r   r   r   r8   [   s   r8   c                   @   s   e Zd ZdZdS )Ś
BadUnicodes   abcN)r   r   r   r   r   r   r   r   r9   _   s   r9   c                   @   sd   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 )ŚLineCacheTestsc              
   C   sä   t j}|  |tdt” |  |tdt” |  t|td” |  |tdt” |  |tdt” tD ]f}t	j
 t|”d }t|8}t|D ]\}}|  ||||d ” qW d    qb1 s¾0    Y  qbt  d”}|  |g ” d S )Ni   é’’’’gń?r!   ś.pyza/b/c/__init__.py)r&   r'   r(   ŚFILENAMEŚEMPTYr2   Ś	TypeErrorŚINVALID_NAMEŚMODULESŚosŚpathr   ŚMODULE_PATHr#   r$   r-   )r   r'   ŚentryŚfilenameŚfiler)   r*   Śemptyr   r   r   r+   e   s    
8
zLineCacheTests.test_getlinec                 C   sf   |   tjtj” ttjd}| t” W d    n1 s<0    Y  t tj”}|  	|g d¢” d S )NŚw)r    z	def f():
z    return 3
)
r   r   r   ŚTESTFNr#   r   ŚSOURCE_3r&   r-   r(   )r   r   r/   r   r   r   Śtest_no_ending_newline~   s
    (z%LineCacheTests.test_no_ending_newlinec                 C   s   g }t D ],}tj t|”d }| |” t |d” q|  |g ” dd |D }|  	|g ” t 
”  dd |D }|  	|g ” d S )Nr<   r!   c                 S   s   g | ]}|t jvr|qS r   ©r&   Ścache©Ś.0Śfnr   r   r   Ś
<listcomp>   ó    z2LineCacheTests.test_clearcache.<locals>.<listcomp>c                 S   s   g | ]}|t jv r|qS r   rM   rO   r   r   r   rR      rS   )rA   rB   rC   r   rD   Śappendr&   r'   ZassertNotEqualr(   Ś
clearcache)r   ŚcachedrE   rF   Zcached_emptyr   r   r   Śtest_clearcache   s    
zLineCacheTests.test_clearcachec              	   C   s  t j}tjd }|  tj|” t|d}| t” W d    n1 sH0    Y  ||d g }t|B}t	|D ](\}}|  
||||d ” | |” qrW d    n1 s°0    Y  t|d}| t” W d    n1 sä0    Y  t  d” t	|D ] \}}|  
||||d ” q t  |” t|D}t	|D ]*\}}|  
||||d ” | |” q>W d    n1 s0    Y  d S )Nr<   rI   r!   Śdummy)r&   r'   r   rJ   r   r   r#   r   ŚSOURCE_1r$   r(   rT   ŚSOURCE_2Ś
checkcache)r   r'   Zsource_nameŚsourceZsource_listr)   r*   r   r   r   Śtest_checkcache   s*    
(

*(


zLineCacheTests.test_checkcachec                 C   s<   t  t”}t  ”  |  dt  td ”” |  |t  t”” d S )NF)r&   r-   r=   rU   r(   Ś	lazycacher.   r   r   r   Śtest_lazycache_no_globals·   s    
z(LineCacheTests.test_lazycache_no_globalsc                 C   sX   t  tt ”}t  ”  |  dt  tt ”” |  dtt jt ” |  |t  t”” d S )NTr!   )	r&   r-   ŚNONEXISTENT_FILENAMEŚglobalsrU   r(   r^   ŚlenrN   r.   r   r   r   Śtest_lazycache_smoke½   s    ’z#LineCacheTests.test_lazycache_smokec                 C   sL   t  ”  t  tt ”}t  ”  t  t” t  tt ” |  |t  t”” d S r,   )r&   rU   r-   r`   ra   r^   r(   Śupdatecacher.   r   r   r   Ś*test_lazycache_provide_after_failed_lookupĒ   s    
z9LineCacheTests.test_lazycache_provide_after_failed_lookupc                 C   s"   t  ”  t  tt ” t  ”  d S r,   )r&   rU   r^   r`   ra   r[   r   r   r   r   Śtest_lazycache_checkĻ   s    z#LineCacheTests.test_lazycache_checkc                 C   s8   t  ”  |  dt  dt ”” |  dt  dt ”” d S )NFr   z<foo>)r&   rU   r(   r^   ra   r   r   r   r   Śtest_lazycache_bad_filenameŌ   s    z*LineCacheTests.test_lazycache_bad_filenamec                 C   sF   t  ”  t  tt ”}|  dt  tt ”” |  dtt jt ” d S )NFé   )	r&   rU   r-   r`   ra   r(   r^   rb   rN   r.   r   r   r   Śtest_lazycache_already_cachedŁ   s    žz,LineCacheTests.test_lazycache_already_cachedc                 C   sĀ   t  t”}|  |” dd }t t d|” t  t”}W d    n1 sJ0    Y  |  ||” t  ”  t t d|” t  t”}W d    n1 s0    Y  |  |g ” |  t  t”|” d S )Nc                  _   s   t d S r,   )ŚMemoryError)ŚargsŚkwargsr   r   r   Śraise_memoryerrorä   s    z:LineCacheTests.test_memoryerror.<locals>.raise_memoryerrorrd   )r&   r-   r=   Z
assertTruer   Z	swap_attrr(   rU   )r   r/   rm   Zlines2Zlines3r   r   r   Śtest_memoryerrorį   s    

((zLineCacheTests.test_memoryerrorN)r   r   r   r+   rL   rW   r]   r_   rc   re   rf   rg   ri   rn   r   r   r   r   r:   c   s   !
r:   c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	ŚLineCacheInvalidationTestsc              	      s
  t   ”  t ”  tjd | _tjd | _tjd | _| j| j| jfD ]x}|  	tj
|” t|ddd"}| d| d” W d    n1 s0    Y  |  |tj” t |” |  |tj” qFt | j” t| jddd}| d	” W d    n1 sü0    Y  d S )
Nz.1z.2z.3rI   r   )Śencodingzprint("I am z")zprint("was modified"))r   r   r&   rU   r   rJ   Śdeleted_fileŚmodified_fileŚunchanged_filer   r   r#   r   ŚassertNotInrN   r-   ŚassertInrB   Śremove)r   Zfnamer\   r   r   r   r   ņ   s$    
ž0
z LineCacheInvalidationTests.setUpc                 C   s@   t  | j” |  | jt j” |  | jt j” |  | jt j” d S r,   )r&   r[   rq   rt   rN   ru   rr   rs   r   r   r   r   Ś test_checkcache_for_deleted_file  s    z;LineCacheInvalidationTests.test_checkcache_for_deleted_filec                 C   s@   t  | j” |  | jt j” |  | jt j” |  | jt j” d S r,   )r&   r[   rr   ru   rq   rN   rt   rs   r   r   r   r   Ś!test_checkcache_for_modified_file  s    z<LineCacheInvalidationTests.test_checkcache_for_modified_filec                 C   s<   t  ”  |  | jt j” |  | jt j” |  | jt j” d S r,   )r&   r[   rt   rq   rN   rr   ru   rs   r   r   r   r   Ś!test_checkcache_with_no_parameter  s    z<LineCacheInvalidationTests.test_checkcache_with_no_parameter)r   r   r   r   rw   rx   ry   r   r   r   r   r   ro   ń   s   ro   Ś__main__)#Ś__doc__r&   ZunittestZos.pathrB   r   r"   Śtestr   Ś__file__r=   r`   r@   r>   rC   ŚdirnameZ	TEST_PATHŚsplitrA   rD   rY   rZ   rK   r   r   r1   ZTestCaser5   r7   r8   r9   r:   ro   r   Śmainr   r   r   r   Ś<module>   s8   
 *
