
    c)                         d Z ddlZddlZddlmZ ddlmZ  G d dej                  ZdZ G d d	ej                  Z	 G d
 dej                  Z
 G d dej                  Z G d dej                  ZdS )as  Tests for advice

This module was adapted from 'protocols.tests.advice', part of the Python
Enterprise Application Kit (PEAK).  Please notify the PEAK authors
(pje@telecommunity.com and tsarna@sarna.org) if bugs are found or
Zope-specific changes are required, so that the PEAK version of this module
can be kept in sync.

PEAK is a Python application framework that interoperates with (but does
not require) Zope 3 and Twisted.  It provides tools for manipulating UML
models, object-relational persistence, aspect-oriented programming, and more.
Visit the PEAK home page at http://peak.telecommunity.com for more information.
    N)_skip_under_py2)_skip_under_py3kc                   <    e Zd Zd Zed             Zd Zd Zd ZdS )FrameInfoTestc                     ddl m} |j        \  }}}}|                     |d           |j        ||fD ]}|                     ||j        u            d S )Nr   advisory_testingmodule)zope.interface.testsr	   moduleLevelFrameInfoassertEqual__dict__
assertTrue
my_globalsselfr	   kindr
   f_locals	f_globalsds          @lib/python3.11/site-packages/zope/interface/tests/test_advice.pytest_w_modulezFrameInfoTest.test_w_module%   s~    999999 0 E	v	9x((((I5 	> 	>AOOA!1!<<====	> 	>    c                     ddl m} |j        j        \  }}}}|                     |d           |                     ||j        j        u            |j        |fD ]}|                     ||j        u            d S Nr   r   class)r   r	   ClassicClassclassLevelFrameInfor   r   r   r   r   s          r   test_w_ClassicClassz!FrameInfoTest.test_w_ClassicClass-   s    999999 '3G				w'''(5>>	@ 	@ 	@)+ 	> 	>AOOA!1!<<====	> 	>r   c                     ddl m} |j        j        \  }}}}|                     |d           |j        |fD ]}|                     ||j        u            d S r   )r   r	   NewStyleClassr   r   r   r   r   r   s          r   test_w_NewStyleClassz"FrameInfoTest.test_w_NewStyleClass;   s    999999 '4H				w''')+ 	> 	>AOOA!1!<<====	> 	>r   c                 $   ddl m}  |t          j                              \  }}}}|                     |d           |                     |t                      u            |j        |fD ]%}|                     |t                      u            &d S )Nr   getFrameInfozfunction call)	zope.interface.advicer%   sys	_getframer   r   localsr   globals)r   r%   r   r
   r   r   r   s          r   test_inside_function_callz'FrameInfoTest.test_inside_function_callF   s    666666,8L,I,I)fh	///FHH,---)+ 	, 	,AOOAN++++	, 	,r   c                 0   ddl m} d|i}i }t          t          ||           |                     |d         d           |                     |d         |u            |                     |d         d u            |                     |d         |u            d S )	Nr   r$   r%   r   execr   r
   r   )r&   r%   r-   _FUNKY_EXECr   r   )r   r%   _globals_localss       r   test_inside_execzFrameInfoTest.test_inside_execN   s    666666"L1[(G,,,&111
+w6777)T1222,899999r   N)	__name__
__module____qualname__r   r   r   r"   r+   r1    r   r   r   r   #   sl        > > > > > >	> 	> 	>, , ,: : : : :r   r   zMimport sys
kind, module, f_locals, f_globals = getFrameInfo(sys._getframe())
c                   f    e Zd Zed             Zed             Zed             Zed             ZdS )AdviceTestsc                     ddl m g  G fddt                    }dD ].}|                     t	          |t
                               |\  }/|                     d|fd|gfd|ggfg           d S )	Nr   pingc                   X    e Zd Z  d             d             d           dS )#AdviceTests.test_order.<locals>.Foo         Nr2   r3   r4   )logr:   s   r   Foor<   d   s<        DaLLLDaLLLDaLLLLLr   rB   )r=   r>   r?   r=   r>   r?   )%zope.interface.tests.advisory_testingr:   objectr   
