U
    Acj”  ã                   @   sd   d Z ddlZddl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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.
é    Nc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚFrameInfoTestc                 C   sJ   ddl m} |j\}}}}|  |d¡ |j||fD ]}|  ||j¡ q2d S )Nr   ©Úadvisory_testingÚmodule)Úzope.interface.testsr   ZmoduleLevelFrameInfoÚassertEqualÚ__dict__ÚassertIsÚ
my_globals©Úselfr   Úkindr   Úf_localsÚ	f_globalsÚd© r   úD/tmp/pip-unpacked-wheel-dir_2hjr/zope/interface/tests/test_advice.pyÚtest_w_module"   s    ÿ zFrameInfoTest.test_w_modulec                 C   sJ   ddl m} |jj\}}}}|  |d¡ |j|fD ]}|  ||j¡ q2d S )Nr   r   Úclass)r   r   ZNewStyleClassZclassLevelFrameInfor   r   r	   r
   r   r   r   r   Útest_w_class*   s    ýzFrameInfoTest.test_w_classc                 C   sr   ddl m} |t ¡ ƒ\}}}}|  |d¡ t ¡ }|  ||j¡ |  |tƒ ¡ |j|fD ]}|  |t	ƒ ¡ qZd S )Nr   ©ÚgetFrameInfozfunction call)
