a
    "RhH                     @   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   D/opt/python-3.9.24/usr/lib/python3.9/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 rTd||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   ZinstrZdisassemblymsgr   r   r   assertInBytecode   s    


z!BytecodeTestCase.assertInBytecodec                 C   sd   t |D ]T}|j|kr
| |}|tu r8d||f }n|j|krTd}||||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   Zunittestr   r   objectr   ZTestCaser   r   r   r   r   <module>   s
   