isinstancelistr   )r   rB   irA   r:   s      @@r   
test_orderzAdviceTests.test_order`   s    >>>>>>	 	 	 	 	 	 	 	& 	 	 	  	 	AOOJsD11222DCC3x!cUa3%\BCCCCCr   c                     ddl m  G d dt                     G fdd          }|\  }|                     |j        u            d S )Nr   r9   c                       e Zd ZdS )8AdviceTests.test_single_explicit_meta.<locals>.MetaclassNr@   r5   r   r   	MetaclassrK   t           Dr   rL   c                   ,    e Zd Z Z g d           dS )7AdviceTests.test_single_explicit_meta.<locals>.Concreter=   Nr2   r3   r4   __metaclass__)rL   r:   s   r   ConcreterO   w   s#        %MDAJJJJJr   rR   )rC   r:   typer   	__class__)r   rR   rL   r:   s     @@r   test_single_explicit_metaz%AdviceTests.test_single_explicit_metap   s    >>>>>>	 	 	 	 	 	 	 		 	 	 	 	 	 	 	y 	 	 	 	*i788888r   c                    ddl m  G d dt                     G d dt                     G fdd          } G fd	d
          }	  G fdd||          }|                     d           n# t          $ r Y nw xY w G d d           G fdd||          }|                     t          |t                               |\  }|                     t          |                     d S )Nr   r9   c                       e Zd ZdS )0AdviceTests.test_mixed_metas.<locals>.Metaclass1Nr@   r5   r   r   
Metaclass1rX      rM   r   rY   c                       e Zd ZdS )0AdviceTests.test_mixed_metas.<locals>.Metaclass2Nr@   r5   r   r   
Metaclass2r[      rM   r   r\   c                       e Zd Z ZdS )+AdviceTests.test_mixed_metas.<locals>.Base1NrP   )rY   s   r   Base1r^              &MMMr   r_   c                       e Zd Z ZdS )+AdviceTests.test_mixed_metas.<locals>.Base2NrP   )r\   s   r   Base2rb      r`   r   rc   c                   (    e Zd Z  g d           dS -AdviceTests.test_mixed_metas.<locals>.Derivedr=   Nr@   r9   s   r   Derivedrf      s        Rr   rg   z(Should have gotten incompatibility errorc                       e Zd ZdS )0AdviceTests.test_mixed_metas.<locals>.Metaclass3Nr@   r5   r   r   
Metaclass3ri      rM   r   rj   c                   ,    e Zd Z Z g d           dS re   rP   )rj   r:   s   r   rg   z-AdviceTests.test_mixed_metas.<locals>.Derived   s#        &MDQKKKKKr   )rC   r:   rS   fail	TypeErrorr   rE   rF   )r   r_   rc   rg   rY   r\   rj   r:   s       @@@@r   test_mixed_metaszAdviceTests.test_mixed_metas   s   >>>>>>	 	 	 	 	 	 	 		 	 	 	 	 	 	 		' 	' 	' 	' 	' 	' 	' 	' 	' 	'	' 	' 	' 	' 	' 	' 	' 	' 	' 	'	      %   II@AAAA 	 	 	D		 	 	 	 	Z 	 	 		 	 	 	 	 	 	 	eU 	 	 	 	
7D11222
7J7788888s   &A7 7
BBc                     ddl m ddlm}  G fdd          }|\  }|                     t          |          |           d S )Nr   r9   	ClassTypec                   (    e Zd Z  g d           dS )-AdviceTests.test_meta_no_bases.<locals>.Thingr=   Nr@   r9   s   r   Thingrs      s        DQKKKKKr   rt   )rC   r:   typesrq   r   rS   )r   rq   rt   klassr:   s       @r   test_meta_no_baseszAdviceTests.test_meta_no_bases   s    >>>>>>######	 	 	 	 	 	 	 	 	 	ei00000r   N)r2   r3   r4   r   rH   rU   rn   rw   r5   r   r   r7   r7   ^   s        D D D 9 9 9 9 9 9B 1 1 1 1 1r   r7   c                   &    e Zd Zd Zd Zd Zd ZdS )Test_isClassAdvisorc                     ddl m}  ||i |S )Nr   )isClassAdvisor)r&   r{   )r   argskwr{   s       r   _callFUTzTest_isClassAdvisor._callFUT   s)    888888~t*r***r   c                 X    |                      |                     |           d           d S )NFr   r~   r   s    r   test_w_non_functionz'Test_isClassAdvisor.test_w_non_function   s*    t,,e44444r   c                 ^    d }|                      |                     |          d           d S )Nc                      t                      NNotImplementedErrorr5   r   r   fooz7Test_isClassAdvisor.test_w_normal_function.<locals>.foo       %'''r   Fr   )r   r   s     r   test_w_normal_functionz*Test_isClassAdvisor.test_w_normal_function   s9    	( 	( 	(s++U33333r   c                     d }t                      |_        |                     |                     |          d           d S )Nc                      t                      r   r   r5   r   r   barz8Test_isClassAdvisor.test_w_advisor_function.<locals>.bar   r   r   T)rD   previousMetaclassr   r~   )r   r   s     r   test_w_advisor_functionz+Test_isClassAdvisor.test_w_advisor_function   sE    	( 	( 	( &s++T22222r   N)r2   r3   r4   r~   r   r   r   r5   r   r   ry   ry      sP        + + +5 5 54 4 4
3 3 3 3 3r   ry   c                       e Zd Zd Zed             Zd Zd Zed             Ze	d             Z
ed             Ze	d             Zed	             Ze	d
             ZdS )Test_determineMetaclassc                     ddl m}  ||i |S )Nr   )determineMetaclass)r&   r   )r   r|   r}   r   s       r   r~   z Test_determineMetaclass._callFUT   s*    <<<<<<!!4.2...r   c                 d    ddl m} |                     |                     d          |           d S )Nr   rp   r5   )ru   rq   r   r~   )r   rq   s     r   
