o
    éT•jo  ã                   @   s8   d Z ddlZddlZddlZeƒ ZG dd„ dejƒZdS )zGbytecode_helper - support tools for testing correct bytecode generationé    Nc                   @   s0   e Zd ZdZdd„ Zefdd„Zefdd„ZdS )	ÚBytecodeTestCasez1Custom assertion methods for inspecting bytecode.c                 C   s   t  ¡ }tj||d� | ¡ S )N)Úfile)ÚioÚStringIOÚdisÚgetvalue)ÚselfÚcoÚs© r   ú3/usr/lib/python3.10/test/support/bytecode_helper.pyÚget_disassembly_as_string   s   z*BytecodeTestCase.get_disassembly_as_stringc                 C   st   t  |¡D ]}|j|kr|tu s|j|kr|  S q|  |¡}|tu r*d||f }n	d}||||f }|  |¡ dS )zAReturns instr if opname is found, otherwise throws AssertionErrorz%s not found in bytecode:
%sz!(%s,%r) not found in bytecode:
%sN)r   Úget_instructionsÚopnameÚ_UNSPECIFIEDÚargvalr   Úfail©r   Úxr   r   ÚinstrÚdisassemblyÚmsgr   r   r   ÚassertInBytecode   s   
€
z!BytecodeTestCase.assertInBytecodec                 C   sn   t  |¡D ]/}|j|kr4|  |¡}|tu r!d||f }|  |¡ q|j|kr4d}||||f }|  |¡ qdS )z(Throws AssertionError if opname is foundz%s occurs in bytecode:
%sz(%s,%r) occurs in bytecode:
%sN)r   r   r   r   r   r   r   r   r   r   r   ÚassertNotInBytecode   s   



€÷z$BytecodeTestCase.assertNotInBytecodeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r   	   s
    r   )r   Úunittestr   r   Úobjectr   ÚTestCaser   r   r   r   r   Ú<module>   s    