o
    HXh*                     @   sJ   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r#e  dS 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      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   ;/opt/python-3.10.19/usr/lib/python3.10/test/test_dynamic.pyconfigure_func   s   z"RebindBuiltinsTests.configure_funcc                 C   sf   dd }|  | | | d tt ddd  | | d W d    d S 1 s,w   Y  d S )Nc                   S      t g dS N)         lenr   r   r   r
   foo      z=RebindBuiltinsTests.test_globals_shadow_builtins.<locals>.foor   r   c                 S   r   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   sd   dd }|  | | | d ttddd  | | d W d    d S 1 s+w   Y  d S )Nc                   S   r   r   r   r   r   r   r
   r   (   r   z5RebindBuiltinsTests.test_modify_builtins.<locals>.foor   r   c                 S   r   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   sn   dd }|  | | }| t|d ttddd  | t|d W d    d S 1 s0w   Y  d S )Nc                  s   "    t d} t| V  t| V  d S Nr   ranger   r   r   r   r
   r   2      
zLRebindBuiltinsTests.test_modify_builtins_while_generator_active.<locals>.foor   r   c                 S   r   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   sf   t tdt# dd }dd }| |dd  | ||dd	g W d    d S 1 s,w   Y  d S )
Nr   c                   S   s   dd t _d S )Nc                 S   r   )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   r   r   r   r   r   r   r
   r   O   r   zQRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_eval.<locals>.foor   c                 S   r   r   r   r   r   r   r
   r   T   r   zVRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_eval.<locals>.<lambda>c                 S   r   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   r   r   r   r   r   r   r
   r   \   r   zQRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_exec.<locals>.foor   z	x = foo()r   r   r   c                 S   r   r   r   r   r   r   r
   r   e   r   zVRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_exec.<locals>.<lambda>c                 S   r   r1   r   r   r   r   r
   r   g   r   r3   )r   execr   )r   r   r7   r6   r   r   r
   0test_cannot_change_globals_or_builtins_with_exec[   s   


zDRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_execc                 C   st   dd }|  | | }| t|d tt dddd i | t|d W d    d S 1 s3w   Y  d S )Nc                  s   r"   r#   r$   r   r   r   r
   r   m   r&   zORebindBuiltinsTests.test_cannot_replace_builtins_dict_while_active.<locals>.foor   r4   r   c                 S   r   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   sj   dd }|  | | | d tt dddd i | | d W d    d S 1 s.w   Y  d S )Nc                   S   r   r   r   r   r   r   r
   r   y   r   zPRebindBuiltinsTests.test_cannot_replace_builtins_dict_between_calls.<locals>.foor   r4   r   c                 S   r   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   r   r   r   r   r   r   r
   r      r   zKRebindBuiltinsTests.test_eval_gives_lambda_custom_globals.<locals>.<lambda>zlambda: len([])r   )r5   r   r   )r   r7   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*   r0   r8   r:   r;   r<   r=   r   r   r   r
   r   	   s    

	r   __main__)	r    ZunittestZtest.supportr   r   ZTestCaser   r>   mainr   r   r   r
   <module>   s    