Úzope.interface.advicer   ÚsysÚ	_getframer   r   Úlocalsr   r	   Úglobals)r   r   r   r   r   r   Úframer   r   r   r   Útest_inside_function_call5   s    z'FrameInfoTest.test_inside_function_callc                 C   sf   ddl m} d|i}i }tt||ƒ |  |d d¡ |  |d |¡ |  |d ¡ |  |d |¡ d S )	Nr   r   r   r   Úexecr   r   r   )r   r   r   Ú_FUNKY_EXECr   r	   ZassertIsNone)r   r   Z_globalsZ_localsr   r   r   Útest_inside_execA   s    zFrameInfoTest.test_inside_execN)Ú__name__Ú
__module__Ú__qualname__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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   r&   )r   ÚargsÚkwr&   r   r   r   Ú_callFUTT   s    zTest_isClassAdvisor._callFUTc                 C   s   |   |  | ¡d¡ d S )NF©r   r)   ©r   r   r   r   Útest_w_non_functionX   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>.fooFr*   )r   r0   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 r-   r.   r   r   r   r   Úbard   s    z8Test_isClassAdvisor.test_w_advisor_function.<locals>.barT)ÚobjectZpreviousMetaclassr   r)   )r   r2   r   r   r   Útest_w_advisor_functionb   s    z+Test_isClassAdvisor.test_w_advisor_functionN)r"   r#   r$   r)   r,   r1   r4   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	d
„ Zdd„ ZdS )ÚTest_determineMetaclassc                 O   s   ddl m} |||ŽS )Nr   )ÚdetermineMetaclass)r   r6   )r   r'   r(   r6   r   r   r   r)   m   s    z Test_determineMetaclass._callFUTc                 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>.MetaN©r"   r#   r$   r   r   r   r   ÚMetas   s   r8   r   ©Útyper   r)   ©r   r8   r   r   r   Útest_empty_w_explicit_metatypeq   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>.MetaNr7   r   r   r   r   r8   z   s   r8   r9   r;   r   r   r   Útest_singlex   s    z#Test_determineMetaclass.test_singlec                 C   s>   G dd„ dt ƒ}G dd„ dt |d�}|  |  |t f¡|¡ d S )Nc                   @   s   e Zd ZdS )z<Test_determineMetaclass.test_meta_of_class.<locals>.MetametaNr7   r   r   r   r   ÚMetameta�   s   r>   c                   @   s   e Zd ZdS )z8Test_determineMetaclass.test_meta_of_class.<locals>.MetaNr7   r   r   r   r   r8   „   s   r8   ©Ú	metaclassr9   )r   r>   r8   r   r   r   Útest_meta_of_class   s    z*Test_determineMetaclass.test_meta_of_classc                 C   sb   G dd„ dt ƒ}G dd„ d|ƒ}G dd„ dt |d�}G dd	„ d	t |d�}|  |  ||f¡|¡ d S )
Nc                   @   s   e Zd ZdS )zGTest_determineMetaclass.test_multiple_in_hierarchy_py3k.<locals>.Meta_ANr7   r   r   r   r   ÚMeta_A‹   s   rB   c                   @   s   e Zd ZdS )zGTest_determineMetaclass.test_multiple_in_hierarchy_py3k.<locals>.Meta_BNr7   r   r   r   r   ÚMeta_BŽ   s   rC   c                   @   s   e Zd ZdS )zBTest_determineMetaclass.test_multiple_in_hierarchy_py3k.<locals>.ANr7   r   r   r   r   ÚA‘   s   rD   r?   c                   @   s   e Zd ZdS )zBTest_determineMetaclass.test_multiple_in_hierarchy_py3k.<locals>.BNr7   r   r   r   r   ÚB”   s   rE   r9   ©r   rB   rC   rD   rE   r   r   r   Útest_multiple_in_hierarchy_py3k‰   s
    z7Test_determineMetaclass.test_multiple_in_hierarchy_py3kc                 C   s`   G dd„ dt ƒ}G dd„ dt ƒ}G dd„ dt |d�}G dd	„ d	t |d�}|  t| j||f¡ d S )
Nc                   @   s   e Zd ZdS )zKTest_determineMetaclass.test_multiple_not_in_hierarchy_py3k.<locals>.Meta_ANr7   r   r   r   r   rB   ›   s   rB   c                   @   s   e Zd ZdS )zKTest_determineMetaclass.test_multiple_not_in_hierarchy_py3k.<locals>.Meta_BNr7   r   r   r   r   rC   ž   s   rC   c                   @   s   e Zd ZdS )zFTest_determineMetaclass.test_multiple_not_in_hierarchy_py3k.<locals>.ANr7   r   r   r   r   rD   ¡   s   rD   r?   c                   @   s   e Zd ZdS )zFTest_determineMetaclass.test_multiple_not_in_hierarchy_py3k.<locals>.BNr7   r   r   r   r   rE   ¤   s   rE   )r:   ÚassertRaisesÚ	TypeErrorr)   rF   r   r   r   Ú#test_multiple_not_in_hierarchy_py3k™   s
    z;Test_determineMetaclass.test_multiple_not_in_hierarchy_py3kN)	r"   r#   r$   r)   r<   r=   rA   rG   rJ   r   r   r   r   r5   k   s   
r5   c                   @   s<   e Zd Zdd„ Z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   rL   )r   ZklassesrL   r   r   r   r)   ¬   s    zTest_minimalBases._callFUTc                 C   s   |   |  g ¡g ¡ d S r-   r*   r+   r   r   r   Ú
test_empty°   s    zTest_minimalBases.test_emptyc                 C   s   |   |  tg¡tg¡ d S r-   )r   r)   r:   r+   r   r   r   Útest_w_newstyle_meta³   s    z&Test_minimalBases.test_w_newstyle_metac                 C   s(   G dd„ dƒ}|   |  |g¡|g¡ d S )Nc                   @   s   e Zd ZdS )z2Test_minimalBases.test_w_newstyle_class.<locals>.CNr7   r   r   r   r   ÚC¸   s   rO   r*   )r   rO   r   r   r   Útest_w_newstyle_class¶   s    z'Test_minimalBases.test_w_newstyle_classc                 C   s¾   G dd„ dƒ}G dd„ d|ƒ}G dd„ d|ƒ}G dd„ dƒ}|   |  |||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>.ANr7   r   r   r   r   rD   ¿   s   rD   c                   @   s   e Zd ZdS )z@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.BNr7   r   r   r   r   rE   Â   s   rE   c                   @   s   e Zd ZdS )z@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.CNr7   r   r   r   r   rO   Å   s   rO   c                   @   s   e Zd ZdS )z@Test_minimalBases.test_simple_hierarchy_skips_implied.<locals>.DNr7   r   r   r   r   ÚDÈ   s   rQ   r*   )r   rD   rE   rO   rQ   r   r   r   Ú#test_simple_hierarchy_skips_implied½   s    z5Test_minimalBases.test_simple_hierarchy_skips_impliedc                 C   s<   G dd„ dƒ}G dd„ dƒ}|   |  |||g¡||g¡ d S )Nc                   @   s   e Zd ZdS )z@Test_minimalBases.test_repeats_kicked_to_end_of_queue.<locals>.ANr7   r   r   r   r   rD   Ó   s   rD   c                   @   s   e Zd ZdS )z@Test_minimalBases.test_repeats_kicked_to_end_of_queue.<locals>.BNr7   r   r   r   r   rE   Ö   s   rE   r*   )r   rD   rE   r   r   r   Ú#test_repeats_kicked_to_end_of_queueÑ   s    z5Test_minimalBases.test_repeats_kicked_to_end_of_queueN)	r"   r#   r$   r)   rM   rN   rP   rR   rS   r   r   r   r   rK   ª   s   rK   )	Ú__doc__r   ZunittestZTestCaser   r    r%   r5   rK   r   r   r   r   Ú<module>   s   ,?