
    Ng)                        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y)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                   4    e Zd Zd Zed        Zd Zd Zd Zy)FrameInfoTestc                     ddl m} |j                  \  }}}}| j                  |d       |j                  ||fD ]  }| j                  ||j                  u        ! y )Nr   advisory_testingmodule)zope.interface.testsr	   moduleLevelFrameInfoassertEqual__dict__
assertTrue
my_globalsselfr	   kindr
   f_locals	f_globalsds          [/var/www/djangounited/venv/lib/python3.12/site-packages/zope/interface/tests/test_advice.pytest_w_modulezFrameInfoTest.test_w_module%   s^    9 0 E E	v	9x((I5 	>AOOA!1!<!<<=	>    c                    ddl m} |j                  j                  \  }}}}| j	                  |d       | j                  ||j                  j                  u        |j                  |fD ]  }| j                  ||j                  u        ! y Nr   r   class)r   r	   ClassicClassclassLevelFrameInfor   r   r   r   r   s          r   test_w_ClassicClassz!FrameInfoTest.test_w_ClassicClass-   s    9 '33GG				w'(55>>>	@)+ 	>AOOA!1!<!<<=	>r   c                     ddl m} |j                  j                  \  }}}}| j	                  |d       |j
                  |fD ]  }| j                  ||j                  u        ! y r   )r   r	   NewStyleClassr   r   r   r   r   r   s          r   test_w_NewStyleClassz"FrameInfoTest.test_w_NewStyleClass;   sf    9 '44HH				w')+ 	>AOOA!1!<!<<=	>r   c                    ddl m}  |t        j                               \  }}}}| j	                  |d       | j                  |t               u        |j                  |fD ]  }| j                  |t               u         y )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   sk    6,8,I)fh	/FH,-)+ 	,AOOAN+	,r   c                     ddl m} d|i}i }t        t        ||       | j	                  |d   d       | j                  |d   |u        | j                  |d   d u        | j                  |d   |u        y )	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   sv    6"L1[(G,&1
+w67)T12,89r   N)	__name__
__module____qualname__r   r   r   r"   r+   r1    r   r   r   r   #   s*    > > >	>,:r   r   zMimport sys
kind, module, f_locals, f_globals = getFrameInfo(sys._getframe())
c                   L    e Zd Zed        Zed        Zed        Zed        Zy)AdviceTestsc                     ddl m g  G fddt              }dD ]%  }| j                  t	        |t
                     |\  }' | j                  d|fd|gfd|ggfg       y )	Nr   pingc                   P    e Zd Z W W  d        W W  d        W W  d       y)#AdviceTests.test_order.<locals>.Foo         Nr2   r3   r4   )logr:   s   r   Foor<   d   s    aLaLaLr   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`   sm    >	& 	  	AOOJsD12DC	 	3x!cUa3%\BCr   c                     ddl m  G d dt               G fdd      }|\  }| j                  |j                  u        y )Nr   r9   c                       e Zd Zy)8AdviceTests.test_single_explicit_meta.<locals>.MetaclassNr@   r5   r   r   	MetaclassrK   t       r   rL   c                   (    e Zd ZW  Z W g d       y)7AdviceTests.test_single_explicit_meta.<locals>.Concreter=   Nr2   r3   r4   __metaclass__)rL   r:   s   r   ConcreterO   w   s    %MAJr   rR   )rC   r:   typer   	__class__)r   rR   rL   r:   s     @@r   test_single_explicit_metaz%AdviceTests.test_single_explicit_metap   s>    >	 		y 	 	**i7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||      }| j                  d        G d d       G fdd||      }| j                  t        |t                     |\  }| j                  t        |             y # t        $ r Y ew xY w)Nr   r9   c                       e Zd Zy)0AdviceTests.test_mixed_metas.<locals>.Metaclass1Nr@   r5   r   r   
