o
    wÖiò  ã                   @   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¡ q+d e¡Zeƒ  G dd„ de jƒZedkrZe  ¡  dS 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   ú_/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/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 contextÚfake_module)ÚscopeÚcontext)r   ÚStringSourceDescriptorÚcoder   r   r   Ú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rX| ¡  |jdksOg }g }g }| ¡  |jdkr‚| |j¡ | |j¡ | |j¡ | ¡  |jdksgt|d d d… |d d d… |d d d… ƒD ]\}}}	| 	|||	¡ q—d}
|jdkrÓ|  |j||
 ¡ |  |j||
 ¡ |  |j||
 ¡ | ¡  |
d7 }
|jdks«|  |
t
|ƒ¡ d S )	NÚIDENTÚa0Úa1é   )r   é   ÚNEWLINEéÿÿÿÿr   )r   ÚassertEqualÚsyÚsystringÚnextÚlast_token_position_tupleÚpeekÚappendÚzipÚput_backÚlen)r   ÚscannerÚa1posÚa2peekÚline_syÚline_systringÚline_posr$   r%   Úposr   r   r   r   Útest_put_back_positions   sL   

ÿ

ü$ÿ

ûz$TestScanning.test_put_back_positionsc              
   C   s6  |   ¡ }t |¡}|jdkr| ¡  |jdksW d   ƒ n1 s"w   Y  |  |¡ | ¡  |  |jd¡ |j}t |¡!}|jdkrY| ¡  |jdkrT| 	d¡ n|jdksEW d   ƒ n1 scw   Y  |  
|¡ |  |jd¡ |  |j|¡ | ¡  |  |jd¡ | ¡  |  |jd¡ t |¡}| 	d¡ W d   ƒ n1 s¦w   Y  |  |jd¡ | ¡  |  |jd¡ |j|j}}|j}t |¡k | ¡  |j|j}}	|j}
t |¡6 t |¡ | ¡  | ¡  | 	d	¡ W d   ƒ n1 sþw   Y  |  |j|jf||	f¡ W d   ƒ n	1 sw   Y  |  |j|jf||	f¡ | 	d
¡ W d   ƒ n	1 s;w   Y  |  |j|jf||f¡ t |¡3 | ¡  | ¡  t |¡ | ¡  W d   ƒ n	1 sow   Y  | ¡  | 	d¡ W d   ƒ n	1 sˆw   Y  |  |j|jf||f¡ d S )Nr!   Úb0Úb7zOh no not b7!Úb1Úb2z0Something has gone wrong with the current symbolÚb3ÚOoopsÚeeeÚOooops)r   r   Útentatively_scanr$   r&   ÚassertFalser#   r%   r'   ÚerrorÚ
assertTrue)r   r-   Úerrorsr3   r?   Úsy1Ú	systring1Úpos1Úsy2Ú	systring2Úpos2r   r   r   Útest_tentatively_scanJ   sz   

ÿ€ÿ




ü€ÿ
ÿýûõ
ÿùz"TestScanning.test_tentatively_scanN)Ú__name__Ú
__module__Ú__qualname__r   r4   rH   r   r   r   r   r      s    -r   Ú__main__)ÚunittestÚior   ÚstringÚ r   ÚSymtabr   ÚTreeFragmentr   ÚErrorsr   r   Úascii_lowercaser	   ÚjoinÚrangeÚliner)   ÚTestCaser   rI   Úmainr   r   r   r   Ú<module>   s"    

qÿ