3
sY],                 @   s   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je	Zdj Zej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e dkrej!  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          
      sJ   t  j  tjdd}|j| _|j| j W d Q R X | jt	j
| j d S )NF)delete)supersetUptempfileZNamedTemporaryFilename	file_namewritefile_byte_string
addCleanupr   unlink)selffp)	__class__ $lib/python3.6/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 | jjd| _t j  d S )Nr   zutf-8)join	file_listencoder   r   r   )r   )r   r   r   r   5   s    zGetLineTestsGoodData.setUpc             C   sb   t j| jL}xDt|D ]8\}}|jds2|d7 }tj| j|d }| j|| qW W d Q R X 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}| 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'   r*   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   | j 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   | j ttftj| j d S )N)r,   r-   r.   r"   r(   r
   )r   r   r   r   r*   N   s    
z!GetLineTestsBadData.test_getlinesN)r   r   r   r'   r*   r   r   r   r   r+   G   s   r+   c               @   s   e Zd Zg ZdS )	EmptyFileN)r   r   r   r   r   r   r   r   r/   S   s   r/   c               @   s   e Zd ZdgZdS )SingleEmptyLiner   N)r   r   r   r   r   r   r   r   r0   W   s   r0   c               @   s   e Zd ZddddgZdS )GoodUnicodeu   á
zb
zabcdef
u   ááááá
N)r   r   r   r   r   r   r   r   r1   [   s   r1   c               @   s   e Zd ZdZdS )
BadUnicodes   abcN)r   r   r   r   r   r   r   r   r2   _   s   r2   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}| j|tdt | j|tdt | jt|td | j|tdt | j|tdt x^tD ]V}t	j
jt|d }t|2}x*t|D ]\}}| j||||d  qW W d Q R X qdW t jd}| j|g  d S )	N      r   g?z.pyza/b/c/__init__.pyi   )r"   r#   r$   FILENAMEEMPTYr,   	TypeErrorINVALID_NAMEMODULESospathr   MODULE_PATHr   r    r(   )r   r#   entryfilenamefiler%   r&   emptyr   r   r   r'   e   s    

(
zLineCacheTests.test_getlinec             C   sT   | j tjtj ttjd}|jt W d Q R X tjtj}| j	|dddg d S )Nwr   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 }x4t D ],}tjjt|d }|j| tj|d q
W | j|g  dd |D }| j	|g  tj
  dd |D }| j	|g  d S )Nz.pyr   c             S   s   g | ]}|t jkr|qS r   )r"   cache).0fnr   r   r   
<listcomp>   s    z2LineCacheTests.test_clearcache.<locals>.<listcomp>c             S   s   g | ]}|t jkr|qS r   )r"   rG   )rH   rI   r   r   r   rJ      s    )r;   r<   r=   r   r>   appendr"   r#   ZassertNotEqualr$   
clearcache)r   cachedr?   r@   Zcached_emptyr   r   r   test_clearcache   s    

zLineCacheTests.test_clearcachec          #   C   sF  t j}tjd }| jtj| t|d}|jt W d Q R X ||d g }t|<}x4t	|D ](\}}| j
||||d  |j| q`W W d Q R X t|d}|jt W d Q R X t jd x*t	|D ]\}}| j
||||d  qW t j| t|>}x6t	|D ]*\}}| j
||||d  |j| q
W W d Q R X d S )Nz.pyrC   r   Zdummy)r"   r#   r   rD   r   r   r   r   SOURCE_1r    r$   rK   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 jt}t j  | jdt jtd  | j|t jt d S )NF)r"   r(   r7   rL   r$   	lazycache)r   r)   r   r   r   test_lazycache_no_globals   s    
z(LineCacheTests.test_lazycache_no_globalsc             C   sX   t jtt }t j  | jdt jtt  | jdtt jt  | j|t jt d S )NTr   )	r"   r(   NONEXISTENT_FILENAMEglobalsrL   r$   rT   lenrG   )r   r)   r   r   r   test_lazycache_smoke   s    z#LineCacheTests.test_lazycache_smokec             C   sL   t j  t jtt }t j  t jt t jtt  | j|t jt d S )N)r"   rL   r(   rV   rW   rT   r$   updatecache)r   r)   r   r   r   *test_lazycache_provide_after_failed_lookup   s    
z9LineCacheTests.test_lazycache_provide_after_failed_lookupc             C   s"   t j  t jtt  t j  d S )N)r"   rL   rT   rV   rW   rQ   )r   r   r   r   test_lazycache_check   s    z#LineCacheTests.test_lazycache_checkc             C   s8   t j  | jdt jdt  | jdt jdt  d S )NFr   z<foo>)r"   rL   r$   rT   rW   )r   r   r   r   test_lazycache_bad_filename   s    z*LineCacheTests.test_lazycache_bad_filenamec             C   sF   t j  t jtt }| jdt jtt  | jdtt jt  d S )NF   )	r"   rL   r(   rV   rW   r$   rT   rX   rG   )r   r)   r   r   r   test_lazycache_already_cached   s    z,LineCacheTests.test_lazycache_already_cachedc             C   s   t jt}| j| dd }tjt d| t jt}W d Q R X | j|| t j  tjt d| t jt}W d Q R X | j|g  | jt jt| d S )Nc              _   s   t d S )N)MemoryError)argskwargsr   r   r   raise_memoryerror   s    z:LineCacheTests.test_memoryerror.<locals>.raise_memoryerrorrZ   )r"   r(   r7   Z
assertTruer   Z	swap_attrr$   rL   )r   r)   rc   Zlines2Zlines3r   r   r   test_memoryerror   s    

zLineCacheTests.test_memoryerrorN)r   r   r   r'   rF   rN   rS   rU   rY   r[   r\   r]   r_   rd   r   r   r   r   r3   c   s   !
r3   __main__)"__doc__r"   Zunittestos.pathr<   r   r   Ztestr   __file__r7   rV   r:   r8   r=   dirnameZ	TEST_PATHsplitr;   r>   rO   rP   rE   r   r   r+   ZTestCaser/   r0   r1   r2   r3   r   mainr   r   r   r   <module>   s6   
 
