o
    $x`:e ã                   @   s$  d Z ddlZddlmZ ddlmZ ddlmZ ddlm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ƒZG dd„ deƒZG dd„ de	ejƒZG dd„ dejƒZG dd„ deeƒZG dd„ de
ƒZG dd„ deejƒZG dd„ deejƒZG dd„ deƒZG d d!„ d!ejƒZG d"d#„ d#eƒZG d$d%„ d%eƒ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ƒZG d.d/„ d/ejƒZG d0d1„ d1ejƒZ G d2d3„ d3ejƒZ!G d4d5„ d5ejƒZ"G d6d7„ d7ejƒZ#G d8d9„ d9ejƒZ$G d:d;„ d;ee$ƒZ%G d<d=„ d=ejƒZ&G d>d?„ d?e&ƒZ'G d@dA„ dAejƒZ(G dBdC„ dCejƒZ)G dDdE„ dEejeƒZ*G dFdG„ dGejƒZ+G dHdI„ dIejƒZ,G dJdK„ dKejƒZ-G dLdM„ dMe-eƒZ.G dNdO„ dOejƒZ/G dPdQ„ dQe/eƒZ0G dRdS„ dSejƒZ1G dTdU„ dUe1eƒZ2G dVdW„ dWe
ƒZ3G dXdY„ dYe
ƒZ4dS )Zz@Test the new API for making and checking interface declarations
é    N)Ú_skip_under_py3k)ÚPYTHON3)ÚOptimizationTestMixin)ÚMissingSomeAttrs)Ú!NameAndModuleComparisonTestsMixinc                   @   s   e Zd Z	ddd„ZdS )Ú_Py3ClassAdviceTc              	   C   s¶   dd l }|jdd��G}| ¡  ts(t|||ƒ |  t|ƒd¡ 	 W d   ƒ dS zt|||ƒ W n ty@   Y W d   ƒ dS w |rH|  d¡ 	 W d   ƒ d S 1 sTw   Y  d S )Nr   T©ÚrecordFúDidn't raise TypeError)	ÚwarningsÚcatch_warningsÚresetwarningsr   ÚexecÚassertEqualÚlenÚ	TypeErrorÚfail)ÚselfÚcodeÚglobsÚlocsÚfails_under_py3kr   Úlog© r   úH/usr/lib/python3/dist-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                   @   ó$   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                   @   ó   e Zd ZdS )z"NamedTests.test_class.<locals>.FooN©r   r   r   r   r   r   r   ÚFoo8   ó    r&   ©Úzope.interface.declarationsr"   Úobjectr   Ú__component_name__)r   r"   r&   r   r   r   Ú
test_class5   s   zNamedTests.test_classc                 C   s.   ddl m} |dƒdd„ ƒ}|  |jd¡ d S )Nr   r!   r#   c                 S   ó   t ƒ ‚©N©ÚNotImplementedError)Úor   r   r   ÚdoFooA   ó   z'NamedTests.test_function.<locals>.doFoo)r)   r"   r   r+   )r   r"   r2   r   r   r   Útest_function>   s   
zNamedTests.test_functionc                 C   s@   ddl m} G dd„ dtƒ}|ƒ }|dƒ|ƒ |  |jd¡ d S )Nr   r!   c                   @   r$   )z%NamedTests.test_instance.<locals>.FooNr%   r   r   r   r   r&   J   ó    r&   r#   r(   )r   r"   r&   r#   r   r   r   Útest_instanceG   s
   zNamedTests.test_instanceN)r   r   r   r,   r4   r6   r   r   r   r   r    3   s    		r    c                   @   ó\   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S )ÚEmptyDeclarationTestsc                 C   s   ddl m} |ƒ S ©Nr   )ÚDeclaration©r)   r:   ©r   r:   r   r   r   Ú	_getEmptyV   s   zEmptyDeclarationTests._getEmptyc                 C   s   |   ¡ }|  t|ƒg ¡ d S r.   )r=   r   Úlist©r   Údeclr   r   r   Útest___iter___emptyZ   s   z)EmptyDeclarationTests.test___iter___emptyc                 C   s.   ddl m} |  ¡ }|  t| ¡ ƒ|g¡ d S ©Nr   ©Ú	Interface)Úzope.interface.interfacerD   r=   r   r>   Ú	flattened©r   rD   r@   r   r   r   Útest_flattened_empty^   s   z*EmptyDeclarationTests.test_flattened_emptyc                 C   s$   ddl m} |  ¡ }|  ||¡ d S rB   )rE   rD   r=   ÚassertNotInrG   r   r   r   Útest___contains___emptyc   s   z-EmptyDeclarationTests.test___contains___emptyc                 C   s<   ddl m} |  ¡ }|  | |¡¡ |  |j|dd�¡ d S )Nr   rC   T©Ústrict)rE   rD   r=   Ú
assertTrueÚextendsrG   r   r   r   Útest_extends_emptyh   s   z(EmptyDeclarationTests.test_extends_emptyc                 C   s$   |   ¡ }t| ¡ ƒ}|  |g ¡ d S r.   )r=   r>   Ú
interfacesr   )r   r@   Úlr   r   r   Útest_interfaces_emptyn   s   z+EmptyDeclarationTests.test_interfaces_emptyc                 C   s*   ddl m} |  ¡ }|  |j||f¡ d S rB   )rE   rD   r=   r   Ú__sro__rG   r   r   r   Útest___sro___s   s   z#EmptyDeclarationTests.test___sro___c                 C   s(   ddl m} |  ¡ }|  |j|f¡ d S rB   )rE   rD   r=   r   Ú__iro__rG   r   r   r   Útest___iro___x   s   z#EmptyDeclarationTests.test___iro___c                 C   s<   |   ¡ }|  | d¡¡ |  | dd¡d¡ |  |j¡ d S )NÚattrÚabcÚdef)r=   ÚassertIsNoneÚgetr   ÚassertFalseÚ_v_attrsr?   r   r   r   Útest_get}   s   zEmptyDeclarationTests.test_getc                 C   s*   |   ¡ }tƒ |_| |¡ |  |j¡ d S r.   )r=   r*   r]   Úchangedr\   r?   r   r   r   Ú test_changed_w_existing__v_attrs…   s   
z6EmptyDeclarationTests.test_changed_w_existing__v_attrsN)r   r   r   r=   rA   rH   rJ   rO   rR   rT   rV   r^   r`   r   r   r   r   r8   R   s    r8   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d1S )2ÚDeclarationTestsc                 C   ó   ddl m} |S r9   r;   r<   r   r   r   Ú_getTargetClassŽ   ó   z DeclarationTests._getTargetClassc                 O   ó   |   ¡ |i |¤ŽS r.   ©rc   ©r   ÚargsÚkwr   r   r   Ú_makeOne’   ó   zDeclarationTests._makeOnec                 C   s   |   ¡ }|  t|jƒg ¡ d S r.   )rj   r   r>   Ú	__bases__r?   r   r   r   Útest_ctor_no_bases•   s   z#DeclarationTests.test_ctor_no_basesc                 C   s6   ddl m} |dƒ}|  |¡}|  t|jƒ|g¡ d S ©Nr   ©ÚInterfaceClassÚIFoo)rE   rp   rj   r   r>   rl   ©r   rp   rq   r@   r   r   r   Útest_ctor_w_interface_in_bases™   s   
z/DeclarationTests.test_ctor_w_interface_in_basesc                 C   s4   ddl m} |ƒ }|  |¡}|  t|jƒ|g¡ d S ©Nr   ©Ú
Implements)r)   rv   rj   r   r>   rl   )r   rv   Úimplr@   r   r   r   Útest_ctor_w_implements_in_basesŸ   s   
z0DeclarationTests.test_ctor_w_implements_in_basesc                 C   s"   |   ¡ }| |¡ |  |j¡ d S r.   )rj   r_   rZ   r]   r?   r   r   r   Ú!test_changed_wo_existing__v_attrs¥   s   
z2DeclarationTests.test_changed_wo_existing__v_attrsc                 C   s   |   ¡ }|  ||¡ d S r.   )rj   rI   r?   r   r   r   Útest___contains__w_selfª   s   z(DeclarationTests.test___contains__w_selfc                 C   s,   ddl m} |dƒ}|  ¡ }|  ||¡ d S rn   )rE   rp   rj   rI   rr   r   r   r   Ú"test___contains__w_unrelated_iface®   s   z3DeclarationTests.test___contains__w_unrelated_ifacec                 C   s.   ddl m} |dƒ}|  |¡}|  ||¡ d S rn   )rE   rp   rj   ÚassertInrr   r   r   r   Ú!test___contains__w_base_interface´   s   
z2DeclarationTests.test___contains__w_base_interfacec                 C   s4   ddl m} |dƒ}|  |¡}|  t|ƒ|g¡ d S rn   ©rE   rp   rj   r   r>   rr   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   ro   rq   ÚIBarr~   ©r   rp   rq   r�   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 r€   r~   r‚   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 r€   r~   r‚   r   r   r   Ú'test___iter___w_nested_sequence_overlapÎ   s
   z8DeclarationTests.test___iter___w_nested_sequence_overlapc                 C   sF   ddl m} ddl m} |dƒ}|  |¡}|  t| ¡ ƒ||g¡ d S )Nr   rC   ro   rq   ©rE   rD   rp   rj   r   r>   rF   )r   rD   rp   rq   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   rC   ro   rq   r�   r†   ©r   rD   rp   rq   r�   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 rˆ   r†   r‰   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 rˆ   r†   r‰   r   r   r   Ú(test_flattened_w_nested_sequence_overlapì   s   z9DeclarationTests.test_flattened_w_nested_sequence_overlapc                 C   sT   ddl m} |dƒ}|dƒ}|  |¡}|| }|  ||  ¡ ¡ |  t|ƒ|g¡ d S r€   ©rE   rp   rj   ÚassertIsInstancerc   r   r>   ©r   rp   rq   r�   Ú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 rn   r~   )r   rp   rq   r�   r‘   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 r€   r~   r�   r   r   r   Ú-test___sub___related_interface_by_inheritance	  s   
z>DeclarationTests.test___sub___related_interface_by_inheritancec                 C   sV   ddl m} |dƒ}|dƒ}|  |¡}|| }|  ||  ¡ ¡ |  t|ƒ||g¡ d S r€   r�   r�   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   ro   rq   r�   ÚIBazr~   )r   rp   rq   r�   r–   r�   Úotherr‘   r   r   r   Útest___add___related_interface  s   z/DeclarationTests.test___add___related_interfacec           	      C   sÂ   ddl m} ddlm} ddlm} ddl m} |dƒ}|d|fƒ}||jjdƒ� |  	|¡}|| }W d   ƒ n1 s=w   Y  |  
|j|||f¡ |  
|j||f¡ |  
t|ƒ||g¡ d S )	Nr   rC   ro   ©Ú	C3Setting©ÚroÚIBaseÚIDerivedT)Úzope.interfacerD   rE   rp   Úzope.interface.tests.test_rorš   rœ   ÚC3Ú
STRICT_IROrj   r   rU   rl   r>   )	r   rD   rp   rš   rœ   r�   rž   Úbaser‘   r   r   r   Ú"test___add___overlapping_interface$  s   

þz3DeclarationTests.test___add___overlapping_interfacec           
      C   sî   ddl m} ddl m} ddl m} ddlm} ddl m} G dd„ d|ƒ}G d	d
