U
    ÈZjÔ)  ã                   @   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   úc/var/www/html/TRUCKING_PROJECT/venv/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