Metaclass1rX      rM   r   rY   c                       e Zd Zy)0AdviceTests.test_mixed_metas.<locals>.Metaclass2Nr@   r5   r   r   
Metaclass2r[      rM   r   r\   c                       e Zd ZW  Zy)+AdviceTests.test_mixed_metas.<locals>.Base1NrP   )rY   s   r   Base1r^          &Mr   r_   c                       e Zd ZW  Zy)+AdviceTests.test_mixed_metas.<locals>.Base2NrP   )r\   s   r   Base2rb      r`   r   rc   c                   "    e Zd Z W  g d       y-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y)0AdviceTests.test_mixed_metas.<locals>.Metaclass3Nr@   r5   r   r   
Metaclass3ri      rM   r   rj   c                   (    e Zd ZW  Z W g d       yre   rP   )rj   r:   s   r   rg   z-AdviceTests.test_mixed_metas.<locals>.Derived   s    &MQKr   )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	Z 		eU 	 	
7D12
7J78  		s   B; ;	CCc                 t    ddl m ddlm}  G fdd      }|\  }| j	                  t        |      |       y )Nr   r9   	ClassTypec                   "    e Zd Z W  g d       y)-AdviceTests.test_meta_no_bases.<locals>.Thingr=   Nr@   r9   s   r   Thingrs      s    QKr   rt   )rC   r:   typesrq   r   rS   )r   rq   rt   klassr:   s       @r   test_meta_no_baseszAdviceTests.test_meta_no_bases   s.    >#	 	ei0r   N)r2   r3   r4   r   rH   rU   rn   rw   r5   r   r   r7   r7   ^   sS    D D 9 9 9 9B 1 1r   r7   c                   $    e Zd Zd Zd Zd Zd Zy)Test_isClassAdvisorc                     ddl m}  ||i |S )Nr   )isClassAdvisor)r&   r{   )r   argskwr{   s       r   _callFUTzTest_isClassAdvisor._callFUT   s    8t*r**r   c                 F    | j                  | j                  |       d       y )NFr   r~   r   s    r   test_w_non_functionz'Test_isClassAdvisor.test_w_non_function   s    t,e4r   c                 L    d }| j                  | j                  |      d       y )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   s     	(s+U3r   c                 j    d }t               |_        | j                  | j                  |      d       y )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   s*    	( &s+T2r   N)r2   r3   r4   r~   r   r   r   r5   r   r   ry   ry      s    +54
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y)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                 R    ddl m} | j                  | j                  d      |       y )Nr   rp   r5   )ru   rq   r   r~   )r   rq   s     r   
test_emptyz"Test_determineMetaclass.test_empty   s    #r*I6r   c                 f     G d dt               }| j                  | j                  d|      |       y )Nc                       e Zd Zy)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   s)    	4 	r40$7r   c                 n     G d dt               }| j                  | j                  |f      t                y )Nc                       e Zd Zy)1Test_determineMetaclass.test_single.<locals>.MetaNr@   r5   r   r   r   r      rM   r   r   r   r   s     r   test_singlez#Test_determineMetaclass.test_single   s)    	4 	w/6r   c                      G d dt                G fddt               }| j                  | j                  |t         f             y )Nc                       e Zd Zy)<Test_determineMetaclass.test_meta_of_class.<locals>.MetametaNr@   r5   r   r   Metametar      rM   r   r   c                       e Zd ZW  Zy)8Test_determineMetaclass.test_meta_of_class.<locals>.MetaNrP   )r   s   r   r   r      s    $Mr   r   r   )r   r   r   s     @r   test_meta_of_classz*Test_determineMetaclass.test_meta_of_class   s:    	t 		%4 	% 	d|4h?r   c                     dj                  g d      }i }t        ||       |d   }|d   }| j                  | j                  |t        f      |       y )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   sX     yy 
  T5V}$d|4h?r   c                      G d dt                G d d       G fddt               } G fddt               }| j                  | j                  ||f             y )	Nc                       e Zd Zy)BTest_determineMetaclass.test_multiple_in_hierarchy.<locals>.Meta_ANr@   r5   r   r   Meta_Ar      rM   r   r   c                       e Zd Zy)BTest_determineMetaclass.test_multiple_in_hierarchy.<locals>.Meta_BNr@   r5   r   r   Meta_Br      rM   r   r   c                       e Zd ZW  Zy)=Test_determineMetaclass.test_multiple_in_hierarchy.<locals>.ANrP   r   s   r   Ar          "Mr   r   c                       e Zd ZW  Zy)=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   sP    	T 		V 		# 	#	# 	#1w/8r   c                     dj                  g d      }i }t        ||       |d   }|d   }|d   }|d   }| j                  | j                  ||f      |       y )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   si     yy 	
 	 T5xx#J#J1v.7r   c                      G d dt                G d dt                G fddt               } G fddt               }| j                  t        | j                  ||f       y )	Nc                       e Zd Zy)FTest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.Meta_ANr@   r5   r   r   r   r     rM   r   r   c                       e Zd Zy)FTest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.Meta_BNr@   r5   r   r   r   r     rM   r   r   c                       e Zd ZW  Zy)ATest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.ANrP   r   s   r   r   r     r   r   r   c                       e Zd ZW  Zy)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  sM    	T 		T 		# 	#	# 	#)T]]QG<r   c                     dj                  g d      }i }t        ||       |d   }|d   }|d   }|d   }| j                  t        | j                  ||f       y )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  sf     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8
7
 @ @ @ @ 	9 	9 8 8( 	= 	= < <r   r   c                   P    e Zd Zd Zd Zed        Zed        Zd Zd Z	d Z
d Zy	)
Test_minimalBasesc                     ddl m}  ||      S )Nr   )minimalBases)r&   r   )r   klassesr   s      r   r~   zTest_minimalBases._callFUT4  s    6G$$r   c                 F    | j                  | j                  g       g        y r   r   r   s    r   r   zTest_minimalBases.test_empty8  s    r*B/r   c                 n     G d d      }| j                  | j                  t        |      g      g        y )Nc                       e Zd Zy)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;  s+    	 	Qy126r   c                 ^     G d d      }| j                  | j                  |g      |g       y )Nc                       e Zd Zy)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  s)    	 	s+aS1r   c                 Z    | j                  | j                  t        g      t        g       y r   r   r   s    r   test_w_newstyle_metaz&Test_minimalBases.test_w_newstyle_metaG  s    v.7r   c                 h     G d dt               }| j                  | j                  |g      |g       y )Nc                       e Zd Zy)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  s+    	 	s+aS1r   c                     G d dt               } G d d|      } G d d|      } G d dt               }| j                  | j                  |||g      |g       | j                  | j                  ||g      |g       | j                  | j                  ||g      |g       | j                  | j                  ||g      |g       | j                  | j                  |||g      ||g       y )	Nc                       e Zd Zy)@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.ANr@   r5   r   r   r   r   P  rM   r   r   c                       e Zd Zy)@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.BNr@   r5   r   r   r   r   R  rM   r   r   c                       e Zd Zy)@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.CNr@   r5   r   r   r   r   T  rM   r   r   c                       e Zd Zy)@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1A371v.41v.41v.41ay1Aq6:r   c                      G d dt               } G d dt               }| j                  | j                  |||g      ||g       y )Nc                       e Zd Zy)@Test_minimalBases.test_repeats_kicked_to_end_of_queue.<locals>.ANr@   r5   r   r   r   r   _  rM   r   r   c                       e Zd Zy)@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1Aq6:r   N)r2   r3   r4   r~   r   r   r   r   r   r   r   r   r5   r   r   r   r   2  sH    %0 7 7
 2 2
82
;;r   r   )__doc__unittestr'   zope.interface._compatr   r   TestCaser   r.   r7   ry   r   r   r5   r   r   <module>r     s     
 2 33:H%% 3:l
J1(## J1Z3(++ 3*o<h// o<d1;)) 1;r   