U
    ÈZj>ì  ã                   @   sd  d Z ddlZddlmZ G dd„ deƒ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
G dd„ de
ƒ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G dd„ dejƒZG dd„ dejeƒZG dd„ dejeƒ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G d&d'„ d'ejƒZG d(d)„ d)ejƒZG d*d+„ d+eƒZG d,d-„ d-ejƒZG d.d/„ d/ejƒZG d0d1„ d1ejeƒZG d2d3„ d3ejƒZG d4d5„ d5ejƒZG d6d7„ d7ejƒZG d8d9„ d9eƒZ G d:d;„ d;ejƒZ!G d<d=„ d=e!ƒZ"G d>d?„ d?ejƒZ#G d@dA„ dAe#ƒZ$G dBdC„ dCeƒZ%G dDdE„ dEeƒZ&dS )Fz@Test the new API for making and checking interface declarations
é    N)Ú_skip_under_py3kc                   @   s   e Zd Zddd„ZdS )Ú_Py3ClassAdviceTc              	   C   s¦   dd l }ddlm} |jdd��|}| ¡  |sXt|||ƒ |  t|ƒd¡ W 5 Q R £ dS zt|||ƒ W n  tk
rˆ   Y W 5 Q R £ dS X |r˜|  	d¡ W 5 Q R X d S )Nr   ©ÚPYTHON3T©ÚrecordFúDidn't raise TypeError)
ÚwarningsÚzope.interface._compatr   Úcatch_warningsÚresetwarningsÚexecÚassertEqualÚlenÚ	TypeErrorÚfail)ÚselfÚcodeÚglobsÚlocsZfails_under_py3kr	   r   Úlog© r   úi/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/zope/interface/tests/test_declarations.pyÚ_run_generated_code   s    z#_Py3ClassAdvice._run_generated_codeN)T)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s    ÿr   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
NamedTestsc                 C   s6   ddl m} |dƒG dd„ dtƒƒ}|  |jd¡ d S )Nr   ©ÚnamedÚfooc                   @   s   e Zd ZdS )z"NamedTests.test_class.<locals>.FooN©r   r   r   r   r   r   r   ÚFoo1   s   r"   ©Úzope.interface.declarationsr   Úobjectr   Ú__component_name__)r   r   r"   r   r   r   Ú
test_class.   s    zNamedTests.test_classc                 C   s.   ddl m} |dƒdd„ ƒ}|  |jd¡ d S )Nr   r   r    c                 S   s
   t ƒ ‚d S ©N©ÚNotImplementedError)Úor   r   r   ÚdoFoo:   s    z'NamedTests.test_function.<locals>.doFoo)r$   r   r   r&   )r   r   r,   r   r   r   Útest_function7   s    
zNamedTests.test_functionc                 C   s@   ddl m} G dd„ dtƒ}|ƒ }|dƒ|ƒ |  |jd¡ d S )Nr   r   c                   @   s   e Zd ZdS )z%NamedTests.test_instance.<locals>.FooNr!   r   r   r   r   r"   C   s   r"   r    r#   )r   r   r"   r    r   r   r   Útest_instance@   s
    zNamedTests.test_instanceN)r   r   r   r'   r-   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d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3S )4ÚDeclarationTestsc                 C   s   ddl m} |S )Nr   )ÚDeclaration)r$   r0   )r   r0   r   r   r   Ú_getTargetClassM   s    z DeclarationTests._getTargetClassc                 O   s   |   ¡ ||ŽS r(   ©r1   ©r   ÚargsÚkwr   r   r   Ú_makeOneQ   s    zDeclarationTests._makeOnec                 C   s   |   ¡ }|  t|jƒg ¡ d S r(   )r6   r   ÚlistÚ	__bases__©r   Údeclr   r   r   Útest_ctor_no_basesT   s    z#DeclarationTests.test_ctor_no_basesc                 C   s6   ddl m} |dƒ}|  |¡}|  t|jƒ|g¡ d S ©Nr   ©ÚInterfaceClassÚIFoo)Úzope.interface.interfacer>   r6   r   r7   r8   ©r   r>   r?   r:   r   r   r   Útest_ctor_w_interface_in_basesX   s    
z/DeclarationTests.test_ctor_w_interface_in_basesc                 C   s4   ddl m} |ƒ }|  |¡}|  t|jƒ|g¡ d S ©Nr   ©Ú
Implements)r$   rE   r6   r   r7   r8   )r   rE   Úimplr:   r   r   r   Útest_ctor_w_implements_in_bases^   s    
z0DeclarationTests.test_ctor_w_implements_in_basesc                 C   s&   |   ¡ }| |¡ |  d|jk¡ d S ©NÚ_v_attrs)r6   ÚchangedÚassertFalseÚ__dict__r9   r   r   r   Ú!test_changed_wo_existing__v_attrsd   s    
z2DeclarationTests.test_changed_wo_existing__v_attrsc                 C   s.   |   ¡ }tƒ |_| |¡ |  d|jk¡ d S rH   )r6   r%   rI   rJ   rK   rL   r9   r   r   r   Ú test_changed_w_existing__v_attrsi   s    
z1DeclarationTests.test_changed_w_existing__v_attrsc                 C   s.   ddl m} |dƒ}|  ¡ }|  ||k¡ d S r<   ©r@   r>   r6   rK   rA   r   r   r   Útest___contains__w_selfo   s    z(DeclarationTests.test___contains__w_selfc                 C   s.   ddl m} |dƒ}|  ¡ }|  ||k¡ d S r<   rO   rA   r   r   r   Ú"test___contains__w_unrelated_ifaceu   s    z3DeclarationTests.test___contains__w_unrelated_ifacec                 C   s0   ddl m} |dƒ}|  |¡}|  ||k¡ d S r<   )r@   r>   r6   Ú
assertTruerA   r   r   r   Ú!test___contains__w_base_interface{   s    
z2DeclarationTests.test___contains__w_base_interfacec                 C   s   |   ¡ }|  t|ƒg ¡ d S r(   )r6   r   r7   r9   r   r   r   Útest___iter___empty�   s    z$DeclarationTests.test___iter___emptyc                 C   s4   ddl m} |dƒ}|  |¡}|  t|ƒ|g¡ d S r<   ©r@   r>   r6   r   r7   rA   r   r   r   Útest___iter___single_base…   s    
z*DeclarationTests.test___iter___single_basec                 C   s@   ddl m} |dƒ}|dƒ}|  ||¡}|  t|ƒ||g¡ d S ©Nr   r=   r?   ÚIBarrU   ©r   r>   r?   rX   r:   r   r   r   Útest___iter___multiple_bases‹   s
    z-DeclarationTests.test___iter___multiple_basesc                 C   s@   ddl m} |dƒ}|d|fƒ}|  |¡}|  t|ƒ|g¡ d S rW   rU   rY   r   r   r   Útest___iter___inheritance’   s
    
z*DeclarationTests.test___iter___inheritancec                 C   sD   ddl m} |dƒ}|dƒ}|  |||f¡}|  t|ƒ||g¡ d S rW   rU   rY   r   r   r   Ú'test___iter___w_nested_sequence_overlap™   s
    z8DeclarationTests.test___iter___w_nested_sequence_overlapc                 C   s.   ddl m} |  ¡ }|  t| ¡ ƒ|g¡ d S )Nr   ©Ú	Interface)r@   r^   r6   r   r7   Ú	flattened)r   r^   r:   r   r   r   Útest_flattened_empty    s    z%DeclarationTests.test_flattened_emptyc                 C   sF   ddl m} ddl m} |dƒ}|  |¡}|  t| ¡ ƒ||g¡ d S )Nr   r]   r=   r?   ©r@   r^   r>   r6   r   r7   r_   )r   r^   r>   r?   r:   r   r   r   Útest_flattened_single_base¥   s
    
z+DeclarationTests.test_flattened_single_basec                 C   sR   ddl m} ddl m} |dƒ}|dƒ}|  ||¡}|  t| ¡ ƒ|||g¡ d S ©Nr   r]   r=   r?   rX   ra   ©r   r^   r>   r?   rX   r:   r   r   r   Útest_flattened_multiple_bases¬   s    z.DeclarationTests.test_flattened_multiple_basesc                 C   sT   ddl m} ddl m} |dƒ}|d|fƒ}|  |¡}|  t| ¡ ƒ|||g¡ d S rc   ra   rd   r   r   r   Útest_flattened_inheritance´   s    
z+DeclarationTests.test_flattened_inheritancec                 C   sV   ddl m} ddl m} |dƒ}|dƒ}|  |||f¡}|  t| ¡ ƒ|||g¡ d S rc   ra   rd   r   r   r   Ú(test_flattened_w_nested_sequence_overlap¼   s    z9DeclarationTests.test_flattened_w_nested_sequence_overlapc                 C   sX   ddl m} |dƒ}|dƒ}|  |¡}|| }|  t||  ¡ ƒ¡ |  t|ƒ|g¡ d S rW   ©r@   r>   r6   rR   Ú
isinstancer1   r   r7   ©r   r>   r?   rX   ÚbeforeÚafterr   r   r   Ú test___sub___unrelated_interfaceÅ   s    
z1DeclarationTests.test___sub___unrelated_interfacec                 C   s:   ddl m} |dƒ}|  |¡}|| }|  t|ƒg ¡ d S r<   rU   )r   r>   r?   rk   rl   r   r   r   Útest___sub___related_interfaceÎ   s
    
