B
    '(b                 @   sb  d Z ddlZddlZddlmZ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 ddl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ddddddddddddgZejdkred e eedddZ!G d d! d!eZ"edd"d#d$Z#G d%d& d&eZ$edd"d'd(Z%G d)d* d*eZ&G d+d, d,eZ'G d-d. d.ee ef Z(dS )/zSemantic analyzer test cases    N)DictList)build)BuildSource)PYTHON3_VERSION)assert_string_arrays_equalnormalize_error_messagestestfile_pyversionparse_options)DataDrivenTestCase	DataSuite)test_temp_dir)CompileError)TypeInfo)Optionszsemanal-basic.testzsemanal-expressions.testzsemanal-classes.testzsemanal-types.testzsemanal-typealiases.testzsemanal-modules.testzsemanal-statements.testzsemanal-abstractclasses.testzsemanal-namedtuple.testzsemanal-typeddict.testzsemenal-literal.testzsemanal-classvar.testzsemanal-python2.testzsemanal-lambda.test)   
   zsemanal-python310.test)program_texttestcasereturnc             C   s.   t | |d}d|_d|_d|_t|_d|_|S )N   T)r
   Zuse_builtins_fixturesZsemantic_analysis_onlyshow_tracebackr   python_versionZenable_incomplete_features)r   r   options r   D/home/dcms/DCMS/lib/python3.7/site-packages/mypy/test/testsemanal.pyget_semanal_options.   s    r   c               @   s$   e Zd ZeZdZeddddZdS )SemAnalSuiteTN)r   r   c             C   s   t | d S )N)test_semanal)selfr   r   r   r   run_case<   s    zSemAnalSuite.run_case)__name__
__module____qualname__semanal_filesfilesZ
native_sepr   r    r   r   r   r   r   8   s   r   )r   r   c          
   C   s:  yd | j}t|| }t| j|_tjtdd|g|td}|j	}|rPt
|xt|j D ]t}|j| }|jtjd dddd	d
dfs`tj|jds`tjtj|jd ds`|t|d7 }q`W W n* t
k
r } z
|j}W dd}~X Y nX | jrt|}t| j|d| j d| j d dS )zPerform a semantic analysis test case.

    The testcase argument contains a description of the test case
    (inputs and output).
    
mainN)sourcesr   alt_lib_pathzbuiltins.pyiz
typing.pyizmypy_extensions.pyiztyping_extensions.pyizabc.pyizcollections.pyizsys.pyi_r   z"Invalid semantic analyzer output (z, line ))joininputr   r	   filer   r   r   r   errorsr   sortedr%   keyspathendswithossepbasename
startswithsplitextstrsplitmessagesnormalize_outputr   r   outputline)r   srcr   resultaZfnamfer   r   r   r   @   s<    

r   c               @   s6   e Zd ZdgZejdkr"ed eddddZ	dS )SemAnalErrorSuitezsemanal-errors.test)r   r   zsemanal-errors-python310.testN)r   r   c             C   s   t | d S )N)test_semanal_error)r   r   r   r   r   r    s   s    zSemAnalErrorSuite.run_case)
r!   r"   r#   r%   sysversion_infor$   appendr   r    r   r   r   r   rD   n   s   

rD   c          
   C   s   yRd | j}tjtdd|gt|| td}|j}|sPtd| j d| j	 W n( t
k
rz } z
|j}W dd}~X Y nX | jrt|}t| j|d| j d| j	 d dS )	zPerform a test case.r&   r'   N)r(   r   r)   zNo errors reported in z, line zInvalid compiler output (r+   )r,   r-   r   r   r   r   r/   AssertionErrorr.   r>   r   r;   r<   r   r   r=   )r   r?   resrA   rC   r   r   r   rE   w   s     rE   c               @   s&   e Zd ZdZdgZeddddZdS )SemAnalSymtableSuiteTzsemanal-symtable.testN)r   r   c          
   C   s   yd |j}tjtdd|gt||td}|j}|r@t|x\t|j	
 D ]J}|dkrP|| d x,t|j	| jdD ]}|d|  qW qPW W n( tk
r } z
|j}W dd}~X Y nX t|j|d|j d	|j d
 dS )zPerform a test case.r&   r'   N)r(   r   r)   )builtinstypingabc:z  z"Invalid semantic analyzer output (z, line r+   )r,   r-   r   r   r   r   r/   r   r0   r%   r1   rH   r9   namesr:   r;   r   r=   r.   r>   )r   r   r?   r@   rA   rB   srC   r   r   r   r       s$    zSemAnalSymtableSuite.run_case)r!   r"   r#   required_out_sectionr%   r   r    r   r   r   r   rK      s   rK   c               @   s&   e Zd ZdZdgZeddddZdS )SemAnalTypeInfoSuiteTzsemanal-typeinfo.testN)r   r   c       	   
   C   s   yd |j}tjtdd|gt||td}|j}|r@t|t }xL|j	
 D ]>}x8|j
 D ]*}t|jtrb|jdk	st|j||j< qbW qRW t|d}W n( tk
r } z
|j}W dd}~X Y nX t|j|d|j d|j d dS )zPerform a test case.r&   r'   N)r(   r   r)   z"Invalid semantic analyzer output (z, line r+   )r,   r-   r   r   r   r   r/   r   TypeInfoMapr%   valuesrP   
isinstancenoder   fullnamerI   r9   r:   r;   r   r=   r.   r>   )	r   r   r?   r@   rA   Z	typeinfosrB   nrC   r   r   r   r       s(    zSemAnalTypeInfoSuite.run_case)r!   r"   r#   rR   r%   r   r    r   r   r   r   rS      s   rS   c               @   s   e Zd ZedddZdS )rT   )r   c             C   s   dg}xjt |  D ]Z\}}t|tr|ds|ds|dsdt|d}|d| d|  qW |d	  d
7  < d|S )NzTypeInfoMap(z	builtins.ztyping.zabc.z
  r&   z  z : r+   )r0   itemsrV   r9   r7   r,   r:   rH   )r   rA   xyZtir   r   r   __str__   s    

zTypeInfoMap.__str__N)r!   r"   r#   r9   r^   r   r   r   r   rT      s   rT   ))__doc__os.pathr4   rF   rM   r   r   Zmypyr   Zmypy.modulefinderr   Zmypy.defaultsr   Zmypy.test.helpersr   r   r	   r
   Zmypy.test.datar   r   Zmypy.test.configr   Zmypy.errorsr   Z
mypy.nodesr   Zmypy.optionsr   r$   rG   rH   r9   r   r   r   rD   rE   rK   rS   rT   r   r   r   r   <module>   sH   


.	!