o
    $x`)                     @   s   d Z ddlZddlZddlmZ ddlmZ G dd dejZdZG dd	 d	ejZ	G d
d dejZ
G dd dejZG d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                   @   s8   e Zd Zdd Zedd Zdd Zdd Zd	d
 ZdS )FrameInfoTestc                 C   sL   ddl m} |j\}}}}| |d |j||fD ]
}| ||ju  qd S )Nr   advisory_testingmodule)zope.interface.testsr   moduleLevelFrameInfoassertEqual__dict__
assertTrue
my_globalsselfr   kindr   f_locals	f_globalsd r   B/usr/lib/python3/dist-packages/zope/interface/tests/test_advice.pytest_w_module%   s   zFrameInfoTest.test_w_modulec                 C   s^   ddl m} |jj\}}}}| |d | ||jju  |j|fD ]
}| ||ju  q"d S Nr   r   class)r   r   ClassicClassclassLevelFrameInfor
   r   r   r   r   r   r   r   test_w_ClassicClass-   s   
z!FrameInfoTest.test_w_ClassicClassc                 C   sL   ddl m} |jj\}}}}| |d |j|fD ]
}| ||ju  qd S r   )r   r   NewStyleClassr   r
   r   r   r   r   r   r   r   test_w_NewStyleClass;   s   z"FrameInfoTest.test_w_NewStyleClassc                 C   s`   ddl m} |t \}}}}| |d | |t u  |j|fD ]
}| |t u  q#d S )Nr   getFrameInfozfunction call)	zope.interface.advicer   sys	_getframer
   r   localsr   globals)r   r   r   r   r   r   r   r   r   r   test_inside_function_callF   s   z'FrameInfoTest.test_inside_function_callc                 C   sn   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_localsr   r   r   test_inside_execN   s   zFrameInfoTest.test_inside_execN)	__name__
__module____qualname__r   r   r   r   r%   r*   r   r   r   r   r   #   s    
r   zMimport sys
kind, module, f_locals, f_globals = getFrameInfo(sys._getframe())
c                   @   s<   e Zd Zedd Zedd Zedd Zedd Zd	S )
AdviceTestsc                    sn   ddl m g  G  fdddt}dD ]}| t|t |\}q|  d|fd|gfd|ggfg d S )	Nr   pingc                       s*   e Zd Z d  d  d dS )z#AdviceTests.test_order.<locals>.Foo         Nr+   r,   r-   r   logr0   r   r   Food   s    

r7   )r1   r2   r3   r1   r2   r3   )%zope.interface.tests.advisory_testingr0   objectr   
isinstancelistr
   )r   r7   ir   r5   r   
