U
    [e)                     @   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k q2d S )Nr   advisory_testingmodule)zope.interface.testsr   ZmoduleLevelFrameInfoassertEqual__dict__
assertTrue
my_globalsselfr   kindr   f_locals	f_globalsd r   b/var/www/html/services/stratfitenv/lib/python3.8/site-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k |j|fD ]}| ||jk qDd S Nr   r   class)r   r   Z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k q2d S r   )r   r   Z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 k |j|fD ]}| |t k qFd 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 |k | |d d k | |d |k d S )	Nr   r   r   r   execr   r   r   )r   r   r#   _FUNKY_EXECr	   r   )r   r   Z_globalsZ_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   logr+   r   r   Food   s   

r2   )r,   r-   r.   r,   r-   r.   )%zope.interface.tests.advisory_testingr+   objectr   
isinstancelistr	   )r   r2   ir   r0   r   
test_order`   s    zAdviceTests.test_orderc                    sL   ddl m G dd dt G  fddd }|\}| |j k d S )Nr   r*   c                   @   s   e Zd ZdS )z8AdviceTests.test_single_explicit_meta.<locals>.MetaclassNr/   r   r   r   r   	Metaclasst   s   r9   c                       s   e Zd Z Zg d dS )z7AdviceTests.test_single_explicit_meta.<locals>.Concreter,   Nr&   r'   r(   Z__metaclass__r   r9   r+   r   r   Concretew   s   r<   )r3   r+   typer   	__class__)r   r<   r   r;   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k
r   Y nX G dd d G fddd||}| t|t |\}| t| d S )Nr   r*   c                   @   s   e Zd ZdS )z0AdviceTests.test_mixed_metas.<locals>.Metaclass1Nr/   r   r   r   r   
Metaclass1   s   r@   c                   @   s   e Zd ZdS )z0AdviceTests.test_mixed_metas.<locals>.Metaclass2Nr/   r   r   r   r   
Metaclass2   s   rA   c                       s   e Zd Z ZdS )z+AdviceTests.test_mixed_metas.<locals>.Base1Nr:   r   )r@   r   r   Base1   s   rB   c                       s   e Zd Z ZdS )z+AdviceTests.test_mixed_metas.<locals>.Base2Nr:   r   )rA   r   r   Base2   s   rC   c                       s   e Zd Z g d dS z-AdviceTests.test_mixed_metas.<locals>.Derivedr,   Nr/   r   r*   r   r   Derived   s   rE   z(Should have gotten incompatibility errorc                   @   s   e Zd ZdS )z0AdviceTests.test_mixed_metas.<locals>.Metaclass3Nr/   r   r   r   r   
Metaclass3   s   rF   c                       s   e Zd Z Zg d dS rD   r:   r   )rF   r+   r   r   rE      s   )r3   r+   r=   Zfail	TypeErrorr   r5   r6   )r   rB   rC   rE   r   )r@   rA   rF   r+   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                       s   e Zd Z g d dS )z-AdviceTests.test_meta_no_bases.<locals>.Thingr,   Nr/   r   r*   r   r   Thing   s   rK   )r3   r+   typesrJ   r	   r=   )r   rJ   rK   klassr   r*   r   test_meta_no_bases   s
    zAdviceTests.test_meta_no_basesN)r&   r'   r(   r   r8   r?   rH   rN   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   s   ddl m} |||S )Nr   )isClassAdvisor)r   rP   )r   argskwrP   r   r   r   _callFUT   s    zTest_isClassAdvisor._callFUTc                 C   s   |  | | d d S )NFr	   rS   r   r   r   r   test_w_non_function   s    z'Test_isClassAdvisor.test_w_non_functionc                 C   s   dd }|  | |d d S )Nc                   S   s
   t  d S NNotImplementedErrorr   r   r   r   foo   s    z7Test_isClassAdvisor.test_w_normal_function.<locals>.fooFrT   )r   rZ   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   s
   t  d S rW   rX   r   r   r   r   bar   s    z8Test_isClassAdvisor.test_w_advisor_function.<locals>.barT)r4   ZpreviousMetaclassr	   rS   )r   r\   r   r   r   test_w_advisor_function   s    z+Test_isClassAdvisor.test_w_advisor_functionN)r&   r'   r(   rS   rV   r[   r]   r   r   r   r   rO      s   rO   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   s   ddl m} |||S )Nr   )determineMetaclass)r   r_   )r   rQ   rR   r_   r   r   r   rS      s    z Test_determineMetaclass._callFUTc                 C   s"   ddl m} | | d| d S )Nr   rI   r   )rL   rJ   r	   rS   )r   rJ   r   r   r   
test_empty   s    z"Test_determineMetaclass.test_emptyc                 C   s(   G dd dt }| | d|| d S )Nc                   @   s   e Zd ZdS )zDTest_determineMetaclass.test_empty_w_explicit_metatype.<locals>.MetaNr/   r   r   r   r   Meta   s   ra   r   r=   r	   rS   r   ra   r   r   r   test_empty_w_explicit_metatype   s    z6Test_determineMetaclass.test_empty_w_explicit_metatypec                 C   s(   G dd dt }| | |ft  d S )Nc                   @   s   e Zd ZdS )z1Test_determineMetaclass.test_single.<locals>.MetaNr/   r   r   r   r   ra      s   ra   rb   rc   r   r   r   test_single   s    z#Test_determineMetaclass.test_singlec                    s>   G dd dt  G  fdddt }| | |t f  d S )Nc                   @   s   e Zd ZdS )z<Test_determineMetaclass.test_meta_of_class.<locals>.MetametaNr/   r   r   r   r   Metameta   s   rf   c                       s   e Zd Z ZdS )z8Test_determineMetaclass.test_meta_of_class.<locals>.MetaNr:   r   rf   r   r   ra      s   ra   rb   rc   r   rg   r   test_meta_of_class   s    z*Test_determineMetaclass.test_meta_of_classc                 C   sJ   d ddddg}i }t|| |d }|d }| | |tf| d S )N
zclass Metameta(type):    passz%class Meta(type, metaclass=Metameta):ra   rf   )joinr#   r	   rS   r=   )r   EXECglobsra   rf   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                   @   s   e Zd ZdS )zBTest_determineMetaclass.test_multiple_in_hierarchy.<locals>.Meta_ANr/   r   r   r   r   Meta_A   s   ro   c                   @   s   e Zd ZdS )zBTest_determineMetaclass.test_multiple_in_hierarchy.<locals>.Meta_BNr/   r   r   r   r   Meta_B   s   rp   c                       s   e Zd Z ZdS )z=Test_determineMetaclass.test_multiple_in_hierarchy.<locals>.ANr:   r   ro   r   r   A   s   rr   c                       s   e Zd Z ZdS )z=Test_determineMetaclass.test_multiple_in_hierarchy.<locals>.BNr:   r   rp   r   r   B   s   rt   rb   r   rr   rt   r   ro   rp   r   test_multiple_in_hierarchy   s
    z2Test_determineMetaclass.test_multiple_in_hierarchyc              
   C   sb   d ddddddddg}i }t|| |d }|d }|d	 }|d
 }| | ||f| d S )Nri   class Meta_A(type):rj   zclass Meta_B(Meta_A): class A(type, metaclass=Meta_A): class B(type, metaclass=Meta_B):ro   rp   rr   rt   )rk   r#   r	   rS   r   rl   rm   ro   rp   rr   rt   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                   @   s   e Zd ZdS )zFTest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.Meta_ANr/   r   r   r   r   ro     s   ro   c                   @   s   e Zd ZdS )zFTest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.Meta_BNr/   r   r   r   r   rp     s   rp   c                       s   e Zd Z ZdS )zATest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.ANr:   r   rq   r   r   rr     s   rr   c                       s   e Zd Z ZdS )zATest_determineMetaclass.test_multiple_not_in_hierarchy.<locals>.BNr:   r   rs   r   r   rt     s   rt   )r=   assertRaisesrG   rS   ru   r   rv   r   test_multiple_not_in_hierarchy  s
    z6Test_determineMetaclass.test_multiple_not_in_hierarchyc              
   C   s`   d ddddddddg}i }t|| |d }|d }|d	 }|d
 }| t| j||f d S )Nri   rx   rj   zclass Meta_B(type):ry   rz   ro   rp   rr   rt   )rk   r#   r}   rG   rS   r{   r   r   r   #test_multiple_not_in_hierarchy_py3k  s"    