test_emptyz"Test_determineMetaclass.test_empty   s<    ######r**I66666r   c                      G d dt                     }|                     |                     d|          |           d S )Nc                       e Zd ZdS )DTest_determineMetaclass.test_empty_w_explicit_metatype.<locals>.MetaNr@   r5   r   r   Metar      rM   r   r   r5   rS   r   r~   r   r   s     r   test_empty_w_explicit_metatypez6Test_determineMetaclass.test_empty_w_explicit_metatype   sV    	 	 	 	 	4 	 	 	r400$77777r   c                      G d dt                     }|                     |                     |f          t                      d S )Nc                       e Zd ZdS )1Test_determineMetaclass.test_single.<locals>.MetaNr@   r5   r   r   r   r      rM   r   r   r   r   s     r   test_singlez#Test_determineMetaclass.test_single   sV    	 	 	 	 	4 	 	 	w//66666r   c                      G d dt                      G fddt                     }|                     |                     |t           f                     d S )Nc                       e Zd ZdS )<Test_determineMetaclass.test_meta_of_class.<locals>.MetametaNr@   r5   r   r   Metametar      rM   r   r   c                       e Zd Z ZdS )8Test_determineMetaclass.test_meta_of_class.<locals>.MetaNrP   )r   s   r   r   r      s        $MMMr   r   r   )r   r   r   s     @r   test_meta_of_classz*Test_determineMetaclass.test_meta_of_class   s    	 	 	 	 	t 	 	 		% 	% 	% 	% 	% 	% 	%4 	% 	% 	% 	d|44h?????r   c                     d                     g d          }i }t          ||           |d         }|d         }|                     |                     |t          f          |           d S )N
)zclass Metameta(type):    passz%class Meta(type, metaclass=Metameta):r   r   r   )joinr-   r   r~   rS   )r   EXECglobsr   r   s        r   test_meta_of_class_py3kz/Test_determineMetaclass.test_meta_of_class_py3k   s|     yy 
 
 
   T5V}$d|44h?????r   c                      G d dt                      G d d           G fddt                     } G fddt                     }|                     |                     ||f                     d S )	Nc                       e Zd ZdS )BTest_determineMetaclass.test_multiple_in_hierarchy.<locals>.Meta_ANr@   r5   r   r   Meta_Ar      rM   r   r   c                       e Zd ZdS )BTest_determineMetaclass.test_multiple_in_hierarchy.<locals>.Meta_BNr@   r5   r   r   Meta_Br      rM   r   r   c                       e Zd Z ZdS )=Test_determineMetaclass.test_multiple_in_hierarchy.<locals>.ANrP   r   s   r   Ar              "MMMr   r   c                       e Zd Z ZdS )=Test_determineMetaclass.test_multiple_in_hierarchy.<locals>.BNrP   r   s   r   Br      r   r   r   r   r   r   r   r   r   s      @@r   test_multiple_in_hierarchyz2Test_determineMetaclass.test_multiple_in_hierarchy   s    	 	 	 	 	T 	 	 		 	 	 	 	V 	 	 		# 	# 	# 	# 	# 	# 	# 	# 	# 	#	# 	# 	# 	# 	# 	# 	# 	# 	# 	#1w//88888r   c                     d                     g d          }i }t          ||           |d         }|d         }|d         }|d         }|                     |                     ||f          |           d S )Nr   )class Meta_A(type):r   zclass Meta_B(Meta_A):r    class A(type, metaclass=Meta_A):r    class B(type, metaclass=Meta_B):r   r   r   r   r   )r   r-   r   r~   r   r   r   r   r   r   r   s          r   test_multiple_in_hierarchy_py3kz7Test_determineMetaclass.test_multiple_in_hierarchy_py3k   s     yy 	
 	
 	
 	 	 T5xx#J#J1v..77777r   c                      G d dt                      G d dt                      G fddt                     } G fddt                     }|                     t          | j        ||f           d S )	Nc                       e Zd ZdS )FTest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.Meta_ANr@   r5   r   r   r   r     rM   r   r   c                       e Zd ZdS )FTest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.Meta_BNr@   r5   r   r   r   r     rM   r   r   c                       e Zd Z ZdS )ATest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.ANrP   r   s   r   r   r     r   r   r   c                       e Zd Z ZdS )ATest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.BNrP   r   s   r   r   r     r   r   r   )rS   assertRaisesrm   r~   r   s      @@r   test_multiple_not_in_hierarchyz6Test_determineMetaclass.test_multiple_not_in_hierarchy  s    	 	 	 	 	T 	 	 		 	 	 	 	T 	 	 		# 	# 	# 	# 	# 	# 	# 	# 	# 	#	# 	# 	# 	# 	# 	# 	# 	# 	# 	#)T]QG<<<<<r   c                     d                     g d          }i }t          ||           |d         }|d         }|d         }|d         }|                     t          | j        ||f           d S )Nr   )r   r   zclass Meta_B(type):r   r   r   r   r   r   r   r   r   )r   r-   r   rm   r~   r   s          r   #test_multiple_not_in_hierarchy_py3kz;Test_determineMetaclass.test_multiple_not_in_hierarchy_py3k  s     yy 	
 	
 	
 	 	 T5xx#J#J)T]QF;;;;;r   N)r2   r3   r4   r~   r   r   r   r   r   r   r   r   r   r   r   r5   r   r   r   r      s       / / / 7 7 78 8 8