„ d
|ƒ}||ƒG dd„ dtƒƒ}||jj	dƒ� ||ƒ| }	W d   ƒ n1 sRw   Y  |  
|	j|	|||f¡ |  
|	j||f¡ |  
t|	ƒ||g¡ d S )Nr   rC   ©ÚimplementedBy©Úimplementerr™   r›   c                   @   r$   )zPDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IBaseNr%   r   r   r   r   r�   E  r5   r�   c                   @   r$   )zSDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IDerivedNr%   r   r   r   r   rž   H  r5   rž   c                   @   r$   )zODeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.BaseNr%   r   r   r   r   ÚBaseK  r'   r©   T)rŸ   rD   r¦   r¨   r    rš   rœ   r*   r¡   r¢   r   rS   rl   r>   )
r   rD   r¦   r¨   rš   rœ   r�   rž   r©   r‘   r   r   r   Ú0test___add___overlapping_interface_implementedBy:  s   ÿzADeclarationTests.test___add___overlapping_interface_implementedByN)r   r   r   rc   rj   rm   rs   rx   ry   rz   r{   r}   r   rƒ   r„   r…   r‡   rŠ   r‹   rŒ   r’   r“   r”   r•   r˜   r¤   rª   r   r   r   r   ra   Œ   s2    		
ra   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d„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestImmutableDeclarationc                 C   rb   )Nr   )Ú_ImmutableDeclaration)r)   r¬   )r   r¬   r   r   r   rc   Y  rd   z(TestImmutableDeclaration._getTargetClassc                 C   rb   )Nr   )Ú_empty)r)   r­   )r   r­   r   r   r   r=   ]  rd   z"TestImmutableDeclaration._getEmptyc                 C   s0   dd l }| | |  ¡ ¡¡}|  ||  ¡ ¡ d S )Nr   )ÚpickleÚloadsÚdumpsr=   ÚassertIs)r   r®   Úcopiedr   r   r   Útest_picklea  s   z$TestImmutableDeclaration.test_picklec                 C   s   |   |  ¡ ƒ |  ¡ ¡ d S r.   )r±   rc   r=   ©r   r   r   r   Útest_singletonf  s   þz'TestImmutableDeclaration.test_singletonc                 C   s   |   |  ¡ jd¡ d S )Nr   )r   r=   rl   r´   r   r   r   Útest__bases__l  ó   z&TestImmutableDeclaration.test__bases__c                 C   sV   |   ¡ }d|_|  |   ¡ jd¡ |  t¡� d|_W d   ƒ d S 1 s$w   Y  d S )Nr   )é   )r=   rl   r   ÚassertRaisesr   )r   Úemptyr   r   r   Útest_change__bases__o  s   "ÿz-TestImmutableDeclaration.test_change__bases__c                 C   s4   |   ¡ }|j}|  i |¡ d|d< |  i |j¡ d S )Né   r¸   )r=   Ú
dependentsr   )r   rº   Údepsr   r   r   Útest_dependentsw  s
   z(TestImmutableDeclaration.test_dependentsc                 C   s   |   ¡  d ¡ d S r.   )r=   r_   r´   r   r   r   Útest_changed  s   z%TestImmutableDeclaration.test_changedc                 C   sH   |   |  ¡  | ¡¡ |   |  ¡ j| dd�¡ |   |  ¡ j| dd�¡ d S )NTrK   F)r\   r=   rN   r´   r   r   r   Útest_extends_always_falseƒ  s   z2TestImmutableDeclaration.test_extends_always_falsec                 C   s0   |   |  ¡  d¡¡ |  |  ¡  dd¡d¡ d S )NÚnameé*   )rZ   r=   r[   r   r´   r   r   r   Útest_get_always_defaultˆ  s   z0TestImmutableDeclaration.test_get_always_defaultc                 C   sr   |   ¡ }|  |ji ¡ d|jd< |  |ji ¡ |  | d¡¡ i  }|_d|d< |  |ji ¡ |  | d¡¡ d S )NrÃ   rW   )r=   r   r]   rZ   r[   )r   r@   Úattrsr   r   r   Útest_v_attrsŒ  s   

z%TestImmutableDeclaration.test_v_attrsN)r   r   r   rc   r=   r³   rµ   r¶   r»   r¿   rÀ   rÁ   rÄ   rÆ   r   r   r   r   r«   W  s    r«   c                   @   r7   )ÚTestImplementsc                 C   rb   rt   )r)   rv   )r   rv   r   r   r   rc   �  rd   zTestImplements._getTargetClassc                 O   re   r.   rf   rg   r   r   r   rj   ¡  rk   zTestImplements._makeOnec                 C   s$   ddl m} G dd„ dtƒ}||ƒS )Nr   r¥   c                   @   r$   )z+TestImplements._makeOneToCompare.<locals>.ANr%   r   r   r   r   ÚA¦  r5   rÈ   )r)   r¦   r*   )r   r¦   rÈ   r   r   r   Ú_makeOneToCompare¤  s   z TestImplements._makeOneToComparec                 C   sH   |   ¡ }|  |jd ¡ |  |jd¡ |  |jd¡ |  t|jƒg ¡ d S )Nr   ú?)rj   r   ÚinheritÚdeclaredr   r>   rl   ©r   rw   r   r   r   rm   «  s
   z!TestImplements.test_ctor_no_basesc                 C   s"   |   ¡ }d|_|  t|ƒd¡ d S )NÚTestingzclassImplements(Testing))rj   r   r   ÚreprrÍ   r   r   r   Útest___repr__²  s   zTestImplements.test___repr__c                 C   s,   ddl m} |  ¡ }|  | ¡ |df¡ d S )Nr   r¥   r.   )r)   r¦   rj   r   Ú
__reduce__)r   r¦   rw   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                   @   r$   )z#TestImplements.test_sort.<locals>.ANr%   r   r   r   r   rÈ   ¾  r5   rÈ   c                   @   r$   )z#TestImplements.test_sort.<locals>.BNr%   r   r   r   r   ÚBÀ  r5   rÓ   ro   rq   )r)   r¦   r*   rE   rp   r   ÚhashrM   )r   r¦   rÈ   rÓ   rp   rq   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                   @   ó,   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.   ©Ú_wrapped)r   Úwrappedr   r   r   Ú__init__Ò  ó   
z:TestImplements.test_proxy_equality.<locals>.Proxy.__init__c                 S   r-   r.   r/   ©r   rÂ   r   r   r   Ú__getattr__Õ  ó   z=TestImplements.test_proxy_equality.<locals>.Proxy.__getattr__c                 S   s
   | j |kS r.   r×   ©r   r—   r   r   r   Ú__eq__Ø  rÛ   z8TestImplements.test_proxy_equality.<locals>.Proxy.__eq__c                 S   s
   | j |kS r.   r×   rß   r   r   r   Ú__ne__Û  rÛ   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                   @   r$   )z-TestImplements.test_proxy_equality.<locals>.ANr%   r   r   r   r   rÈ   ß  r5   rÈ   c                   @   r$   )z-TestImplements.test_proxy_equality.<locals>.BNr%   r   r   r   r   rÓ   â  r5   rÓ   )r*   r)   r¦   rM   r\   )r   râ   r¦   rÈ   rÓ   ÚimplementedByAÚimplementedByBÚproxyr   r   r   Útest_proxy_equalityÏ  s    z"TestImplements.test_proxy_equalityc                 C   s^   |   ¡ }|  |j¡ |  d|j¡ d|_|  d|j¡ | d ¡ |  |j¡ |  d|j¡ d S )NÚ_super_cacherÃ   )rj   rZ   rç   rI   Ú__dict__r|   r_   rÍ   r   r   r   Ú test_changed_deletes_super_cache÷  s   
z/TestImplements.test_changed_deletes_super_cachec                 C   sJ   |   ¡ }|  |j¡ |  d|j¡ | d ¡ |  |j¡ |  d|j¡ d S )Nrç   )rj   rZ   rç   rI   rè   r_   rÍ   r   r   r   Ú%test_changed_does_not_add_super_cache  s   
z4TestImplements.test_changed_does_not_add_super_cacheN)r   r   r   rc   rj   rÉ   rm   rÐ   rÒ   rÕ   ræ   ré   rê   r   r   r   r   rÇ   š  s    (rÇ   c                       sÜ   e Zd Zdd„ Ze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‡ fd!d"„Z‡ fd#d$„Z‡ fd%d&„Z‡ fd'd(„Z‡ fd)d*„Z‡ fd+d,„Z‡  ZS )-ÚTest_implementedByFallbackc                 C   rb   )Nr   )ÚimplementedByFallback)r)   rì   )r   rì   r   r   r   rc     ó   z*Test_implementedByFallback._getTargetClassc                 O   re   r.   rf   rg   r   r   r   Ú_callFUT  rk   z#Test_implementedByFallback._callFUTc                 C   s6   G dd„ dt ƒ}|ƒ }d |_|  t|  |¡ƒg ¡ d S )Nc                   @   ó   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&     ó    r&   )r*   rñ   r   r>   rî   ©r   r&   r#   r   r   r   Ú5test_dictless_wo_existing_Implements_wo_registrations  s   zPTest_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrationsc                 C   ó*   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   r-   r.   r/   r´   r   r   r   Ú	_get_impl"  rÞ   zrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._get_implc                 S   ó   t ‚r.   )r   )r   Úvalr   r   r   Ú	_set_impl$  ó   zrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._set_implc                 S   r-   r.   r/   r´   r   r   r   Ú__call__'  r3   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&   !  s
    
r&   ©r*   r¹   r   rî   rõ   r   r   r   Ú@test_dictless_wo_existing_Implements_cant_assign___implemented__   s   	z[Test_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__c                 C   sz   ddl m} G dd„ dtƒ}|ƒ }d |_tƒ }t|dƒ�}|||< |  |  |¡|u ¡ W d   ƒ d S 1 s6w   Y  d S )Nr   ©Údeclarationsc                   @   rï   )z\Test_implementedByFallback.test_dictless_wo_existing_Implements_w_registrations.<locals>.Foorð   Nrò   r   r   r   r   r&   /  rô   r&   Ú#BuiltinImplementationSpecifications)rŸ   r  r*   rñ   Ú_MonkeyDictrM   rî   )r   r  r&   r#   ÚregÚspecsr   r   r   Ú4test_dictless_wo_existing_Implements_w_registrations-  s   ÿ"ýzOTest_implementedByFallback.test_dictless_wo_existing_Implements_w_registrationsc                 C   sF   ddl m} |ƒ }G dd„ dtƒ}|ƒ }||_|  |  |¡|u ¡ d S )Nr   ru   c                   @   rï   )zKTest_implementedByFallback.test_dictless_w_existing_Implements.<locals>.Foorð   Nrò   r   r   r   r   r&   <  rô   r&   )r)   rv   r*   rñ   rM   rî   )r   rv   rw   r&   r#   r   r   r   Ú#test_dictless_w_existing_Implements9  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   ro   c                   @   rï   )zOTest_implementedByFallback.test_dictless_w_existing_not_Implements.<locals>.Foorð   Nrò   r   r   r   r   r&   D  rô   r&   rq   )rE   rp   r*   rñ   r   r>   rî   )r   rp   r&   r#   rq   r   r   r   Ú'test_dictless_w_existing_not_ImplementsB  s   zBTest_implementedByFallback.test_dictless_w_existing_not_Implementsc                    ó>   ddl m} |ƒ ‰ G ‡ fdd„dtƒ}|  |  |¡ˆ u ¡ d S )Nr   ru   c                       ó   e Zd Z” ZdS )zJTest_implementedByFallback.test_w_existing_attr_as_Implements.<locals>.FooN©r   r   r   rñ   r   ©rw   r   r   r&   N  rô   r&   ©r)   rv   r*   rM   rî   ©r   rv   r&   r   r  r   Ú"test_w_existing_attr_as_ImplementsK  ó   z=Test_implementedByFallback.test_w_existing_attr_as_Implementsc                 C   sÆ   ddl m} ddlm} t|dƒ�H}|  t|  t¡ƒg ¡ |  t|  t¡ƒg ¡ |  t|  t	¡ƒg ¡ ttt	fD ]}|| }|  
||¡ |  t|ƒd|jf ¡ q8W d   ƒ d S 1 s\w   Y  d S )Nr   r  ru   r  zclassImplements(%s))rŸ   r  r)   rv   r  r   r>   rî   ÚtupleÚdictrŽ   rÏ   r   )r   r  rv   r  ÚtypÚspecr   r   r   Útest_builtins_added_to_cacheR  s&   ÿ
ÿÿý"ûz7Test_implementedByFallback.test_builtins_added_to_cachec                 C   s¦   ddl m} tƒ tƒ tƒ }}}t|dƒ�3}||t< ||t< ||t< |  |  t¡|u ¡ |  |  t¡|u ¡ |  |  t¡|u ¡ W d   ƒ d S 1 sLw   Y  d S )Nr   r  r  )	rŸ   r  r*   r  r  r>   r  rM   rî   )r   r  Út_specÚl_specÚd_specr  r   r   r   Útest_builtins_w_existing_cachea  s   ÿ"ùz9Test_implementedByFallback.test_builtins_w_existing_cachec                 C   s(   G dd„ dƒ}|   t|  |¡ƒg ¡ d S )Nc                   @   r$   )zITest_implementedByFallback.test_oldstyle_class_no_assertions.<locals>.FooNr%   r   r   r   r   r&   o  r5   r&   )r   r>   rî   ©r   r&   r   r   r   Ú!test_oldstyle_class_no_assertionsm  s   z<Test_implementedByFallback.test_oldstyle_class_no_assertionsc                 C   s*   G dd„ dt ƒ}|  t|  |¡ƒg ¡ d S )Nc                   @   r$   )z:Test_implementedByFallback.test_no_assertions.<locals>.FooNr%   r   r   r   r   r&   u  r5   r&   ©r*   r   r>   rî   r  r   r   r   Útest_no_assertionss  s   z-Test_implementedByFallback.test_no_assertionsc                 C   r÷   )Nc                   @   ó   e Zd ZdZdS )zHTest_implementedByFallback.test_w_None_no_bases_not_factory.<locals>.FooNr  r   r   r   r   r&   z  rô   r&   rÿ   rõ   r   r   r   Ú test_w_None_no_bases_not_factoryy  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|¡ |  |j|¡ |  |j	|¡ |  
d|j¡ 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   r-   r.   r/   r´   r   r   r   rý   ƒ  rÞ   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   r±   rË   rñ   Ú__providedBy__rI   rè   )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|¡ |  |j|¡ |  	|j
|¡ |  	|j|¡ |  |j|j
¡ d S )Nr   ©ÚClassProvidesc                   @   r  )zDTest_implementedByFallback.test_w_None_no_bases_w_class.<locals>.FooNr  r   r   r   r   r&   ’  rô   r&   z*zope.interface.tests.test_declarations.Foo)r)   r&  r*   rî   r   r   r±   rË   rñ   rŽ   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                    r
  )Nr   ru   c                       r  )zBTest_implementedByFallback.test_w_existing_Implements.<locals>.FooNr  r   r  r   r   r&      rô   r&   r  r  r   r  r   Útest_w_existing_Implements�  r  z5Test_implementedByFallback.test_w_existing_Implementsc                    s¨   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}||ƒG dd	„ d	tƒƒ}||ƒG d