z/DeclarationTests.test___sub___related_interfacec                 C   sF   ddl m} |dƒ}|d|fƒ}|  |¡}|| }|  t|ƒg ¡ d S rW   rU   rj   r   r   r   Ú-test___sub___related_interface_by_inheritanceÕ   s    
z>DeclarationTests.test___sub___related_interface_by_inheritancec                 C   sZ   ddl m} |dƒ}|dƒ}|  |¡}|| }|  t||  ¡ ƒ¡ |  t|ƒ||g¡ d S rW   rh   rj   r   r   r   Ú test___add___unrelated_interfaceÝ   s    
z1DeclarationTests.test___add___unrelated_interfacec                 C   s^   ddl m} |dƒ}|dƒ}|dƒ}|  ||¡}|  ||¡}|| }|  t|ƒ|||g¡ d S )Nr   r=   r?   rX   ÚIBazrU   )r   r>   r?   rX   rq   rk   Úotherrl   r   r   r   Útest___add___related_interfaceæ   s    z/DeclarationTests.test___add___related_interfaceN)r   r   r   r1   r6   r;   rB   rG   rM   rN   rP   rQ   rS   rT   rV   rZ   r[   r\   r`   rb   re   rf   rg   rm   rn   ro   rp   rs   r   r   r   r   r/   K   s2   			r/   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestImplementsc                 C   s   ddl m} |S rC   )r$   rE   )r   rE   r   r   r   r1   ó   s    zTestImplements._getTargetClassc                 O   s   |   ¡ ||ŽS r(   r2   r3   r   r   r   r6   ÷   s    zTestImplements._makeOnec                 C   sH   |   ¡ }|  |jd ¡ |  |jd¡ |  |jd¡ |  t|jƒg ¡ d S )Nr   ú?)r6   r   ÚinheritÚdeclaredr   r7   r8   ©r   rF   r   r   r   r;   ú   s
    z!TestImplements.test_ctor_no_basesc                 C   s"   |   ¡ }d|_|  t|ƒd¡ d S )NZTestingz<implementedBy Testing>)r6   r   r   Úreprrx   r   r   r   Útest___repr__  s    zTestImplements.test___repr__c                 C   s,   ddl m} |  ¡ }|  | ¡ |df¡ d S )Nr   ©ÚimplementedByr(   )r$   r|   r6   r   Ú
__reduce__)r   r|   rF   r   r   r   Útest___reduce__  s    zTestImplements.test___reduce__c                 C   sú   ddl m} G dd„ dtƒ}G dd„ dtƒ}ddlm} |dƒ}|  ||ƒ||ƒ¡ |  t||ƒƒt||ƒƒ¡ |  ||ƒd k ¡ |  d ||ƒk¡ |  ||ƒ||ƒk ¡ |  ||ƒ|k¡ |  ||ƒ||ƒk¡ |  ||ƒ|k¡ |  ||ƒ|k¡ d S )	Nr   r{   c                   @   s   e Zd ZdS )z#TestImplements.test_sort.<locals>.ANr!   r   r   r   r   ÚA  s   r   c                   @   s   e Zd ZdS )z#TestImplements.test_sort.<locals>.BNr!   r   r   r   r   ÚB  s   r€   r=   r?   )r$   r|   r%   r@   r>   r   ÚhashrR   )r   r|   r   r€   r>   r?   r   r   r   Ú	test_sort  s    zTestImplements.test_sortc                 C   sÖ   G dd„ dt ƒ}ddlm} G dd„ dt ƒ}G dd„ dt ƒ}||ƒ}||ƒ}||ƒ}|  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ d S )	Nc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z1TestImplements.test_proxy_equality.<locals>.Proxyc                 S   s
   || _ d S r(   ©Z_wrapped)r   Úwrappedr   r   r   Ú__init__!  s    z:TestImplements.test_proxy_equality.<locals>.Proxy.__init__c                 S   s
   t ƒ ‚d S r(   r)   ©r   Únamer   r   r   Ú__getattr__$  s    z=TestImplements.test_proxy_equality.<locals>.Proxy.__getattr__c                 S   s
   | j |kS r(   rƒ   ©r   rr   r   r   r   Ú__eq__'  s    z8TestImplements.test_proxy_equality.<locals>.Proxy.__eq__c                 S   s
   | j |kS r(   rƒ   r‰   r   r   r   Ú__ne__*  s    z8TestImplements.test_proxy_equality.<locals>.Proxy.__ne__N)r   r   r   r…   rˆ   rŠ   r‹   r   r   r   r   ÚProxy   s   rŒ   r   r{   c                   @   s   e Zd ZdS )z-TestImplements.test_proxy_equality.<locals>.ANr!   r   r   r   r   r   .  s   r   c                   @   s   e Zd ZdS )z-TestImplements.test_proxy_equality.<locals>.BNr!   r   r   r   r   r€   1  s   r€   )r%   r$   r|   rR   rK   )r   rŒ   r|   r   r€   ZimplementedByAZimplementedByBÚproxyr   r   r   Útest_proxy_equality  s     z"TestImplements.test_proxy_equalityN)
r   r   r   r1   r6   r;   rz   r~   r‚   rŽ   r   r   r   r   rt   ñ   s   rt   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d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) ÚTest_implementedByFallbackc                 O   s   ddl m} |||ŽS )Nr   ©ÚimplementedByFallback)r$   r‘   )r   r4   r5   r‘   r   r   r   Ú_callFUTI  s    z#Test_implementedByFallback._callFUTc                 C   s6   G dd„ dt ƒ}|ƒ }d |_|  t|  |¡ƒg ¡ d S )Nc                   @   s   e Zd ZdZdS )z]Test_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrations.<locals>.Foo©Ú__implemented__N©r   r   r   Ú	__slots__r   r   r   r   r"   N  s   r"   )r%   r”   r   r7   r’   ©r   r"   r    r   r   r   Ú5test_dictless_wo_existing_Implements_wo_registrationsM  s    zPTest_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrationsc                 C   s*   G dd„ dt ƒ}|ƒ }|  t| j|¡ d S )Nc                   @   s.   e Zd Zdd„ Zdd„ ZeeeƒZdd„ ZdS )zhTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Fooc                 S   s
   t ƒ ‚d S r(   r)   ©r   r   r   r   Ú	_get_implV  s    zrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._get_implc                 S   s   t ‚d S r(   )r   )r   Úvalr   r   r   Ú	_set_implX  s    zrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._set_implc                 S   s
   t ƒ ‚d S r(   r)   r™   r   r   r   Ú__call__[  s    zqTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo.__call__N)r   r   r   rš   rœ   Úpropertyr”   r�   r   r   r   r   r"   U  s   
r"   ©r%   ÚassertRaisesr   r’   r—   r   r   r   Ú@test_dictless_wo_existing_Implements_cant_assign___implemented__T  s    	z[Test_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__c              	   C   sd   ddl m} G dd„ dtƒ}|ƒ }d |_tƒ }t|dƒ�"}|||< |  |  |¡|k¡ W 5 Q R X d S )Nr   ©Údeclarationsc                   @   s   e Zd ZdZdS )z\Test_implementedByFallback.test_dictless_wo_existing_Implements_w_registrations.<locals>.Foor“   Nr•   r   r   r   r   r"   c  s   r"   Ú#BuiltinImplementationSpecifications)Úzope.interfacer£   r%   r”   Ú_MonkeyDictrR   r’   )r   r£   r"   r    ÚregÚspecsr   r   r   Ú4test_dictless_wo_existing_Implements_w_registrationsa  s    ÿzOTest_implementedByFallback.test_dictless_wo_existing_Implements_w_registrationsc                 C   sF   ddl m} |ƒ }G dd„ dtƒ}|ƒ }||_|  |  |¡|k¡ d S )Nr   rD   c                   @   s   e Zd ZdZdS )zKTest_implementedByFallback.test_dictless_w_existing_Implements.<locals>.Foor“   Nr•   r   r   r   r   r"   p  s   r"   )r$   rE   r%   r”   rR   r’   )r   rE   rF   r"   r    r   r   r   Ú#test_dictless_w_existing_Implementsm  s    z>Test_implementedByFallback.test_dictless_w_existing_Implementsc                 C   sN   ddl m} G dd„ dtƒ}|ƒ }|dƒ}|f|_|  t|  |¡ƒ|g¡ d S )Nr   r=   c                   @   s   e Zd ZdZdS )zOTest_implementedByFallback.test_dictless_w_existing_not_Implements.<locals>.Foor“   Nr•   r   r   r   r   r"   x  s   r"   r?   )r@   r>   r%   r”   r   r7   r’   )r   r>   r"   r    r?   r   r   r   Ú'test_dictless_w_existing_not_Implementsv  s    zBTest_implementedByFallback.test_dictless_w_existing_not_Implementsc                    s>   ddl m} |ƒ ‰ G ‡ fdd„dtƒ}|  |  |¡ˆ k¡ d S )Nr   rD   c                       s   e Zd Z” ZdS )zJTest_implementedByFallback.test_w_existing_attr_as_Implements.<locals>.FooN©r   r   r   r”   r   ©rF   r   r   r"   ‚  s   r"   ©r$   rE   r%   rR   r’   ©r   rE   r"   r   r­   r   Ú"test_w_existing_attr_as_Implements  s    z=Test_implementedByFallback.test_w_existing_attr_as_Implementsc              	   C   sÂ   ddl m} ddlm} ddlm} t|dƒ�Š}|  t|  	t
¡ƒg ¡ |  t|  	t¡ƒg ¡ |  t|  	t¡ƒg ¡ t
ttfD ]6}|| }|  t||ƒ¡ |  t|ƒd||jf ¡ q|W 5 Q R X d S )Nr   r¢   rD   )Ú	_BUILTINSr¤   z<implementedBy %s.%s>)r¥   r£   r$   rE   r
   r±   r¦   r   r7   r’   ÚtupleÚdictrR   ri   ry   r   )r   r£   rE   r±   r¨   ÚtypÚspecr   r   r   Útest_builtins_added_to_cache†  s$    ÿ
ÿÿz7Test_implementedByFallback.test_builtins_added_to_cachec              	   C   s�   ddl m} tƒ tƒ tƒ   }}}t|dƒ�Z}||t< ||t< ||t< |  |  t¡|k¡ |  |  t¡|k¡ |  |  t¡|k¡ W 5 Q R X d S )Nr   r¢   r¤   )	r¥   r£   r%   r¦   r²   r7   r³   rR   r’   )r   r£   Zt_specZl_specZd_specr¨   r   r   r   Útest_builtins_w_existing_cache–  s    ÿz9Test_implementedByFallback.test_builtins_w_existing_cachec                 C   s(   G dd„ dƒ}|   t|  |¡ƒg ¡ d S )Nc                   @   s   e Zd ZdS )zITest_implementedByFallback.test_oldstyle_class_no_assertions.<locals>.FooNr!   r   r   r   r   r"   ¤  s   r"   )r   r7   r’   ©r   r"   r   r   r   Ú!test_oldstyle_class_no_assertions¢  s    z<Test_implementedByFallback.test_oldstyle_class_no_assertionsc                 C   s*   G dd„ dt ƒ}|  t|  |¡ƒg ¡ d S )Nc                   @   s   e Zd ZdS )z:Test_implementedByFallback.test_no_assertions.<locals>.FooNr!   r   r   r   r   r"   ª  s   r"   ©r%   r   r7   r’   r¸   r   r   r   Útest_no_assertions¨  s    z-Test_implementedByFallback.test_no_assertionsc                 C   s*   G dd„ dt ƒ}|ƒ }|  t| j|¡ d S )Nc                   @   s   e Zd ZdZdS )zHTest_implementedByFallback.test_w_None_no_bases_not_factory.<locals>.FooNr¬   r   r   r   r   r"   ¯  s   r"   rŸ   r—   r   r   r   Ú test_w_None_no_bases_not_factory®  s    z;Test_implementedByFallback.test_w_None_no_bases_not_factoryc                 C   s„   ddl m} G dd„ dtƒ}|ƒ }d|_|  |¡}|  |jd¡ |  |j|k¡ |  |j|k¡ |  |j	|k¡ |  
d|jk¡ d S )Nr   )ÚobjectSpecificationDescriptorc                   @   s   e Zd ZdZdd„ ZdS )zFTest_implementedByFallback.test_w_None_no_bases_w_factory.<locals>.FooNc                 S   s
   t ƒ ‚d S r(   r)   r™   r   r   r   r�   ¸  s    zOTest_implementedByFallback.test_w_None_no_bases_w_factory.<locals>.Foo.__call__)r   r   r   r”   r�   r   r   r   r   r"   ¶  s   r"   r    z*zope.interface.tests.test_declarations.fooÚ__provides__)r$   r½   r%   r   r’   r   rR   rv   r”   Ú__providedBy__rK   rL   )r   r½   r"   r    rµ   r   r   r   Útest_w_None_no_bases_w_factory´  s    
ÿz9Test_implementedByFallback.test_w_None_no_bases_w_factoryc                 C   sŒ   ddl m} G dd„ dtƒ}|  |¡}|  |jd¡ |  |j|k¡ |  |j|k¡ |  t	|j
|ƒ¡ |  t	|j|ƒ¡ |  |j|j
¡ d S )Nr   ©ÚClassProvidesc                   @   s   e Zd ZdZdS )zDTest_implementedByFallback.test_w_None_no_bases_w_class.<locals>.FooNr¬   r   r   r   r   r"   Ç  s   r"   ú*zope.interface.tests.test_declarations.Foo)r$   rÂ   r%   r’   r   r   rR   rv   r”   ri   r¿   r¾   )r   rÂ   r"   rµ   r   r   r   Útest_w_None_no_bases_w_classÅ  s    
ÿz7Test_implementedByFallback.test_w_None_no_bases_w_classc                    s>   ddl m} |ƒ ‰ G ‡ fdd„dtƒ}|  |  |¡ˆ k¡ d S )Nr   rD   c                       s   e Zd Z” ZdS )zBTest_implementedByFallback.test_w_existing_Implements.<locals>.FooNr¬   r   r­   r   r   r"   Õ  s   r"   r®   r¯   r   r­   r   Útest_w_existing_ImplementsÒ  s    z5Test_implementedByFallback.test_w_existing_ImplementsN)r   r   r   r’   r˜   r¡   r©   rª   r«   r°   r¶   r·   r¹   r»   r¼   rÀ   rÄ   rÅ   r   r   r   r   r�   G  s   		r�   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTest_implementedByc                 O   s   ddl m} |||ŽS )Nr   r{   )r$   r|   )r   r4   r5   r|   r   r   r   r’   Ý  s    zTest_implementedBy._callFUTc                 C   sV   ddl m} ddl m} zdd l}W n  tk
rD   |  ||¡ Y nX |  ||¡ d S )Nr   r�   r{   )r$   r‘   r|   Ú-zope.interface._zope_interface_coptimizationsÚImportErrorÚassertIsÚassertIsNot)r   r‘   r|   Úzoper   r   r   Útest_optimizationsá  s    z%Test_implementedBy.test_optimizationsN©r   r   r   r’   rÌ   r   r   r   r   rÆ   Ú  s   rÆ   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTest_classImplementsOnlyc                 O   s   ddl m} |||ŽS )Nr   )ÚclassImplementsOnly)r$   rÏ   )r   r4   r5   rÏ   r   r   r   r’   î  s    z!Test_classImplementsOnly._callFUTc                 C   s¨   ddl m} ddlm} G dd„ dtƒ}|dƒ}|  ||¡ |j}|  |jd¡ |  	|j
d k¡ |  	|j|k¡ |  	t|j|ƒ¡ |  	t|j|ƒ¡ |  |j|j¡ d S )Nr   rÁ   r=   c                   @   s   e Zd ZdS )z6Test_classImplementsOnly.test_no_existing.<locals>.FooNr!   r   r   r   r   r"   õ  s   r"   r?   rÃ   ©r$   rÂ   r@   r>   r%   r’   r”   r   r   rR   rv   ri   r¿   r¾   )r   rÂ   r>   r"   Zifoorµ   r   r   r   Útest_no_existingò  s    ÿz)Test_classImplementsOnly.test_no_existingc                    s�   ddl m} ddlm} |dƒ}|dƒ}||ƒ‰ |fˆ _G ‡ fdd„dtƒ}|ˆ _|  ||¡ |  |j	ˆ k¡ |  
ˆ jd ¡ |  
ˆ j|f¡ d S )Nr   rD   r=   r?   rX   c                       s   e Zd Z” ZdS )z@Test_classImplementsOnly.test_w_existing_Implements.<locals>.FooNr¬   r   r­   r   r   r"   	  s   r"   ©r$   rE   r@   r>   rw   r%   rv   r’   rR   r”   r   ©r   rE   r>   r?   rX   r"   r   r­   r   rÅ     s    z3Test_classImplementsOnly.test_w_existing_ImplementsN)r   r   r   r’   rÑ   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_classImplementsc                 O   s   ddl m} |||ŽS )Nr   ©ÚclassImplements)r$   rÖ   )r   r4   r5   rÖ   r   r   r   r’     s    zTest_classImplements._callFUTc                 C   s¨   ddl m} ddlm} G dd„ dtƒ}|dƒ}|  ||¡ |j}|  |jd¡ |  	|j
|k¡ |  	|j|k¡ |  	t|j|ƒ¡ |  	t|j|ƒ¡ |  |j|j¡ d S )Nr   rÁ   r=   c                   @   s   e Zd ZdS )z2Test_classImplements.test_no_existing.<locals>.FooNr!   r   r   r   r   r"     s   r"   r?   rÃ   rÐ   )r   rÂ   r>   r"   r?   rµ   r   r   r   rÑ     s    ÿz%Test_classImplements.test_no_existingc                    s’   ddl m} ddlm} |dƒ}|dƒ}||ƒ‰ |fˆ _G ‡ fdd„dtƒ}|ˆ _|  ||¡ |  |j	ˆ k¡ |  
ˆ j|¡ |  
ˆ j||f¡ d S )Nr   rD   r=   r?   rX   c                       s   e Zd Z” ZdS )z<Test_classImplements.test_w_existing_Implements.<locals>.FooNr¬   r   r­   r   r   r"   0  s   r"   rÒ   rÓ   r   r­   r   rÅ   )  s    z/Test_classImplements.test_w_existing_Implementsc           	         sâ   ddl m} ddlm} |dƒ}|dƒ}|d|ƒ}||ƒ‰ ||ƒ‰|fˆ_G ‡ fdd„dtƒ}G ‡ fd	d
„d
tƒ}G ‡fdd„d||ƒ}|ˆ_|  ||¡ |  |j	ˆk¡ |  
ˆj|¡ |  
ˆj||f¡ |  
ˆj||ˆ f¡ d S )Nr   rD   r=   r?   rX   rq   c                       s   e Zd Z” ZdS )zFTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Base1Nr¬   r   ©Úb_implr   r   ÚBase1B  s   rÙ   c                       s   e Zd Z” ZdS )zFTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Base2Nr¬   r   r×   r   r   ÚBase2D  s   rÚ   c                       s   e Zd Z” ZdS )zDTest_classImplements.test_w_existing_Implements_w_bases.<locals>.FooNr¬   r   r­   r   r   r"   F  s   r"   )r$   rE   r@   r>   rw   r%   rv   r’   rR   r”   r   r8   )	r   rE   r>   r?   rX   rq   rÙ   rÚ   r"   r   )rØ   rF   r   Ú"test_w_existing_Implements_w_bases9  s"    
z7Test_classImplements.test_w_existing_Implements_w_basesN)r   r   r   r’   rÑ   rÅ   rÛ   r   r   r   r   rÔ     s   rÔ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTest__implements_advicec                 O   s   ddl m} |||ŽS )Nr   )Ú_implements_advice)r$   rÝ   )r   r4   r5   rÝ   r   r   r   r’   S  s    z Test__implements_advice._callFUTc                    s†   ddl m‰ ddl m} ddlm} |dƒ‰ G ‡ ‡fdd„dtƒ}|  |¡ |  d|jk¡ |  	t
|j|ƒ¡ |  t|jƒˆ g¡ d S )	Nr   rÕ   rD   r=   r?   c                       s   e Zd Z” f”fZdS )z@Test__implements_advice.test_no_existing_implements.<locals>.FooN)r   r   r   Ú__implements_advice_data__r   ©r?   rÖ   r   r   r"   \  s   r"   rÞ   )r$   rÖ   rE   r@   r>   r%   r’   rK   rL   rR   ri   r”   r   r7   )r   rE   r>   r"   r   rß   r   Útest_no_existing_implementsW  s    
z3Test__implements_advice.test_no_existing_implementsN)r   r   r   r’   rà   r   r   r   r   rÜ   Q  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_implementerc                 C   s   ddl m} |S )Nr   ©Úimplementer)r$   rã   )r   rã   r   r   r   r1   f  s    z Test_implementer._getTargetClassc                 O   s   |   ¡ ||ŽS r(   r2   r3   r   r   r   r6   j  s    zTest_implementer._makeOnec                 C   sº   ddl m} ddlm} |dƒ}G dd„ dƒ}|  |¡}||ƒ}|  ||k¡ |j}|  |jd¡ |  |j	|k¡ |  |j|k¡ |  t
|j|ƒ¡ |  t
|j|ƒ¡ |  |j|j¡ d S )Nr   rÁ   r=   r?   c                   @   s   e Zd ZdS )z1Test_implementer.test_oldstyle_class.<locals>.FooNr!   r   r   r   r   r"   r  s   r"   rÃ   )r$   rÂ   r@   r>   r6   rR   r”   r   r   rv   ri   r¿   r¾   ©r   rÂ   r>   r?   r"   Ú	decoratorÚreturnedrµ   r   r   r   Útest_oldstyle_classm  s     
ÿz$Test_implementer.test_oldstyle_classc                 C   s¼   ddl m} ddlm} |dƒ}G dd„ dtƒ}|  |¡}||ƒ}|  ||k¡ |j}|  |j	d¡ |  |j
|k¡ |  |j|k¡ |  t|j|ƒ¡ |  t|j|ƒ¡ |  |j|j¡ d S )Nr   rÁ   r=   r?   c                   @   s   e Zd ZdS )z1Test_implementer.test_newstyle_class.<locals>.FooNr!   r   r   r   r   r"   „  s   r"   rÃ   )r$   rÂ   r@   r>   r%   r6   rR   r”   r   r   rv   ri   r¿   r¾   rä   r   r   r   Útest_newstyle_class€  s     
ÿz$Test_implementer.test_newstyle_classc                 C   s2   ddl m} |dƒ}|  |¡}|  t|tƒ ¡ d S r<   )r@   r>   r6   r    r   r%   )r   r>   r?   rå   r   r   r   Ú test_nonclass_cannot_assign_attr’  s    
z1Test_implementer.test_nonclass_cannot_assign_attrc                 C   s‚   ddl m} |dƒ}G dd„ dtƒ}|ƒ }|  |¡}||ƒ}|  ||k¡ |j}|  |jd¡ |  |jd k¡ |  |j|k¡ d S )Nr   r=   r?   c                   @   s   e Zd ZdS )z;Test_implementer.test_nonclass_can_assign_attr.<locals>.FooNr!   r   r   r   r   r"   ›  s   r"   z(zope.interface.tests.test_declarations.?)	r@   r>   r%   r6   rR   r”   r   r   rv   )r   r>   r?   r"   r    rå   ræ   rµ   r   r   r   Útest_nonclass_can_assign_attr˜  s    
z.Test_implementer.test_nonclass_can_assign_attrN)	r   r   r   r1   r6   rç   rè   ré   rê   r   r   r   r   rá   d  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_implementer_onlyc                 C   s   ddl m} |S )Nr   )Úimplementer_only)r$   rì   )r   rì   r   r   r   r1   ©  s    z%Test_implementer_only._getTargetClassc                 O   s   |   ¡ ||ŽS r(   r2   r3   r   r   r   r6   ­  s    zTest_implementer_only._makeOnec                 C   s8   ddl m} |dƒ}|  |¡}dd„ }|  t||¡ d S )Nr   r=   r?   c                   S   s
   t ƒ ‚d S r(   r)   r   r   r   r   Ú	_function´  s    z6Test_implementer_only.test_function.<locals>._function)r@   r>   r6   r    Ú
ValueError)r   r>   r?   rå   rí   r   r   r   r-   °  s
    
z#Test_implementer_only.test_functionc                 C   s@   ddl m} |dƒ}|  |¡}G dd„ dƒ}|  t||j¡ d S )Nr   r=   r?   c                   @   s   e Zd Zdd„ ZdS )z.Test_implementer_only.test_method.<locals>.Barc                   S   s
   t ƒ ‚d S r(   r)   r   r   r   r   Ú_method½  s    z6Test_implementer_only.test_method.<locals>.Bar._methodN)r   r   r   rï   r   r   r   r   ÚBar¼  s   rð   )r@   r>   r6   r    rî   rï   )r   r>   r?   rå   rð   r   r   r   Útest_method¸  s
    
z!Test_implementer_only.test_methodc           	         sš   ddl m} ddlm} |dƒ}|dƒ}||ƒ‰ G ‡ fdd„dƒ}|  |¡}||ƒ}|  ||k¡ |j}|  |jd¡ |  |j	d k¡ |  |j|k¡ d S )	Nr   rD   r=   r?   rX   c                       s   e Zd Z” ZdS )z6Test_implementer_only.test_oldstyle_class.<locals>.FooNr¬   r   ©Zold_specr   r   r"   È  s   r"   ru   )
r$   rE   r@   r>   r6   rR   r”   r   r   rv   ©	r   rE   r>   r?   rX   r"   rå   ræ   rµ   r   rò   r   rç   Á  s    
z)Test_implementer_only.test_oldstyle_classc           	         sœ   ddl m} ddlm} |dƒ}|dƒ}||ƒ‰ G ‡ fdd„dtƒ}|  |¡}||ƒ}|  ||k¡ |j}|  |j	d¡ |  |j
d k¡ |  |j|k¡ d S )	Nr   rD   r=   r?   rX   c                       s   e Zd Z” ZdS )z6Test_implementer_only.test_newstyle_class.<locals>.FooNr¬   r   rò   r   r   r"   Ø  s   r"   ru   )r$   rE   r@   r>   r%   r6   rR   r”   r   r   rv   ró   r   rò   r   rè   Ò  s    
z)Test_implementer_only.test_newstyle_classN)	r   r   r   r1   r6   r-   rñ   rç   rè   r   r   r   r   rë   §  s   	rë   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTest_implementsOnlyc              	   C   sâ   dd l }ddlm} ddlm} ddlm} |dƒ}||dœ}i }d dg¡}|jd	d
��~}	| 	¡  zt
|||ƒ W n  tk
r”   |  |d¡ Y n@X |r¤|  d¡ |d }
|
j}|  t|ƒ|g¡ |  t|	ƒd¡ W 5 Q R X d S )Nr   ©ÚimplementsOnlyr   r=   r?   )rö   r?   Ú
z*class Foo(object):    implementsOnly(IFoo)Tr   zMust be Python 3r   r"   )r	   r$   rö   r
   r   r@   r>   Újoinr   r   r   r   rR   r   r”   r   r7   r   )r   r	   rö   r   r>   r?   r   r   ÚCODEr   r"   rµ   r   r   r   Útest_simpleç  s0    ÿÿ
zTest_implementsOnly.test_simplec                 C   sˆ   ddl m} ddl m} ddlm} |dƒ}|dƒ}||||dœ}i }d d	d
dg¡}|  |||¡r„|d }	|	j}
|  t	|
ƒ|g¡ d S )Nr   ©Ú
implementsrõ   r=   r?   rX   )rü   rö   r?   rX   r÷   úclass Foo(object):ú    implements(IFoo)z'class Bar(Foo):    implementsOnly(IBar)rð   )
r$   rü   rö   r@   r>   rø   r   r”   r   r7   )r   rü   rö   r>   r?   rX   r   r   rù   rð   rµ   r   r   r   Ú#test_called_once_from_class_w_bases  s(    ýýz7Test_implementsOnly.test_called_once_from_class_w_basesN)r   r   r   rú   rÿ   r   r   r   r   rô   å  s   rô   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTest_implementsc           
   	   C   sœ   dd l }ddlm} ddlm} |dƒ}||dœ}i }d ddg¡}|  |||d	¡r˜|d
 }|jdd��*}	| ¡  |  	t
|¡ |  t|	ƒd¡ W 5 Q R X d S )Nr   rû   r=   r?   ©rü   r?   r÷   ú
def foo():rþ   Fr    Tr   )r	   r$   rü   r@   r>   rø   r   r   r   r    r   r   r   )
r   r	   rü   r>   r?   r   r   rù   r    r   r   r   r   Útest_called_from_function  s     
þz)Test_implements.test_called_from_functionc              	   C   sÄ   dd l }ddlm} ddlm} ddlm} |dƒ}|dƒ}|||dœ}i }d d	d
dg¡}	|jdd��R}
| 	¡  zt
|	||ƒ W n( tk
rª   |s¦|  t|
ƒd¡ Y nX |  d¡ W 5 Q R X d S )Nr   rû   r=   r   r?   rX   )rü   r?   rX   r÷   rý   rþ   z    implements(IBar)Tr   r   )r	   r$   rü   r@   r>   r
   r   rø   r   r   r   r   r   r   r   )r   r	   rü   r>   r   r?   rX   r   r   rù   r   r   r   r   Útest_called_twice_from_class/  s*    ýz,Test_implements.test_called_twice_from_classc           	      C   sn   ddl m} ddlm} |dƒ}||dœ}i }d ddg¡}|  |||¡rj|d	 }|j}|  t|ƒ|g¡ d S )
Nr   rû   r=   r?   r  r÷   rý   rþ   r"   )	r$   rü   r@   r>   rø   r   r”   r   r7   )	r   rü   r>   r?   r   r   rù   r"   rµ   r   r   r   Útest_called_once_from_classG  s    
þz+Test_implements.test_called_once_from_classN©r   r   r   r  r  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 )ÚProvidesClassTestsc                 C   s   ddl m} |S )Nr   ©ÚProvidesClass)r$   r	  )r   r	  r   r   r   r1   Y  s    z"ProvidesClassTests._getTargetClassc                 O   s   |   ¡ ||ŽS r(   r2   r3   r   r   r   r6   ]  s    zProvidesClassTests._makeOnec                 C   sF   ddl m} |dƒ}G dd„ dtƒ}|  ||¡}|  t|ƒ|g¡ d S )Nr   r=   r?   c                   @   s   e Zd ZdS )z?ProvidesClassTests.test_simple_class_one_interface.<locals>.FooNr!   r   r   r   r   r"   c  s   r"   )r@   r>   r%   r6   r   r7   ©r   r>   r?   r"   rµ   r   r   r   Útest_simple_class_one_interface`  s
    z2ProvidesClassTests.test_simple_class_one_interfacec                 C   sj   ddl m} ddlm} |dƒ}G dd„ dtƒ}|  ||¡}| ¡ \}}|  ||k¡ |  |||f¡ d S )Nr   ©ÚProvidesr=   r?   c                   @   s   e Zd ZdS )z/ProvidesClassTests.test___reduce__.<locals>.FooNr!   r   r   r   r   r"   l  s   r"   )	r$   r  r@   r>   r%   r6   r}   rR   r   )r   r  r>   r?   r"   rµ   Úklassr4   r   r   r   r~   h  s    z"ProvidesClassTests.test___reduce__c                 C   sJ   ddl m} |dƒ}G dd„ dtƒ}|  ||¡}||_|  |j|k¡ d S )Nr   r=   r?   c                   @   s   e Zd ZdS )z2ProvidesClassTests.test___get___class.<locals>.FooNr!   r   r   r   r   r"   v  s   r"   ©r@   r>   r%   r6   r¾   rR   r
  r   r   r   Útest___get___classs  s    z%ProvidesClassTests.test___get___classc                    sR   ddl m} |dƒ}G dd„ dtƒ‰ |  ˆ |¡}|ˆ _‡ fdd„}|  t|¡ d S )Nr   r=   r?   c                   @   s   e Zd ZdS )z5ProvidesClassTests.test___get___instance.<locals>.FooNr!   r   r   r   r   r"     s   r"   c                     s   ˆ ƒ } | j S r(   )r¾   )r    ©r"   r   r   Ú_testƒ  s    z7ProvidesClassTests.test___get___instance.<locals>._test)r@   r>   r%   r6   r¾   r    ÚAttributeError)r   r>   r?   rµ   r  r   r  r   Útest___get___instance|  s    z(ProvidesClassTests.test___get___instanceN)	r   r   r   r1   r6   r  r~   r  r  r   r   r   r   r  W  s   	r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTest_Providesc                 O   s   ddl m} |||ŽS )Nr   r  )r$   r  )r   r4   r5   r  r   r   r   r’   ‹  s    zTest_Provides._callFUTc              	   C   s„   ddl m} ddlm} |dƒ}i }G dd„ dtƒ}t||d�� |  ||¡}W 5 Q R X |  t|ƒ|g¡ |  	|||f |k¡ d S )Nr   r¢   r=   r?   c                   @   s   e Zd ZdS )z.Test_Provides.test_no_cached_spec.<locals>.FooNr!   r   r   r   r   r"   ”  s   r"   ©ZInstanceDeclarations)