7 7 7
 @ @ @ @ @ _@ 	9 	9 	9 8 8 _8( 	= 	= 	= < < _< < <r   r   c                   ^    e Zd Zd Zd Zed             Zed             Zd Zd Z	d Z
d Zd	S )
Test_minimalBasesc                 $    ddl m}  ||          S )Nr   )minimalBases)r&   r   )r   klassesr   s      r   r~   zTest_minimalBases._callFUT4  s$    666666|G$$$r   c                 X    |                      |                     g           g            d S r   r   r   s    r   r   zTest_minimalBases.test_empty8  s*    r**B/////r   c                      G d d          }|                      |                     t          |          g          g            d S )Nc                       e Zd ZdS )1Test_minimalBases.test_w_oldstyle_meta.<locals>.CNr@   r5   r   r   Cr   =  rM   r   r   r   r~   rS   r   r   s     r   test_w_oldstyle_metaz&Test_minimalBases.test_w_oldstyle_meta;  sZ    	 	 	 	 	 	 	 	Qy11266666r   c                 v     G d d          }|                      |                     |g          |g           d S )Nc                       e Zd ZdS )2Test_minimalBases.test_w_oldstyle_class.<locals>.CNr@   r5   r   r   r   r   C  rM   r   r   r   r   s     r   test_w_oldstyle_classz'Test_minimalBases.test_w_oldstyle_classA  sV    	 	 	 	 	 	 	 	s++aS11111r   c                 p    |                      |                     t          g          t          g           d S r   r   r   s    r   test_w_newstyle_metaz&Test_minimalBases.test_w_newstyle_metaG  s.    v..77777r   c                      G d dt                     }|                     |                     |g          |g           d S )Nc                       e Zd ZdS )2Test_minimalBases.test_w_newstyle_class.<locals>.CNr@   r5   r   r   r   r   K  rM   r   r   rD   r   r~   r   s     r   test_w_newstyle_classz'Test_minimalBases.test_w_newstyle_classJ  sX    	 	 	 	 	 	 	 	s++aS11111r   c                 H    G d dt                     } G d d|          } G d d|          } G d dt                     }|                     |                     |||g          |g           |                     |                     ||g          |g           |                     |                     ||g          |g           |                     |                     ||g          |g           |                     |                     |||g          ||g           d S )	Nc                       e Zd ZdS )@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.ANr@   r5   r   r   r   r   P  rM   r   r   c                       e Zd ZdS )@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.BNr@   r5   r   r   r   r   R  rM   r   r   c                       e Zd ZdS )@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.CNr@   r5   r   r   r   r   T  rM   r   r   c                       e Zd ZdS )@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.DNr@   r5   r   r   Dr   V  rM   r   r   r   )r   r   r   r   r   s        r   #test_simple_hierarchy_skips_impliedz5Test_minimalBases.test_simple_hierarchy_skips_impliedO  s~   	 	 	 	 	 	 	 		 	 	 	 	 	 	 		 	 	 	 	 	 	 		 	 	 	 	 	 	 	1ay11A37771v..4441v..4441v..4441ay11Aq6:::::r   c                      G d dt                     } G d dt                     }|                     |                     |||g          ||g           d S )Nc                       e Zd ZdS )@Test_minimalBases.test_repeats_kicked_to_end_of_queue.<locals>.ANr@   r5   r   r   r   r   _  rM   r   r   c                       e Zd ZdS )@Test_minimalBases.test_repeats_kicked_to_end_of_queue.<locals>.BNr@   r5   r   r   r   r   a  rM   r   r   r   )r   r   r   s      r   #test_repeats_kicked_to_end_of_queuez5Test_minimalBases.test_repeats_kicked_to_end_of_queue^  s    	 	 	 	 	 	 	 		 	 	 	 	 	 	 	1ay11Aq6:::::r   N)r2   r3   r4   r~   r   r   r   r   r   r   r   r   r5   r   r   r   r   2  s        % % %0 0 0 7 7 7
 2 2 2
8 8 82 2 2
; ; ;; ; ; ; ;r   r   )__doc__unittestr'   zope.interface._compatr   r   TestCaser   r.   r7   ry   r   r   r5   r   r   <module>r     sL     



 2 2 2 2 2 2 3 3 3 3 3 33: 3: 3: 3: 3:H% 3: 3: 3:l
J1 J1 J1 J1 J1(# J1 J1 J1Z3 3 3 3 3(+ 3 3 3*o< o< o< o< o<h/ o< o< o<d1; 1; 1; 1; 1;) 1; 1; 1; 1; 1;r   