
    \j($                       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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!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, dZ-n# e.$ r dZ-Y nw xY w G d de"          Z/ G d de"          Z0d1dZ1d2dZ2d3d!Z3d4d'Z4d1d(Z5d5d*Z6 ej7        e-d+           G d, d-ej8                              Z9ej:        d6d0            Z;dS )7zTests 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)
ReadBuffer)defaultsnodes)END_TAGLIST_GENLIST_INTLITERAL_INTLITERAL_NONELITERAL_STRLOCATIONread_int)parse_mypy_comments)CompileError)MypyFile
ParseError)Options)DataDrivenTestCase	DataSuite)assert_string_arrays_equal)get_mypy_comments)Statedeserialize_importsnative_parseparse_to_binary_astread_statementsTFc                  ,    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     ^/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/mypy/test/test_nativeparse.pyrun_casezNativeParserSuite.run_case9   s    H    Nr!   r   r"   r#   __name__
__module____qualname__required_out_section	base_pathhas_nativeparsefilesr*    r+   r)   r   r   4   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_caseB   s    H%%%%%r+   Nr,   r-   r5   r+   r)   r7   r7   =   sF        I.=E)**2E& & & & & &r+   r7   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          |||          \  }}	}
|	t          ||          z  }	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)r<      zpython313.test)r<      zpython314.test)r<      
z# mypy: ignore-errors=Truemainc                ,    g | ]}t          |          S r5   format_error.0errs     r)   
<listcomp>ztest_parser.<locals>.<listcomp>i        555sc""555r+   c                ,    g | ]}t          |          S r5   )format_ignore)rG   ignores     r)   rI   ztest_parser.<locals>.<listcomp>j   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   	load_tree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&   F   so   
 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&,ig...F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" A6F
F" FF" FF" "
F=,F88F=rH   r   strc                :    | d          d| d          d| d          S )Nr`   :columnz	: error: messager5   )rH   s    r)   rE   rE   r   s*    &kDDCMDDC	NDDDr+   rM   tuple[int, list[str]]c                R    | \  }}|sd| S d| dd                     |           dS )Nzignore:  [, ])rV   )rM   r`   codess      r)   rL   rL   v   sF    KD% 6 $   5$55$))E"2"25555r+   rh   r   ra   r   list[ParseError]c                   | j         J t          |          }t          | j         j                  }t	          |          }t          |||          | _        t          | j         j                  | _        d| _         |j        S )z.Deserialize full AST from serialized raw data.N)	raw_datar   r   defsr   r   r   importsri   )rh   ra   statedatans        r)   rZ   rZ   ~   sn    =$$$'NNEdm())DAtQ//DI&t}'<==DLDM<r+   c           	        t                      }d|_        d|_        d                    | j                  }	 t          |          5 }t          ||          \  }}}|t          ||          z  }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.
    Tr;   rA   c                ,    g | ]}t          |          S r5   rD   rF   s     r)   rI   z'test_parser_imports.<locals>.<listcomp>   rJ   r+   NrN   rO   rP   )r   rQ   rT   rV   rW   rY   r   rZ   format_reachable_importsr   r^   r   r_   rR   r`   )	r!   ra   rb   rg   rh   ri   rj   rk   rl   s	            r)   r9   r9      sV    iiG#G$GYYx~&&F   	:D)5dG)D)D&D&,ig...F(..A55f5559A	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:    J \hm\\HM\\\    s<   B% ABB% BB%  B!B% %
C /B;;C 	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 r5   )is_unreachable)rG   imps     r)   rI   z,format_reachable_imports.<locals>.<listcomp>   s     OOOC<NOOOOr+   znot top_level	mypy_onlyrt   ru   rv    z	: import z as r    z: from z import z	 import *)
mypy.nodesr   r   r   r|   r`   is_top_levelappendis_mypy_onlyrV   
isinstanceidsrelativeidnames)rh   r   r   r   r_   reachable_importsr   line_numflags	flags_str	module_idas_idprefixmodule
name_partsnameas_name	names_strs                     r)   r   r      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 )Nr   intr"   c                    | dz   dz  S )Nr=      r5   )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   )rY   r   r   listr   r   	EXPR_STMT	CALL_EXPR	NAME_EXPRr   r   r	   STR_EXPRr
   r   )r(   r   rg   bre   r   s        @r)   test_trivial_binary_dataz5TestNativeParserBinaryFormat.test_trivial_binary_data   s   	! 	! 	! 	!	 	 	 	 	 	 )** 	d%8wyy%I%I"Aq!Q1a77b%/5?C?K0171::, x..! $q!Q""	#
 Hb%.9: 

+, x..! $q!Q##$ )	 R,- R./ $q!Q##$ G$%    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   D0EE EN)r"   r#   )r.   r/   r0   r   r5   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osr[   rV   openwrite)r   temp_dir	temp_pathfs       r)   rY   rY     s     		$	&	& (GLL622	)S!! 	QGGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 		                 s5   1BA)B)A-	-B0A-	1BB	B	r,   )rH   r   r"   rm   )rM   rr   r"   rm   )rh   r   ra   r   r"   rx   )rh   r   r"   r   )r   rm   r"   r   )<__doc__
__future__r   
contextlibr   r   unittestcollections.abcr   librt.internalr   mypyr   r   
mypy.cacher   r	   r
   r   r   r   r   r   mypy.config_parserr   mypy.errorsr   r   r   r   mypy.optionsr   mypy.test.datar   r   mypy.test.helpersr   	mypy.utilr   mypy.nativeparser   r   r   r   r   r3   ImportErrorr   r7   r&   rE   rL   rZ   r9   r   
skipUnlessTestCaser   contextmanagerrY   r5   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 ' ' ' ' ' '              OO   OOO    	   & & & & &y & & &) ) ) )XE E E E6 6 6 6	 	 	 	   6C C C CL _&ABB$ $ $ $ $8#4 $ $ CB$N      s   0B B
B