B
    '(b"                 @   s4  d Z ddlZddlZddlmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZ dd	lmZ dd
lmZ ddlmZ ddl m!Z! ddl"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z. dZ/dZ0dZ1dZ2dZ3G dd de$Z4e5e6dddZ7dS )zETest cases for AST merge (used for fine-grained incremental checking)    N)ListTupleDictOptional)build)BuildResult)BuildSource)CompileError)	NodeMypyFileSymbolTableSymbolTableNodeTypeInfo
ExpressionVarTypeVarExprUNBOUND_IMPORTED)get_subexpressions)FineGrainedBuildManager)StrConv)test_temp_dir)DataDrivenTestCase	DataSuite)assert_string_arrays_equalnormalize_error_messagesparse_options)TypeStrVisitorType)
short_typeIdMapperSYMTABLEz	 TYPEINFOTYPESAST)builtinstypingabc
contextlibsysZmypy_extensionsZtyping_extensionsenumc                   sN  e Zd ZdgZdd fddZeddddZeeee	 d	d
dZ
eeeeeeeef f dddZeeee dddZeeef ee dddZeeef ee dddZeeee dddZeedddZeeef ee dddZeee dd d!Zeee d"d#d$Zeee d%d&d'Zeed(d)d*Z  Z S )+ASTMergeSuitez
merge.testN)returnc                s@   t    tdd| _| jjd k	s&t| jj| _t| j| _d S )NT)Zshow_ids)supersetupr   str_conv	id_mapperAssertionErrorr   type_str_conv)self)	__class__ B/home/dcms/DCMS/lib/python3.7/site-packages/mypy/test/testmerge.pyr,   /   s
    

zASTMergeSuite.setup)testcaser*   c             C   sb  |j }|drt}n$|dr&t}n|dr6t}nt}d|j}| ||}|d k	sbt	d|j
j  t|}g }|jr||j tjtd}ttjtd| || || t|j
jd }	|d	 | |d|\}
}|| || x,|	D ]$}t|trq||kst	qW |jr>t|}t|j|d
|j  d|j! d d S )NZ	_symtableZ	_typeinfo_types
z3cases where CompileError occurred should not be runz	target.pyztarget.py.nexttargetz==>zInvalid output (z, line ))"nameendswithr    TYPEINFOr!   r"   joininputr   r/   managerZfscacheflushr   errorsextendospathr   shutilcopydumpr   modulesappendbuild_increment
isinstancer   Znormalize_outputr   r   outputfileline)r1   r5   r:   kindZmain_srcresultZfine_grained_manageratarget_pathZold_subexprZnew_fileZ	new_typesexprr3   r3   r4   run_case6   s@    




zASTMergeSuite.run_case)sourcer5   r*   c          	   C   s   t ||dd}d|_d|_d|_d|_d|_tjt	d}t
|ddd}|| W d Q R X ytjt|d d g|t	d}W n tk
r   d S X |S )	N   )Zincremental_stepTmainwutf8)encoding)sourcesoptionsZalt_lib_path)r   incrementalZfine_grained_incrementalZuse_builtins_fixturesZexport_typesshow_tracebackrC   rD   r=   r   openwriter   r   r	   )r1   rU   r5   r\   Z	main_pathfrP   r3   r3   r4   r   f   s     zASTMergeSuite.build)r?   	module_idrD   r*   c             C   s<   |   |||fgg  |jj| }|j|  }||fS )N)Zflush_cacheupdater?   rH   graphtype_map)r1   r?   rb   rD   modulere   r3   r3   r4   rJ   y   s
    zASTMergeSuite.build_increment)r?   rO   r*   c             C   sf   |j j}|tkr| |S |tkr,| |S |tkr>| |S |tkrP| 	|S dsbt
d| d S )NFzInvalid kind )r?   rH   r"   	dump_astsr<   dump_typeinfosr    dump_symbol_tablesr!   
dump_typesr/   )r1   r?   rO   rH   r3   r3   r4   rG      s    