r¥   r£   r@   r>   r%   Ú_Monkeyr’   r   r7   rR   )r   r£   r>   r?   Úcacher"   rµ   r   r   r   Útest_no_cached_spec�  s    z!Test_Provides.test_no_cached_specc              	   C   sx   ddl m} ddlm} |dƒ}tƒ }G dd„ dtƒ}||f|i}t||d�� |  ||¡}W 5 Q R X |  ||k¡ d S )Nr   r¢   r=   r?   c                   @   s   e Zd ZdS )z-Test_Provides.test_w_cached_spec.<locals>.FooNr!   r   r   r   r   r"      s   r"   r  )r¥   r£   r@   r>   r%   r  r’   rR   )r   r£   r>   r?   Zpriorr"   r  rµ   r   r   r   Útest_w_cached_spec›  s    z Test_Provides.test_w_cached_specN)r   r   r   r’   r  r  r   r   r   r   r  ‰  s   r  c                   @   s8   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZd	d
„ ZdS )ÚTest_directlyProvidesc                 O   s   ddl m} |||ŽS )Nr   ©ÚdirectlyProvides)r$   r  )r   r4   r5   r  r   r   r   r’   ª  s    zTest_directlyProvides._callFUTc                 C   sl   ddl m} ddlm} |dƒ}G dd„ dtƒ}|ƒ }|  ||¡ |  t|j|ƒ¡ |  	t
|jƒ|g¡ d S )Nr   r  r=   r?   c                   @   s   e Zd ZdS )z7Test_directlyProvides.test_w_normal_object.<locals>.FooNr!   r   r   r   r   r"   ²  s   r"   ©r$   r	  r@   r>   r%   r’   rR   ri   r¾   r   r7   ©r   r	  r>   r?   r"   Úobjr   r   r   Útest_w_normal_object®  s    z*Test_directlyProvides.test_w_normal_objectc                 C   sf   ddl m} ddlm} |dƒ}G dd„ dtƒ}|  ||¡ |  t|j|ƒ¡ |  	t
|jƒ|g¡ d S )Nr   rÁ   r=   r?   c                   @   s   e Zd ZdS )z/Test_directlyProvides.test_w_class.<locals>.FooNr!   r   r   r   r   r"   ½  s   r"   )r$   rÂ   r@   r>   r%   r’   rR   ri   r¾   r   r7   ©r   rÂ   r>   r?   r"   r   r   r   Útest_w_class¹  s    z"Test_directlyProvides.test_w_classc                    sT   ddl m} |dƒ}G dd„ dtƒ‰ G ‡ fdd„dtƒ}|ƒ }|  t| j||¡ d S )Nr   r=   r?   c                   @   s   e Zd Zdd„ ZdS )zNTest_directlyProvides.test_w_non_descriptor_aware_metaclass.<locals>.MetaClassc                 S   s   |dkr| S t  | |¡S ©NÚ	__class__)ÚtypeÚ__getattribute__)Úclsr‡   r   r   r   r'  É  s    z_Test_directlyProvides.test_w_non_descriptor_aware_metaclass.<locals>.MetaClass.__getattribute__N)r   r   r   r'  r   r   r   r   Ú	MetaClassÈ  s   r)  c                       s   e Zd Z” ZdS )zHTest_directlyProvides.test_w_non_descriptor_aware_metaclass.<locals>.FooN)r   r   r   Z__metaclass__r   ©r)  r   r   r"   Ñ  s   r"   )r@   r>   r&  r%   r    r   r’   ©r   r>   r?   r"   r   r   r*  r   Ú%test_w_non_descriptor_aware_metaclassÃ  s    	z;Test_directlyProvides.test_w_non_descriptor_aware_metaclassc                    sx   ddl m} ddlm} |dƒ}i ‰ G ‡ fdd„dtƒ}|ƒ }|  ||¡ |  tˆ d |ƒ¡ |  t	ˆ d ƒ|g¡ d S )Nr   r  r=   r?   c                       s    e Zd Zdd„ Z‡ fdd„ZdS )z:Test_directlyProvides.test_w_classless_object.<locals>.Fooc                 S   s   |dkrd S t |ƒ‚d S r$  r)   r†   r   r   r   r'  Ü  s    zKTest_directlyProvides.test_w_classless_object.<locals>.Foo.__getattribute__c                    s   |ˆ |< d S r(   r   ©r   r‡   Úvalue©Zthe_dictr   r   Ú__setattr__á  s    zFTest_directlyProvides.test_w_classless_object.<locals>.Foo.__setattr__N©r   r   r   r'  r0  r   r/  r   r   r"   Û  s   r"   r¾   )
r$   r	  r@   r>   r%   r’   rR   ri   r   r7   r  r   r/  r   Útest_w_classless_objectÖ  s    z-Test_directlyProvides.test_w_classless_objectN)	r   r   r   r’   r!  r#  r   r,  r2  r   r   r   r   r  ¨  s   