d„ d|ƒƒ}|  t|  |¡ƒ||g¡ t||ƒ}|  t|  |¡ƒ|g¡ d S )Nr   rC   r§   c                   @   r$   )zSTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr%   r   r   r   r   r�   ¨  r5   r�   c                   @   r$   )zVTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr%   r   r   r   r   rž   «  r5   rž   c                   @   r$   )zRTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr%   r   r   r   r   r©   ®  r'   r©   c                   @   r$   )zUTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr%   r   r   r   r   ÚDerived²  r'   r)  ©	rŸ   rD   r)   r¨   r*   r   r>   rî   Úsuper©r   rD   r¨   r�   rž   r©   r)  Úsup©Ú	__class__r   r   Ú)test_super_when_base_implements_interface¤  s   
zDTest_implementedByFallback.test_super_when_base_implements_interfacec           
         sÊ   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}||ƒG dd	„ d	tƒƒ}G d
d„ d|ƒ}G dd„ d|ƒ}||ƒG dd„ d||ƒƒ}|  t|  |¡ƒ||g¡ t||ƒ}	|  t|  |	¡ƒ|g¡ d S )Nr   rC   r§   c                   @   r$   )z[Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IBaseNr%   r   r   r   r   r�   ¾  r5   r�   c                   @   r$   )z^Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IDerivedNr%   r   r   r   r   rž   Á  r5   rž   c                   @   r$   )zZTest_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.BaseNr%   r   r   r   r   r©   Ä  r'   r©   c                   @   r$   )z\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child1Nr%   r   r   r   r   ÚChild1È  r5   r1  c                   @   r$   )z\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child2Nr%   r   r   r   r   ÚChild2Ë  r5   r2  c                   @   r$   )z]Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.DerivedNr%   r   r   r   r   r)  Î  r'   r)  r*  )
r   rD   r¨   r�   rž   r©   r1  r2  r)  r-  r.  r   r   Ú1test_super_when_base_implements_interface_diamondº  s   
zLTest_implementedByFallback.test_super_when_base_implements_interface_diamondc                    sò   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	tƒ}G d
d„ d|ƒ}||ƒG dd„ d|ƒƒ}||ƒG dd„ d||ƒƒ}|  |j||||tf¡ |  t|  |¡ƒ||g¡ t	||ƒ}	|  |	¡}
|  t|
ƒ|g¡ |  
|
j¡ d S )Nr   rC   r§   c                   @   r$   )z]Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IBaseNr%   r   r   r   r   r�   Ú  r5   r�   c                   @   r$   )z`Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IDerivedNr%   r   r   r   r   rž   Ý  r5   rž   c                   @   r$   )z\Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.BaseNr%   r   r   r   r   r©   á  r5   r©   c                   @   r$   )z^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child1Nr%   r   r   r   r   r1  ä  r5   r1  c                   @   r$   )z^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child2Nr%   r   r   r   r   r2  ç  r'   r2  c                   @   r$   )z_Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.DerivedNr%   r   r   r   r   r)  ë  r'   r)  )rŸ   rD   r)   r¨   r*   r   Ú__mro__r>   rî   r+  rZ   Ú_dependents)r   rD   r¨   r�   rž   r©   r1  r2  r)  r-  Úfutr.  r   r   Ú3test_super_when_parent_implements_interface_diamondÖ  s    

zNTest_implementedByFallback.test_super_when_parent_implements_interface_diamondc                    sœ   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	tƒ}||ƒG d
d„ d|ƒƒ}|  t|  |¡ƒ|g¡ t||ƒ}|  t|  |¡ƒg ¡ d S )Nr   rC   r§   c                   @   r$   )zYTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr%   r   r   r   r   r�   ú  r5   r�   c                   @   r$   )z\Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr%   r   r   r   r   rž   ý  r5   rž   c                   @   r$   )zXTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr%   r   r   r   r   r©      r5   r©   c                   @   r$   )z[Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr%   r   r   r   r   r)    r'   r)  r*  r,  r.  r   r   Ú/test_super_when_base_doesnt_implement_interfaceö  s   
zJTest_implementedByFallback.test_super_when_base_doesnt_implement_interfacec                    sŒ   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}||ƒG dd	„ d	tƒƒ}|  t|  |¡ƒ|g¡ t||ƒ}|  t|  |¡ƒg ¡ d S )
Nr   rC   r§   c                   @   r$   )zHTest_implementedByFallback.test_super_when_base_is_object.<locals>.IBaseNr%   r   r   r   r   r�     r5   r�   c                   @   r$   )zKTest_implementedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr%   r   r   r   r   rž     r5   rž   c                   @   r$   )zJTest_implementedByFallback.test_super_when_base_is_object.<locals>.DerivedNr%   r   r   r   r   r)    r'   r)  r*  )r   rD   r¨   r�   rž   r)  r-  r.  r   r   Útest_super_when_base_is_object  s   
z9Test_implementedByFallback.test_super_when_base_is_objectc                    s`  ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	|ƒ}G d
d„ d|ƒ}G dd„ d|ƒ}||ƒG dd„ dtƒƒ}||ƒG dd„ d|ƒƒ}	||ƒG dd„ d|ƒƒ}
|||ƒG dd„ d|	|
ƒƒ}|}t||ƒ}t|	|ƒ}t|
|ƒ}|  t|  |¡ƒ|||||g¡ |  t|  |¡ƒ|||g¡ |  t|  |¡ƒ||g¡ |  t|  |¡ƒ|g¡ d S )Nr   r§   rC   c                   @   r$   )zRTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr%   r   r   r   r   r�   "  r5   r�   c                   @   r$   )zPTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr%   r   r   r   r   ÚIM1%  r5   r:  c                   @   r$   )zPTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr%   r   r   r   r   ÚIM2(  r5   r;  c                   @   r$   )zUTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr%   r   r   r   r   rž   +  r5   rž   c                   @   r$   )zWTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr%   r   r   r   r   Ú
IUnrelated.  r5   r<  c                   @   r$   )zQTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr%   r   r   r   r   r©   1  r'   r©   c                   @   r$   )zOTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr%   r   r   r   r   ÚM15  r'   r=  c                   @   r$   )zOTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr%   r   r   r   r   ÚM29  r'   r>  c                   @   r$   )zTTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr%   r   r   r   r   r)  =  r'   r)  ©	r)   r¨   rŸ   rD   r*   r+  r   r>   rî   ©r   r¨   rD   r�   r:  r;  rž   r<  r©   r=  r>  r)  ÚdÚsdÚsm1Úsm2r.  r   r   Ú(test_super_multi_level_multi_inheritance  s>   


ÿÿÿÿzCTest_implementedByFallback.test_super_multi_level_multi_inheritance)r   r   r   rc   Ú_getFallbackClassrî   rö   r   r  r  r	  r  r  r  r  r  r   r$  r'  r(  r0  r3  r7  r8  r9  rE  Ú__classcell__r   r   r.  r   rë     s0    		 rë   c                   @   ó   e Zd Zdd„ ZdS )ÚTest_implementedByc                 C   rb   )Nr   r¥   )r)   r¦   )r   r¦   r   r   r   rc   T  rd   z"Test_implementedBy._getTargetClassN©r   r   r   rc   r   r   r   r   rI  P  ó    rI  c                   @   s<   e Zd ZdZdd„ Zde d dfdd„Zd	d
„ Zdd„ ZdS )Ú_ImplementsTestMixinTc                 C   rù   r.   r/   )r   ÚclsÚifacer   r   r   rî   \  ó   z_ImplementsTestMixin._callFUTNz.Fooú	not givenc           
      C   sÆ   ddl m} ddlm} |dƒ}|  ||¡}|  ||¡ |j}	|d ur)|  |	|¡ |  |	j|¡ |dkr6|n|}|  |	j	|¡ |  |j|	¡ | j
r_|  |j|¡ |  |j|¡ |  |j|j¡ ||fS )Nr   r%  ro   rq   rP  )r)   r&  rE   rp   rî   r±   rñ   r   r   rË   ÚFUT_SETS_PROVIDED_BYrŽ   r#  r"  )
r   r&   Ú	orig_specÚ	spec_namerË   r&  rp   rq   Úreturnedr  r   r   r   Ú_check_implementer`  s&   ÿz'_ImplementsTestMixin._check_implementerc                 C   ó   G dd„ dƒ}|   |¡ d S )Nc                   @   r$   )z5_ImplementsTestMixin.test_oldstyle_class.<locals>.FooNr%   r   r   r   r   r&   }  r5   r&   )rU  r  r   r   r   Útest_oldstyle_class{  ó   z(_ImplementsTestMixin.test_oldstyle_classc                 C   s   G dd„ dt ƒ}|  |¡ d S )Nc                   @   r$   )z5_ImplementsTestMixin.test_newstyle_class.<locals>.FooNr%   r   r   r   r   r&   ‚  r5   r&   )r*   rU  r  r   r   r   Útest_newstyle_class�  s   z(_ImplementsTestMixin.test_newstyle_class)r   r   r   rQ  rî   rU  rW  rY  r   r   r   r   rL  Y  s    
ýrL  c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTest_classImplementsOnlyFc                 C   s   ddl m} |||ƒ |S )Nr   )ÚclassImplementsOnly)r)   r[  )r   rM  rN  r[  r   r   r   rî   ‰  s   
z!Test_classImplementsOnly._callFUTc                    s�   ddl m} ddlm} |dƒ}|dƒ}||ƒ‰ |fˆ _G ‡ fdd„dtƒ}|ˆ _|  ||¡ |  |j	ˆ u ¡ |  
ˆ jd ¡ |  
ˆ j|f¡ d S )Nr   ru   ro   rq   r�   c                       r  )z@Test_classImplementsOnly.test_w_existing_Implements.<locals>.FooNr  r   r  r   r   r&   •  rô   r&   )r)   rv   rE   rp   rÌ   r*   rË   rî   rM   rñ   r   ©r   rv   rp   rq   r�   r&   r   r  r   r(  Ž  s   z3Test_classImplementsOnly.test_w_existing_Implementsc                    sP   ddl m} ddlm} |dƒ}||ƒ‰ G ‡ fdd„dƒ}| j|ˆ dd d� d S )	Nr   ru   ro   r�   c                       r  )z9Test_classImplementsOnly.test_oldstyle_class.<locals>.FooNr  r   ©Úold_specr   r   r&   ¤  rô   r&   rÊ   ©rË   )r)   rv   rE   rp   rU  ©r   rv   rp   r�   r&   r   r]  r   rW  ž  s   z,Test_classImplementsOnly.test_oldstyle_classc                    sR   ddl m} ddlm} |dƒ}||ƒ‰ G ‡ fdd„dtƒ}| j|ˆ dd d� d S )	Nr   ru   ro   r�   c                       r  )z9Test_classImplementsOnly.test_newstyle_class.<locals>.FooNr  r   r]  r   r   r&   ®  rô   r&   rÊ   r_  )r)   rv   rE   rp   r*   rU  r`  r   r]  r   rY  ¨  s   z,Test_classImplementsOnly.test_newstyle_classc                 C   sL   | j tdtfi ƒd d�\}}G dd„ d|ƒ}|  ||¡ |  | |¡¡ d S )Nr&   r_  c                   @   r$   )zRTest_classImplementsOnly.test_redundant_with_super_still_implements.<locals>.ChildNr%   r   r   r   r   ÚChild¹  r5   ra  )rU  Útyper*   rî   rM   r¦   )r   r©   r�   ra  r   r   r   Ú*test_redundant_with_super_still_implements³  s   
þzCTest_classImplementsOnly.test_redundant_with_super_still_implementsN)	r   r   r   rQ  rî   r(  rW  rY  rc  r   r   r   r   rZ  †  s    
rZ  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_classImplementsc                 C   ó$   ddl m} |||ƒ}|  |¡ |S )Nr   ©ÚclassImplements)r)   rg  rZ   )r   rM  rN  rg  Úresultr   r   r   rî   Â  ó   

