U
    †µ“e£  ã                   @   sÀ   d dl mZ 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¡ qbd e¡Zeƒ  G dd„ dejƒZedkr¼e ¡  dS )é    )Úunicode_literalsN)Ú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-7k3cqui1/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¡ | ¡ }|  |dd … d¡ | ¡ }|  || ¡ ¡ | ¡  |  ||j|jf¡ |jdkr¬| ¡  q˜g }g }g }| ¡  |jdkrú| |j¡ | |j¡ | | ¡ ¡ | ¡  qÀt|d d d… |d d d… |d d d… ƒD ]\}}}	| 	|||	¡ q$d}
|jdkrœ|  |j||
 ¡ |  |j||
 ¡ |  | ¡ ||
 ¡ | ¡  |
d7 }
qD|  |
t
|ƒ¡ d S )	NZIDENTZa0Za1é   )r   é   ÚNEWLINEéÿÿÿÿr   )r   ÚassertEqualÚsyÚsystringÚnextÚpositionÚ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¡ | ¡ }t |¡0}|jdkr| ¡  |jdkrf| 	d¡ qqfW 5 Q R X |  
|¡ |  |jd¡ |  | ¡ |¡ | ¡  |  |jd¡ | ¡  |  |jd¡ t |¡}| 	d¡ W 5 Q R X |  |jd¡ | ¡  |  |jd¡ |j|j }}| ¡ }t |¡¤ | ¡  |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_scanL   sb    





"z"TestScanning.test_tentatively_scanN)Ú__name__Ú
__module__Ú__qualname__r   r)   r.   r   r   r   r   r      s   -r   Ú__main__)Ú
__future__r   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