a
    ze*                     @   sF   d dl Z d dlZd dlmZmZ G dd dejZedkrBe  dS )    N)	swap_item	swap_attrc                   @   s`   e Zd 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d Zdd ZdS )RebindBuiltinsTestsz=Test all the ways that we can change/shadow globals/builtins.c                 G   s   dS )a  Perform TestCase-specific configuration on a function before testing.

        By default, this does nothing. Example usage: spinning a function so
        that a JIT will optimize it. Subclasses should override this as needed.

        Args:
            func: function to configure.
            *args: any arguments that should be passed to func, if calling it.

        Returns:
            Nothing. Work will be performed on func in-place.
        N )selffuncargsr   r   '/usr/lib/python3.9/test/test_dynamic.pyconfigure_func   s    z"RebindBuiltinsTests.configure_funcc                 C   sd   dd }|  | | | d tt ddd  | | d W d    n1 sV0    Y  d S )Nc                   S   s   t g dS N)         lenr   r   r   r	   foo   s    z=RebindBuiltinsTests.test_globals_shadow_builtins.<locals>.foor   r   c                 S   s   dS N   r   xr   r   r	   <lambda>#       zBRebindBuiltinsTests.test_globals_shadow_builtins.<locals>.<lambda>r   r
   assertEqualr   globalsr   r   r   r   r	   test_globals_shadow_builtins   s
    
z0RebindBuiltinsTests.test_globals_shadow_builtinsc                 C   sb   dd }|  | | | d ttddd  | | d W d    n1 sT0    Y  d S )Nc                   S   s   t g dS r   r   r   r   r   r	   r   (   s    z5RebindBuiltinsTests.test_modify_builtins.<locals>.foor   r   c                 S   s   dS r   r   r   r   r   r	   r   -   r   z:RebindBuiltinsTests.test_modify_builtins.<locals>.<lambda>r   )r
   r   r   builtinsr   r   r   r	   test_modify_builtins&   s
    
z(RebindBuiltinsTests.test_modify_builtinsc                 C   sl   dd }|  | | }| t|d ttddd   | t|d W d    n1 s^0    Y  d S )Nc                  s   s    t d} t| V  t| V  d S Nr   ranger   r   r   r   r	   r   2   s    
zLRebindBuiltinsTests.test_modify_builtins_while_generator_active.<locals>.foor   r   c                 S   s   dS r   r   r   r   r   r	   r   :   r   zQRebindBuiltinsTests.test_modify_builtins_while_generator_active.<locals>.<lambda>r   )r
   r   nextr   r   r   r   gr   r   r	   +test_modify_builtins_while_generator_active0   s    
z?RebindBuiltinsTests.test_modify_builtins_while_generator_activec                 C   sd   t tdtD dd }dd }| |dd  | ||dd	g W d    n1 sV0    Y  d S )
Nr   c                   S   s   dd t _d S )Nc                 S   s   dS )N   r   r   r   r   r	   r   B   r   zZRebindBuiltinsTests.test_modify_builtins_from_leaf_function.<locals>.bar.<locals>.<lambda>)r   r   r   r   r   r	   barA   s    zHRebindBuiltinsTests.test_modify_builtins_from_leaf_function.<locals>.barc                 S   s2   g }| ttd |   | ttd |S r   )appendr   r!   )modifierlr   r   r	   r   D   s
    zHRebindBuiltinsTests.test_modify_builtins_from_leaf_function.<locals>.fooc                   S   s   d S )Nr   r   r   r   r	   r   J   r   zMRebindBuiltinsTests.test_modify_builtins_from_leaf_function.<locals>.<lambda>r   r&   )r   r   r   r
   r   )r   r'   r   r   r   r	   'test_modify_builtins_from_leaf_function=   s
    z;RebindBuiltinsTests.test_modify_builtins_from_leaf_functionc                 C   sZ   dd }|  | ddd i}||dd d}| td|d	 | tdd
|id	 d S )Nc                   S   s   t g dS r   r   r   r   r   r	   r   O   s    zQRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_eval.<locals>.foor   c                 S   s   dS r   r   r   r   r   r	   r   T   r   zVRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_eval.<locals>.<lambda>c                 S   s   dS N   r   r   r   r   r	   r   V   r   r   __builtins__r   zfoo()r   r   )r
   r   eval)r   r   builtins_dictglobals_dictr   r   r	   0test_cannot_change_globals_or_builtins_with_evalN   s    
zDRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_evalc                 C   sn   dd }|  | d|i}td| | |d d ddd	 i}||d
d	 d}td| | |d d d S )Nc                   S   s   t g dS r   r   r   r   r   r	   r   \   s    zQRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_exec.<locals>.foor   z	x = foo()r   r   r   c                 S   s   dS r   r   r   r   r   r	   r   e   r   zVRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_exec.<locals>.<lambda>c                 S   s   dS r,   r   r   r   r   r	   r   g   r   r.   )r
   execr   )r   r   r2   r1   r   r   r	   0test_cannot_change_globals_or_builtins_with_exec[   s    


zDRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_execc                 C   sr   dd }|  | | }| t|d tt dddd i  | t|d W d    n1 sd0    Y  d S )Nc                  s   s    t d} t| V  t| V  d S r   r    r   r   r   r	   r   m   s    
zORebindBuiltinsTests.test_cannot_replace_builtins_dict_while_active.<locals>.foor   r/   r   c                 S   s   dS r   r   r   r   r   r	   r   u   r   zTRebindBuiltinsTests.test_cannot_replace_builtins_dict_while_active.<locals>.<lambda>)r
   r   r"   r   r   r#   r   r   r	   .test_cannot_replace_builtins_dict_while_activel   s    
zBRebindBuiltinsTests.test_cannot_replace_builtins_dict_while_activec                 C   sh   dd }|  | | | d tt dddd i | | d W d    n1 sZ0    Y  d S )Nc                   S   s   t g dS r   r   r   r   r   r	   r   y   s    zPRebindBuiltinsTests.test_cannot_replace_builtins_dict_between_calls.<locals>.foor   r/   r   c                 S   s   dS r   r   r   r   r   r	   r   ~   r   zURebindBuiltinsTests.test_cannot_replace_builtins_dict_between_calls.<locals>.<lambda>r   r   r   r   r	   /test_cannot_replace_builtins_dict_between_callsx   s
    
zCRebindBuiltinsTests.test_cannot_replace_builtins_dict_between_callsc                 C   s2   ddd i}t d|}| | | | d d S )Nr   c                 S   s   dS r   r   r   r   r   r	   r      r   zKRebindBuiltinsTests.test_eval_gives_lambda_custom_globals.<locals>.<lambda>zlambda: len([])r   )r0   r
   r   )r   r2   r   r   r   r	   %test_eval_gives_lambda_custom_globals   s    

z9RebindBuiltinsTests.test_eval_gives_lambda_custom_globalsN)__name__
__module____qualname____doc__r
   r   r   r%   r+   r3   r5   r6   r7   r8   r   r   r   r	   r   	   s   

	r   __main__)	r   ZunittestZtest.supportr   r   ZTestCaser   r9   mainr   r   r   r	   <module>   s    