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