
    i!                       d Z ddlmZ ddlZddlZddlZddl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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" ddl#m$Z$ 	 ddl%m&Z&m'Z' dZ(n# e)$ r dZ(Y nw xY w G d de           Z* G d de           Z+d-dZ,d.dZ-d/d!Z.d-d"Z/d0d&Z0 ej1        e(d'           G d( d)ej2                              Z3ej4        d1d,            Z5dS )2zTests for the experimental native mypy parser.

To run these, you will need to manually install ast_serialize from
https://github.com/mypyc/ast_serialize first (see the README for the details).
    )annotationsN)Iterator)Any)defaultsnodes)END_TAGLIST_GENLIST_INTLITERAL_INTLITERAL_NONELITERAL_STRLOCATION)parse_mypy_comments)CompileError)MypyFile)Options)DataDrivenTestCase	DataSuite)assert_string_arrays_equal)get_mypy_comments)native_parseparse_to_binary_astTFc                  ,    e Zd ZdZdZerdgng Zd
dZd	S )NativeParserSuiteT.znative-parser.testtestcaser   returnNonec                $    t          |           d S N)test_parserselfr   s     Y/root/projects/qq-shell/venv/lib64/python3.11/site-packages/mypy/test/test_nativeparse.pyrun_casezNativeParserSuite.run_case1   s    H    Nr   r   r   r   __name__
__module____qualname__required_out_section	base_pathhas_nativeparsefilesr%    r&   r$   r   r   ,   sF        I&5=!""2E     r&   r   c                  ,    e Zd ZdZdZerdgng Zd
dZd	S )NativeParserImportsSuiteTr   znative-parser-imports.testr   r   r   r   c                $    t          |           d S r    )test_parser_importsr"   s     r$   r%   z!NativeParserImportsSuite.run_case:   s    H%%%%%r&   Nr'   r(   r0   r&   r$   r2   r2   5   sF        I.=E)**2E& & & & & &r&   r2   r   r   r   r   c           	        t                      }d|_        | j                            d          rd|_        nw| j                            d          rd|_        nU| j                            d          rd|_        n3| j                            d          rd	|_        nt
          j        |_        d
                    | j                  }t          |          }t          ||          \  }}|                    |          }d|v }	 t          |          5 }t          |||          \  }}	}
d|_        |                    |                              d
          }d |	D             |z   }d |
D             |z   }ddd           n# 1 swxY w Y   n# t"          $ r}|j        }Y d}~nd}~ww xY wt'          | j        |d| j         d| j         d           dS )zkPerform a single native parser test case.

    The argument contains the description of the test case.
    Tzpython310.test   
   zpython312.test)r7      zpython313.test)r7      zpython314.test)r7      
