B
    '(äbí:  ã            L   @   s   d Z ddl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mZmZ ddlmZmZ ddlmZmZmZmZ dd	l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% yddl&Z&W n e'k
rì   dZ&Y nX ddl(Z(ddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWgLZ)ej*dXkr¨e) +dY¡ ej*dZkr¾e) +d[¡ ej*d\krÔe) +d]¡ ej,d^krìe) -d_g¡ G d`da„ daeƒZ.dS )bzType checker test casesé    N)ÚDictÚListÚSetÚTuple)Úbuild)ÚGraph)ÚBuildSourceÚSearchPathsÚFindModuleCache)Útest_temp_dirÚtest_data_prefix)ÚDataDrivenTestCaseÚ	DataSuiteÚFileOperationÚmodule_from_path)Úassert_string_arrays_equalÚnormalize_error_messagesÚassert_module_equivalenceÚupdate_testcase_outputÚparse_optionsÚassert_target_equivalenceÚcheck_test_output_filesÚperform_file_operations)ÚCompileError)Úcore_moduleszcheck-basic.testzcheck-union-or-syntax.testzcheck-callable.testzcheck-classes.testzcheck-statements.testzcheck-generics.testzcheck-dynamic-typing.testzcheck-inference.testzcheck-inference-context.testzcheck-kwargs.testzcheck-overloading.testzcheck-type-checks.testzcheck-abstract.testzcheck-multiple-inheritance.testzcheck-super.testzcheck-modules.testzcheck-modules-fast.testzcheck-typevar-values.testzcheck-unsupported.testzcheck-unreachable-code.testzcheck-unions.testzcheck-isinstance.testzcheck-lists.testzcheck-namedtuple.testzcheck-narrowing.testzcheck-typeddict.testzcheck-type-aliases.testzcheck-ignore.testzcheck-type-promotion.testzcheck-semanal-error.testzcheck-flags.testzcheck-incremental.testzcheck-serialize.testzcheck-bound.testzcheck-optional.testzcheck-fastparse.testzcheck-warnings.testzcheck-async-await.testzcheck-newtype.testzcheck-class-namedtuple.testzcheck-selftype.testzcheck-python2.testzcheck-columns.testzcheck-functions.testzcheck-tuples.testzcheck-expressions.testzcheck-generic-subtyping.testzcheck-varargs.testzcheck-newsyntax.testzcheck-protocols.testzcheck-underscores.testzcheck-classvar.testzcheck-enum.testzcheck-incomplete-fixture.testzcheck-custom-plugin.testzcheck-default-plugin.testzcheck-attr.testzcheck-ctypes.testzcheck-dataclasses.testzcheck-final.testzcheck-redefine.testzcheck-literal.testzcheck-newsemanal.testzcheck-inline-config.testzcheck-reports.testzcheck-errorcodes.testzcheck-annotated.testz"check-parameter-specification.testzcheck-typevar-tuple.testzcheck-generic-alias.testzcheck-typeguard.testzcheck-functools.testzcheck-singledispatch.testzcheck-slots.testzcheck-formatting.testzcheck-native-int.test)é   é   zcheck-python38.test)r   é	   zcheck-python39.test)r   é
   zcheck-python310.test)ÚdarwinÚwin32zcheck-modules-case.testc               @   sÜ   e Zd ZeZeddœdd„Zg dfeee e	ddœdd„Z
eeeeef  ee ejedd	œd
d„Zee ee dœdd„Zejeeef dœdd„Zeeef ejee dœdd„Zdee	eeeeef  dœdd„ZdS )ÚTypeCheckSuiteN)ÚtestcaseÚreturnc             C   s*  t d kr$tj |j¡dkr$t d¡ d|j ¡ kpDd|jkpDd|jk}|rt	dgt
|j ¡ ƒ ƒ}xZt tj¡D ]J\}}}x>|D ]6}t d|¡}|r‚t| d¡ƒ|kr‚td ||¡ƒ‚q‚W qrW | ¡ }	x\td|d ƒD ]>}
|
d }|t|	ƒk r|d	kr|	| ng }|  |||
¡ qØW n
|  |¡ d S )
Nzcheck-reports.testz$Cannot import lxml. Is it installed?ÚincrementalÚ	serializeé   z
\.([2-9])$é   z7Output file {} exists though test case only has {} runsr   )ÚlxmlÚosÚpathÚbasenameÚfileÚpytestÚskipÚnameÚlowerÚmaxÚlistÚoutput2ÚkeysÚwalkÚcurdirÚreÚsearchÚintÚgroupÚ
ValueErrorÚformatZ
find_stepsÚrangeÚlenÚrun_case_once)Úselfr"   r$   Z	num_stepsÚdnÚdirsÚfilesr,   ÚmZstepsÚstepÚidxÚops© rH   úB/home/dcms/DCMS/lib/python3.7/site-packages/mypy/test/testcheck.pyÚrun_case   s(    



$zTypeCheckSuite.run_caser   )r"   Ú
operationsÚincremental_stepr#   c          
   C   s°  d  |j¡}|  ||¡}x6|jD ],\}}t|ƒ}| d¡r |tjkr tj|= q W |dks`|dkr¤xR|D ]8\}	}
}|	dkrft|
ddd}| 	|¡ W d Q R X P qfW n|dkr´t
|ƒ t|||ƒ}d	|_d	|_d	|_d
|jkrâd	|_d|jkròd	|_d|jkrd	|_|r|jrd	|_nd|_|js0tj|_g }x0|D ](\}	}
}| t|
|	|rXd n|ƒ¡ q:W tj  td¡}tj d|¡ d }zJytj||td}|j}W n* t k
rÌ } z
|j!}W d d }~X Y nX W d tjd |ksæt"‚tjd= X |j#r t$|ƒ}|dkrd}|j%}nD|dkr,d}|j%}n.|dkrTd &|¡d }|j' (|g ¡}nt"ƒ ‚||kr~|j) *dd¡r~t+||ƒ t,||| &|j|j-¡ƒ |r–|jtjkrÀ|  .||j|j/|j0¡ d}|rÚ|t1|d ƒ7 }|j2 (|d ¡}|j/j3}dd„ |D ƒ}|d k	rt4|||ƒ |dkr–|dkr.dn
t1|d ƒ}|j5 (|d ¡}|d k	rht6d| ||j/j7ƒ |j8 (|d ¡}|d k	r–t6d| ||j/j9ƒ |j:r¬t;||dd d S )NÚ
Z_pluginr   r'   Ú__main__ÚwÚutf8)ÚencodingTÚoptionalÚcolumnsZ
errorcodesFZplugins)ÚsourcesÚoptionsZalt_lib_pathz,Unexpected type checker output ({}, line {})zBUnexpected type checker output in incremental, run 1 ({}, line {})z5Unexpected type checker output in incremental, run {}z ({}, line {})z--update-dataÚtargetsc                s,   g | ]$‰ t ‡ fd d„tdg D ƒƒsˆ ‘qS )c             3   s   | ]}ˆ   |¡V  qd S )N)Ú
startswith)Ú.0Úmod)ÚtrH   rI   ú	<genexpr>ü   s   z:TypeCheckSuite.run_case_once.<locals>.<listcomp>.<genexpr>Zmypy_extensions)Úanyr   )rX   rH   )rZ   rI   ú
<listcomp>û   s    z0TypeCheckSuite.run_case_once.<locals>.<listcomp>r&   Ú Z	recheckedÚstaleztmp/)Zstrip_prefix)<ÚjoinÚinputÚparse_modulerC   r   ÚendswithÚsysÚmodulesÚopenÚwriter   r   Zuse_builtins_fixturesZenable_incomplete_featuresÚshow_tracebackr,   Zstrict_optionalZshow_column_numbersZshow_error_codesr$   Zwritescacher)   ÚdevnullÚ	cache_dirÚappendr   r*   r   Úinsertr   r   Úerrorsr   ÚmessagesÚAssertionErrorZnormalize_outputr   Úoutputr<   r3   ÚgetÚconfigZ	getoptionr   r   ÚlineÚverify_cacheÚmanagerÚgraphÚstrZexpected_fine_grained_targetsZprocessed_targetsr   Zexpected_rechecked_modulesr   Zrechecked_modulesZexpected_stale_modulesZstale_modulesZoutput_filesr   )r@   r"   rK   rL   Zoriginal_program_textÚmodule_datar,   Ú_ÚmoduleÚmodule_nameZprogram_pathÚprogram_textÚfrU   rT   Z
plugin_dirÚresÚaÚeÚmsgrp   r/   ÚexpectedÚactualÚsuffixZexpected_recheckedZexpected_stalerH   rH   rI   r?   ™   s¬    













