U
    {±Ëhò  ã                   @   s´   d dl Z d dlmZ d dlZddlmZ ddlmZ ddlm	Z	 ddl
mZ g ZejD ]&Zd d	d
„ edƒD ƒ¡Ze e¡ qVd e¡Zeƒ  G dd„ de jƒZedkr°e  ¡  dS )é    N)ÚStringIOé   )ÚScanning)ÚModuleScope)ÚStringParseContext)Úinit_threadú c                 C   s   g | ]}d t |f ‘qS )z%s%s)Úch)Ú.0Ún© r   úF/tmp/pip-unpacked-wheel-fhl22ezh/Cython/Compiler/Tests/TestScanning.pyÚ
<listcomp>   s     r   é
   Ú
c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestScanningc                 C   s:   t  dt¡}ttƒ}tdƒ}tdd d ƒ}t j||||dS )Nz	fake codezfake contextZfake_module)ÚscopeÚcontext)r   ZStringSourceDescriptorÚcoder   r   r   ZPyrexScanner)ÚselfÚsourceÚbufr   r   r   r   r   Úmake_scanner   s
    zTestScanning.make_scannerc                 C   s¨  |   ¡ }|  |jd¡ |  |jd¡ | ¡  |  |jd¡ |  |jd¡ |j}|  |dd … d¡ | ¡ }|  ||j¡ | ¡  |  ||j|jf¡ |jdkr¨| ¡  q”g }g }g }| ¡  |jdkrô| |j¡ | |j¡ | |j¡ | ¡  q¼t|d d d… |d d d… |d d d… ƒD ]\}}}	| 	|||	¡ qd}
|jdkr”|  |j||
 ¡ |  |j||
 ¡ |  |j||
 ¡ | ¡  |
d7 }
q>|  |
t
|ƒ¡ d S )	NZIDENTZa0Za1é   )r   é   ÚNEWLINEéÿÿÿÿr   )r   ÚassertEqualÚsyÚsystringÚnextÚlast_token_position_tupleÚpeekÚappendÚzipZput_backÚlen)r   ÚscannerZa1posZa2peekZline_syZline_systringZline_posr   r   Úposr   r   r   r   Útest_put_back_positions   sJ    



  ÿz$TestScanning.test_put_back_positionsc                 C   s~  |   ¡ }t |¡}|jdkr(| ¡  qW 5 Q R X |  |¡ | ¡  |  |jd¡ |j}t |¡0}|jdkrŽ| ¡  |jdkrd| 	d¡ qŽqdW 5 Q R X |  
|¡ |  |jd¡ |  |j|¡ | ¡  |  |jd¡ | ¡  |  |jd¡ t |¡}| 	d¡ W 5 Q R X |  |jd¡ | ¡  |  |jd¡ |j|j }}|j}t |¡¢ | ¡  |j|j }}	|j}
t |¡N t |¡  | ¡  | ¡  | 	d	¡ W 5 Q R X |  |j|jf||	f¡ W 5 Q R X |  |j|jf||	f¡ | 	d
¡ W 5 Q R X |  |j|jf||f¡ t |¡F | ¡  | ¡  t |¡ | ¡  W 5 Q R X | ¡  | 	d¡ W 5 Q R X |  |j|jf||f¡ d S )Nr   Zb0Zb7zOh no not b7!Zb1Zb2z0Something has gone wrong with the current symbolZb3ZOoopsZeeeZOooops)r   r   Ztentatively_scanr   r    ZassertFalser   r   r!   ÚerrorÚ
assertTrue)r   r&   Úerrorsr'   r)   Zsy1Z	systring1Zpos1Zsy2Z	systring2Úpos2r   r   r   Útest_tentatively_scanJ   sb    





"z"TestScanning.test_tentatively_scanN)Ú__name__Ú
__module__Ú__qualname__r   r(   r-   r   r   r   r   r      s   -r   Ú__main__)ZunittestÚior   ÚstringÚ r   ZSymtabr   ZTreeFragmentr   ZErrorsr   r   Úascii_lowercaser	   ÚjoinÚrangeÚliner#   ZTestCaser   r.   Úmainr   r   r   r   Ú<module>   s   

q