r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTest_alsoProvidesc                 O   s   ddl m} |||ŽS )Nr   )ÚalsoProvides)r$   r4  )r   r4   r5   r4  r   r   r   r’   ë  s    zTest_alsoProvides._callFUTc                 C   sl   ddl m} ddlm} |dƒ}G dd„ dtƒ}|ƒ }|  ||¡ |  t|j|ƒ¡ |  	t
|jƒ|g¡ d S )Nr   r  r=   r?   c                   @   s   e Zd ZdS )z8Test_alsoProvides.test_wo_existing_provides.<locals>.FooNr!   r   r   r   r   r"   ó  s   r"   r  r  r   r   r   Útest_wo_existing_providesï  s    z+Test_alsoProvides.test_wo_existing_providesc                 C   sŒ   ddl m} ddl m} ddlm} |dƒ}|dƒ}G dd„ dtƒ}|ƒ }|||ƒ |  ||¡ |  t|j	|ƒ¡ |  
t|j	ƒ||g¡ d S )	Nr   r  r  r=   r?   rX   c                   @   s   e Zd ZdS )z7Test_alsoProvides.test_w_existing_provides.<locals>.FooNr!   r   r   r   r   r"      s   r"   )r$   r  r	  r@   r>   r%   r’   rR   ri   r¾   r   r7   )r   r  r	  r>   r?   rX   r"   r   r   r   r   Útest_w_existing_providesú  s    
z*Test_alsoProvides.test_w_existing_providesN)r   r   r   r’   r5  r6  r   r   r   r   r3  é  s   r3  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTest_noLongerProvidesc                 O   s   ddl m} |||ŽS )Nr   )ÚnoLongerProvides)r$   r8  )r   r4   r5   r8  r   r   r   r’     s    zTest_noLongerProvides._callFUTc                 C   sL   ddl m} |dƒ}G dd„ dtƒ}|ƒ }|  ||¡ |  t|jƒg ¡ d S )Nr   r=   r?   c                   @   s   e Zd ZdS )z<Test_noLongerProvides.test_wo_existing_provides.<locals>.FooNr!   r   r   r   r   r"     s   r"   )r@   r>   r%   r’   r   r7   r¾   r+  r   r   r   r5    s    z/Test_noLongerProvides.test_wo_existing_providesc                 C   sb   ddl m} ddlm} |dƒ}G dd„ dtƒ}|ƒ }|||ƒ |  ||¡ |  t|jƒg ¡ d S )Nr   r  r=   r?   c                   @   s   e Zd ZdS )z?Test_noLongerProvides.test_w_existing_provides_hit.<locals>.FooNr!   r   r   r   r   r"     s   r"   ©	r$   r  r@   r>   r%   r’   r   r7   r¾   )r   r  r>   r?   r"   r   r   r   r   Útest_w_existing_provides_hit  s    
z2Test_noLongerProvides.test_w_existing_provides_hitc                 C   sl   ddl m} ddlm} |dƒ}|dƒ}G dd„ dtƒ}|ƒ }|||ƒ |  ||¡ |  t|jƒ|g¡ d S )Nr   r  r=   r?   rX   c                   @   s   e Zd ZdS )z@Test_noLongerProvides.test_w_existing_provides_miss.<locals>.FooNr!   r   r   r   r   r"   (  s   r"   r9  )r   r  r>   r?   rX   r"   r   r   r   r   Útest_w_existing_provides_miss#  s    
z3Test_noLongerProvides.test_w_existing_provides_missc                 C   sT   ddl m} ddlm} |dƒ}||ƒG dd„ dtƒƒ}|ƒ }|  t| j||¡ d S )Nr   râ   r=   r?   c                   @   s   e Zd ZdS )zDTest_noLongerProvides.test_w_iface_implemented_by_class.<locals>.FooNr!   r   r   r   r   r"   3  s   r"   )r$   rã   r@   r>   r%   r    rî   r’   )r   rã   r>   r?   r"   r   r   r   r   Ú!test_w_iface_implemented_by_class/  s    z7Test_noLongerProvides.test_w_iface_implemented_by_classN)r   r   r   r’   r5  r:  r;  r<  r   r   r   r   r7  	  s
   	r7  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚClassProvidesBaseFallbackTestsc                 C   s   ddl m} |S ©Nr   )ÚClassProvidesBaseFallback)r$   r?  )r   r?  r   r   r   r1   <  s    z.ClassProvidesBaseFallbackTests._getTargetClassc                 C   s   G dd„ d|   ¡ ƒ}|||ƒS )Nc                   @   s   e Zd Zdd„ ZdS )z8ClassProvidesBaseFallbackTests._makeOne.<locals>.Derivedc                 S   s   || _ || _d S r(   )Ú_clsZ_implements)r   ÚkÚir   r   r   r…   D  s    zAClassProvidesBaseFallbackTests._makeOne.<locals>.Derived.__init__N)r   r   r   r…   r   r   r   r   ÚDerivedC  s   rC  r2   )r   r  rü   rC  r   r   r   r6   @  s    z'ClassProvidesBaseFallbackTests._makeOnec                 C   sJ   ddl m} |dƒ}G dd„ dtƒ}|  ||¡ }|_|  |j|k¡ d S )Nr   r=   r?   c                   @   s   e Zd ZdS )zGClassProvidesBaseFallbackTests.test_w_same_class_via_class.<locals>.FooNr!   r   r   r   r   r"   L  s   r"   r  )r   r>   r?   r"   Úcpbpr   r   r   Útest_w_same_class_via_classI  s
    z:ClassProvidesBaseFallbackTests.test_w_same_class_via_classc                 C   sP   ddl m} |dƒ}G dd„ dtƒ}|ƒ }|  ||¡ }|_|  |j|k¡ d S )Nr   r=   r?   c                   @   s   e Zd ZdS )zJClassProvidesBaseFallbackTests.test_w_same_class_via_instance.<locals>.FooNr!   r   r   r   r   r"   T  s   r"   r  )r   r>   r?   r"   r    rD  r   r   r   Útest_w_same_class_via_instanceQ  s    z=ClassProvidesBaseFallbackTests.test_w_same_class_via_instancec                 C   sp   ddl m} |dƒ}G dd„ dtƒ}G dd„ d|ƒ}|ƒ }|  ||¡ }|_|  tt|d¡ |  tt|d¡ d S )	Nr   r=   r?   c                   @   s   e Zd ZdS )zBClassProvidesBaseFallbackTests.test_w_different_class.<locals>.FooNr!   r   r   r   r   r"   ]  s   r"   c                   @   s   e Zd ZdS )zBClassProvidesBaseFallbackTests.test_w_different_class.<locals>.BarNr!   r   r   r   r   rð   _  s   rð   r¾   )r@   r>   r%   r6   r¾   r    r  Úgetattr)r   r>   r?   r"   rð   ÚbarrD  r   r   r   Útest_w_different_classZ  s    z5ClassProvidesBaseFallbackTests.test_w_different_classN)r   r   r   r1   r6   rE  rF  rI  r   r   r   r   r=  :  s
   		r=  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚClassProvidesBaseTestsc                 C   s   ddl m} |S )Nr   )ÚClassProvidesBase)r$   rK  )r   rK  r   r   r   r1   j  s    z&ClassProvidesBaseTests._getTargetClassc                 C   sR   ddl m} zdd l}W n$ tk