zTest_classImplements._callFUTc                 C   sŒ   |   |¡\}}G dd„ d|ƒ}|  ||¡}|  d|j¡ |  d|j¡ |  d|j¡ |j}|  |jd¡ |  |j|¡ |  	| 
|ƒ ¡¡ d S )Nc                   @   r$   )zATest_classImplements.__check_implementer_redundant.<locals>.ChildNr%   r   r   r   r   ra  Í  r5   ra  rñ   r#  r"  r   )rU  rî   r|   rè   rI   rñ   r   rÌ   rË   rM   Ú
providedBy)r   r©   r�   ra  rT  r  r   r   r   Ú__check_implementer_redundantÈ  s   z2Test_classImplements.__check_implementer_redundantc                 C   s   |   tdtfi ƒ¡ d S )Nr&   )Ú2_Test_classImplements__check_implementer_redundantrb  r*   r´   r   r   r   Ú<test_redundant_implementer_empty_class_declarations_newstyleÛ  s   zQTest_classImplements.test_redundant_implementer_empty_class_declarations_newstylec                 C   rV  )Nc                   @   r$   )z^Test_classImplements.test_redundant_implementer_empty_class_declarations_oldstyle.<locals>.FooNr%   r   r   r   r   r&   à  r5   r&   )rl  r  r   r   r   Ú<test_redundant_implementer_empty_class_declarations_oldstyleÞ  rX  zQTest_classImplements.test_redundant_implementer_empty_class_declarations_oldstylec                 C   sÈ   ddl m} ddl m} ddl m} ddlm} G dd„ dtƒ}||jjdƒ�3 |  	||¡ |  
t||ƒƒ|g¡ G d	d
„ d
|ƒ}|  	||¡ |  
t||ƒƒ|g¡ W d   ƒ d S 1 s]w   Y  d S )Nr   rC   r¥   r›   r™   c                   @   r$   )zFTest_classImplements.test_redundant_implementer_Interface.<locals>.FooNr%   r   r   r   r   r&   ê  r5   r&   Fc                   @   r$   )zFTest_classImplements.test_redundant_implementer_Interface.<locals>.BazNr%   r   r   r   r   ÚBazñ  r5   ro  )rŸ   rD   r¦   rœ   r    rš   r*   r¡   r¢   rî   r   r>   )r   rD   r¦   rœ   rš   r&   ro  r   r   r   Ú$test_redundant_implementer_Interfaceä  s   "øz9Test_classImplements.test_redundant_implementer_Interfacec                 C   s   ||fS r.   r   ©r   Úapplied_firstÚapplied_secondr   r   r   Ú_order_for_two÷  ó   z#Test_classImplements._order_for_twoc                    s”   ddl m} ddlm} |dƒ}|dƒ}||ƒ‰ |fˆ _G ‡ fdd„dtƒ}|ˆ _|  ||¡ |  |j	ˆ ¡ |  
ˆ j|¡ |  
ˆ j|  ||¡¡ d S )Nr   ru   ro   rq   r�   c                       r  )z<Test_classImplements.test_w_existing_Implements.<locals>.FooNr  r   r  r   r   r&     rô   r&   )r)   rv   rE   rp   rÌ   r*   rË   rî   r±   rñ   r   rt  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ƒ}| d|¡‰|fˆ_G ‡fdd	„d	tƒ}G ‡fd
d„dtƒ}| d|¡‰ |fˆ _G ‡ fdd„d||ƒ}|ˆ _|  ||¡ |  	|j
ˆ ¡ |  ˆ j|¡ |  ˆ j|  ||¡¡ |  ˆ j|  ||¡ˆf ¡ d S )Nr   ru   ro   ÚIRootÚISecondRootÚIExtendsRootÚRootc                       r  )zFTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root1Nr  r   ©Ú	impl_rootr   r   ÚRoot1  rô   r|  c                       r  )zFTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root2Nr  r   rz  r   r   ÚRoot2  rô   r}  ÚExtendsRoot1c                       r  )zLTest_classImplements.test_w_existing_Implements_w_bases.<locals>.ExtendsRootNr  r   )Úimpl_extends_rootr   r   ÚExtendsRoot  rô   r€  )r)   rv   rE   rp   r"   rÌ   r*   rË   rî   r±   rñ   r   rt  rl   )	r   rv   rp   rv  rw  rx  r|  r}  r€  r   )r  r{  r   Ú"test_w_existing_Implements_w_bases  s,   
ÿÿz7Test_classImplements.test_w_existing_Implements_w_basesN)r   r   r   rî   rl  rm  rn  rp  rt  r(  r�  r   r   r   r   rd  À  s    rd  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚTest_classImplementsFirstc                 C   re  )Nr   )ÚclassImplementsFirst)r)   r„  rZ   )r   rM  rN  r„  rh  r   r   r   rî   ,  ri  z"Test_classImplementsFirst._callFUTc                 C   s   ||fS r.   r   rq  r   r   r   rt  2  ru  z(Test_classImplementsFirst._order_for_twoN)r   r   r   rî   rt  r   r   r   r   rƒ  *  s    rƒ  c                   @   r‚  )ÚTest__implements_advicec                 O   ó   ddl m} ||i |¤ŽS )Nr   )Ú_implements_advice)r)   r‡  )r   rh   ri   r‡  r   r   r   rî   8  ó   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¡ |  	|j
|¡ |  t|j
ƒˆ g¡ d S )	Nr   rf  ru   ro   rq   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   ©rq   rg  r   r   r&   A  s    r&   r‰  )r)   rg  rv   rE   rp   r*   rî   rI   rè   rŽ   rñ   r   r>   )r   rv   rp   r&   r   rŠ  r   Útest_no_existing_implements<  s   
z3Test__implements_advice.test_no_existing_implementsN)r   r   r   rî   r‹  r   r   r   r   r…  6  s    r…  c                   @   ó<   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   rb   )Nr   r§   )r)   r¨   )r   r¨   r   r   r   rc   K  rd   z Test_implementer._getTargetClassc                 O   re   r.   rf   rg   r   r   r   rj   O  rk   zTest_implementer._makeOnec                 G   s   | j |Ž }||ƒS r.   ©rj   )r   rM  ÚifacesÚ	decoratorr   r   r   rî   R  ó   
zTest_implementer._callFUTc                 C   s2   ddl m} |dƒ}|  |¡}|  t|tƒ ¡ d S rn   )rE   rp   rj   r¹   r   r*   )r   rp   rq   r�  r   r   r   Ú test_nonclass_cannot_assign_attrV  s   
z1Test_implementer.test_nonclass_cannot_assign_attrc                 C   s|   ddl m} |dƒ}G dd„ dtƒ}|ƒ }|  |¡}||ƒ}|  ||u ¡ |j}|  |jd¡ |  |j	¡ |  
|j|¡ d S )Nr   ro   rq   c                   @   r$   )z;Test_implementer.test_nonclass_can_assign_attr.<locals>.FooNr%   r   r   r   r   r&   _  r5   r&   z(zope.interface.tests.test_declarations.?)rE   rp   r*   rj   rM   rñ   r   r   rZ   rË   r±   )r   rp   rq   r&   r#   r�  rT  r  r   r   r   Útest_nonclass_can_assign_attr\  s   
z.Test_implementer.test_nonclass_can_assign_attrc           	      C   s~   dd l }ddlm} |dƒ}t| ¡ ƒ}tdƒD ]}G dd„ dtƒ}|  ||¡ q| ¡  t| ¡ ƒ}d}|  	||| ¡ d S )Nr   ro   rq   il  c                   @   r$   )zHTest_implementer.test_does_not_leak_on_unique_classes.<locals>.TestClassNr%   r   r   r   r   Ú	TestClassw  r5   r”  )
ÚgcrE   rp   r   Úget_objectsÚranger*   rî   ÚcollectÚassertLessEqual)	r   r•  rp   rq   Úbegin_countÚ_r”  Ú	end_countÚfudge_factorr   r   r   Ú$test_does_not_leak_on_unique_classesj  s   z5Test_implementer.test_does_not_leak_on_unique_classesN)	r   r   r   rc   rj   rî   r’  r“  rž  r   r   r   r   r�  I  s    r�  c                   @   ó4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTest_implementer_onlyc                 C   rb   )Nr   )Úimplementer_only)r)   r¡  )r   r¡  r   r   r   rc   ‹  rd   z%Test_implementer_only._getTargetClassc                 O   re   r.   rf   rg   r   r   r   rj   �  rk   zTest_implementer_only._makeOnec                 C   s   |   |¡}||ƒS r.   rŽ  )r   rM  rN  r�  r   r   r   rî   ’  r‘  zTest_implementer_only._callFUTc                 C   s8   ddl m} |dƒ}|  |¡}dd„ }|  t||¡ d S )Nr   ro   rq   c                   S   r-   r.   r/   r   r   r   r   Ú	_functionš  rÞ   z6Test_implementer_only.test_function.<locals>._function)rE   rp   rj   r¹   Ú
ValueError)r   rp   rq   r�  r¢  r   r   r   r4   –  s
   
z#Test_implementer_only.test_functionc                 C   s@   ddl m} |dƒ}|  |¡}G dd„ dƒ}|  t||j¡ d S )Nr   ro   rq   c                   @   rH  )z.Test_implementer_only.test_method.<locals>.Barc                 S   r-   r.   r/   r´   r   r   r   Ú_method£  rÞ   z6Test_implementer_only.test_method.<locals>.Bar._methodN)r   r   r   r¤  r   r   r   r   ÚBar¢  ó    r¥  )rE   rp   rj   r¹   r£  r¤  )r   rp   rq   r�  r¥  r   r   r   Útest_methodž  s
   
z!Test_implementer_only.test_methodN)r   r   r   rc   rj   rî   r4   r§  r   r   r   r   r   ‰  s    r   c                   @   r‚  )ÚTest_implementsOnlyc              	   C   sú   dd l }ddlm} ddlm} |dƒ}||dœ}i }d dg¡}|jdd	��L}| ¡  zt|||ƒ W n t	yC   |  
td
¡ Y n(w trK|  d¡ |d }	|	j}
|  t|
ƒ|g¡ |  t|ƒd¡ W d   ƒ d S W d   ƒ d S 1 svw   Y  d S )Nr   ©ÚimplementsOnlyro   rq   )rª  rq   Ú
z*class Foo(object):    implementsOnly(IFoo)Tr   zMust be Python 3r
   r&   )r   r)   rª  rE   rp   Újoinr   r   r   r   rM   r   r   rñ   r   r>   r   )r   r   rª  rp   rq   r   r   ÚCODEr   r&   r  r   r   r   Útest_simple­  s6   ÿÿÿ
ô"ûzTest_implementsOnly.test_simplec                 C   sŠ   ddl m} ddl m} ddlm} |dƒ}|dƒ}||||dœ}i }d g d	¢¡}|  |||¡rC|d
 }	|	j}
|  t	|
ƒ|g¡ d S d S )Nr   ©Ú
implementsr©  ro   rq   r�   )r°  rª  rq   r�   r«  )úclass Foo(object):ú    implements(IFoo)z'class Bar(Foo):    implementsOnly(IBar)r¥  )
r)   r°  rª  rE   rp   r¬  r   rñ   r   r>   )r   r°  rª  rp   rq   r�   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                   @   r   )ÚTest_implementsc           
      C   s¶   dd l }ddlm} ddlm} |dƒ}||dœ}i }d ddg¡}|  |||d	¡rY|d
 }|jdd��}	| ¡  |  	t
|¡ |  t|	ƒd¡ W d   ƒ d S 1 sRw   Y  d S d S )Nr   r¯  ro   rq   ©r°  rq   r«  ú
def foo():r²  Fr#   Tr   )r   r)   r°  rE   rp   r¬  r   r   r   r¹   r   r   r   )
r   r   r°  rp   rq   r   r   r­  r#   r   r   r   r   Útest_called_from_functionâ  s$   
þ"ýþz)Test_implements.test_called_from_functionc           
   	   C   óÚ   dd l }ddlm} ddlm} |dƒ}|dƒ}|||dœ}i }d g d¢¡}|jd	d
��6}	| ¡  zt|||ƒ W n t	yM   t
sK|  t|	ƒd¡ Y nw |  d¡ W d   ƒ d S W d   ƒ d S 1 sfw   Y  d S )Nr   r¯  ro   rq   r�   )r°  rq   r�   r«  )r±  r²  z    implements(IBar)Tr   r
   )r   r)   r°  rE   rp   r¬  r   r   r   r   r   r   r   r   )
