o
    çßgjm  ã                   @   sz   d dl Zd dlm  mZ d dlmZ d dlm	Z	 d dl
mZ dd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)ÚPath)Útokenize)Ú	TokenTypec                  C   ó–   t dƒ} dd„ | D ƒ}g d¢}||k}|sEt d|fd||f¡dt ¡ v s*t |¡r/t |¡ndt |¡dœ }d	d
|i }tt |¡ƒ‚d  }}d S )Nz120 0xA1 0b101c                 S   ó   g | ]}|j tjkr|j‘qS © )Útyper   ÚINTEGERÚvalue©Ú.0Útr   r   ú?/sessions/nice-awesome-ritchie/mnt/compiler/tests/test_lexer.pyÚ
<listcomp>	   ó    z test_numbers.<locals>.<listcomp>)Ú120Ú0xA1Ú0b101©ú==©z%(py0)s == %(py3)sÚvalues©Úpy0Úpy3úassert %(py5)sÚpy5©	r   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)Útoksr   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6r   r   r   Útest_numbers   ó   €r+   c                  C   sŠ   dd„ t dƒD ƒ} dd„ | D ƒ}g d¢}||k}|s=t d|fd||f¡t |¡t |¡dœ }d	d
|i }tt |¡ƒ‚d  } }}d S )Nc                 S   s"   g | ]}|j tjtjfvr|‘qS r   )r   r   ÚNEWLINEÚEOFr   r   r   r   r      s
    þz(test_comment_ignored.<locals>.<listcomp>zx = 1 ' trailing comment
c                 S   s   g | ]}|j ‘qS r   )r
   r   r   r   r   r      s    )Úxú=Ú1r   )z%(py1)s == %(py4)s)Úpy1Úpy4zassert %(py6)sÚpy6)r   r   r   r#   r$   r%   )r&   Ú@py_assert0Ú@py_assert3r'   Ú@py_format5Ú@py_format7r   r   r   Útest_comment_ignored   s   þxr9   c            
      C   ó(  t dƒ} | d }|j}tj}||k}|sLt d|fd||f¡t |¡t |¡dt ¡ v s1t 	t¡r6t t¡ndt |¡dœ }dd|i }t
t |¡ƒ‚d  } } }}| d }|j}d	}||k}|sŠt d|fd
||f¡t |¡t |¡t |¡dœ }dd|i }	t
t |	¡ƒ‚d  } } }}d S )Nz	"Hello\n"r   r   )zH%(py3)s
{%(py3)s = %(py1)s.type
} == %(py7)s
{%(py7)s = %(py5)s.STRING
}r   ©r2   r   r   Úpy7úassert %(py9)sÚpy9zHello
©z-%(py3)s
{%(py3)s = %(py1)s.value
} == %(py6)s©r2   r   r4   úassert %(py8)sÚpy8)r   r   r   ÚSTRINGr   r   r#   r    r!   r"   r$   r%   r
   ©
r&   r5   r'   Ú@py_assert6Ú@py_assert4Ú@py_format8Ú@py_format10Ú@py_assert5r8   Ú@py_format9r   r   r   Útest_string_escapes   ó    €rK   c                  C   r   )NzIf a Then
End If
c                 S   r   r   )r   r   ÚKEYWORDr
   r   r   r   r   r      r   z1test_keyword_case_insensitive.<locals>.<listcomp>)ÚifÚthenÚendrN   r   r   Ú	kw_valuesr   r   r   r   )r&   rQ   r'   r(   r)   r*   r   r   r   Útest_keyword_case_insensitive   r,   rR   c            
      C   r:   )Nztop:
goto top
r   r   )zG%(py3)s
{%(py3)s = %(py1)s.type
} == %(py7)s
{%(py7)s = %(py5)s.LABEL
}r   r;   r=   r>   Útopr?   r@   rA   rB   )r   r   r   ÚLABELr   r   r#   r    r!   r"   r$   r%   r
   rD   r   r   r   Ú
test_label"   rL   rU   c                  C   s”   t dƒ} dd„ | D ƒ}dg}||k}|sDt d|fd||f¡dt ¡ v s)t |¡r.t |¡ndt |¡dœ }d	d
|i }tt |¡ƒ‚d  }}d S )Nzx += 1c                 S   r   r   )r   r   ÚOPr
   r   r   r   r   r   *   r   z5test_compound_assignment_operator.<locals>.<listcomp>z+=r   r   Ú	op_valuesr   r   r   r   )r&   rW   r'   r(   r)   r*   r   r   r   Ú!test_compound_assignment_operator(   s   ~rX   c                  C   sÄ   t tƒjjd d } t|  ¡ ƒ}|d }|j}tj}||k}|sXt 	d|fd||f¡t 
|¡t 
|¡dt ¡ v s=t t¡rBt 
t¡ndt 
|¡dœ }dd	|i }tt |¡ƒ‚d  } } }}d S )
NÚexampleszblink.mbéÿÿÿÿr   )zE%(py3)s
{%(py3)s = %(py1)s.type
} == %(py7)s
{%(py7)s = %(py5)s.EOF
}r   r;   r=   r>   )r   Ú__file__Úparentr   Ú	read_textr   r   r.   r   r   r#   r    r!   r"   r$   r%   )ÚsourceÚtokensr5   r'   rE   rF   rG   rH   r   r   r   Ú+test_example_script_tokenizes_without_error.   s   ¤r`   )Úbuiltinsr    Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   Úpathlibr   Úmicrobasic_compiler.lexerr   Úmicrobasic_compiler.tokensr   r+   r9   rK   rR   rU   rX   r`   r   r   r   r   Ú<module>   s   & 	