z;Test_determineMetaclass.test_multiple_not_in_hierarchy_py3kN)r&   r'   r(   rS   r   r`   rd   re   rh   r   rn   rw   r|   r~   r   r   r   r   r   r^      s"   

	



r^   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   Zklassesr   r   r   r   rS   4  s    zTest_minimalBases._callFUTc                 C   s   |  | g g  d S rW   rT   rU   r   r   r   r`   8  s    zTest_minimalBases.test_emptyc                 C   s*   G dd d}|  | t|gg  d S )Nc                   @   s   e Zd ZdS )z1Test_minimalBases.test_w_oldstyle_meta.<locals>.CNr/   r   r   r   r   C=  s   r   r	   rS   r=   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                   @   s   e Zd ZdS )z2Test_minimalBases.test_w_oldstyle_class.<locals>.CNr/   r   r   r   r   r   C  s   r   rT   r   r   r   r   test_w_oldstyle_classA  s    z'Test_minimalBases.test_w_oldstyle_classc                 C   s   |  | tgtg d S rW   r   rU   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                   @   s   e Zd ZdS )z2Test_minimalBases.test_w_newstyle_class.<locals>.CNr/   r   r   r   r   r   K  s   r   r4   r	   rS   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                   @   s   e Zd ZdS )z@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.ANr/   r   r   r   r   rr   P  s   rr   c                   @   s   e Zd ZdS )z@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.BNr/   r   r   r   r   rt   R  s   rt   c                   @   s   e Zd ZdS )z@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.CNr/   r   r   r   r   r   T  s   r   c                   @   s   e Zd ZdS )z@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.DNr/   r   r   r   r   DV  s   r   r   )r   rr   rt   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                   @   s   e Zd ZdS )z@Test_minimalBases.test_repeats_kicked_to_end_of_queue.<locals>.ANr/   r   r   r   r   rr   _  s   rr   c                   @   s   e Zd ZdS )z@Test_minimalBases.test_repeats_kicked_to_end_of_queue.<locals>.BNr/   r   r   r   r   rt   a  s   rt   r   ru   r   r   r   #test_repeats_kicked_to_end_of_queue^  s    z5Test_minimalBases.test_repeats_kicked_to_end_of_queueN)r&   r'   r(   rS   r`   r   r   r   r   r   r   r   r   r   r   r   r   2  s   

r   )__doc__Zunittestr   Zzope.interface._compatr   r   ZTestCaser   r$   r)   rO   r^   r   r   r   r   r   <module>   s   6Mr