B
    u9a@                 @   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   %/usr/lib/python3.7/bytecode_helper.pyget_disassembly_as_string   s    z*BytecodeTestCase.get_disassembly_as_stringc             C   st   x2t |D ]$}|j|kr|tks,|j|kr|S qW | |}|tkrTd||f }nd}||||f }| | dS )z=Returns instr if op 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   sh   xbt |D ]T}|j|kr| |}|tkr:d||f }n|j|krVd}||||f }| | qW dS )z$Throws AssertionError if op is foundz%s occurs in bytecode:
%sz(%s,%r) occurs in bytecode:
%sN)r   r   r   r   r   r   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
   