zTypeCheckSuite.run_case_once)rx   r   ru   rv   r#   c          	      sÞ   |   |¡}‡ fdd„|j ¡ D ƒ}|  |¡}| dd„ |D ƒ¡ |  ||¡}|s\|r\tdƒ‚||ksttd||f ƒ‚tj 	tj 
|jjd¡¡s’t‚tj 
|jjd¡}	tj 	|	¡s´t‚t|	ƒ}
|
 ¡  d	¡sÐt‚W d Q R X d S )
Nc                s    h | ]\}}ˆ | j r|j’qS rH   )Ztransitive_errorr*   )rX   ÚidrD   )rv   rH   rI   ú	<setcomp>  s    z.TypeCheckSuite.verify_cache.<locals>.<setcomp>c             S   s   i | ]\}}}||“qS rH   rH   )rX   r{   r*   ÚtextrH   rH   rI   ú
<dictcomp>  s    z/TypeCheckSuite.verify_cache.<locals>.<dictcomp>z-Some modules reported error despite no errorszcache data discrepancy %s != %sz
.gitignorezCACHEDIR.TAGz+Signature: 8a477f597d28d172789f06886806bc55)Úfind_error_message_pathsre   ÚitemsÚfind_module_filesÚupdateÚfind_missing_cache_filesro   r)   r*   Úisfiler`   rU   rj   rf   ÚreadrW   )r@   rx   r   ru   rv   Zerror_pathsZbusted_pathsre   Zmissing_pathsZcachedir_tagr}   rH   )rv   rI   rt     s    


zTypeCheckSuite.verify_cache)r   r#   c             C   s<   t ƒ }x0|D ](}t d|¡}|r| d¡}| |¡ qW |S )Nz.([^\s:]+):(\d+:)?(\d+:)? (error|warning|note):r'   )Úsetr7   Úmatchr:   Úadd)r@   r   Úhitsrs   rD   ÚprH   rH   rI   r‰   )  s    

z'TypeCheckSuite.find_error_message_paths)ru   r#   c             C   s*   i }x |j  ¡ D ]\}}|j||< qW |S )N)re   rŠ   r*   )r@   ru   re   r…   rz   rH   rH   rI   r‹   2  s    z TypeCheckSuite.find_module_files)re   ru   r#   c             C   sR   d}i }x<|  ¡ D ]0\}}t |||¡}t |||||¡s|||< qW t| ¡ ƒS )NT)rŠ   r   Zfind_cache_metaZvalidate_metar   Úvalues)r@   re   ru   Úignore_errorsÚmissingr…   r*   ÚmetarH   rH   rI   r   8  s    z'TypeCheckSuite.find_missing_cache_files)r|   rL   r#   c          
   C   sî   t jd|t jd}|dkrDd|› d}t j||t jd}|dk	rD|}|rÞ| d¡}g }ttfdddƒ}t|ddd}	xd| d	¡D ]V}
|	 |
¡}t	|t
ƒs¦td
|
› ƒ‚t|dd}| ¡ }W dQ R X | |
||f¡ q€W |S dd|fgS dS )a+  Return the module and program names for a test case.

        Normally, the unit tests will parse the default ('__main__')
        module and follow all the imports listed there. You can override
        this behavior and instruct the tests to check multiple modules
        by using a comment like this in the test case input:

          # cmd: mypy -m foo.bar foo.baz

        You can also use `# cmdN:` to have a different cmd for incremental
        step N (2, 3, ...).

        Return a list of tuples (module name, file name, program text).
        z!# cmd: mypy -m ([a-zA-Z0-9_. ]+)$)Úflagsr'   z# cmdz: mypy -m ([a-zA-Z0-9_. ]+)$NrH   )ZfscacherU   ú zCan't find ad hoc case file: rP   )rQ   rN   Úmain)r7   r8   Ú	MULTILINEr:   r	   r   r
   ÚsplitÚfind_moduleÚ
isinstancerw   ro   rf   r   rk   )r@   r|   rL   rD   Z	alt_regexZalt_mZmodule_namesÚoutZsearch_pathsÚcacher{   r*   r}   rH   rH   rI   rb   B  s&    

zTypeCheckSuite.parse_module)r   )Ú__name__Ú
__module__Ú__qualname__Útypecheck_filesrC   r   rJ   r   r   r9   r?   r   rw   r   ZBuildManagerr   rt   r   r‰   r   r‹   r   rb   rH   rH   rH   rI   r!   |   s   u	
r!   )/Ú__doc__r)   r7   rd   Útypingr   r   r   r   Zmypyr   Z
mypy.buildr   Zmypy.modulefinderr   r	   r
   Zmypy.test.configr   r   Zmypy.test.datar   r   r   r   Zmypy.test.helpersr   r   r   r   r   r   r   r   Zmypy.errorsr   Zmypy.semanal_mainr   r(   ÚImportErrorr-   r¥   Úversion_infork   ÚplatformÚextendr!   rH   rH   rH   rI   Ú<module>   sÌ   (



