a
    zel                     @   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}t dD ]n}|| }zdd  W n2 ty6   Y n" tyF   Y n tyV   Y n0 zW n   Y n0 zW n0 || }q|dkr| d d S )Nr   
      Z   ztry inside for)range	NameErrorZeroDivisionError	TypeErrorfail)selfni r   '/usr/lib/python3.9/test/test_opcodes.pytest_try_inside_for_loop   s    
z#OpcodeTest.test_try_inside_for_loopc                 C   sj   zRt tj}| }W d    n1 s*0    Y  t|tjd}| |jd W n tyd   Y n0 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   sB   G dd d}|  t |j W d    n1 s40    Y  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#       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                    sN   t t di * t d= G  fddd}W d    n1 s@0    Y  d S )Nr'   c                       sB   e Zd ZU [ e eed< W d   n1 s40    Y  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globalsr(   r   r/   r    test_do_not_recreate_annotations,   s    z+OpcodeTest.test_do_not_recreate_annotationsc              
   C   sd  G dd dt }G dd d|}G dd dt }G dd d|}z
| W n   Y n0 z
| W n |yt   Y n0 z
| W n |y   Y n0 z
| W n$ |y   |   Y n   Y n0 | }| }z|W n2 |y
 } z| || W Y d }~nd }~0 0 | d	 z||W n2 |yT } z| || W Y d }~nd }~0 0 | d	 d S )
Nc                   @   s   e Zd ZdS )z6OpcodeTest.test_raise_class_exceptions.<locals>.AClassNr   r   r   r   r   AClass7   r$   r2   c                   @   s   e Zd ZdS )z6OpcodeTest.test_raise_class_exceptions.<locals>.BClassNr   r   r   r   r   BClass8   r$   r3   c                   @   s   e Zd ZdS )z6OpcodeTest.test_raise_class_exceptions.<locals>.CClassNr   r   r   r   r   CClass9   r$   r4   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"   r6   r   r   r   r   DClass:   s   r7   zno exception)	Exceptionr   r   ZassertIsInstance)r   r2   r3   r4   r7   abvr   r   r   test_raise_class_exceptions5   s0    "
"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"   rB   r   r   r   r   MyString   s   rC   r   r@   )strr   )r   rC   r   r   r    test_modulo_of_string_subclasses   s    z+OpcodeTest.test_modulo_of_string_subclassesN)r    r!   r"   r   r   r)   r.   r1   r<   r?   rE   r   r   r   r   r      s   
	+"r   __main__)Zunittesttestr   r   ZTestCaser   r    mainr   r   r   r   <module>   s
    