test_order`   s   (zAdviceTests.test_orderc                    sL   ddl m G dd dt G  fddd }|\}| |j u  d S )Nr   r/   c                   @      e Zd ZdS )z8AdviceTests.test_single_explicit_meta.<locals>.MetaclassNr4   r   r   r   r   	Metaclasst       r?   c                          e Zd Z Zg d dS )z7AdviceTests.test_single_explicit_meta.<locals>.Concreter1   Nr+   r,   r-   __metaclass__r   r?   r0   r   r   Concretew       rE   )r8   r0   typer   	__class__)r   rE   r   rD   r   test_single_explicit_metap   s
   z%AdviceTests.test_single_explicit_metac                    s   ddl m G dd dt G dd dtG  fddd}G fd	d
d
}zG fddd||}| d W n	 tyC   Y nw G dd d G fddd||}| t|t |\}| t| d S )Nr   r/   c                   @   r>   )z0AdviceTests.test_mixed_metas.<locals>.Metaclass1Nr4   r   r   r   r   
Metaclass1   r@   rJ   c                   @   r>   )z0AdviceTests.test_mixed_metas.<locals>.Metaclass2Nr4   r   r   r   r   
Metaclass2   r@   rK   c                          e Zd Z ZdS )z+AdviceTests.test_mixed_metas.<locals>.Base1NrB   r   )rJ   r   r   Base1       rM   c                       rL   )z+AdviceTests.test_mixed_metas.<locals>.Base2NrB   r   )rK   r   r   Base2   rN   rO   c                          e Zd Z g d dS z-AdviceTests.test_mixed_metas.<locals>.Derivedr1   Nr4   r   r/   r   r   Derived       rR   z(Should have gotten incompatibility errorc                   @   r>   )z0AdviceTests.test_mixed_metas.<locals>.Metaclass3Nr4   r   r   r   r   
Metaclass3   r@   rT   c                       rA   rQ   rB   r   )rT   r0   r   r   rR      rF   )r8   r0   rG   fail	TypeErrorr   r:   r;   )r   rM   rO   rR   r   )rJ   rK   rT   r0   r   test_mixed_metas   s    zAdviceTests.test_mixed_metasc                    sD   ddl m  ddlm} G  fddd}|\}| t|| d S )Nr   r/   	ClassTypec                       rP   )z-AdviceTests.test_meta_no_bases.<locals>.Thingr1   Nr4   r   r/   r   r   Thing   rS   rZ   )r8   r0   typesrY   r
   rG   )r   rY   rZ   klassr   r/   r   test_meta_no_bases   s
   zAdviceTests.test_meta_no_basesN)r+   r,   r-   r   r=   rI   rW   r]   r   r   r   r   r.   ^   s    


!r.   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Test_isClassAdvisorc                 O      ddl m} ||i |S )Nr   )isClassAdvisor)r    r`   )r   argskwr`   r   r   r   _callFUT      zTest_isClassAdvisor._callFUTc                 C   s   |  | | d d S )NFr
   rc   r   r   r   r   test_w_non_function      z'Test_isClassAdvisor.test_w_non_functionc                 C   s   dd }|  | |d d S )Nc                   S      t  NNotImplementedErrorr   r   r   r   foo      z7Test_isClassAdvisor.test_w_normal_function.<locals>.fooFre   )r   rm   r   r   r   test_w_normal_function   s   z*Test_isClassAdvisor.test_w_normal_functionc                 C   s&   dd }t  |_| | |d d S )Nc                   S   ri   rj   rk   r   r   r   r   bar   rn   z8Test_isClassAdvisor.test_w_advisor_function.<locals>.barT)r9   previousMetaclassr
   rc   )r   rp   r   r   r   test_w_advisor_function   s   z+Test_isClassAdvisor.test_w_advisor_functionN)r+   r,   r-   rc   rg   ro   rr   r   r   r   r   r^      s
    r^   c                   @   sx   e Zd Zdd Zedd Zdd Zdd Zed	d
 Ze	dd Z
edd Ze	dd Zedd Ze	dd ZdS )Test_determineMetaclassc                 O   r_   )Nr   )determineMetaclass)r    rt   )r   ra   rb   rt   r   r   r   rc      rd   z Test_determineMetaclass._callFUTc                 C   s"   ddl m} | | d| d S )Nr   rX   r   )r[   rY   r
   rc   )r   rY   r   r   r   
test_empty   s   z"Test_determineMetaclass.test_emptyc                 C   s(   G dd dt }| | d|| d S )Nc                   @   r>   )zDTest_determineMetaclass.test_empty_w_explicit_metatype.<locals>.MetaNr4   r   r   r   r   Meta   r@   rv   r   rG   r
   rc   r   rv   r   r   r   test_empty_w_explicit_metatype      z6Test_determineMetaclass.test_empty_w_explicit_metatypec                 C   s(   G dd dt }| | |ft  d S )Nc                   @   r>   )z1Test_determineMetaclass.test_single.<locals>.MetaNr4   r   r   r   r   rv      r@   rv   rw   rx   r   r   r   test_single   rz   z#Test_determineMetaclass.test_singlec                    s>   G dd dt  G  fdddt }| | |t f  d S )Nc                   @   r>   )z<Test_determineMetaclass.test_meta_of_class.<locals>.MetametaNr4   r   r   r   r   Metameta   r@   r|   c                       rL   )z8Test_determineMetaclass.test_meta_of_class.<locals>.MetaNrB   r   r|   r   r   rv      rN   rv   rw   rx   r   r}   r   test_meta_of_class   s   z*Test_determineMetaclass.test_meta_of_classc                 C   sF   d g d}i }t|| |d }|d }| | |tf| d S )N
)zclass Metameta(type):    passz%class Meta(type, metaclass=Metameta):r   rv   r|   )joinr&   r
   rc   rG   )r   EXECglobsrv   r|   r   r   r   test_meta_of_class_py3k   s   
z/Test_determineMetaclass.test_meta_of_class_py3kc                    sb   G dd dt  G dd d G  fdddt }G fdddt }| | ||f d S )	Nc                   @   r>   )zBTest_determineMetaclass.test_multiple_in_hierarchy.<locals>.Meta_ANr4   r   r   r   r   Meta_A   r@   r   c                   @   r>   )zBTest_determineMetaclass.test_multiple_in_hierarchy.<locals>.Meta_BNr4   r   r   r   r   Meta_B   r@   r   c                       rL   )z=Test_determineMetaclass.test_multiple_in_hierarchy.<locals>.ANrB   r   r   r   r   A   rN   r   c                       rL   )z=Test_determineMetaclass.test_multiple_in_hierarchy.<locals>.BNrB   r   r   r   r   B   rN   r   rw   r   r   r   r   r   r   r   test_multiple_in_hierarchy   s
   z2Test_determineMetaclass.test_multiple_in_hierarchyc                 C   sV   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
   rc   r   r   r   r   r   r   r   r   r   r   test_multiple_in_hierarchy_py3k   s   

z7Test_determineMetaclass.test_multiple_in_hierarchy_py3kc                    s`   G dd dt  G dd dt G  fdddt }G fdddt }| t| j||f d S )	Nc                   @   r>   )zFTest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.Meta_ANr4   r   r   r   r   r     r@   r   c                   @   r>   )zFTest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.Meta_BNr4   r   r   r   r   r     r@   r   c                       rL   )zATest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.ANrB   r   r   r   r   r     rN   r   c                       rL   )zATest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.BNrB   r   r   r   r   r     rN   r   )rG   assertRaisesrV   rc   r   r   r   r   test_multiple_not_in_hierarchy  s
   z6Test_determineMetaclass.test_multiple_not_in_hierarchyc                 C   sT   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   rV   rc   r   r   r   r   #test_multiple_not_in_hierarchy_py3k  s   

