B
    u9al                 @   s>   d dl Z d dlmZmZ G dd de jZedkr:e   dS )    N)
ann_modulesupportc               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )
OpcodeTestc          	   C   s   d}xt dD ]t}|| }ydd  W n8 tk
r:   Y n& tk
rL   Y n tk
r^   Y nX yW n   Y nX zW d X || }qW |dkr| d d S )Nr   
      Z   ztry inside for)range	NameErrorZeroDivisionError	TypeErrorfail)selfni r   "/usr/lib/python3.7/test_opcodes.pytest_try_inside_for_loop   s*           z#OpcodeTest.test_try_inside_for_loopc          	   C   sX   y>t tj}| }W d Q R X t|tjd}| |jd W n tk
rR   Y nX d S )Nexec   )openr   __file__readcompileassertEqualco_firstlinenoOSError)r   fZtxtcor   r   r   test_setup_annotations_line   s    z&OpcodeTest.test_setup_annotations_linec          	   C   s.   G dd d}|  t |j W d Q R X d S )Nc               @   s   e Zd ZdS )z7OpcodeTest.test_no_annotations_if_not_needed.<locals>.CN)__name__
__module____qualname__r   r   r   r   C#   s    r"   )assertRaisesAttributeError__annotations__)r   r"   r   r   r   !test_no_annotations_if_not_needed"   s    z,OpcodeTest.test_no_annotations_if_not_neededc             C   s0   dddii}t d| | |d tdd d S )Nr%   r      zx: int)xr   )r   r   int)r   nsr   r   r   test_use_existing_annotations'   s    
z(OpcodeTest.test_use_existing_annotationsc          	      s:   t t di   t d= G  fddd}W d Q R X d S )Nr%   c            	       s.   e Zd ZU [ e eed< W dQ R X dS )z6OpcodeTest.test_do_not_recreate_annotations.<locals>.Cr(   N)r   r    r!   r%   r#   r	   r)   r   )r   r   r   r"   0   s   
r"   )r   Z	swap_itemglobals)r   r"   r   )r   r    test_do_not_recreate_annotations,   s    z+OpcodeTest.test_do_not_recreate_annotationsc          
   C   sf  G dd dt }G dd d|}G dd dt }G dd d|}y
| W n   Y nX y
| W n |k
rv   Y nX y
| W n |k
r   Y nX y
| W n& |k
r   |   Y n   Y nX | }| }y|W n0 |k
r } z| || W d d }~X Y nX | d	 y||W n0 |k
rV } z| || W d d }~X Y nX | d	 d S )
Nc               @   s   e Zd ZdS )z6OpcodeTest.test_raise_class_exceptions.<locals>.AClassN)r   r    r!   r   r   r   r   AClass7   s    r.   c               @   s   e Zd ZdS )z6OpcodeTest.test_raise_class_exceptions.<locals>.BClassN)r   r    r!   r   r   r   r   BClass8   s    r/   c               @   s   e Zd ZdS )z6OpcodeTest.test_raise_class_exceptions.<locals>.CClassN)r   r    r!   r   r   r   r   CClass9   s    r0   c               @   s   e Zd Zdd ZdS )z6OpcodeTest.test_raise_class_exceptions.<locals>.DClassc             S   s   d S )Nr   )r   ignorer   r   r   __init__;   s    z?OpcodeTest.test_raise_class_exceptions.<locals>.DClass.__init__N)r   r    r!   r2   r   r   r   r   DClass:   s   r3   zno exception)	Exceptionr   r   ZassertIsInstance)r   r.   r/   r0   r3   abvr   r   r   test_raise_class_exceptions5   sD     
  
  
  
  
 z&OpcodeTest.test_raise_class_exceptionsc             C   s   t d}t d}| || t d}t d}| || t d}t d}| || t d}t d}| || t d}t d}| || t d}t d}| || t d}t d}| || t d	}t d
}| || d S )Nzlambda: Nonezlambda a: azlambda a=1: az	lambda: 0z	lambda: 1zlambda a: Nonezlambda b: Nonezlambda a=None: Nonezlambda a=0: Nonezlambda a=1: None)evalZassertNotEqual)r   r   gr   r   r   test_compare_function_objects`   s0    z(OpcodeTest.test_compare_function_objectsc             C   s&   G dd dt }| | d d d S )Nc               @   s   e Zd Zdd ZdS )z=OpcodeTest.test_modulo_of_string_subclasses.<locals>.MyStringc             S   s   dS )N*   r   )r   valuer   r   r   __mod__   s    zEOpcodeTest.test_modulo_of_string_subclasses.<locals>.MyString.__mod__N)r   r    r!   r>   r   r   r   r   MyString   s   r?      r<   )strr   )r   r?   r   r   r    test_modulo_of_string_subclasses   s    z+OpcodeTest.test_modulo_of_string_subclassesN)r   r    r!   r   r   r&   r+   r-   r8   r;   rB   r   r   r   r   r      s   
	+"r   __main__)ZunittestZtestr   r   ZTestCaser   r   mainr   r   r   r   <module>   s
    