r   r   r°  rp   rq   r�   r   r   r­  r   r   r   r   Útest_called_twice_from_classô  ó*   €þø€" z,Test_implements.test_called_twice_from_classc           	      C   ór   ddl m} ddlm} |dƒ}||dœ}i }d ddg¡}|  |||¡r7|d	 }|j}|  t|ƒ|g¡ d S d S )
Nr   r¯  ro   rq   rµ  r«  r±  r²  r&   )	r)   r°  rE   rp   r¬  r   rñ   r   r>   )	r   r°  rp   rq   r   r   r­  r&   r  r   r   r   Útest_called_once_from_class  ó   
þýz+Test_implements.test_called_once_from_classN©r   r   r   r·  r¹  r¼  r   r   r   r   r´  à  s    r´  c                   @   rŒ  )ÚProvidesClassTestsc                 C   rb   ©Nr   ©ÚProvidesClass©r)   rÂ  ©r   rÂ  r   r   r   rc     rd   z"ProvidesClassTests._getTargetClassc                 O   re   r.   rf   rg   r   r   r   rj   !  rk   zProvidesClassTests._makeOnec                 C   sF   ddl m} |dƒ}G dd„ dtƒ}|  ||¡}|  t|ƒ|g¡ d S )Nr   ro   rq   c                   @   r$   )z?ProvidesClassTests.test_simple_class_one_interface.<locals>.FooNr%   r   r   r   r   r&   '  r5   r&   )rE   rp   r*   rj   r   r>   ©r   rp   rq   r&   r  r   r   r   Útest_simple_class_one_interface$  s
   z2ProvidesClassTests.test_simple_class_one_interfacec                 C   sh   ddl m} ddlm} |dƒ}G dd„ dtƒ}|  ||¡}| ¡ \}}|  ||¡ |  |||f¡ d S )Nr   ©ÚProvidesro   rq   c                   @   r$   )z/ProvidesClassTests.test___reduce__.<locals>.FooNr%   r   r   r   r   r&   0  r5   r&   )	r)   rÈ  rE   rp   r*   rj   rÑ   r±   r   )r   rÈ  rp   rq   r&   r  Úklassrh   r   r   r   rÒ   ,  s   z"ProvidesClassTests.test___reduce__c                 C   sH   ddl m} |dƒ}G dd„ dtƒ}|  ||¡}||_|  |j|¡ d S )Nr   ro   rq   c                   @   r$   )z2ProvidesClassTests.test___get___class.<locals>.FooNr%   r   r   r   r   r&   :  r5   r&   ©rE   rp   r*   rj   r"  r±   rÅ  r   r   r   Útest___get___class7  s   z%ProvidesClassTests.test___get___classc                    sR   ddl m} |dƒ}G dd„ dtƒ‰ |  ˆ |¡}|ˆ _‡ fdd„}|  t|¡ d S )Nr   ro   rq   c                   @   r$   )z5ProvidesClassTests.test___get___instance.<locals>.FooNr%   r   r   r   r   r&   C  r5   r&   c                     s   ˆ ƒ } | j S r.   )r"  )r#   ©r&   r   r   Ú_testG  s   z7ProvidesClassTests.test___get___instance.<locals>._test)rE   rp   r*   rj   r"  r¹   ÚAttributeError)r   rp   rq   r  rÍ  r   rÌ  r   Útest___get___instance@  s   z(ProvidesClassTests.test___get___instanceN)	r   r   r   rc   rj   rÆ  rÒ   rË  rÏ  r   r   r   r   r¿    s    	r¿  c                       ó$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚProvidesClassStrictTestsc                    ó&   t t| ƒ ¡ ‰ G ‡ fdd„dˆ ƒ}|S )Nc                       ó   e Zd Z‡ fdd„ZdS )z@ProvidesClassStrictTests._getTargetClass.<locals>.StrictProvidesc                    ó   ˆ j | |dd�S ©NT)Ú	base_mrosrL   ©Ú_do_calculate_ro©r   rÖ  rÁ  r   r   rØ  S  ó   zQProvidesClassStrictTests._getTargetClass.<locals>.StrictProvides._do_calculate_roN©r   r   r   rØ  r   rÁ  r   r   ÚStrictProvidesR  ó    rÜ  )r+  rÑ  rc   )r   rÜ  r.  rÁ  r   rc   P  ó   z(ProvidesClassStrictTests._getTargetClassc                 C   s|   ddl m} ddl m} ddl m} G dd„ d|ƒ}||ƒG dd„ dtƒƒ}|  ||¡}|  |j|||ƒ||tƒ|f¡ d S )	Nr   r¥   rC   r§   c                   @   r$   )zMProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr%   r   r   r   r   r�   ^  r5   r�   c                   @   r$   )zLProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.BaseNr%   r   r   r   r   r©   a  r'   r©   )rŸ   r¦   rD   r¨   r*   rj   r   rS   )r   r¦   rD   r¨   r�   r©   r  r   r   r   Ú%test_overlapping_interfaces_correctedW  s   
ûz>ProvidesClassStrictTests.test_overlapping_interfaces_corrected©r   r   r   rc   rß  rG  r   r   r.  r   rÑ  M  ó    rÑ  c                   @   st   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S )ÚTestProvidesClassReprc                 C   rb   rÀ  rÃ  rÄ  r   r   r   rc   q  rd   z%TestProvidesClassRepr._getTargetClassc                 O   re   r.   rf   rg   r   r   r   rj   u  rk   zTestProvidesClassRepr._makeOnec                 C   st   ddl m} |dƒ}|jdksJ ‚|jtksJ ‚t|ƒdtf ks#J ‚|dƒ}|  t| ƒ||¡}|  t|ƒd¡ d S )Nr   ro   rq   z<InterfaceClass %s.IFoo>r�   z3directlyProvides(TestProvidesClassRepr, IFoo, IBar))rE   rp   r   r   rÏ   rj   rb  r   )r   rp   rq   r�   Úinstr   r   r   Útest__repr__x  s   þz"TestProvidesClassRepr.test__repr__c                 C   s&   ddl m} |j}|  t|ƒd¡ d S )Nr   ©ÚdummyzIdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IDummyModule))Úzope.interface.testsræ  r"  r   rÏ   )r   ræ  Úprovidesr   r   r   Ú'test__repr__module_provides_typical_use‡  s   þz=TestProvidesClassRepr.test__repr__module_provides_typical_usec              	   C   sj   dd l }ddlm} |j}t|jd ƒD ]}|  |j¡� | ||¡ W d   ƒ n1 s-w   Y  qd S )Nr   rå  r¸   )	r®   rç  ræ  r"  r—  ÚHIGHEST_PROTOCOLr¹   ÚPicklingErrorr°   )r   r®   ræ  rè  Úprotor   r   r   Útest__repr__module_after_pickle‘  s   ÿ€ÿz5TestProvidesClassRepr.test__repr__module_after_picklec                 C   sö   dd l }ddlm} ddlm} ddlm} ddlm} |dƒ}|dƒ}|j}|`|  	t
|d|¡ |||ƒ |j}	|  t|	ƒd	¡ |||ƒ |j}	|  t|	ƒd
¡ |jt }
t|
dƒr]J ‚||
||ƒ |  	t|
d¡ |  |
j|	¡ |  t|	ƒd¡ d S )Nr   rå  ©ÚdirectlyProvides©ÚalsoProvidesro   rq   r�   r"  zAdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IFoo)zGdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IFoo, IBar)zfdirectlyProvides(('zope.interface.tests.dummy', 'zope.interface.tests.test_declarations'), IFoo, IBar))Úsysrç  ræ  r)   rï  rñ  rE   rp   r"  Ú
addCleanupÚsetattrr   rÏ   Úmodulesr   ÚhasattrÚdelattrr±   )r   rò  ræ  rï  rñ  rp   rq   r�   Úorig_providesrè  Ú	my_moduler   r   r   Ú#test__repr__directlyProvides_moduleš  s>   
þ
þ
þz9TestProvidesClassRepr.test__repr__directlyProvides_modulec                 C   s\   ddl m} ddlm} |dƒ}|  ||¡}| jd7  _| jd7  _|  t|ƒd¡ d S )Nr   ro   )Ú
ModuleTyperq   )zsome.module)zanother.modulez9directlyProvides(('some.module', 'another.module'), IFoo))rE   rp   r)   rû  rj   Ú_v_module_namesr   rÏ   )r   rp   rû  rq   rã  r   r   r   Ú)test__repr__module_provides_cached_sharedÇ  s   þz?TestProvidesClassRepr.test__repr__module_provides_cached_sharedc                 C   sT   ddl m} |ddd�}|ddd�}|dƒ}|  t| ƒ|||¡}|  t|ƒd¡ d S )	Nr   ro   rq   Úmod1©r   Úmod2r–   z>directlyProvides(TestProvidesClassRepr, IFoo, IBaz, mod2.IFoo)©rE   rp   rj   rb  r   rÏ   ©r   rp   rq   ÚIFoo2r–   rã  r   r   r   Útest__repr__duplicate_namesÔ  s   þz1TestProvidesClassRepr.test__repr__duplicate_namesc                 C   sf   ddl m} ddl m} G dd„ d|ƒ}G dd„ dtƒ}|t| ƒƒ}|  |||¡}|  t|ƒd¡ d S )	Nr   rC   r¥   c                   @   rï   )zKTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.IFooúDoes nothingN©r   r   r   Ú__doc__r   r   r   r   rq   ã  rô   rq   c                   @   rï   )zJTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.Barr  Nr  r   r   r   r   r¥  æ  rô   r¥  zCdirectlyProvides(Bar, IFoo, classImplements(TestProvidesClassRepr)))rŸ   rD   r¦   r*   rb  rj   r   rÏ   )r   rD   r¦   rq   r¥  rw   rã  r   r   r   Ú'test__repr__implementedBy_in_interfacesà  s   þz=TestProvidesClassRepr.test__repr__implementedBy_in_interfacesc                 C   s"   |   t| ƒ¡}|  t|ƒd¡ d S )Nz'directlyProvides(TestProvidesClassRepr)©rj   rb  r   rÏ   ©r   rã  r   r   r   Útest__repr__empty_interfacesñ  s
   þz2TestProvidesClassRepr.test__repr__empty_interfacesc                    s4   G ‡ fdd„dt ƒ}ˆ  |ƒ ¡}ˆ  t|ƒd¡ d S )Nc                       s$   e Zd ZdZ‡ fdd„Zdd„ ZdS )z;TestProvidesClassRepr.test__repr__non_class.<locals>.Objectr   c                    s
   ˆ   d¡S )NzShould not call str)r   )r›  r´   r   r   Ú<lambda>û  s   
 zDTestProvidesClassRepr.test__repr__non_class.<locals>.Object.<lambda>c                 S   s   dS )Nz<Object>r   r´   r   r   r   Ú__repr__ý  rü   zDTestProvidesClassRepr.test__repr__non_class.<locals>.Object.__repr__N)r   r   r   rl   Ú__str__r  r   r´   r   r   ÚObjectù  s    r  zdirectlyProvides(<Object>))r*   rj   r   rÏ   )r   r  rã  r   r´   r   Útest__repr__non_classø  s   þz+TestProvidesClassRepr.test__repr__non_classc                 C   sb   ddl m} ddl m} ddlm} |dƒ}||ƒG dd„ dtƒƒ}||ƒ ƒ}|  t|ƒd¡ d S )	Nr   r§   ©rj  ro   rq   c                   @   r$   )zDTestProvidesClassRepr.test__repr__providedBy_from_class.<locals>.FooNr%   r   r   r   r   r&     r'   r&   úclassImplements(Foo, IFoo))r)   r¨   rj  rE   rp   r*   r   rÏ   )r   r¨   rj  rp   rq   r&   rã  r   r   r   Ú!test__repr__providedBy_from_class  s   
þz7TestProvidesClassRepr.test__repr__providedBy_from_classc           
      C   s„   ddl m} ddl m} ddl m} ddlm} |dƒ}|dƒ}||ƒG dd	„ d	tƒƒ}|ƒ }|||ƒ ||ƒ}	|  t|	ƒd
¡ d S )Nr   r§   r  rð  ro   rq   r�   c                   @   r$   )zFTestProvidesClassRepr.test__repr__providedBy_alsoProvides.<locals>.FooNr%   r   r   r   r   r&     r'   r&   z7directlyProvides(Foo, IBar, classImplements(Foo, IFoo)))	r)   r¨   rj  rñ  rE   rp   r*   r   rÏ   )
r   r¨   rj  rñ  rp   rq   r�   r&   r#   rã  r   r   r   Ú#test__repr__providedBy_alsoProvides  s   
þz9TestProvidesClassRepr.test__repr__providedBy_alsoProvidesN)r   r   r   rc   rj   rä  ré  rí  rú  rý  r  r  r  r  r  r  r   r   r   r   râ  o  s    
	-râ  c                   @   r   )ÚTest_Providesc                 O   r†  )Nr   rÇ  )r)   rÈ  )r   rh   ri   rÈ  r   r   r   rî   .  rˆ  zTest_Provides._callFUTc                 C   s˜   ddl m} ddlm} |dƒ}i }G dd„ dtƒ}t||d�� |  ||¡}W d   ƒ n1 s1w   Y  |  t|ƒ|g¡ |  	|||f |u ¡ d S )Nr   r  ro   rq   c                   @   r$   )z.Test_Provides.test_no_cached_spec.<locals>.FooNr%   r   r   r   r   r&   7  r5   r&   ©ÚInstanceDeclarations)