z;Test_determineMetaclass.test_multiple_not_in_hierarchy_py3kN)r+   r,   r-   rc   r   ru   ry   r{   r~   r   r   r   r   r   r   r   r   r   r   rs      s$    

	



rs   c                   @   sT   e Zd Zdd Zdd Zedd Zedd Zd	d
 Zdd Z	dd Z
dd ZdS )Test_minimalBasesc                 C   s   ddl m} ||S )Nr   )minimalBases)r    r   )r   klassesr   r   r   r   rc   4  s   zTest_minimalBases._callFUTc                 C   s   |  | g g  d S rj   re   rf   r   r   r   ru   8  rh   zTest_minimalBases.test_emptyc                 C   s*   G dd d}|  | t|gg  d S )Nc                   @   r>   )z1Test_minimalBases.test_w_oldstyle_meta.<locals>.CNr4   r   r   r   r   C=  r@   r   r
   rc   rG   r   r   r   r   r   test_w_oldstyle_meta;  s   z&Test_minimalBases.test_w_oldstyle_metac                 C   s(   G dd d}|  | |g|g d S )Nc                   @   r>   )z2Test_minimalBases.test_w_oldstyle_class.<locals>.CNr4   r   r   r   r   r   C  r@   r   re   r   r   r   r   test_w_oldstyle_classA  s   z'Test_minimalBases.test_w_oldstyle_classc                 C   s   |  | tgtg d S rj   r   rf   r   r   r   test_w_newstyle_metaG  s   z&Test_minimalBases.test_w_newstyle_metac                 C   s*   G dd dt }| | |g|g d S )Nc                   @   r>   )z2Test_minimalBases.test_w_newstyle_class.<locals>.CNr4   r   r   r   r   r   K  r@   r   r9   r
   rc   r   r   r   r   test_w_newstyle_classJ  s   z'Test_minimalBases.test_w_newstyle_classc                 C   s   G dd dt }G dd d|}G dd d|}G dd dt }| | |||g|g | | ||g|g | | ||g|g | | ||g|g | | |||g||g d S )	Nc                   @   r>   )z@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.ANr4   r   r   r   r   r   P  r@   r   c                   @   r>   )z@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.BNr4   r   r   r   r   r   R  r@   r   c                   @   r>   )z@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.CNr4   r   r   r   r   r   T  r@   r   c                   @   r>   )z@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.DNr4   r   r   r   r   DV  r@   r   r   )r   r   r   r   r   r   r   r   #test_simple_hierarchy_skips_impliedO  s    z5Test_minimalBases.test_simple_hierarchy_skips_impliedc                 C   s@   G dd dt }G dd dt }| | |||g||g d S )Nc                   @   r>   )z@Test_minimalBases.test_repeats_kicked_to_end_of_queue.<locals>.ANr4   r   r   r   r   r   _  r@   r   c                   @   r>   )z@Test_minimalBases.test_repeats_kicked_to_end_of_queue.<locals>.BNr4   r   r   r   r   r   a  r@   r   r   r   r   r   r   #test_repeats_kicked_to_end_of_queue^  s    z5Test_minimalBases.test_repeats_kicked_to_end_of_queueN)r+   r,   r-   rc   ru   r   r   r   r   r   r   r   r   r   r   r   r   2  s    

r   )__doc__unittestr!   zope.interface._compatr   r   TestCaser   r'   r.   r^   rs   r   r   r   r   r   <module>   s   6Mr