zASTMergeSuite.dump)rH   r*   c             C   sB   g }x8t |D ],}|tkrq|| | j}||  qW |S )N)sortedNOT_DUMPED_MODULESacceptr-   rB   
splitlines)r1   rH   rQ   msr3   r3   r4   rg      s    zASTMergeSuite.dump_astsc             C   s<   g }x2t |D ]&}t|sq|| ||| j qW |S )N)rk   is_dumped_modulerB   dump_symbol_tablenames)r1   rH   rQ   idr3   r3   r4   ri      s    z ASTMergeSuite.dump_symbol_tables)rb   symtabler*   c          
   C   sN   | dg}x<t |D ]0}|dr&q|d| d| ||   qW |S )N:__z    z: )rk   
startswithrI   format_symbol_table_node)r1   rb   ru   rQ   r:   r3   r3   r4   rr      s    
$zASTMergeSuite.dump_symbol_table)noder*   c             C   s   |j d kr|jtkrdS dS t|j trPtt|j j d| j	|j  d}ndt|j  d}t|j t
r|j jr|j jds| |j j}|d| d7 }|S )	Nr   None<>z? (r9   ztyping.()rz   rO   r   rK   r
   strtype__name__r.   rt   r   fullnamerx   format_type)r1   rz   rp   Ztypestrr3   r3   r4   ry      s    

(z&ASTMergeSuite.format_symbol_table_nodec             C   s:   g }x0t |D ]$}t|sq|| || j qW |S )N)rk   rq   rB   dump_typeinfos_recursivers   )r1   rH   rQ   rt   r3   r3   r4   rh      s    zASTMergeSuite.dump_typeinfos)rs   r*   c             C   s\   g }xRt | dd dD ]:\}}t|jtr|| |j || |jj qW |S )Nc             S   s   | d S )Nr   r3   )xr3   r3   r4   <lambda>       z8ASTMergeSuite.dump_typeinfos_recursive.<locals>.<lambda>)key)	rk   itemsrK   rz   r   rB   dump_typeinfor   rs   )r1   rs   rQ   r:   rz   r3   r3   r4   r      s    z&ASTMergeSuite.dump_typeinfos_recursive)infor*   c             C   s(   |j dkrg S |j| j| jd}| S )Nz	enum.Enum)r-   r0   )r   rG   r-   r0   rn   )r1   r   rp   r3   r3   r4   r      s
    

zASTMergeSuite.dump_typeinfo)r?   r*   c                s   g }xt |jjD ]}t|s q|jj |j| j}|d k	s@t fddt|D r|	d|  xJt fdddD ]2}| }|	t
| d|j d| |  qW qW |S )	Nc                s   i | ]}| kr | |qS r3   r3   ).0rz   )	all_typesr3   r4   
<dictcomp>   s   z,ASTMergeSuite.dump_types.<locals>.<dictcomp>z## c                s    | j t| t| t |   fS )N)rN   r   r   )n)re   r3   r4   r      s   
z*ASTMergeSuite.dump_types.<locals>.<lambda>)r   rv   z: )rk   r?   rH   rq   r   rd   treer/   r   rI   r   rN   r   )r1   r?   rQ   rb   r   rS   typr3   )r   re   r4   rj      s    
.zASTMergeSuite.dump_types)r   r*   c             C   s   | | jS )N)rm   r0   )r1   r   r3   r3   r4   r      s    zASTMergeSuite.format_type)!r   
__module____qualname__filesr,   r   rT   r   r   r   r   r   r   r   r   r   r   rJ   r   rG   rg   ri   r   rr   r   ry   rh   r   r   r   rj   r   __classcell__r3   r3   )r2   r4   r)   ,   s$   0
	r)   )rt   r*   c             C   s   | t ko| d p| dkS )N___main__)rl   rx   )rt   r3   r3   r4   rq      s    rq   )8__doc__rC   rE   r$   r   r   r   r   Zmypyr   Z
mypy.buildr   Zmypy.modulefinderr   Zmypy.errorsr	   Z
mypy.nodesr
   r   r   r   r   r   r   r   r   Zmypy.server.subexprr   Zmypy.server.updater   Zmypy.strconvr   Zmypy.test.configr   Zmypy.test.datar   r   Zmypy.test.helpersr   r   r   Z
mypy.typesr   r   Z	mypy.utilr   r   r    r<   r!   r"   rl   r)   r   boolrq   r3   r3   r3   r4   <module>   s0   , A