rŸ   r  rE   rp   r*   Ú_Monkeyrî   r   r>   rM   )r   r  rp   rq   Úcacher&   r  r   r   r   Útest_no_cached_spec2  s   ÿz!Test_Provides.test_no_cached_specc                 C   sŒ   ddl m} ddlm} |dƒ}tƒ }G dd„ dtƒ}||f|i}t||d�� |  ||¡}W d   ƒ n1 s8w   Y  |  ||u ¡ d S )Nr   r  ro   rq   c                   @   r$   )z-Test_Provides.test_w_cached_spec.<locals>.FooNr%   r   r   r   r   r&   C  r5   r&   r  )rŸ   r  rE   rp   r*   r  rî   rM   )r   r  rp   rq   Ú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   r†  )Nr   rî  )r)   rï  )r   rh   ri   rï  r   r   r   rî   M  rˆ  zTest_directlyProvides._callFUTc                 C   óh   ddl m} ddlm} |dƒ}G dd„ dtƒ}|ƒ }|  ||¡ |  |j|¡ |  t	|jƒ|g¡ d S )Nr   rÁ  ro   rq   c                   @   r$   )z7Test_directlyProvides.test_w_normal_object.<locals>.FooNr%   r   r   r   r   r&   U  r5   r&   ©
r)   rÂ  rE   rp   r*   rî   rŽ   r"  r   r>   ©r   rÂ  rp   rq   r&   Úobjr   r   r   Útest_w_normal_objectQ  ó   z*Test_directlyProvides.test_w_normal_objectc                 C   sb   ddl m} ddlm} |dƒ}G dd„ dtƒ}|  ||¡ |  |j|¡ |  t	|jƒ|g¡ d S )Nr   r%  ro   rq   c                   @   r$   )z/Test_directlyProvides.test_w_class.<locals>.FooNr%   r   r   r   r   r&   `  r5   r&   )
r)   r&  rE   rp   r*   rî   rŽ   r"  r   r>   ©r   r&  rp   rq   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   ro   rq   c                   @   rH  )zNTest_directlyProvides.test_w_non_descriptor_aware_metaclass.<locals>.MetaClassc                 S   s   |dkr| S t  | |¡S ©Nr/  )rb  Ú__getattribute__)rM  rÂ   r   r   r   r'  l  s   z_Test_directlyProvides.test_w_non_descriptor_aware_metaclass.<locals>.MetaClass.__getattribute__N)r   r   r   r'  r   r   r   r   Ú	MetaClassk  r¦  r(  c                       r  )zHTest_directlyProvides.test_w_non_descriptor_aware_metaclass.<locals>.FooN)r   r   r   Ú__metaclass__r   ©r(  r   r   r&   t  rô   r&   )rE   rp   rb  r*   r¹   r   rî   ©r   rp   rq   r&   r!  r   r*  r   Ú%test_w_non_descriptor_aware_metaclassf  s   	z;Test_directlyProvides.test_w_non_descriptor_aware_metaclassc                    st   ddl m} ddlm} |dƒ}i ‰ G ‡ fdd„dtƒ}|ƒ }|  ||¡ |  ˆ d |¡ |  tˆ d ƒ|g¡ d S )Nr   rÁ  ro   rq   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 |ƒ‚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©Úthe_dictr   r   Ú__setattr__„  s   zFTest_directlyProvides.test_w_classless_object.<locals>.Foo.__setattr__N©r   r   r   r'  r1  r   r/  r   r   r&   ~  s    r&   r"  )	r)   rÂ  rE   rp   r*   rî   rŽ   r   r>   r   r   r/  r   Útest_w_classless_objecty  s   z-Test_directlyProvides.test_w_classless_objectN)	r   r   r   rî   r"  r%  r   r,  r3  r   r   r   r   r  K  s    

r  c                   @   r   )ÚTest_alsoProvidesc                 O   r†  )Nr   rð  )r)   rñ  )r   rh   ri   rñ  r   r   r   rî   Ž  rˆ  zTest_alsoProvides._callFUTc                 C   r  )Nr   rÁ  ro   rq   c                   @   r$   )z8Test_alsoProvides.test_wo_existing_provides.<locals>.FooNr%   r   r   r   r   r&   –  r5   r&   r  r   r   r   r   Útest_wo_existing_provides’  r#  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ƒ}|ƒ }|||ƒ |  ||¡ |  |j|¡ |  	t
|jƒ||g¡ d S )	Nr   rî  rÁ  ro   rq   r�   c                   @   r$   )z7Test_alsoProvides.test_w_existing_provides.<locals>.FooNr%   r   r   r   r   r&   £  r5   r&   )r)   rï  rÂ  rE   rp   r*   rî   rŽ   r"  r   r>   )r   rï  rÂ  rp   rq   r�   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   r4  Œ  s    r4  c                   @   rŸ  )ÚTest_noLongerProvidesc                 O   r†  )Nr   )ÚnoLongerProvides)r)   r8  )r   rh   ri   r8  r   r   r   rî   ®  rˆ  zTest_noLongerProvides._callFUTc                 C   sL   ddl m} |dƒ}G dd„ dtƒ}|ƒ }|  ||¡ |  t|jƒg ¡ d S )Nr   ro   rq   c                   @   r$   )z<Test_noLongerProvides.test_wo_existing_provides.<locals>.FooNr%   r   r   r   r   r&   µ  r5   r&   )rE   rp   r*   rî   r   r>   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î  ro   rq   c                   @   r$   )z?Test_noLongerProvides.test_w_existing_provides_hit.<locals>.FooNr%   r   r   r   r   r&   ¿  r5   r&   ©	r)   rï  rE   rp   r*   rî   r   r>   r"  )r   rï  rp   rq   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î  ro   rq   r�   c                   @   r$   )z@Test_noLongerProvides.test_w_existing_provides_miss.<locals>.FooNr%   r   r   r   r   r&   Ë  r5   r&   r9  )r   rï  rp   rq   r�   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§   ro   rq   c                   @   r$   )zDTest_noLongerProvides.test_w_iface_implemented_by_class.<locals>.FooNr%   r   r   r   r   r&   Ö  r'   r&   )r)   r¨   rE   rp   r*   r¹   r£  rî   )r   r¨   rp   rq   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                   @   rŸ  )ÚClassProvidesBaseFallbackTestsc                 C   rb   ©Nr   )ÚClassProvidesBaseFallback©r)   r?  ©r   r?  r   r   r   rc   ß  rí   z.ClassProvidesBaseFallbackTests._getTargetClassc                 C   s   G dd„ d|   ¡ ƒ}|||ƒS )Nc                   @   rH  )z8ClassProvidesBaseFallbackTests._makeOne.<locals>.Derivedc                 S   s   || _ || _d S r.   )Ú_clsÚ_implements)r   ÚkÚir   r   r   rÚ   è  s   
zAClassProvidesBaseFallbackTests._makeOne.<locals>.Derived.__init__N)r   r   r   rÚ   r   r   r   r   r)  ç  r¦  r)  rf   )r   rÉ  r°  r)  r   r   r   rj   ä  s   
z'ClassProvidesBaseFallbackTests._makeOnec                 C   sJ   ddl m} |dƒ}G dd„ dtƒ}|  ||¡ }|_|  |j|u ¡ d S )Nr   ro   rq   c                   @   r$   )zGClassProvidesBaseFallbackTests.test_w_same_class_via_class.<locals>.FooNr%   r   r   r   r   r&   ð  r5   r&   )rE   rp   r*   rj   r"  rM   )r   rp   rq   r&   Úcpbpr   r   r   Útest_w_same_class_via_classí  s
   z:ClassProvidesBaseFallbackTests.test_w_same_class_via_classc                 C   sJ   ddl m} |dƒ}G dd„ dtƒ}|ƒ }|  ||¡|_|  |j|¡ d S )Nr   ro   rq   c                   @   r$   )zJClassProvidesBaseFallbackTests.test_w_same_class_via_instance.<locals>.FooNr%   r   r   r   r   r&   ø  r5   r&   rÊ  )r   rp   rq   r&   r#   r   r   r   Útest_w_same_class_via_instanceõ  s   z=ClassProvidesBaseFallbackTests.test_w_same_class_via_instancec                 C   sl   ddl m} |dƒ}G dd„ dtƒ}G dd„ d|ƒ}|ƒ }|  ||¡|_|  tt|d¡ |  tt|d¡ d S )	Nr   ro   rq   c                   @   r$   )zBClassProvidesBaseFallbackTests.test_w_different_class.<locals>.FooNr%   r   r   r   r   r&     r5   r&   c                   @   r$   )zBClassProvidesBaseFallbackTests.test_w_different_class.<locals>.BarNr%   r   r   r   r   r¥    r5   r¥  r"  )rE   rp   r*   rj   r"  r¹   rÎ  Úgetattr)r   rp   rq   r&   r¥  Úbarr   r   r   Útest_w_different_classþ  s   z5ClassProvidesBaseFallbackTests.test_w_different_classN)r   r   r   rc   rj   rG  rH  rK  r   r   r   r   r=  Ý  s    		r=  c                   @   r‚  )ÚClassProvidesBaseTestsc                 C   rb   )Nr   )ÚClassProvidesBase)r)   rM  )r   rM  r   r   r   rc     rd   z&ClassProvidesBaseTests._getTargetClassc                 C   rb   r>  r@  rA  r   r   r   rF    rí   z(ClassProvidesBaseTests._getFallbackClassN)r   r   r   rc   rF  r   r   r   r   rL    s    rL  c                   @   rÖ   )
ÚClassProvidesTestsc                 C   rb   ©Nr   r%  ©r)   r&  ©r   r&  r   r   r   rc     rd   z"ClassProvidesTests._getTargetClassc                 O   re   r.   rf   rg   r   r   r   rj     rk   zClassProvidesTests._makeOnec                 C   s‚   ddl m} ddlm} |dƒ}|dƒ}||ƒG dd„ dtƒƒ}|  |t|ƒ|¡ }|_|  |j|u ¡ |  	t
|ƒ jƒ|g¡ d S )Nr   r§   ro   rq   r�   c                   @   r$   )z7ClassProvidesTests.test_w_simple_metaclass.<locals>.FooNr%   r   r   r   r   r&   '  r'   r&   )r)   r¨   rE   rp   r*   rj   rb  r"  rM   r   r>   ©r   r¨   rp   rq   r�   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|ƒ|t|ƒ|ff¡ d S )Nr   r§   ro   rq   r�   c                   @   r$   )z/ClassProvidesTests.test___reduce__.<locals>.FooNr%   r   r   r   r   r&   3  r'   r&   )
r)   r¨   rE   rp   r*   rj   rb  r"  r   rÑ   rR  r   r   r   rÒ   .  s   
ÿz"ClassProvidesTests.test___reduce__N)r   r   r   rc   rj   rT  rÒ   r   r   r   r   rN    s
    rN  c                       rÐ  )ÚClassProvidesStrictTestsc                    rÒ  )Nc                       rÓ  )zEClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvidesc                    rÔ  rÕ  r×  rÙ  r%  r   r   rØ  A  rÚ  zVClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvides._do_calculate_roNrÛ  r   r%  r   r   ÚStrictClassProvides@  rÝ  rV  )r+  rU  rc   )r   rV  r.  r%  r   rc   >  rÞ  z(ClassProvidesStrictTests._getTargetClassc              	   C   s’   ddl m} ddl m} ddl m} G dd„ d|ƒ}||ƒG dd„ dtƒƒ}|d	tfi ƒ}|  |||¡}|  |j|||ƒ||tƒ|tƒ|f¡ d S )
Nr   r¥   rC   r§   c                   @   r$   )zMClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr%   r   r   r   r   r�   L  r5   r�   c                   @   r$   )zQClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.metaclassNr%   r   r   r   r   Ú	metaclassO  r'   rW  rM  )	rŸ   r¦   rD   r¨   rb  r*   rj   r   rS   )r   r¦   rD   r¨   r�   rW  rM  r  r   r   r   rß  E  s(   ý
úz>ClassProvidesStrictTests.test_overlapping_interfaces_correctedrà  r   r   r.  r   rU  ;  rá  rU  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 )ÚTestClassProvidesReprc                 C   rb   rO  rP  rQ  r   r   r   rc   f  rd   z%TestClassProvidesRepr._getTargetClassc                 O   re   r.   rf   rg   r   r   r   rj   j  rk   zTestClassProvidesRepr._makeOnec                 C   s$   |   t| ƒt¡}|  t|ƒd¡ d S )Nz'directlyProvides(TestClassProvidesRepr)r	  r
  r   r   r   Útest__repr__emptym  s
   þz'TestClassProvidesRepr.test__repr__emptyc                 C   sB   ddl m} G dd„ d|ƒ}|  t| ƒt|¡}|  t|ƒd¡ d S )Nr   rC   c                   @   rï   )z=TestClassProvidesRepr.test__repr__providing_one.<locals>.IFoor  Nr  r   r   r   r   rq   v  rô   rq   z-directlyProvides(TestClassProvidesRepr, IFoo))rŸ   rD   rj   rb  r   rÏ   )r   rD   rq   rã  r   r   r   Útest__repr__providing_onet  s   þz/TestClassProvidesRepr.test__repr__providing_onec                 C   sV   ddl m} |ddd�}|ddd�}|dƒ}|  t| ƒt|||¡}|  t|ƒd¡ d S )	Nr   ro   rq   rþ  rÿ  r   r–   z>directlyProvides(TestClassProvidesRepr, IFoo, IBaz, mod2.IFoo)r  r  r   r   r   r    s   þz1TestClassProvidesRepr.test__repr__duplicate_namesc                 C   s`   ddl m} ddl m} ddlm} |dƒ}||ƒG dd„ dtƒƒ}||ƒ}|  t|ƒd¡ d S )	Nr   r§   r¥   ro   rq   c                   @   r$   )z<TestClassProvidesRepr.test__repr__implementedBy.<locals>.FooNr%   r   r   r   r   r&   ‘  r'   r&   r  )r)   r¨   r¦   rE   rp   r*   r   rÏ   )r   r¨   r¦   rp   rq   r&   rã  r   r   r   Útest__repr__implementedBy‹  s   þz/TestClassProvidesRepr.test__repr__implementedByc                 C   sd   ddl m} G dd„ dtƒ}||ƒ ƒ}|  t|ƒdtf ¡ |ƒ }d|_||ƒ}|  t|ƒd¡ d S )Nr   r¥   c                   @   rH  )zRTestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callablec                 S   ó   | S r.   r   r´   r   r   r   rý      rü   z[TestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callable.__call__N)r   r   r   rý   r   r   r   r   ÚCallableŸ  r¦  r]  zclassImplements(%s.?)zclassImplements(Callable))r)   r¦   r*   r   rÏ   r   )r   r¦   r]  rã  Úcr   r   r   Ú*test__repr__implementedBy_generic_callable›  s   