r<   |  |  ¡ |¡ Y nX |  |  ¡ |¡ d S r>  )r$   r?  rÇ   rÈ   rÉ   r1   rÊ   )r   r?  rË   r   r   r   rÌ   n  s    z)ClassProvidesBaseTests.test_optimizationsN©r   r   r   r1   rÌ   r   r   r   r   rJ  g  s   rJ  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚClassProvidesTestsc                 C   s   ddl m} |S )Nr   rÁ   )r$   rÂ   )r   rÂ   r   r   r   r1   z  s    z"ClassProvidesTests._getTargetClassc                 O   s   |   ¡ ||ŽS r(   r2   r3   r   r   r   r6   ~  s    zClassProvidesTests._makeOnec                 C   s‚   ddl m} ddlm} |dƒ}|dƒ}||ƒG dd„ dtƒƒ}|  |t|ƒ|¡ }|_|  |j|k¡ |  	t
|ƒ jƒ|g¡ d S )Nr   râ   r=   r?   rX   c                   @   s   e Zd ZdS )z7ClassProvidesTests.test_w_simple_metaclass.<locals>.FooNr!   r   r   r   r   r"   †  s   r"   )r$   rã   r@   r>   r%   r6   r&  r¾   rR   r   r7   ©r   rã   r>   r?   rX   r"   Úcpr   r   r   Útest_w_simple_metaclass�  s    z*ClassProvidesTests.test_w_simple_metaclassc                 C   s~   ddl m} ddlm} |dƒ}|dƒ}||ƒG dd„ dtƒƒ}|  |t|ƒ|¡ }|_|  | 	¡ |  
¡ |t|ƒ|ff¡ d S )Nr   râ   r=   r?   rX   c                   @   s   e Zd ZdS )z/ClassProvidesTests.test___reduce__.<locals>.FooNr!   r   r   r   r   r"   ’  s   r"   )r$   rã   r@   r>   r%   r6   r&  r¾   r   r}   r1   rN  r   r   r   r~   �  s    
ÿz"ClassProvidesTests.test___reduce__N)r   r   r   r1   r6   rP  r~   r   r   r   r   rM  x  s   rM  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTest_directlyProvidedByc                 O   s   ddl m} |||ŽS )Nr   )ÚdirectlyProvidedBy)r$   rR  )r   r4   r5   rR  r   r   r   r’   œ  s    z Test_directlyProvidedBy._callFUTc                 C   s0   G dd„ dt ƒ}|ƒ }|  t|  |¡ƒg ¡ d S )Nc                   @   s   e Zd ZdS )zNTest_directlyProvidedBy.test_wo_declarations_in_class_or_instance.<locals>.FooNr!   r   r   r   r   r"   ¡  s   r"   rº   r—   r   r   r   Ú)test_wo_declarations_in_class_or_instance   s    zATest_directlyProvidedBy.test_wo_declarations_in_class_or_instancec                 C   sX   ddl m} ddlm} |dƒ}||ƒG dd„ dtƒƒ}|ƒ }|  t|  |¡ƒg ¡ d S )Nr   râ   r=   r?   c                   @   s   e Zd ZdS )zRTest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance.<locals>.FooNr!   r   r   r   r   r"   ª  s   r"   )r$   rã   r@   r>   r%   r   r7   r’   )r   rã   r>   r?   r"   r    r   r   r   Ú-test_w_declarations_in_class_but_not_instance¦  s    zETest_directlyProvidedBy.test_w_declarations_in_class_but_not_instancec                 C   s\   ddl m} ddlm} |dƒ}G dd„ dtƒ}|ƒ }|||ƒ |  t|  |¡ƒ|g¡ d S )Nr   r  r=   r?   c                   @   s   e Zd ZdS )zRTest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class.<locals>.FooNr!   r   r   r   r   r"   ´  s   r"   )r$   r  r@   r>   r%   r   r7   r’   )r   r  r>   r?   r"   r    r   r   r   Ú-test_w_declarations_in_instance_but_not_class°  s    
zETest_directlyProvidedBy.test_w_declarations_in_instance_but_not_classc                 C   sx   ddl m} ddl m} ddlm} |dƒ}|dƒ}||ƒG dd„ dtƒƒ}|ƒ }|||ƒ |  t|  |¡ƒ|g¡ d S )	Nr   r  râ   r=   r?   rX   c                   @   s   e Zd ZdS )zNTest_directlyProvidedBy.test_w_declarations_in_instance_and_class.<locals>.FooNr!   r   r   r   r   r"   À  s   r"   )	r$   r  rã   r@   r>   r%   r   r7   r’   )r   r  rã   r>   r?   rX   r"   r    r   r   r   Ú)test_w_declarations_in_instance_and_classº  s    
zATest_directlyProvidedBy.test_w_declarations_in_instance_and_classN)r   r   r   r’   rS  rT  rU  rV  r   r   r   r   rQ  š  s
   

