o
    ”ëhj…  ã                   @   sÔ   d Z ddlZddlm  mZ ddlZddlm	Z	m
Z
 ddddddddd	d
dœ
Zej dee ¡ ƒ¡dedefdd„ƒZej dg d¢¡dededefdd„ƒZej dddg¡defdd„ƒZdd„ Zdd„ ZdS )a!  Unit tests for commands.py's command-code table and resolution logic.

Unlike test_codegen.py/test_real_scripts.py, these aren't byte-for-byte
regression tests against real RoborunPlus output (most of the ~300 manual-
sourced codes have never been individually bytecode-confirmed -- see
commands.py's docstring). These tests just pin down the resolution logic
itself: the 10 bytecode-confirmed values, and the verb-specific handling
for the handful of aliases that mean different things depending on which
device-I/O function they're passed to.
é    N)ÚUnknownCommandErrorÚresolve_command_codeé   é*   é   é   é   é   é   )
Ú_VARÚ_ALIMÚ_MSÚ_GOÚ_ESTOPÚ_AIÚ_BATAMPSÚ_MOTAMPSÚ_MOTPWRÚ_Vz	name,codeÚnameÚcodec                 C   sÄ   t | ƒ}||k}|s\t d|fd||f¡dt ¡ v st t ¡r$t t ¡nddt ¡ v s0t | ¡r5t | ¡ndt |¡dt ¡ v sEt |¡rJt |¡nddœ }dd|i }tt |¡ƒ‚d  }}d S )	N©ú==)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sr   r   r   )Úpy0Úpy1Úpy3Úpy5zassert %(py7)sÚpy7©	r   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)r   r   Ú@py_assert2Ú@py_assert4Ú@py_format6Ú@py_format8© r+   úB/sessions/nice-awesome-ritchie/mnt/compiler/tests/test_commands.pyÚtest_bytecode_confirmed_codes    s   Är-   zname,verb,code))Ú_BRUNÚ
setcommandr   )r.   Ú	setconfigéH   )Ú_CSSr/   él   )r2   Úgetvalueén   Úverbc                 C   sê   t | |d}||k}|sot d|fd||f¡dt ¡ v s!t t ¡r&t t ¡nddt ¡ v s2t | ¡r7t | ¡nddt ¡ v sCt |¡rHt |¡ndt |¡dt ¡ v sXt |¡r]t |¡nddœ }d	d
|i }tt |¡ƒ‚d  }}d S )N)r6   r   )z>%(py4)s
{%(py4)s = %(py0)s(%(py1)s, verb=%(py2)s)
} == %(py6)sr   r   r6   r   )r   r   Úpy2Úpy4Úpy6zassert %(py8)sÚpy8r   )r   r6   r   Ú@py_assert3Ú@py_assert5Ú@py_format7Ú@py_format9r+   r+   r,   Útest_verb_specific_codes%   s   ê
r?   r.   r2   c                 C   s8   t  t¡ t| ƒ W d   ƒ d S 1 sw   Y  d S )N©ÚpytestÚraisesr   r   )r   r+   r+   r,   Ú*test_verb_specific_names_not_in_flat_table2   s   
"ÿrC   c                   C   s8   t  t¡ tdƒ W d   ƒ d S 1 sw   Y  d S )NÚ_NOT_A_REAL_COMMANDr@   r+   r+   r+   r,   Útest_unknown_command_raises;   s   
"ÿrE   c            
      C   s0  d} t | ƒ}d}t |ƒ}||k}d}t |ƒ}||k}|r|s†t d||fd|||f¡dt ¡ v s5t t ¡r:t t ¡ndt | ¡t |¡dt ¡ v sNt t ¡rSt t ¡ndt |¡t |¡dt ¡ v sgt t ¡rlt t ¡ndt |¡t |¡dœ	 }dd	|i }	tt |	¡ƒ‚d  }  } } } } } }}d S )
NÚ_varr   ÚVAR)r   r   )zP%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py11)s
{%(py11)s = %(py7)s(%(py9)s)
}zT%(py11)s
{%(py11)s = %(py7)s(%(py9)s)
} == %(py16)s
{%(py16)s = %(py12)s(%(py14)s)
}r   )	r   r7   r8   r   Úpy9Úpy11Úpy12Úpy14Úpy16zassert %(py18)sÚpy18r   )
Ú@py_assert1r;   Ú@py_assert8Ú@py_assert10r<   Ú@py_assert13Ú@py_assert15Ú@py_assert6Ú@py_format17Ú@py_format19r+   r+   r,   Ú$test_case_and_underscore_insensitive@   s   þ2 rV   )Ú__doc__Úbuiltinsr!   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   rA   Úmicrobasic_compiler.commandsr   r   ÚBYTECODE_CONFIRMEDÚmarkÚparametrizeÚsortedÚitemsÚstrÚintr-   r?   rC   rE   rV   r+   r+   r+   r,   Ú<module>   s2    "öþ	