þþz@TestClassProvidesRepr.test__repr__implementedBy_generic_callableN)
r   r   r   rc   rj   rY  rZ  r  r[  r_  r   r   r   r   rX  d  s    rX  c                   @   rŸ  )ÚTest_directlyProvidedByc                 O   r†  )Nr   )ÚdirectlyProvidedBy)r)   ra  )r   rh   ri   ra  r   r   r   rî   ´  rˆ  z Test_directlyProvidedBy._callFUTc                 C   s0   G dd„ dt ƒ}|ƒ }|  t|  |¡ƒg ¡ d S )Nc                   @   r$   )zNTest_directlyProvidedBy.test_wo_declarations_in_class_or_instance.<locals>.FooNr%   r   r   r   r   r&   ¹  r5   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§   ro   rq   c                   @   r$   )zRTest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance.<locals>.FooNr%   r   r   r   r   r&   Â  r'   r&   )r)   r¨   rE   rp   r*   r   r>   rî   )r   r¨   rp   rq   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î  ro   rq   c                   @   r$   )zRTest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class.<locals>.FooNr%   r   r   r   r   r&   Ì  r5   r&   )r)   rï  rE   rp   r*   r   r>   rî   )r   rï  rp   rq   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§   ro   rq   r�   c                   @   r$   )zNTest_directlyProvidedBy.test_w_declarations_in_instance_and_class.<locals>.FooNr%   r   r   r   r   r&   Ø  r'   r&   )	r)   rï  r¨   rE   rp   r*   r   r>   rî   )r   rï  r¨   rp   rq   r�   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î   rb  rc  rd  re  r   r   r   r   r`  ²  s    

r`  c                   @   r   )ÚTest_classProvidesc           
      C   sÂ   dd l }ddlm} ddlm} |dƒ}||dœ}i }d ddg¡}t|||ƒ |d	 }|jd
d��%}	| ¡  |  	t
|¡ tsO|  t|	ƒd¡ W d   ƒ d S W d   ƒ d S 1 sZw   Y  d S )Nr   ©ÚclassProvidesro   rq   ©rh  rq   r«  r¶  ú    classProvides(IFoo)r#   Tr   )r   r)   rh  rE   rp   r¬  r   r   r   r¹   r   r   r   r   )
r   r   rh  rp   rq   r   r   r­  r#   r   r   r   r   r·  ã  s(   
þü"ýz,Test_classProvides.test_called_from_functionc           
   	   C   r¸  )Nr   rg  ro   rq   r�   )rh  rq   r�   r«  )r±  rj  z    classProvides(IBar)Tr   r
   )r   r)   rh  rE   rp   r¬  r   r   r   r   r   r   r   r   )
r   r   rh  rp   rq   r�   r   r   r­  r   r   r   r   r¹  ö  rº  z/Test_classProvides.test_called_twice_from_classc           	      C   r»  )
Nr   rg  ro   rq   ri  r«  r±  rj  r&   )	r)   rh  rE   rp   r¬  r   r#  r   r>   )	r   rh  rp   rq   r   r   r­  r&   r  r   r   r   r¼    r½  z.Test_classProvides.test_called_once_from_classNr¾  r   r   r   r   rf  à  s    rf  c                   @   r   )ÚTest_providerc                 C   rb   )Nr   )Úprovider)r)   rl  )r   rl  r   r   r   rc   !  rd   zTest_provider._getTargetClassc                 O   re   r.   rf   rg   r   r   r   rj   %  rk   zTest_provider._makeOnec                 C   s`   ddl m} ddlm} |dƒ}|  |¡G dd„ dtƒƒ}|  |j|¡ |  t	|jƒ|g¡ d S )Nr   r%  ro   rq   c                   @   r$   )z'Test_provider.test_w_class.<locals>.FooNr%   r   r   r   r   r&   ,  r'   r&   )
r)   r&  rE   rp   rj   r*   rŽ   r"  r   r>   r$  r   r   r   r%  (  s   zTest_provider.test_w_classN)r   r   r   rc   rj   r%  r   r   r   r   rk    s    rk  c                   @   rÖ   )
Ú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   ©ÚmoduleProvidesro   rq   úzope.interface.tests.foo©r   ro  rq   r«  r¶  ú    moduleProvides(IFoo)r#   )r)   ro  rE   rp   r¬  r   r¹   r   )r   ro  rp   rq   r   r   r­  r#   r   r   r   r·  6  s   ÿþz-Test_moduleProvides.test_called_from_functionc                 C   sz   ddl m} ddlm} |dƒ}d||dœ}i }d dd	g¡}|  t¡� t|||ƒ W d   ƒ d S 1 s6w   Y  d S )
Nr   rn  ro   rq   rp  rq  r«  r±  rr  ©r)   ro  rE   rp   r¬  r¹   r   r   )r   ro  rp   rq   r   r   r­  r   r   r   Útest_called_from_classE  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   rn  ro   rq   rp  rq  r«  úmoduleProvides(IFoo)r"  )r)   ro  rE   rp   r¬  r   r   r>   )r   ro  rp   rq   r   r­  r  r   r   r   Ú"test_called_once_from_module_scopeS  s   ÿÿ
z6Test_moduleProvides.test_called_once_from_module_scopec                 C   st   ddl m} ddlm} |dƒ}d||dœ}d ddg¡}|  t¡� t||ƒ W d   ƒ d S 1 s3w   Y  d S )	Nr   rn  ro   rq   rp  rq  r«  ru  rs  )r   ro  rp   rq   r   r­  r   r   r   Ú#test_called_twice_from_module_scope`  s   ÿþ"ÿz7Test_moduleProvides.test_called_twice_from_module_scopeN)r   r   r   r·  rt  rv  rw  r   r   r   r   rm  3  s
    rm  c                   @   sp   e Zd Zdd„ Ze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_getObjectSpecificationFallbackc                 C   rb   )Nr   )ÚgetObjectSpecificationFallback)r)   ry  )r   ry  r   r   r   rF  q  rí   z5Test_getObjectSpecificationFallback._getFallbackClassc                 O   re   r.   rf   rg   r   r   r   rî   x  rk   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                    s2   |dkrt |ƒ‚zˆ | W S  ty   t |ƒ‚w r&  )rÎ  ÚKeyErrorrÜ   r/  r   r   r'  ~  s   
ÿzeTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__getattribute__c                 S   r-   r.   r/   r-  r   r   r   r1  †  rÞ   z`Test_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__setattr__Nr2  r   r/  r   r   r&   }  s    r&   ©r*   rî   r   r>   ©r   r&   r#   r  r   r/  r   Ú#test_wo_existing_provides_classless{  s
   
zGTest_getObjectSpecificationFallback.test_wo_existing_provides_classlessc                 C   sN   ddl m} ddlm} |dƒ}dd„ }|||ƒ |  |¡}|  ||j¡ d S )Nr   rî  ro   rq   c                   S   r-   r.   r/   r   r   r   r   r#   �  rÞ   zOTest_getObjectSpecificationFallback.test_existing_provides_is_spec.<locals>.foo)r)   rï  rE   rp   rî   r±   r"  )r   rï  rp   rq   r#   r  r   r   r   Útest_existing_provides_is_specŒ  s   

zBTest_getObjectSpecificationFallback.test_existing_provides_is_specc                 C   s.   dd„ }t ƒ |_|  |¡}|  t|ƒg ¡ d S )Nc                   S   r-   r.   r/   r   r   r   r   r#   —  rÞ   zSTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec.<locals>.foo)r*   r"  rî   r   r>   )r   r#   r  r   r   r   Ú"test_existing_provides_is_not_spec–  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î  ro   rq   c                   @   r$   )zGTest_getObjectSpecificationFallback.test_existing_provides.<locals>.FooNr%   r   r   r   r   r&   ¡  r5   r&   )r)   rï  rE   rp   r*   rî   r   r>   )r   rï  rp   rq   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§   ro   rq   c                   @   r$   )zWTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implements.<locals>.FooNr%   r   r   r   r   r&   ¬  r'   r&   )r)   r¨   rE   rp   r*   rî   r   r>   ©r   r¨   rp   rq   r&   r#   r  r   r   r   Ú&test_wo_provides_on_class_w_implements¨  s   
zJTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implementsc                 C   ó4   G dd„ dt ƒ}|ƒ }|  |¡}|  t|ƒg ¡ d S )Nc                   @   r$   )zXTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements.<locals>.FooNr%   r   r   r   r   r&   ´  r5   r&   r{  r|  r   r   r   Ú'test_wo_provides_on_class_wo_implements³  ó   
zKTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implementsc                 C   s   t j| | jdd� d S )Nr"  ©Úexpected_missing©r   Útest_raisesrî   r´   r   r   r   Ú,test_catches_only_AttributeError_on_providesº  r·   zPTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_providesc                 C   s   t j| | jdd d� d S )Nr/  )r‡  r"  rˆ  r´   r   r   r   Ú)test_catches_only_AttributeError_on_class½  s   
ÿzMTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_classc                 C   s    G dd„ dt ƒ}|  |ƒ ¡ d S )Nc                   @   ó   e Zd ZeeƒZdS )zyTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_AttributeError.<locals>.FooN)r   r   r   r   rÎ  r"  r   r   r   r   r&   Å  r¦  r&   )r*   rî   r  r   r   r   ÚHtest_raises_AttributeError_when_provides_fails_type_check_AttributeErrorÁ  s   zlTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_AttributeErrorc                 C   sr   G dd„ dt ƒ}tr1|  t¡�}|  |ƒ ¡ W d   ƒ n1 s w   Y  |  d|jjd ¡ d S |  |ƒ ¡ d S )Nc                   @   rŒ  )zwTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_RuntimeError.<locals>.FooN)r   r   r   r   ÚRuntimeErrorr"  r   r   r   r   r&   Î  r¦  r&   r/  r   )r*   r   r¹   rŽ  rî   r   Ú	exceptionrh   )r   r&   Úexcr   r   r   ÚFtest_raises_AttributeError_when_provides_fails_type_check_RuntimeErrorË  s   ÿzjTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_RuntimeErrorN)r   r   r   rF  rc   rî   r}  r~  r  r€  r‚  r„  rŠ  r‹  r�  r‘  r   r   r   r   rx  o  s    

rx  c                   @   rH  )ÚTest_getObjectSpecificationc                 C   rb   )Nr   )ÚgetObjectSpecification)r)   r“  )r   r“  r   r   r   rc   ß  rd   z+Test_getObjectSpecification._getTargetClassNrJ  r   r   r   r   r’  Û  rK  r’  c                       s¨   e Zd Zdd„ Ze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‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Zdd„ Zdd „ Z‡  ZS )!ÚTest_providedByFallbackc                 C   rb   )Nr   )ÚprovidedByFallback)r)   r•  )r   r•  r   r   r   rF  æ  rí   z)Test_providedByFallback._getFallbackClassc                 O   re   r.   rf   rg   r   r   r   rî   í  rk   z Test_providedByFallback._callFUTc                 C   rƒ  )Nc                   @   r$   )zNTest_providedByFallback.test_wo_providedBy_on_class_wo_implements.<locals>.FooNr%   r   r   r   r   r&   ñ  r5   r&   r{  r|  r   r   r   Ú)test_wo_providedBy_on_class_wo_implementsð  r…  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Ç  ro   rq   c                   @   r$   )zATest_providedByFallback.test_w_providedBy_valid_spec.<locals>.FooNr%   r   r   r   r   r&   û  r5   r&   )	r)   rÈ  rE   rp   r*   r#  rî   r   r>   )r   rÈ  rp   rq   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                   @   r$   )zCTest_providedByFallback.test_w_providedBy_invalid_spec.<locals>.FooNr%   r   r   r   r   r&   	  r5   r&   )r*   r#  rî   r   r>   r|  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§   ro   rq   c                   @   r$   )zVTest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements.<locals>.FooNr%   r   r   r   r   r&   	  r'   r&   )	r)   r¨   rE   rp   r*   r#  rî   r   r>   r�  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 ƒ  }|_|  |¡}|  ||u ¡ d S )Nc                   @   r$   )zcTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_class.<locals>.FooNr%   r   r   r   r   r&   	  r5   r&   ©r*   r#  r"  rî   rM   ©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 ƒ |_|  |¡}|  ||u ¡ d S )Nc                   @   r$   )zeTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class.<locals>.FooNr%   r   r   r   r   r&    	  r5   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§   ro   rq   c                   @   r$   )zeTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_class.<locals>.FooNr%   r   r   r   r   r&   -	  r'   r&   )
r)   r¨   rE   rp   r*   r#  r"  rî   r   r>   r�  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_classc           
         s¾   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}||ƒG dd	„ d	tƒƒ}||ƒG d
d„ d|ƒƒ}|ƒ }|  t|  |¡ƒ||g¡ t||ƒ}|  |¡}	|  	|	j
¡ |  t|	ƒ|g¡ d S )Nr   rC   r§   c                   @   r$   )zPTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr%   r   r   r   r   r�   :	  r5   r�   c                   @   r$   )zSTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr%   r   r   r   r   rž   =	  r5   rž   c                   @   r$   )zOTest_providedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr%   r   r   r   r   r©   @	  r'   r©   c                   @   r$   )zRTest_providedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr%   r   r   r   r   r)  D	  r'   r)  ©rŸ   rD   r)   r¨   r*   r   r>   rî   r+  rZ   r5  )
r   rD   r¨   r�   rž   r©   r)  Úderivedr-  r6  r.  r   r   r0  6	  s   

zATest_providedByFallback.test_super_when_base_implements_interfacec           	         s¢   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	tƒ}||ƒG d
d„ d|ƒƒ}|ƒ }|  t|  |¡ƒ|g¡ t||ƒ}|  t|  |¡ƒg ¡ d S )Nr   rC   r§   c                   @   r$   )zVTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr%   r   r   r   r   r�   T	  r5   r�   c                   @   r$   )zYTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr%   r   r   r   r   rž   W	  r5   rž   c                   @   r$   )zUTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr%   r   r   r   r   r©   Z	  r5   r©   c                   @   r$   )zXTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr%   r   r   r   r   r)  ]	  r'   r)  r*  )	r   rD   r¨   r�   rž   r©   r)  r¡  r-  r.  r   r   r8  P	  s   
zGTest_providedByFallback.test_super_when_base_doesnt_implement_interfacec           	         s¢   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}||ƒG dd	„ d	tƒƒ}|ƒ }|  t|  |¡ƒ|g¡ t||ƒ}|  |¡}|  	|j
¡ |  t|ƒg ¡ d S )
Nr   rC   r§   c                   @   r$   )zETest_providedByFallback.test_super_when_base_is_object.<locals>.IBaseNr%   r   r   r   r   r�   k	  r5   r�   c                   @   r$   )zHTest_providedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr%   r   r   r   r   rž   n	  r5   rž   c                   @   r$   )zGTest_providedByFallback.test_super_when_base_is_object.<locals>.DerivedNr%   r   r   r   r   r)  q	  r'   r)  r   )	r   rD   r¨   r�   rž   r)  r¡  r-  r6  r.  r   r   r9  g	  s   

z6Test_providedByFallback.test_super_when_base_is_objectc                    sä   ddl m} ddlm} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}||ƒG d	d
„ d
tƒƒ}G dd„ d|ƒ}|ƒ }|  t|  |¡ƒ|g¡ |||ƒ |  t|  |¡ƒ||g¡ t	||ƒ}	|  |	¡}
|  
|
j¡ |  t|
ƒ|g¡ d S )Nr   rC   r§   rî  c                   @   r$   )zOTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IBaseNr%   r   r   r   r   r�   ‚	  r5   r�   c                   @   r$   )zRTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IDerivedNr%   r   r   r   r   rž   …	  r5   rž   c                   @   r$   )zNTest_providedByFallback.test_super_when_object_directly_provides.<locals>.BaseNr%   r   r   r   r   r©   ˆ	  r'   r©   c                   @   r$   )zQTest_providedByFallback.test_super_when_object_directly_provides.<locals>.DerivedNr%   r   r   r   r   r)  Œ	  r5   r)  )rŸ   rD   r)   r¨   rï  r*   r   r>   rî   r+  rZ   r5  )r   rD   r¨   rï  r�   rž   r©   r)  r¡  r-  r6  r.  r   r   Ú(test_super_when_object_directly_provides}	  s    


z@Test_providedByFallback.test_super_when_object_directly_providesc                    sb  ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	|ƒ}G d
d„ d|ƒ}G dd„ d|ƒ}||ƒG dd„ dtƒƒ}||ƒG dd„ d|ƒƒ}	||ƒG dd„ d|ƒƒ}
|||ƒG dd„ d|	|
ƒƒ}|ƒ }t||ƒ}t|	|ƒ}t|
|ƒ}|  t|  |¡ƒ|||||g¡ |  t|  |¡ƒ|||g¡ |  t|  |¡ƒ||g¡ |  t|  |¡ƒ|g¡ d S )Nr   r§   rC   c                   @   r$   )zOTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr%   r   r   r   r   r�   ž	  r5   r�   c                   @   r$   )zMTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr%   r   r   r   r   r:  ¡	  r5   r:  c                   @   r$   )zMTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr%   r   r   r   r   r;  ¤	  r5   r;  c                   @   r$   )zRTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr%   r   r   r   r   rž   §	  r5   rž   c                   @   r$   )zTTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr%   r   r   r   r   r<  ª	  r5   r<  c                   @   r$   )zNTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr%   r   r   r   r   r©   ­	  r'   r©   c                   @   r$   )zLTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr%   r   r   r   r   r=  ±	  r'   r=  c                   @   r$   )zLTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr%   r   r   r   r   r>  µ	  r'   r>  c                   @   r$   )zQTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr%   r   r   r   r   r)  ¹	  r'   r)  r?  r@  r.  r   r   rE  š	  s>   


ÿÿÿÿz@Test_providedByFallback.test_super_multi_level_multi_inheritancec                 C   s   t j| | jdtd� d S )Nr#  )r‡  r/  )r   r‰  rî   r*   r´   r   r   r   Ú.test_catches_only_AttributeError_on_providedByË	  s   

þzFTest_providedByFallback.test_catches_only_AttributeError_on_providedByc                 C   s&   t tu}tj| | j|rdndd� d S )Nr/  r#  r†  )ÚstrÚbytesr   r‰  rî   )r   ÚPY3r   r   r   r‹  Ð	  s   


ÿzATest_providedByFallback.test_catches_only_AttributeError_on_class)r   r   r   rF  rc   rî   r–  r—  r˜  r™  r�  rž  rŸ  r0  r8  r9  r¢  rE  r£  r‹  rG  r   r   r.  r   r”  ä  s$    	
1r”  c                   @   rH  )ÚTest_providedByc                 C   rb   )Nr   r  )r)   rj  )r   rj  r   r   r   rc   Ý	  rd   zTest_providedBy._getTargetClassNrJ  r   r   r   r   r§  Ù	  rK  r§  c                   @   sP   e Zd Zdd„ ZeZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdS )Ú*ObjectSpecificationDescriptorFallbackTestsc                 C   rb   )Nr   )Ú%ObjectSpecificationDescriptorFallback)r)   r©  )r   r©  r   r   r   rF  ä	  s   z<ObjectSpecificationDescriptorFallbackTests._getFallbackClassc                 O   re   r.   rf   rg   r   r   r   rj   ì	  rk   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Ç  ro   rq   c                   @   r$   )zOObjectSpecificationDescriptorFallbackTests.test_accessed_via_class.<locals>.FooNr%   r   r   r   r   r&   ó	  r5   r&   )
r)   rÈ  rE   rp   r*   r"  rj   r#  r   r>   )r   rÈ  rp   rq   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Ç  ro   rq   r�   c                   @   r$   )zZObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_provides.<locals>.FooNr%   r   r   r   r   r&   ÿ	  r'   r&   )r)   r¨   rÈ  rE   rp   r*   r"  rj   r#  r   r>   )r   r¨   rÈ  rp   rq   r�   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Ç  ro   rq   r�   r–   c                   @   r$   )zYObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides.<locals>.FooNr%   r   r   r   r   r&   
  r'   r&   )r)   rï  r¨   rÈ  rE   rp   r*   r"  rj   r#  r   r>   )
r   rï  r¨   rÈ  rp   rq   r�   r–   r&   r#   r   r   r   Ú!test_accessed_via_inst_w_provides
  s   

zLObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_providesc                    sf   G dd„ dt ƒ‰ G ‡ ‡fdd„dtƒ}|ƒ }ˆ ˆ ¡� t|dƒ W d   ƒ d S 1 s,w   Y  d S )Nc                   @   r$   )zvObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.MyExceptionNr%   r   r   r   r   ÚMyException
  r5   r­  c                       s$   e Zd Z” ¡ Ze‡ fdd„ƒZdS )znObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Fooc                    s   ˆ ‚r.   r   r´   )r­  r   r   r"   
  rO  z{ObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Foo.__provides__N©r   r   r   rj   r#  rþ   r"  r   ©r­  r   r   r   r&   
  s    r&   r#  )Ú	Exceptionr*   r¹   rI  rõ   r   r¯  r   Ú6test_arbitrary_exception_accessing_provides_not_caught
  s   "ÿzaObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caughtc                    sB   G dd„ dt ƒ}G ‡ fdd„dtƒ}|ƒ }t|dƒ}ˆ  |¡ d S )Nc                   @   r$   )zmObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.MyExceptionNr%   r   r   r   r   r­  *
  r5   r­  c                       s    e Zd Z”  ¡ Zedd„ ƒZdS )zeObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Fooc                 S   rù   r.   )rÎ  r´   r   r   r   r"  0
  rO  zrObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Foo.__provides__Nr®  r   r´   r   r   r&   -
  s    r&   r#  )r°  r*   rI  ÚassertIsNotNone)r   r­  r&   r#   Úprovidedr   r´   r   Ú-test_AttributeError_accessing_provides_caught(
  s
   
zXObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caughtc                 C   sd   ddl m} ddl m} G dd„ d|ƒ}||ƒG dd„ dtƒƒ}|  ¡ |_t|ƒ dƒ}|  |¡ d S )	Nr   rC   r§   c                   @   r$   )zZObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.IFooNr%   r   r   r   r   rq   <
  r5   rq   c                   @   s   e Zd Zedd„ ƒZdS )zYObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Fooc                 S   s   d S r.   r   r´   r   r   r   r"  B
  rO  zfObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Foo.__provides__N)r   r   r   rþ   r"  r   r   r   r   r&   ?
  s    r&   r#  )rŸ   rD   r¨   r*   rj   r#  rI  rZ   )r   rD   r¨   rq   r&   r³  r   r   r   Ú!test_None_in__provides__overrides8
  s   
zLObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overridesN)r   r   r   rF  rc   rj   rª  r«  r¬  r±  r´  rµ  r   r   r   r   r¨  â	  s    
r¨  c                   @   rH  )Ú"ObjectSpecificationDescriptorTestsc                 C   rb   )Nr   )ÚObjectSpecificationDescriptor)r)   r·  )r   r·  r   r   r   rc   P
  rd   z2ObjectSpecificationDescriptorTests._getTargetClassNrJ  r   r   r   r   r¶  K
  s    r¶  c                   @   r   )r  c                    s<   ˆ | _ ‡ fdd„|D ƒ| _| ¡ D ]
\}}tˆ ||ƒ qd S )Nc                    s   i | ]}|t ˆ |ƒ“qS r   )rI  )Ú.0Úkey©Úmoduler   r   Ú
<dictcomp>\
  s    z$_Monkey.__init__.<locals>.<dictcomp>)r»  Ú
to_restoreÚitemsrô  )r   r»  ri   r¹  r.  r   rº  r   rÚ   Z
  s
   ÿz_Monkey.__init__c                 C   r\  r.   r   r´   r   r   r   Ú	__enter__`
  rü   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__c
  s   ÿz_Monkey.__exit__N©r   r   r   rÚ   r¿  rÃ  r   r   r   r   r  X
  s    r  c                   @   r   )r  c                 K   s8   || _ t||ƒ| _| j ¡ | _| j ¡  | j |¡ d S r.   )r»  rI  ÚtargetÚcopyr½  ÚclearÚupdate)r   r»  Úattrnameri   r   r   r   rÚ   j
  s
   
z_MonkeyDict.__init__c                 C   s   | j S r.   )rÅ  r´   r   r   r   r¿  q
  rÞ   z_MonkeyDict.__enter__c                 C   s   | j  ¡  | j  | j¡ d S r.   )rÅ  rÇ  rÈ  r½  )r   rÀ  rÁ  rÂ  r   r   r   rÃ  t
  s   
z_MonkeyDict.__exit__NrÄ  r   r   r   r   r  h
  s    r  )5r  ÚunittestÚzope.interface._compatr   r   rç  r   r   Ú#zope.interface.tests.test_interfacer   r*   r   ÚTestCaser    r8   ra   r«   rÇ   rë   rI  rL  rZ  rd  rƒ  r…  r�  r   r¨  r´  r¿  rÑ  râ  r  r  r4  r7  r=  rL  rN  rU  rX  r`  rf  rk  rm  rx  r’  r”  r§  r¨  r¶  r  r  r   r   r   r   Ú<module>   s„   : LCÿs  Eÿ	-:j@"5;2" >A 1.ÿ")N.?<lÿ	 vÿ	
iþ