rQ  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTest_classProvidesc              	   C   s¨   dd l }ddlm} ddlm} ddlm} |dƒ}||dœ}i }d dd	g¡}t|||ƒ |d
 }	|j	dd��.}
| 
¡  |  t|	¡ |sš|  t|
ƒd¡ W 5 Q R X d S )Nr   ©ÚclassProvidesr=   r   r?   ©rY  r?   r÷   r  ú    classProvides(IFoo)r    Tr   )r	   r$   rY  r@   r>   r
   r   rø   r   r   r   r    r   r   r   )r   r	   rY  r>   r   r?   r   r   rù   r    r   r   r   r   r  Ê  s$    
þz,Test_classProvides.test_called_from_functionc              	   C   sÄ   dd l }ddlm} ddlm} ddlm} |dƒ}|dƒ}|||dœ}i }d d	d
dg¡}	|jdd��R}
| 	¡  zt
|	||ƒ W n( tk
rª   |s¦|  t|
ƒd¡ Y nX |  d¡ W 5 Q R X d S )Nr   rX  r=   r   r?   rX   )rY  r?   rX   r÷   rý   r[  z    classProvides(IBar)Tr   r   )r	   r$   rY  r@   r>   r
   r   rø   r   r   r   r   r   r   r   )r   r	   rY  r>   r   r?   rX   r   r   rù   r   r   r   r   r  Þ  s*    ýz/Test_classProvides.test_called_twice_from_classc           	      C   sn   ddl m} ddlm} |dƒ}||dœ}i }d ddg¡}|  |||¡rj|d	 }|j}|  t|ƒ|g¡ d S )