z# mypy: ignore-errors=Truemainc                ,    g | ]}t          |          S r0   format_error.0errs     r$   
<listcomp>ztest_parser.<locals>.<listcomp>`        555sc""555r&   c                ,    g | ]}t          |          S r0   )format_ignore)rB   ignores     r$   rD   ztest_parser.<locals>.<listcomp>a   s     BBB6v&&BBBr&   NInvalid parser output (, line ))r   hide_error_codesfileendswithpython_versionr   PYTHON3_VERSIONjoininputr   r   apply_changestemp_sourcer   pathstr_with_optionssplitr   messagesr   outputline)r   optionssourcecommentschanges_skip_function_bodiesfnamnodeerrorstype_ignoresaes                r$   r!   r!   >   s[   
 iiG#G}.// 	:!(			 0	1	1 :!(			 0	1	1 :!(			 0	1	1 :!(!)!9YYx~&&F !((H$Xw77JGQ##G,,G 86A   	GD)5dGEY)Z)Z&D&,DI%%g..44T::A55f5559ABB\BBBQFA	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G    J\hm\\HM\\\    s=   F A#F7F FF 
FF 
F*F%%F*rC   dict[str, Any]strc                :    | d          d| d          d| d          S )NrZ   :columnz	: error: messager0   )rC   s    r$   r@   r@   i   s*    &kDDCMDDC	NDDDr&   rH   tuple[int, list[str]]c                R    | \  }}|sd| S d| dd                     |           dS )Nzignore:  [, ])rQ   )rH   rZ   codess      r$   rG   rG   m   sF    KD% 6 $   5$55$))E"2"25555r&   c           	        t                      }d|_        d|_        d                    | j                  }	 t          |          5 }t          ||          \  }}}t          |          }d |D             |z   }ddd           n# 1 swxY w Y   n# t          $ r}|j	        }Y d}~nd}~ww xY wt          | j        |d| j         d| j         d           dS )	zPerform a single native parser imports test case.

    The argument contains the description of the test case.
    This test outputs only reachable import information.
    Tr6   r<   c                ,    g | ]}t          |          S r0   r?   rA   s     r$   rD   z'test_parser_imports.<locals>.<listcomp>   rE   r&   NrI   rJ   rK   )r   rL   rO   rQ   rR   rT   r   format_reachable_importsr   rX   r   rY   rM   rZ   )	r   r[   r\   ra   rb   rc   rd   re   rf   s	            r$   r4   r4   u   sD    iiG#G$GYYx~&&F   	:D)5dG)D)D&D&, )..A55f5559A	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:    J \hm\\HM\\\    s;   B 3B:B B

B B
B 
B-B((B-rb   r   	list[str]c           
        ddl m}m}m} g }d | j        D             }|D ]}|j        }g }|j        s|                    d           |j        r|                    d           |rdd	                    |          z   dz   nd	}	t          ||          rL|j        D ]C\  }
}|r |                    | d
|
 d| |	            '|                    | d
|
 |	            Dt          ||          r|j        dk    r d|j        z  }|j        r| |j         }n
|}n|j        }g }|j        D ]7\  }}|r|                    | d|            "|                    |           8d	                    |          }|                    | d| d| |	            xt          ||          rO|j        dk    r d|j        z  }|j        r| |j         }n
|}n|j        }|                    | d| d|	            |S )zFormat reachable imports from a MypyFile node.

    Returns a list of strings representing reachable imports with line numbers and flags.
    r   )Import	ImportAll
ImportFromc                     g | ]}|j         	|S r0   )is_unreachable)rB   imps     r$   rD   z,format_reachable_imports.<locals>.<listcomp>   s     OOOC<NOOOOr&   znot top_level	mypy_onlyro   rp   rq    z	: import z as r   z: from z import z	 import *)
mypy.nodesrx   ry   rz   importsrZ   is_top_levelappendis_mypy_onlyrQ   
isinstanceidsrelativeidnames)rb   rx   ry   rz   rY   reachable_importsr}   line_numflags	flags_str	module_idas_idprefixmodule
name_partsnameas_name	names_strs                     r$   ru   ru      s   
 9888888888F POOOO  5L 5L8  	*LL))) 	&LL%%%5:BD499U+++c11	c6"" )	L$'G P P 	5 PMMX"Y"Y	"Y"Yu"Yi"Y"YZZZZMMX"N"N	"N9"N"NOOOO	P
 Z(( "	L |as|+6 $ &000FF#FF J!$ , ,g ,%%&<&<7&<&<====%%d++++		*--IMMXTTfTTiTTTUUUUY'' 	L |as|+6 $ &000FF#FFMMXJJfJJyJJKKKMr&   znativeparse not availablec                      e Zd ZddZdS )TestNativeParserBinaryFormatr   r   c           	        dddfd
}t          d          5 }t          |t                                \  }}}}}}t          |          t          dt
          j        t
          j        gt
          j        t          gz    d          gz   t          d          z    |dddd          z   t          t          dt
          j        gz   t           d          gz   t          d          z    |dddd          z   t          gz   t          d d          gz   t          dt          gz    |dddd          z   t          t          gz   k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nnintr   c                    | dz   dz  S )Nr8      r0   )r   s    r$   int_enczFTestNativeParserBinaryFormat.test_trivial_binary_data.<locals>.int_enc   s    Fq= r&   
start_linestart_columnend_line
end_column	list[int]c                p    t            |            |           || z
             ||z
            gS r    )r   )r   r   r   r   r   s       r$   locszCTestNativeParserBinaryFormat.test_trivial_binary_data.<locals>.locs   sN    
##%%:-..
\122 r&   zprint('hello')      s   printr   r   s   hello   r:   r;   )r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )rT   r   r   listr   r   	EXPR_STMT	CALL_EXPR	NAME_EXPRr   r   r	   STR_EXPRr
   r   )r#   r   ra   br_   r   s        @r$   test_trivial_binary_dataz5TestNativeParserBinaryFormat.test_trivial_binary_data   s   	! 	! 	! 	!	 	 	 	 	 	 )** 	d24CCAq!Q177b%/5?C?K0171::, x..! $q!Q""	#
 Hb%.9: 

+, x..! $q!Q##$ )	 R,- R./ $q!Q##$ G$%    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   D.EEEN)r   r   )r)   r*   r+   r   r0   r&   r$   r   r      s(        # # # # # #r&   r   textIterator[str]c              #  $  K   t          j                    5 }t          j                            |d          }t          |d          5 }|                    |            d d d            n# 1 swxY w Y   |V  d d d            d S # 1 swxY w Y   d S )Nzt.pyw)tempfileTemporaryDirectoryosrU   rQ   openwrite)r   temp_dir	temp_pathfs       r$   rT   rT      s     		$	&	& (GLL622	)S!! 	QGGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 		                 s5   1BA)B)A-	-B0A-	1BB	B	r'   )rC   rg   r   rh   )rH   rm   r   rh   )rb   r   r   rv   )r   rh   r   r   )6__doc__
__future__r   
contextlibr   r   unittestcollections.abcr   typingr   mypyr   r   
mypy.cacher   r	   r
   r   r   r   r   mypy.config_parserr   mypy.errorsr   r   r   mypy.optionsr   mypy.test.datar   r   mypy.test.helpersr   	mypy.utilr   mypy.nativeparser   r   r.   ImportErrorr   r2   r!   r@   rG   r4   ru   
skipUnlessTestCaser   contextmanagerrT   r0   r&   r$   <module>r      s    # " " " " "     				   $ $ $ $ $ $                                        3 2 2 2 2 2 $ $ $ $ $ $                   8 8 8 8 8 8 8 8 8 8 8 8 8 8 ' ' ' ' ' 'BBBBBBBBOO   OOO    	   & & & & &y & & &( ( ( (VE E E E6 6 6 6   6C C C CL _&ABB$ $ $ $ $8#4 $ $ CB$N      s   ,
A7 7B B