Nr   rX  r=   r?   rZ  r÷   rý   r[  r"   )	r$   rY  r@   r>   rø   r   r¿   r   r7   )	r   rY  r>   r?   r   r   rù   r"   rµ   r   r   r   r  ö  s    
þz.Test_classProvides.test_called_once_from_classNr  r   r   r   r   rW  È  s   rW  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTest_providerc                 C   s   ddl m} |S )Nr   )Úprovider)r$   r]  )r   r]  r   r   r   r1   
  s    zTest_provider._getTargetClassc                 O   s   |   ¡ ||ŽS r(   r2   r3   r   r   r   r6     s    zTest_provider._makeOnec                 C   sd   ddl m} ddlm} |dƒ}|  |¡G dd„ dtƒƒ}|  t|j|ƒ¡ |  	t
|jƒ|g¡ d S )Nr   rÁ   r=   r?   c                   @   s   e Zd ZdS )z'Test_provider.test_w_class.<locals>.FooNr!   r   r   r   r   r"     s   r"   )r$   rÂ   r@   r>   r6   r%   rR   ri   r¾   r   r7   r"  r   r   r   r#    s    zTest_provider.test_w_classN)r   r   r   r1   r6   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_moduleProvidesc                 C   sb   ddl m} ddlm} |dƒ}d||dœ}i }d dd	g¡}t|||ƒ |d
 }|  t|¡ d S )Nr   ©ÚmoduleProvidesr=   r?   úzope.interface.tests.foo©r   r`  r?   r÷   r  ú    moduleProvides(IFoo)r    )r$   r`  r@   r>   rø   r   r    r   )r   r`  r>   r?   r   r   rù   r    r   r   r   r    s     ÿþz-Test_moduleProvides.test_called_from_functionc              	   C   sd   ddl m} ddlm} |dƒ}d||dœ}i }d dd	g¡}|  t¡� t|||ƒ W 5 Q R X d S )
Nr   r_  r=   r?   ra  rb  r÷   rý   rc  ©r$   r`  r@   r>   rø   r    r   r   ©r   r`  r>   r?   r   r   rù   r   r   r   Útest_called_from_class-  s     ÿþz*Test_moduleProvides.test_called_from_classc                 C   s`   ddl m} ddlm} |dƒ}d||dœ}d dg¡}t||ƒ |d	 }|  t|ƒ|g¡ d S )
Nr   r_  r=   r?   ra  rb  r÷   úmoduleProvides(IFoo)r¾   )r$   r`  r@   r>   rø   r   r   r7   )r   r`  r>   r?   r   rù   rµ   r   r   r   Ú"test_called_once_from_module_scope;  s     ÿÿ
z6Test_moduleProvides.test_called_once_from_module_scopec              	   C   sb   ddl m} ddlm} |dƒ}d||dœ}i }d ddg¡}|  t¡� t||ƒ W 5 Q R X d S )	Nr   r_  r=   r?   ra  rb  r÷   rg  rd  re  r   r   r   Ú#test_called_twice_from_module_scopeH  s     ÿþz7Test_moduleProvides.test_called_twice_from_module_scopeN)r   r   r   r  rf  rh  ri  r   r   r   r   r^    s   r^  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )Ú#Test_getObjectSpecificationFallbackc                 O   s   ddl m} |||ŽS )Nr   ©ÚgetObjectSpecificationFallback)r$   rl  )r   r4   r5   rl  r   r   r   r’   Y  s    z,Test_getObjectSpecificationFallback._callFUTc                    s<   i ‰ G ‡ fdd„dt ƒ}|ƒ }|  |¡}|  t|ƒg ¡ d S )Nc                       s    e Zd Z‡ fdd„Zdd„ ZdS )zTTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Fooc                    s<   |dkrt |ƒ‚z
ˆ | W S  tk
r6   t |ƒ‚Y nX d S r$  )r  ÚKeyErrorr†   r/  r   r   r'  `  s    
zeTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__getattribute__c                 S   s
   t ƒ ‚d S r(   r)   r-  r   r   r   r0  h  s    z`Test_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__setattr__Nr1  r   r/  r   r   r"   _  s   r"   ©r%   r’   r   r7   ©r   r"   r    rµ   r   r/  r   Ú#test_wo_existing_provides_classless]  s
    
zGTest_getObjectSpecificationFallback.test_wo_existing_provides_classlessc                 C   sP   ddl m} ddlm} |dƒ}dd„ }|||ƒ |  |¡}|  ||jk¡ d S )Nr   r  r=   r?   c                   S   s
   t ƒ ‚d S r(   r)   r   r   r   r   r    r  s    zOTest_getObjectSpecificationFallback.test_existing_provides_is_spec.<locals>.foo)r$   r  r@   r>   r’   rR   r¾   )r   r  r>   r?   r    rµ   r   r   r   Útest_existing_provides_is_specn  s    

zBTest_getObjectSpecificationFallback.test_existing_provides_is_specc                 C   s.   dd„ }t ƒ |_|  |¡}|  t|ƒg ¡ d S )Nc                   S   s
   t ƒ ‚d S r(   r)   r   r   r   r   r    y  s    zSTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec.<locals>.foo)r%   r¾   r’   r   r7   )r   r    rµ   r   r   r   Ú"test_existing_provides_is_not_specx  s    
zFTest_getObjectSpecificationFallback.test_existing_provides_is_not_specc                 C   s`   ddl m} ddlm} |dƒ}G dd„ dtƒ}|ƒ }|||ƒ |  |¡}|  t|ƒ|g¡ d S )Nr   r  r=   r?   c                   @   s   e Zd ZdS )zGTest_getObjectSpecificationFallback.test_existing_provides.<locals>.FooNr!   r   r   r   r   r"   ƒ  s   r"   )r$   r  r@   r>   r%   r’   r   r7   )r   r  r>   r?   r"   r    rµ   r   r   r   Útest_existing_provides  s    

z:Test_getObjectSpecificationFallback.test_existing_providesc                 C   s^   ddl m} ddlm} |dƒ}||ƒG dd„ dtƒƒ}|ƒ }|  |¡}|  t|ƒ|g¡ d S )Nr   râ   r=   r?   c                   @   s   e Zd ZdS )zWTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implements.<locals>.FooNr!   r   r   r   r   r"   Ž  s   r"   )r$   rã   r@   r>   r%   r’   r   r7   ©r   rã   r>   r?   r"   r    rµ   r   r   r   Ú&test_wo_provides_on_class_w_implementsŠ  s    
zJTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implementsc                 C   s4   G dd„ dt ƒ}|ƒ }|  |¡}|  t|ƒg ¡ d S )Nc                   @   s   e Zd ZdS )zXTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements.<locals>.FooNr!   r   r   r   r   r"   –  s   r"   rn  ro  r   r   r   Ú'test_wo_provides_on_class_wo_implements•  s    
zKTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implementsN)
r   r   r   r’   rp  rq  rr  rs  ru  rv  r   r   r   r   rj  W  s   
rj  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTest_getObjectSpecificationc                 O   s   ddl m} |||ŽS )Nr   ©ÚgetObjectSpecification)r$   ry  )r   r4   r5   ry  r   r   r   r’      s    z$Test_getObjectSpecification._callFUTc                 C   sV   ddl m} ddl m} zdd l}W n  tk
rD   |  ||¡ Y nX |  ||¡ d S )Nr   rk  rx  )r$   rl  ry  rÇ   rÈ   rÉ   rÊ   )r   rl  ry  rË   r   r   r   rÌ   ¤  s    ÿ
ÿz.Test_getObjectSpecification.test_optimizationsNrÍ   r   r   r   r   rw  �  s   rw  c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTest_providedByFallbackc                 O   s   ddl m} |||ŽS )Nr   ©ÚprovidedByFallback)r$   r|  )r   r4   r5   r|  r   r   r   r’   ³  s    z Test_providedByFallback._callFUTc                 C   s4   G dd„ dt ƒ}|ƒ }|  |¡}|  t|ƒg ¡ d S )Nc                   @   s   e Zd ZdS )zNTest_providedByFallback.test_wo_providedBy_on_class_wo_implements.<locals>.FooNr!   r   r   r   r   r"   ¸  s   r"   rn  ro  r   r   r   Ú)test_wo_providedBy_on_class_wo_implements·  s    
zATest_providedByFallback.test_wo_providedBy_on_class_wo_implementsc                 C   sb   ddl m} ddlm} |dƒ}G dd„ dtƒ}|ƒ }|||ƒ|_|  |¡}|  t|ƒ|g¡ d S )Nr   r  r=   r?   c                   @   s   e Zd ZdS )zATest_providedByFallback.test_w_providedBy_valid_spec.<locals>.FooNr!   r   r   r   r   r"   Â  s   r"   )	r$   r  r@   r>   r%   r¿   r’   r   r7   )r   r  r>   r?   r"   r    rµ   r   r   r   Útest_w_providedBy_valid_spec¾  s    
z4Test_providedByFallback.test_w_providedBy_valid_specc                 C   s<   G dd„ dt ƒ}|ƒ }t ƒ |_|  |¡}|  t|ƒg ¡ d S )Nc                   @   s   e Zd ZdS )zCTest_providedByFallback.test_w_providedBy_invalid_spec.<locals>.FooNr!   r   r   r   r   r"   Ê  s   r"   )r%   r¿   r’   r   r7   ro  r   r   r   Útest_w_providedBy_invalid_specÉ  s
    
z6Test_providedByFallback.test_w_providedBy_invalid_specc                 C   sf   ddl m} ddlm} |dƒ}||ƒG dd„ dtƒƒ}|ƒ }tƒ |_|  |¡}|  t|ƒ|g¡ d S )Nr   râ   r=   r?   c                   @   s   e Zd ZdS )zVTest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements.<locals>.FooNr!   r   r   r   r   r"   Õ  s   r"   )	r$   rã   r@   r>   r%   r¿   r’   r   r7   rt  r   r   r   Ú1test_w_providedBy_invalid_spec_class_w_implementsÑ  s    
zITest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implementsc                 C   sF   G dd„ dt ƒ}|ƒ }t ƒ |_t ƒ  }|_|  |¡}|  ||k¡ d S )Nc                   @   s   e Zd ZdS )zcTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_class.<locals>.FooNr!   r   r   r   r   r"   Þ  s   r"   ©r%   r¿   r¾   r’   rR   ©r   r"   r    Úexpectedrµ   r   r   r   Ú>test_w_providedBy_invalid_spec_w_provides_no_provides_on_classÝ  s    
zVTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_classc                 C   sN   G dd„ dt ƒ}|ƒ }t ƒ |_t ƒ  }|_t ƒ |_|  |¡}|  ||k¡ d S )Nc                   @   s   e Zd ZdS )zeTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class.<locals>.FooNr!   r   r   r   r   r"   ç  s   r"   r�  r‚  r   r   r   Ú@test_w_providedBy_invalid_spec_w_provides_diff_provides_on_classæ  s    
zXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_classc                 C   st   ddl m} ddlm} |dƒ}||ƒG dd„ dtƒƒ}|ƒ }tƒ |_tƒ  |_|_|  |¡}|  t	|ƒ|g¡ d S )Nr   râ   r=   r?   c                   @   s   e Zd ZdS )zeTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_class.<locals>.FooNr!   r   r   r   r   r"   ô  s   r"   )
r$   rã   r@   r>   r%   r¿   r¾   r’   r   r7   rt  r   r   r   Ú@test_w_providedBy_invalid_spec_w_provides_same_provides_on_classð  s    
zXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_classN)r   r   r   r’   r}  r~  r  r€  r„  r…  r†  r   r   r   r   rz  ±  s   	
rz  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTest_providedByc                 O   s   ddl m} |||ŽS )Nr   ©Ú
providedBy)r$   r‰  )r   r4   r5   r‰  r   r   r   r’     s    zTest_providedBy._callFUTc                 C   sV   ddl m} ddl m} zdd l}W n  tk
rD   |  ||¡ Y nX |  ||¡ d S )Nr   r{  rˆ  )r$   r|  r‰  rÇ   rÈ   rÉ   rÊ   )r   r|  r‰  rË   r   r   r   rÌ     s    z"Test_providedBy.test_optimizationsNrÍ   r   r   r   r   r‡  þ  s   r‡  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú*ObjectSpecificationDescriptorFallbackTestsc                 C   s   ddl m} |S ©Nr   )Ú%ObjectSpecificationDescriptorFallback)r$   rŒ  )r   rŒ  r   r   r   r1     s    z:ObjectSpecificationDescriptorFallbackTests._getTargetClassc                 O   s   |   ¡ ||ŽS r(   r2   r3   r   r   r   r6     s    z3ObjectSpecificationDescriptorFallbackTests._makeOnec                 C   s^   ddl m} ddlm} |dƒ}G dd„ dtƒ}|||ƒ|_|  ¡ |_|  t	|jƒ|g¡ d S )Nr   r  r=   r?   c                   @   s   e Zd ZdS )zOObjectSpecificationDescriptorFallbackTests.test_accessed_via_class.<locals>.FooNr!   r   r   r   r   r"     s   r"   )
r$   r  r@   r>   r%   r¾   r6   r¿   r   r7   )r   r  r>   r?   r"   r   r   r   Útest_accessed_via_class  s    
zBObjectSpecificationDescriptorFallbackTests.test_accessed_via_classc                 C   s€   ddl m} ddl m} ddlm} |dƒ}|dƒ}||ƒG dd„ dtƒƒ}|||ƒ|_|  ¡ |_|ƒ }|  	t
|jƒ|g¡ d S )	Nr   râ   r  r=   r?   rX   c                   @   s   e Zd ZdS )zZObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_provides.<locals>.FooNr!   r   r   r   r   r"   *  s   r"   )r$   rã   r  r@   r>   r%   r¾   r6   r¿   r   r7   )r   rã   r  r>   r?   rX   r"   r    r   r   r   Ú"test_accessed_via_inst_wo_provides$  s    
zMObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_providesc           
      C   s    ddl m} ddl m} ddl m} ddlm} |dƒ}|dƒ}|dƒ}||ƒG d	d
„ d
tƒƒ}|||ƒ|_|  ¡ |_	|ƒ }	||	|ƒ |  
t|	j	ƒ||g¡ d S )Nr   r  râ   r  r=   r?   rX   rq   c                   @   s   e Zd ZdS )zYObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides.<locals>.FooNr!   r   r   r   r   r"   :  s   r"   )r$   r  rã   r  r@   r>   r%   r¾   r6   r¿   r   r7   )
r   r  rã   r  r>   r?   rX   rq   r"   r    r   r   r   Ú!test_accessed_via_inst_w_provides2  s    

zLObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_providesN)r   r   r   r1   r6   r�  rŽ  r�  r   r   r   r   rŠ    s
   
rŠ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú"ObjectSpecificationDescriptorTestsc                 C   s   ddl m} |S )Nr   )ÚObjectSpecificationDescriptor)r$   r‘  )r   r‘  r   r   r   r1   H  s    z2ObjectSpecificationDescriptorTests._getTargetClassc                 C   sR   ddl m} zdd l}W n$ tk
r<   |  |  ¡ |¡ Y nX |  |  ¡ |¡ d S r‹  )r$   rŒ  rÇ   rÈ   rÉ   r1   rÊ   )r   rŒ  rË   r   r   r   rÌ   L  s    
ÿ

ÿz5ObjectSpecificationDescriptorTests.test_optimizationsNrL  r   r   r   r   r�  D  s   r�  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r  c                    s@   ˆ | _ t‡ fdd„|D ƒƒ| _| ¡ D ]\}}tˆ ||ƒ q&d S )Nc                    s   g | ]}|t ˆ |ƒf‘qS r   )rG  )Ú.0Úkey©Úmoduler   r   Ú
<listcomp>`  s     z$_Monkey.__init__.<locals>.<listcomp>)r•  r³   Ú
to_restoreÚitemsÚsetattr)r   r•  r5   r“  r.  r   r”  r   r…   ^  s    z_Monkey.__init__c                 C   s   | S r(   r   r™   r   r   r   Ú	__enter__d  s    z_Monkey.__enter__c                 C   s&   | j  ¡ D ]\}}t| j||ƒ q
d S r(   )r—  r˜  r™  r•  )r   Úexc_typeÚexc_valÚexc_tbr“  r.  r   r   r   Ú__exit__g  s    z_Monkey.__exit__N©r   r   r   r…   rš  rž  r   r   r   r   r  \  s   r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r¦   c                 K   s8   || _ t||ƒ| _| j ¡ | _| j ¡  | j |¡ d S r(   )r•  rG  ÚtargetÚcopyr—  ÚclearÚupdate)r   r•  Úattrnamer5   r   r   r   r…   n  s
    
z_MonkeyDict.__init__c                 C   s   | j S r(   )r   r™   r   r   r   rš  u  s    z_MonkeyDict.__enter__c                 C   s   | j  ¡  | j  | j¡ d S r(   )r   r¢  r£  r—  )r   r›  rœ  r�  r   r   r   rž  x  s    
z_MonkeyDict.__exit__NrŸ  r   r   r   r   r¦   l  s   r¦   )'Ú__doc__Zunittestr
   r   r%   r   ZTestCaser   r/   rt   r�   rÆ   rÎ   rÔ   rÜ   rá   rë   rô   r   r  r  r  r3  r7  r=  rJ  rM  rQ  rW  r\  r^  rj  rw  rz  r‡  rŠ  r�  r  r¦   r   r   r   r   Ú<module>   sN    'V '>C>6<2A 1-".@;FM4
ÿ