o
    Êó·i%? ã                   @   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	 edƒZ
ed	ƒZG d
d„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒ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!ƒ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ƒZG d0d1„ d1eƒ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jƒZ%G d<d=„ d=ejƒZ&G d>d?„ d?ee&eƒZ'G d@dA„ dAejƒZ(G dBdC„ dCe(ƒZ)G dDdE„ dEejƒZ*G dFdG„ dGejƒZ+G dHdI„ dIejƒZ,G dJdK„ dKejƒZ-G dLdM„ dMejƒZ.G dNdO„ dOe.eƒZ/G dPdQ„ dQejƒZ0G dRdS„ dSe0eƒZ1G dTdU„ dUejƒZ2G dVdW„ dWe2eeƒZ3G dXdY„ dYƒZ4G dZd[„ d[ƒZ5dS )\z@Test the new API for making and checking interface declarations
é    N)ÚInterfaceClass)ÚMissingSomeAttrs)ÚOptimizationTestMixin)ÚSubclassableMixin)Ú!NameAndModuleComparisonTestsMixinÚIBarÚIFooc                   @   ó   e Zd ZdS )ÚFooN©Ú__name__Ú
__module__Ú__qualname__© r   r   úlC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\zope/interface/tests/test_declarations.pyr
   !   ó    r
   c                   @   ó   e Zd ZdZdS )ÚFooImplementedNoneN©r   r   r   Ú__implemented__r   r   r   r   r   %   ó    r   c                   @   s   e Zd ZdZdd„ ZdS )Ú	FooNoCallNc                 C   ó   t ƒ ‚©N©ÚNotImplementedError©Úselfr   r   r   Ú__call__,   ó   zFooNoCall.__call__)r   r   r   r   r   r   r   r   r   r   )   s    r   c                   @   s   e Zd Z	ddd„ZdS )Ú_Py3ClassAdviceTc              	   C   s„   dd l }|jdd��.}| ¡  zt|||ƒ W n ty'   Y W d   ƒ dS w |r/|  d¡ 	 W d   ƒ d S 1 s;w   Y  d S )Nr   T)ÚrecordFzDidn't raise TypeError)ÚwarningsÚcatch_warningsÚresetwarningsÚexecÚ	TypeErrorÚfail)r   ÚcodeÚglobsÚlocsZfails_under_py3kr"   Ú_r   r   r   Ú_run_generated_code2   s   ú
$öz#_Py3ClassAdvice._run_generated_codeN)T)r   r   r   r,   r   r   r   r   r    0   s    ÿr    c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
NamedTestsc                 C   s4   ddl m} |dƒG dd„ dƒƒ}|  |jd¡ d S )Nr   ©ÚnamedÚfooc                   @   r	   )z"NamedTests.test_class.<locals>.FooNr   r   r   r   r   r
   I   ó    r
   ©Úzope.interface.declarationsr0   ÚassertEqualZ__component_name__)r   r0   r
   r   r   r   Ú
test_classF   s   ÿzNamedTests.test_classc                 C   s.   ddl m} |dƒdd„ ƒ}|  |jd¡ d S )Nr   r/   r1   c                 S   r   r   r   )Úor   r   r   ÚdoFooT   ó   z'NamedTests.test_function.<locals>.doFoor3   )r   r0   r8   r   r   r   Útest_functionQ   s   
zNamedTests.test_functionc                 C   s>   ddl m} G dd„ dƒ}|ƒ }|dƒ|ƒ |  |jd¡ d S )Nr   r/   c                   @   r	   )z%NamedTests.test_instance.<locals>.FooNr   r   r   r   r   r
   ]   r   r
   r1   r3   )r   r0   r
   r1   r   r   r   Útest_instanceZ   s   ÿzNamedTests.test_instanceN)r   r   r   r6   r:   r;   r   r   r   r   r.   D   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©r4   r?   ©r   r?   r   r   r   Ú	_getEmptyk   s   zEmptyDeclarationTests._getEmptyc                 C   s   |   ¡ }|  t|ƒg ¡ d S r   )rB   r5   Úlist©r   Údeclr   r   r   Útest___iter___emptyo   s   z)EmptyDeclarationTests.test___iter___emptyc                 C   s.   ddl m} |  ¡ }|  t| ¡ ƒ|g¡ d S ©Nr   ©Ú	Interface)Úzope.interface.interfacerI   rB   r5   rC   Ú	flattened©r   rI   rE   r   r   r   Útest_flattened_emptys   s   z*EmptyDeclarationTests.test_flattened_emptyc                 C   s$   ddl m} |  ¡ }|  ||¡ d S rG   )rJ   rI   rB   ÚassertNotInrL   r   r   r   Útest___contains___emptyx   s   z-EmptyDeclarationTests.test___contains___emptyc                 C   s<   ddl m} |  ¡ }|  | |¡¡ |  |j|dd�¡ d S )Nr   rH   T©Ústrict)rJ   rI   rB   Ú
assertTrueÚextendsrL   r   r   r   Útest_extends_empty}   s   z(EmptyDeclarationTests.test_extends_emptyc                 C   s$   |   ¡ }t| ¡ ƒ}|  |g ¡ d S r   )rB   rC   Z
interfacesr5   )r   rE   Z
iface_listr   r   r   Útest_interfaces_emptyƒ   s   z+EmptyDeclarationTests.test_interfaces_emptyc                 C   s*   ddl m} |  ¡ }|  |j||f¡ d S rG   )rJ   rI   rB   r5   Ú__sro__rL   r   r   r   Útest___sro___ˆ   s   z#EmptyDeclarationTests.test___sro___c                 C   s(   ddl m} |  ¡ }|  |j|f¡ d S rG   )rJ   rI   rB   r5   Ú__iro__rL   r   r   r   Útest___iro___�   s   z#EmptyDeclarationTests.test___iro___c                 C   s<   |   ¡ }|  | d¡¡ |  | dd¡d¡ |  |j¡ d S )NÚattrÚabcÚdef)rB   ÚassertIsNoneÚgetr5   ÚassertFalseÚ_v_attrsrD   r   r   r   Útest_get’   s   zEmptyDeclarationTests.test_getc                 C   s*   |   ¡ }tƒ |_| |¡ |  |j¡ d S r   )rB   Úobjectr`   Úchangedr_   rD   r   r   r   Ú test_changed_w_existing__v_attrsš   s   
z6EmptyDeclarationTests.test_changed_w_existing__v_attrsN)r   r   r   rB   rF   rM   rO   rT   rU   rW   rY   ra   rd   r   r   r   r   r=   g   s    r=   c                   @   sÌ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1S )2ÚDeclarationTestsc                 C   ó   ddl m} |S r>   r@   rA   r   r   r   Ú_getTargetClass£   ó   z DeclarationTests._getTargetClassc                 O   ó   |   ¡ |i |¤ŽS r   ©rg   ©r   ÚargsÚkwr   r   r   Ú_makeOne§   ó   zDeclarationTests._makeOnec                 C   s   |   ¡ }|  t|jƒg ¡ d S r   )rn   r5   rC   Ú	__bases__rD   r   r   r   Útest_ctor_no_basesª   s   z#DeclarationTests.test_ctor_no_basesc                 C   s*   t dƒ}|  |¡}|  t|jƒ|g¡ d S ©Nr   )r   rn   r5   rC   rp   ©r   r   rE   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)r4   rw   rn   r5   rC   rp   )r   rw   ÚimplrE   r   r   r   Útest_ctor_w_implements_in_bases³   s   
z0DeclarationTests.test_ctor_w_implements_in_basesc                 C   s"   |   ¡ }| |¡ |  |j¡ d S r   )rn   rc   r]   r`   rD   r   r   r   Ú!test_changed_wo_existing__v_attrs¹   ó   
z2DeclarationTests.test_changed_wo_existing__v_attrsc                 C   s   |   ¡ }|  ||¡ d S r   )rn   rN   rD   r   r   r   Útest___contains__w_self¾   s   z(DeclarationTests.test___contains__w_selfc                 C   s    t dƒ}|  ¡ }|  ||¡ d S rr   )r   rn   rN   rs   r   r   r   Ú"test___contains__w_unrelated_ifaceÂ   s   z3DeclarationTests.test___contains__w_unrelated_ifacec                 C   s"   t dƒ}|  |¡}|  ||¡ d S rr   )r   rn   ÚassertInrs   r   r   r   Ú!test___contains__w_base_interfaceÇ   r{   z2DeclarationTests.test___contains__w_base_interfacec                 C   s(   t dƒ}|  |¡}|  t|ƒ|g¡ d S rr   ©r   rn   r5   rC   rs   r   r   r   Útest___iter___single_baseÌ   s   
z*DeclarationTests.test___iter___single_basec                 C   s4   t dƒ}t dƒ}|  ||¡}|  t|ƒ||g¡ d S ©Nr   r   r€   ©r   r   r   rE   r   r   r   Útest___iter___multiple_basesÑ   s   z-DeclarationTests.test___iter___multiple_basesc                 C   s4   t dƒ}t d|fƒ}|  |¡}|  t|ƒ|g¡ d S r‚   r€   rƒ   r   r   r   Útest___iter___inheritance×   s   
z*DeclarationTests.test___iter___inheritancec                 C   s8   t dƒ}t 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   s:   ddl m} tdƒ}|  |¡}|  t| ¡ ƒ||g¡ d S )Nr   rH   r   ©rJ   rI   r   rn   r5   rC   rK   )r   rI   r   rE   r   r   r   Útest_flattened_single_baseã   s   
z+DeclarationTests.test_flattened_single_basec                 C   sF   ddl m} tdƒ}tdƒ}|  ||¡}|  t| ¡ ƒ|||g¡ d S ©Nr   rH   r   r   r‡   ©r   rI   r   r   rE   r   r   r   Útest_flattened_multiple_basesé   s
   z.DeclarationTests.test_flattened_multiple_basesc                 C   sH   ddl m} tdƒ}td|fƒ}|  |¡}|  t| ¡ ƒ|||g¡ d S r‰   r‡   rŠ   r   r   r   Útest_flattened_inheritanceð   s
   
z+DeclarationTests.test_flattened_inheritancec                 C   sJ   ddl m} tdƒ}t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   sH   t dƒ}t dƒ}|  |¡}|| }|  ||  ¡ ¡ |  t|ƒ|g¡ d S r‚   ©r   rn   ÚassertIsInstancerg   r5   rC   ©r   r   r   ÚbeforeÚafterr   r   r   Ú test___sub___unrelated_interface  s   
z1DeclarationTests.test___sub___unrelated_interfacec                 C   s.   t dƒ}|  |¡}|| }|  t|ƒg ¡ d S rr   r€   )r   r   r‘   r’   r   r   r   Útest___sub___related_interface  s   
z/DeclarationTests.test___sub___related_interfacec                 C   s:   t dƒ}t 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   sJ   t dƒ}t dƒ}|  |¡}|| }|  ||  ¡ ¡ |  t|ƒ||g¡ d S r‚   rŽ   r�   r   r   r   Ú test___add___unrelated_interface  s   
z1DeclarationTests.test___add___unrelated_interfacec                 C   sR   t dƒ}t dƒ}t dƒ}|  ||¡}|  ||¡}|| }|  t|ƒ|||g¡ d S )Nr   r   ÚIBazr€   )r   r   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} tdƒ}td|fƒ}||jjdƒ� |  |¡}|| }W d   ƒ n1 s7w   Y  |  	|j
|||f¡ |  	|j||f¡ |  	t|ƒ||g¡ d S )Nr   rH   ©Úro©Ú	C3SettingÚIBaseÚIDerivedT)Úzope.interfacerI   r›   Úzope.interface.tests.test_ror�   r   ÚC3Ú
STRICT_IROrn   r5   rX   rp   rC   )r   rI   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ƒƒ}||jjdƒ� ||ƒ| }	W d   ƒ n1 sQw   Y  |  	|	j
|	|||f¡ |  	|	j||f¡ |  	t|	ƒ||g¡ d S )Nr   rH   ©ÚimplementedBy©Úimplementerrš   rœ   c                   @   r	   )zPDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IBaseNr   r   r   r   r   rž   I  r   rž   c                   @   r	   )zSDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IDerivedNr   r   r   r   r   rŸ   L  r   rŸ   c                   @   r	   )zODeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.BaseNr   r   r   r   r   ÚBaseO  r2   rª   T)r    rI   r§   r©   r›   r¡   r�   r¢   r£   r5   rV   rp   rC   )
r   rI   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   rg   rn   rq   rt   ry   rz   r|   r}   r   r�   r„   r…   r†   rˆ   r‹   rŒ   r�   r“   r”   r•   r–   r™   r¥   r«   r   r   r   r   re   ¡   s2    	re   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   rf   )Nr   )Ú_ImmutableDeclaration)r4   r­   )r   r­   r   r   r   rg   ]  rh   z(TestImmutableDeclaration._getTargetClassc                 C   rf   )Nr   )Ú_empty)r4   r®   )r   r®   r   r   r   rB   a  rh   z"TestImmutableDeclaration._getEmptyc                 C   s0   dd l }| | |  ¡ ¡¡}|  ||  ¡ ¡ d S )Nr   )ÚpickleÚloadsÚdumpsrB   ÚassertIs)r   r¯   Úcopiedr   r   r   Útest_picklee  s   z$TestImmutableDeclaration.test_picklec                 C   s   |   |  ¡ ƒ |  ¡ ¡ d S r   )r²   rg   rB   r   r   r   r   Útest_singletonj  s   þz'TestImmutableDeclaration.test_singletonc                 C   s   |   |  ¡ jd¡ d S )Nr   )r5   rB   rp   r   r   r   r   Útest__bases__p  s   z&TestImmutableDeclaration.test__bases__c                 C   sV   |   ¡ }d|_|  |   ¡ jd¡ |  t¡� d|_W d   ƒ d S 1 s$w   Y  d S )Nr   )é   )rB   rp   r5   ÚassertRaisesr&   )r   Úemptyr   r   r   Útest_change__bases__s  s   "ÿz-TestImmutableDeclaration.test_change__bases__c                 C   s4   |   ¡ }|j}|  i |¡ d|d< |  i |j¡ d S )Né   r·   )rB   Z
dependentsr5   )r   r¹   Údepsr   r   r   Útest_dependents{  s
   z(TestImmutableDeclaration.test_dependentsc                 C   s   |   ¡  d ¡ d S r   )rB   rc   r   r   r   r   Útest_changedƒ  s   z%TestImmutableDeclaration.test_changedc                 C   sH   |   |  ¡  | ¡¡ |   |  ¡ j| dd�¡ |   |  ¡ j| dd�¡ d S )NTrP   F)r_   rB   rS   r   r   r   r   Útest_extends_always_false‡  s   z2TestImmutableDeclaration.test_extends_always_falsec                 C   s0   |   |  ¡  d¡¡ |  |  ¡  dd¡d¡ d S )NÚnameé*   )r]   rB   r^   r5   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Á   rZ   )rB   r5   r`   r]   r^   )r   rE   Úattrsr   r   r   Útest_v_attrs�  s   

z%TestImmutableDeclaration.test_v_attrsN)r   r   r   rg   rB   r´   rµ   r¶   rº   r½   r¾   r¿   rÂ   rÄ   r   r   r   r   r¬   [  s    r¬   c                   @   r<   )ÚTestImplementsc                 C   rf   ru   )r4   rw   )r   rw   r   r   r   rg   ¡  rh   zTestImplements._getTargetClassc                 O   ri   r   rj   rk   r   r   r   rn   ¥  ro   zTestImplements._makeOnec                 C   s"   ddl m} G dd„ dƒ}||ƒS )Nr   r¦   c                   @   r	   )z+TestImplements._makeOneToCompare.<locals>.ANr   r   r   r   r   ÚA«  r   rÆ   ©r4   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   ú?)rn   r5   ÚinheritÚdeclaredr   rC   rp   ©r   rx   r   r   r   rq   °  s
   z!TestImplements.test_ctor_no_basesc                 C   s"   |   ¡ }d|_|  t|ƒd¡ d S )NZTestingzclassImplements(Testing))rn   r   r5   Ú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   )r4   r§   rn   r5   Ú
__reduce__)r   r§   rx   r   r   r   Útest___reduce__¼  s   zTestImplements.test___reduce__c                 C   sÜ   ddl m} G dd„ dƒ}G dd„ dƒ}tdƒ}|  ||ƒ||ƒ¡ |  t||ƒƒt||ƒƒ¡ |  ||ƒd ¡ |  d ||ƒ¡ |  ||ƒ||ƒ¡ |  ||ƒ|¡ |  ||ƒ||ƒ¡ |  ||ƒ|¡ |  	||ƒ|¡ d S )Nr   r¦   c                   @   r	   )z#TestImplements.test_sort.<locals>.ANr   r   r   r   r   rÆ   Ä  r   rÆ   c                   @   r	   )z#TestImplements.test_sort.<locals>.BNr   r   r   r   r   ÚBÇ  r   rÑ   r   )
r4   r§   r   r5   ÚhashZ
assertLessZassertGreaterÚassertLessEqualZassertGreaterEqualÚassertNotEqual)r   r§   rÆ   rÑ   r   r   r   r   Ú	test_sortÁ  s    þzTestImplements.test_sortc                 C   s¾   ddl m} G dd„ dƒ}G dd„ dƒ}G dd„ dƒ}||ƒ}||ƒ}||ƒ}|  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ d S )	Nr   r¦   c                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z1TestImplements.test_proxy_equality.<locals>.Proxyc                 S   s
   || _ d S r   ©Z_wrapped)r   Úwrappedr   r   r   Ú__init__Þ  ó   
z:TestImplements.test_proxy_equality.<locals>.Proxy.__init__c                 S   r   r   r   ©r   rÀ   r   r   r   Ú__getattr__á  r   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à   c                   @   r	   )z-TestImplements.test_proxy_equality.<locals>.ANr   r   r   r   r   rÆ   ê  r   rÆ   c                   @   r	   )z-TestImplements.test_proxy_equality.<locals>.BNr   r   r   r   r   rÑ   í  r   rÑ   )r4   r§   r5   rÔ   )r   r§   rà   rÆ   rÑ   ZimplementedByAZ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Á   )rn   r]   rã   rN   Ú__dict__r~   rc   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ã   )rn   r]   rã   rN   rä   rc   rÌ   r   r   r   Ú%test_changed_does_not_add_super_cache  s   
z4TestImplements.test_changed_does_not_add_super_cacheN)r   r   r   rg   rn   rÈ   rq   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   rf   )Nr   )ÚimplementedByFallback)r4   rè   )r   rè   r   r   r   rg     ó   z*Test_implementedByFallback._getTargetClassc                 O   ri   r   rj   rk   r   r   r   Ú_callFUT$  ro   z#Test_implementedByFallback._callFUTc                 C   s4   G dd„ dƒ}|ƒ }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©r   N©r   r   r   Ú	__slots__r   r   r   r   r
   (  r   r
   )r   r5   rC   rê   ©r   r
   r1   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| 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_impl1  r   zrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._get_implc                 S   ó   t ‚r   )r&   )r   Úvalr   r   r   Ú	_set_impl4  ó   zrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._set_implc                 S   r   r   r   r   r   r   r   r   9  r9   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
   0  s
    
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   sv   ddl m} G dd„ dƒ}|ƒ }d |_tƒ }t|dƒ�}|||< |  |  |¡|¡ W d   ƒ d S 1 s4w   Y  d S )Nr   ©Údeclarationsc                   @   rë   )z\Test_implementedByFallback.test_dictless_wo_existing_Implements_w_registrations.<locals>.Foorì   Nrí   r   r   r   r   r
   C  r   r
   Ú#BuiltinImplementationSpecifications)r    rû   r   rb   Ú_MonkeyDictr²   rê   )r   rû   r
   r1   ÚregÚspecsr   r   r   Ú4test_dictless_wo_existing_Implements_w_registrations@  s   ÿ"ýzOTest_implementedByFallback.test_dictless_wo_existing_Implements_w_registrationsc                 C   sB   ddl m} |ƒ }G dd„ dƒ}|ƒ }||_|  |  |¡|¡ d S )Nr   rv   c                   @   rë   )zKTest_implementedByFallback.test_dictless_w_existing_Implements.<locals>.Foorì   Nrí   r   r   r   r   r
   R  r   r
   )r4   rw   r   r²   rê   )r   rw   rx   r
   r1   r   r   r   Ú#test_dictless_w_existing_ImplementsN  s   z>Test_implementedByFallback.test_dictless_w_existing_Implementsc                 C   s@   G dd„ dƒ}|ƒ }t dƒ}|f|_|  t|  |¡ƒ|g¡ d S )Nc                   @   rë   )zOTest_implementedByFallback.test_dictless_w_existing_not_Implements.<locals>.Foorì   Nrí   r   r   r   r   r
   [  r   r
   r   )r   r   r5   rC   rê   )r   r
   r1   r   r   r   r   Ú'test_dictless_w_existing_not_ImplementsY  s
   zBTest_implementedByFallback.test_dictless_w_existing_not_Implementsc                    ó:   ddl m} |ƒ ‰ G ‡ fdd„dƒ}|  |  |¡ˆ ¡ d S )Nr   rv   c                       ó   e Zd Z” ZdS )zJTest_implementedByFallback.test_w_existing_attr_as_Implements.<locals>.FooNr   r   ©rx   r   r   r
   g  r   r
   ©r4   rw   r²   rê   ©r   rw   r
   r   r  r   Ú"test_w_existing_attr_as_Implementsc  ó   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ú   rv   rü   zclassImplements(%s))r    rû   r4   rw   rý   r5   rC   rê   ÚtupleÚdictr�   rÍ   r   )r   rû   rw   rÿ   ÚtypÚspecr   r   r   Útest_builtins_added_to_cachel  s&   ÿ
ÿÿý"ûz7Test_implementedByFallback.test_builtins_added_to_cachec                 C   s    ddl m} tƒ tƒ tƒ }}}t|dƒ�0}||t< ||t< ||t< |  |  t¡|¡ |  |  t¡|¡ |  |  t¡|¡ W d   ƒ d S 1 sIw   Y  d S )Nr   rú   rü   )	r    rû   rb   rý   r
  rC   r  r²   rê   )r   rû   Zt_specZl_specZd_specrÿ   r   r   r   Útest_builtins_w_existing_cache{  s   ÿ"ùz9Test_implementedByFallback.test_builtins_w_existing_cachec                 C   ó(   G dd„ dƒ}|   t|  |¡ƒg ¡ d S )Nc                   @   r	   )zITest_implementedByFallback.test_oldstyle_class_no_assertions.<locals>.FooNr   r   r   r   r   r
   Š  r   r
   ©r5   rC   rê   ©r   r
   r   r   r   Ú!test_oldstyle_class_no_assertions‡  ó   z<Test_implementedByFallback.test_oldstyle_class_no_assertionsc                 C   r  )Nc                   @   r	   )z:Test_implementedByFallback.test_no_assertions.<locals>.FooNr   r   r   r   r   r
   ’  r   r
   r  r  r   r   r   Útest_no_assertions�  r  z-Test_implementedByFallback.test_no_assertionsc                 C   rñ   )Nc                   @   r   )zHTest_implementedByFallback.test_w_None_no_bases_not_factory.<locals>.FooNr   r   r   r   r   r
   ™  r   r
   rø   rï   r   r   r   Ú test_w_None_no_bases_not_factory—  s   z;Test_implementedByFallback.test_w_None_no_bases_not_factoryc                 C   sx   ddl m} ddlm} |ƒ }d|_|  |¡}|  |jd¡ |  |j|¡ |  |j	|¡ |  |j
|¡ |  d|j¡ d S )Nr   )ÚobjectSpecificationDescriptor)r   r1   z*zope.interface.tests.test_declarations.fooÚ__provides__)r4   r  Ú&zope.interface.tests.test_declarationsr   r   rê   r5   r²   rÊ   r   Ú__providedBy__rN   rä   )r   r  r   r1   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} ddlm} |  |¡}|  |jd¡ |  |j|¡ |  |j	|¡ |  
|j|¡ |  
|j|¡ |  |j|j¡ d S )Nr   ©ÚClassProvides)r   z9zope.interface.tests.test_declarations.FooImplementedNone)r4   r  r  r   rê   r5   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   rv   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	ƒƒ}||ƒG d
d„ d|ƒƒ}|  t|  |¡ƒ||g¡ t||ƒ}|  t|  |¡ƒ|g¡ d S )Nr   rH   r¨   c                   @   r	   )zSTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr   r   r   r   r   rž   Ð  r   rž   c                   @   r	   )zVTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr   r   r   r   r   rŸ   Ó  r   rŸ   c                   @   r	   )zRTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr   r   r   r   r   rª   Ö  r2   rª   c                   @   r	   )zUTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr   r   r   r   r   ÚDerivedÚ  r2   r   ©r    rI   r4   r©   r5   rC   rê   Úsuper©r   rI   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	ƒƒ}G d
d„ d|ƒ}G dd„ d|ƒ}||ƒG dd„ d||ƒƒ}|  t|  |¡ƒ||g¡ t||ƒ}	|  t|  |	¡ƒ|g¡ d S )Nr   rH   r¨   c                   @   r	   )z[Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IBaseNr   r   r   r   r   rž   æ  r   rž   c                   @   r	   )z^Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IDerivedNr   r   r   r   r   rŸ   é  r   rŸ   c                   @   r	   )zZTest_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.BaseNr   r   r   r   r   rª   ì  r2   rª   c                   @   r	   )z\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child1Nr   r   r   r   r   ÚChild1ð  r   r(  c                   @   r	   )z\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child2Nr   r   r   r   r   ÚChild2ó  r   r)  c                   @   r	   )z]Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.DerivedNr   r   r   r   r   r   ö  r2   r   r!  )
r   rI   r©   rž   rŸ   rª   r(  r)  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	ƒ}G d
d„ d|ƒ}||ƒG dd„ d|ƒƒ}||ƒG dd„ d||ƒƒ}|  |j||||tf¡ |  t|  |¡ƒ||g¡ t	||ƒ}	|  |	¡}
|  t|
ƒ|g¡ |  
|
j¡ d S )Nr   rH   r¨   c                   @   r	   )z]Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IBaseNr   r   r   r   r   rž     r   rž   c                   @   r	   )z`Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IDerivedNr   r   r   r   r   rŸ     r   rŸ   c                   @   r	   )z\Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.BaseNr   r   r   r   r   rª     r   rª   c                   @   r	   )z^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child1Nr   r   r   r   r   r(    r   r(  c                   @   r	   )z^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child2Nr   r   r   r   r   r)    r2   r)  c                   @   r	   )z_Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.DerivedNr   r   r   r   r   r     r2   r   )r    rI   r4   r©   r5   Ú__mro__rb   rC   rê   r"  r]   Ú_dependents)r   rI   r©   rž   rŸ   rª   r(  r)  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	ƒ}||ƒG d
d„ d|ƒƒ}|  t|  |¡ƒ|g¡ t||ƒ}|  t|  |¡ƒg ¡ d S )Nr   rH   r¨   c                   @   r	   )zYTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr   r   r   r   r   rž   #  r   rž   c                   @   r	   )z\Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr   r   r   r   r   rŸ   &  r   rŸ   c                   @   r	   )zXTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr   r   r   r   r   rª   )  r   rª   c                   @   r	   )z[Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr   r   r   r   r   r   ,  r2   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|  |¡ƒ|g¡ t||ƒ}|  t|  |¡ƒg ¡ d S )
Nr   rH   r¨   c                   @   r	   )zHTest_implementedByFallback.test_super_when_base_is_object.<locals>.IBaseNr   r   r   r   r   rž   9  r   rž   c                   @   r	   )zKTest_implementedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr   r   r   r   r   rŸ   <  r   rŸ   c                   @   r	   )zJTest_implementedByFallback.test_super_when_base_is_object.<locals>.DerivedNr   r   r   r   r   r   ?  r2   r   r!  )r   rI   r©   rž   rŸ   r   r$  r%  r   r   Útest_super_when_base_is_object5  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ƒƒ}||ƒ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   rH   r¨   c                   @   r	   )zRTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr   r   r   r   r   rž   L  r   rž   c                   @   r	   )zPTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr   r   r   r   r   ÚIM1O  r   r1  c                   @   r	   )zPTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr   r   r   r   r   ÚIM2R  r   r2  c                   @   r	   )zUTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr   r   r   r   r   rŸ   U  r   rŸ   c                   @   r	   )zWTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr   r   r   r   r   Ú
IUnrelatedX  r   r3  c                   @   r	   )zQTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr   r   r   r   r   rª   [  r2   rª   c                   @   r	   )zOTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr   r   r   r   r   ÚM1_  r2   r4  c                   @   r	   )zOTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr   r   r   r   r   ÚM2c  r2   r5  c                   @   r	   )zTTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr   r   r   r   r   r   g  r2   r   ©r    rI   r4   r©   r"  r5   rC   rê   ©r   rI   r©   rž   r1  r2  rŸ   r3  rª   r4  r5  r   ÚdÚsdZsm1Zsm2r%  r   r   Ú(test_super_multi_level_multi_inheritanceH  s>   


ÿÿÿÿzCTest_implementedByFallback.test_super_multi_level_multi_inheritance)r   r   r   rg   Ú_getFallbackClassrê   rð   rù   r   r  r  r  r  r  r  r  r  r  r  r  r'  r*  r.  r/  r0  r:  Ú__classcell__r   r   r%  r   rç     s0    
		!rç   c                   @   ó   e Zd Zdd„ ZdS )ÚTest_implementedByc                 C   rf   )Nr   r¦   rÇ   )r   r§   r   r   r   rg   ~  rh   z"Test_implementedBy._getTargetClassN©r   r   r   rg   r   r   r   r   r>  z  ó    r>  c                   @   s4   e Zd ZdZdd„ Zde d df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} tdƒ}|  ||¡}|  ||¡ |j}|d ur#|  ||¡ |  |j|¡ |dkr0|n|}|  |j|¡ |  |j|¡ | j	rY|  
|j|¡ |  
|j|¡ |  |j|j¡ ||fS )Nr   r  r   rE  )r4   r  r   rê   r²   r   r5   r   rÊ   ÚFUT_SETS_PROVIDED_BYr�   r  r  )	r   r
   Z	orig_specZ	spec_namerÊ   r  r   Úreturnedr  r   r   r   Ú_check_implementerŠ  s$   ÿz'_ImplementsTestMixin._check_implementerc                 C   ó   G dd„ dƒ}|   |¡ d S )Nc                   @   r	   )z,_ImplementsTestMixin.test_class.<locals>.FooNr   r   r   r   r   r
   ¦  r   r
   )rH  r  r   r   r   r6   ¤  ó   z_ImplementsTestMixin.test_class)r   r   r   rF  rê   rH  r6   r   r   r   r   rA  ƒ  s    
ýrA  c                   @   s0   e Zd Z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)r4   rL  )r   rB  rC  rL  r   r   r   rê   ¯  s   
z!Test_classImplementsOnly._callFUTc                    s€   ddl m} tdƒ}tdƒ}||ƒ‰ |fˆ _G ‡ fdd„dƒ}|ˆ _|  ||¡ |  |jˆ ¡ |  ˆ jd ¡ |  ˆ j|f¡ d S )Nr   rv   r   r   c                       r  )z@Test_classImplementsOnly.test_w_existing_Implements.<locals>.FooNr   r   r  r   r   r
   »  r   r
   )	r4   rw   r   rË   rÊ   rê   r²   r   r5   ©r   rw   r   r   r
   r   r  r   r  ´  s   z3Test_classImplementsOnly.test_w_existing_Implementsc                    sD   ddl m} tdƒ}||ƒ‰ G ‡ fdd„dƒ}| j|ˆ dd d� d S )Nr   rv   r   c                       r  )z0Test_classImplementsOnly.test_class.<locals>.FooNr   r   ©Zold_specr   r   r
   Ê  r   r
   rÉ   ©rÊ   )r4   rw   r   rH  )r   rw   r   r
   r   rN  r   r6   Å  s
   z#Test_classImplementsOnly.test_classc                 C   sL   | j tdtfi ƒd d�\}}G dd„ d|ƒ}|  ||¡ |  | |¡¡ d S )Nr
   rO  c                   @   r	   )zRTest_classImplementsOnly.test_redundant_with_super_still_implements.<locals>.ChildNr   r   r   r   r   ÚChildÕ  r   rP  )rH  Útyperb   rê   rR   r§   )r   rª   rž   rP  r   r   r   Ú*test_redundant_with_super_still_implementsÏ  s   
þzCTest_classImplementsOnly.test_redundant_with_super_still_implementsN)r   r   r   rF  rê   r  r6   rR  r   r   r   r   rK  ¬  s    
rK  c                   @   óD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTest_classImplementsc                 C   ó$   ddl m} |||ƒ}|  |¡ |S )Nr   ©ÚclassImplements)r4   rW  r]   )r   rB  rC  rW  Ú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   rP  ë  r   rP  r   r  r  r   )rH  rê   r~   rä   rN   r   r5   rË   rÊ   rR   Ú
providedBy)r   rª   rž   rP  rG  r  r   r   r   Z__check_implementer_redundantæ  s   z2Test_classImplements.__check_implementer_redundantc                 C   rI  )Nc                   @   r	   )zUTest_classImplements.test_redundant_implementer_empty_class_declarations.<locals>.FooNr   r   r   r   r   r
   û  r   r
   )Ú2_Test_classImplements__check_implementer_redundantr  r   r   r   Ú3test_redundant_implementer_empty_class_declarationsù  rJ  zHTest_classImplements.test_redundant_implementer_empty_class_declarationsc                 C   sÆ   ddl m} ddl m} ddl m} ddlm} G dd„ dƒ}||jjdƒ�3 |  ||¡ |  	t
||ƒƒ|g¡ G d	d
„ d
|ƒ}|  ||¡ |  	t
||ƒƒ|g¡ W d   ƒ d S 1 s\w   Y  d S )Nr   rH   r¦   rš   rœ   c                   @   r	   )zFTest_classImplements.test_redundant_implementer_Interface.<locals>.FooNr   r   r   r   r   r
     r   r
   Fc                   @   r	   )zFTest_classImplements.test_redundant_implementer_Interface.<locals>.BazNr   r   r   r   r   ÚBaz  r   r]  )r    rI   r§   r›   r¡   r�   r¢   r£   rê   r5   rC   )r   rI   r§   r›   r�   r
   r]  r   r   r   Ú$test_redundant_implementer_Interface   s   "øz9Test_classImplements.test_redundant_implementer_Interfacec                 C   s   ||fS r   r   ©r   Zapplied_firstZapplied_secondr   r   r   Ú_order_for_two  ó   z#Test_classImplements._order_for_twoc                    s†   ddl m} tdƒ}tdƒ}||ƒ‰ |fˆ _G ‡ fdd„dƒ}|ˆ _|  ||¡ |  |jˆ ¡ |  ˆ j|¡ |  ˆ j|  	||¡¡ d S )Nr   rv   r   r   c                       r  )z<Test_classImplements.test_w_existing_Implements.<locals>.FooNr   r   r  r   r   r
     r   r
   )
r4   rw   r   rË   rÊ   rê   r²   r   r5   r`  rM  r   r  r   r    s   
ÿz/Test_classImplements.test_w_existing_Implementsc                    sî   ddl m} tdƒ}tdƒ}td|fƒ}| d|¡‰|fˆ_G ‡fdd„dƒ}G ‡fd	d
„d
ƒ}| d|¡‰ |fˆ _G ‡ fdd„d||ƒ}|ˆ _|  ||¡ |  |jˆ ¡ |  	ˆ j|¡ |  	ˆ j|  
||¡¡ |  	ˆ j|  
||¡ˆf ¡ d S )Nr   rv   ÚIRootÚISecondRootÚIExtendsRootZRootc                       r  )zFTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root1Nr   r   ©Ú	impl_rootr   r   ÚRoot11  r   rg  c                       r  )zFTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root2Nr   r   re  r   r   ÚRoot24  r   rh  ZExtendsRoot1c                       r  )zLTest_classImplements.test_w_existing_Implements_w_bases.<locals>.ExtendsRootNr   r   )Úimpl_extends_rootr   r   ÚExtendsRoot:  r   rj  )r4   rw   r   r0   rË   rÊ   rê   r²   r   r5   r`  rp   )r   rw   rb  rc  rd  rg  rh  rj  r   )ri  rf  r   Ú"test_w_existing_Implements_w_bases(  s,   
ÿþz7Test_classImplements.test_w_existing_Implements_w_basesN)
r   r   r   rê   r[  r\  r^  r`  r  rk  r   r   r   r   rT  Ü  s    rT  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚTest_classImplementsFirstc                 C   rU  )Nr   )ÚclassImplementsFirst)r4   rn  r]   )r   rB  rC  rn  rX  r   r   r   rê   M  rY  z"Test_classImplementsFirst._callFUTc                 C   s   ||fS r   r   r_  r   r   r   r`  U  ra  z(Test_classImplementsFirst._order_for_twoN)r   r   r   rê   r`  r   r   r   r   rm  K  s    rm  c                   @   rl  )ÚTest__implements_advicec                 O   ó   ddl m} ||i |¤ŽS )Nr   )Ú_implements_advice)r4   rq  )r   rl   rm   rq  r   r   r   rê   [  ó   z Test__implements_advice._callFUTc                    sr   ddl m} ddl m‰ tdƒ‰ G ‡ ‡fdd„dƒ}|  |¡ |  d|j¡ |  |j|¡ |  	t
|jƒˆ g¡ d S )Nr   rv   rV  r   c                       s   e Zd Z” f”fZdS )z@Test__implements_advice.test_no_existing_implements.<locals>.FooN)r   r   r   Ú__implements_advice_data__r   ©r   rW  r   r   r
   d  s    r
   rs  )r4   rw   rW  r   rê   rN   rä   r�   r   r5   rC   r  r   rt  r   Útest_no_existing_implements_  s   
ÿÿz3Test__implements_advice.test_no_existing_implementsN)r   r   r   rê   ru  r   r   r   r   ro  Y  s    ro  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   rf   )Nr   r¨   )r4   r©   )r   r©   r   r   r   rg   s  rh   z Test_implementer._getTargetClassc                 O   ri   r   rj   rk   r   r   r   rn   w  ro   zTest_implementer._makeOnec                 G   s   | j |Ž }||ƒS r   ©rn   )r   rB  ZifacesÚ	decoratorr   r   r   rê   z  ó   
zTest_implementer._callFUTc                 C   s&   t dƒ}|  |¡}|  t|tƒ ¡ d S rr   )r   rn   r¸   r&   rb   )r   r   ry  r   r   r   Ú test_nonclass_cannot_assign_attr~  s   
z1Test_implementer.test_nonclass_cannot_assign_attrc                 C   sj   t dƒ}ddlm} |ƒ }|  |¡}||ƒ}|  ||¡ |j}|  |jd¡ |  |j	¡ |  |j|¡ d S )Nr   r   ©r
   z(zope.interface.tests.test_declarations.?)
r   r  r
   rn   r²   r   r5   r   r]   rÊ   )r   r   r
   r1   ry  rG  r  r   r   r   Útest_nonclass_can_assign_attrƒ  s   
ÿz.Test_implementer.test_nonclass_can_assign_attrc                 C   sp   dd l }tdƒ}t| ¡ ƒ}tdƒD ]}G dd„ dƒ}|  ||¡ q| ¡  t| ¡ ƒ}d}|  ||| ¡ d S )Nr   r   il  c                   @   r	   )zHTest_implementer.test_does_not_leak_on_unique_classes.<locals>.TestClassNr   r   r   r   r   Ú	TestClassž  r   r~  )Úgcr   ÚlenZget_objectsÚrangerê   ZcollectrÓ   )r   r  r   Zbegin_countr+   r~  Z	end_countZfudge_factorr   r   r   Ú$test_does_not_leak_on_unique_classes‘  s   z5Test_implementer.test_does_not_leak_on_unique_classesN)	r   r   r   rg   rn   rê   r{  r}  r‚  r   r   r   r   rw  q  s    rw  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   rf   )Nr   )Úimplementer_only)r4   r…  )r   r…  r   r   r   rg   ±  rh   z%Test_implementer_only._getTargetClassc                 O   ri   r   rj   rk   r   r   r   rn   µ  ro   zTest_implementer_only._makeOnec                 C   s   |   |¡}||ƒS r   rx  )r   rB  rC  ry  r   r   r   rê   ¸  rz  zTest_implementer_only._callFUTc                 C   s,   t dƒ}|  |¡}dd„ }|  t||¡ d S )Nr   c                   S   r   r   r   r   r   r   r   Ú	_functionÀ  r   z6Test_implementer_only.test_function.<locals>._function)r   rn   r¸   Ú
ValueError)r   r   ry  r†  r   r   r   r:   ¼  s   
z#Test_implementer_only.test_functionc                 C   s4   t dƒ}|  |¡}G dd„ dƒ}|  t||j¡ d S )Nr   c                   @   r=  )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‰  )r   rn   r¸   r‡  rˆ  )r   r   ry  r‰  r   r   r   Útest_methodÅ  s   
z!Test_implementer_only.test_methodN)r   r   r   rg   rn   rê   r:   r‹  r   r   r   r   r„  ¯  s    	r„  c                   @   rv  )ÚProvidesClassTestsc                 C   rf   ©Nr   ©ÚProvidesClass©r4   r�  ©r   r�  r   r   r   rg   Ò  rh   z"ProvidesClassTests._getTargetClassc                 O   ri   r   rj   rk   r   r   r   rn   Ö  ro   zProvidesClassTests._makeOnec                 C   s8   t dƒ}G dd„ dƒ}|  ||¡}|  t|ƒ|g¡ d S )Nr   c                   @   r	   )z?ProvidesClassTests.test_simple_class_one_interface.<locals>.FooNr   r   r   r   r   r
   Ü  r   r
   r€   ©r   r   r
   r  r   r   r   Útest_simple_class_one_interfaceÙ  s   z2ProvidesClassTests.test_simple_class_one_interfacec                 C   sZ   ddl m} tdƒ}G dd„ dƒ}|  ||¡}| ¡ \}}|  ||¡ |  |||f¡ d S )Nr   ©ÚProvidesr   c                   @   r	   )z/ProvidesClassTests.test___reduce__.<locals>.FooNr   r   r   r   r   r
   æ  r   r
   )r4   r•  r   rn   rÏ   r²   r5   )r   r•  r   r
   r  Úklassrl   r   r   r   rÐ   â  s   z"ProvidesClassTests.test___reduce__c                 C   s:   t dƒ}G dd„ dƒ}|  ||¡}||_|  |j|¡ d S )Nr   c                   @   r	   )z2ProvidesClassTests.test___get___class.<locals>.FooNr   r   r   r   r   r
   ñ  r   r
   ©r   rn   r  r²   r’  r   r   r   Útest___get___classî  s
   z%ProvidesClassTests.test___get___classc                    sD   t dƒ}G dd„ dƒ‰ |  ˆ |¡}|ˆ _‡ fdd„}|  t|¡ d S )Nr   c                   @   r	   )z5ProvidesClassTests.test___get___instance.<locals>.FooNr   r   r   r   r   r
   û  r   r
   c                     s   ˆ ƒ } | j S r   )r  )r1   r|  r   r   Ú_test  s   z7ProvidesClassTests.test___get___instance.<locals>._test)r   rn   r  r¸   ÚAttributeError)r   r   r  r™  r   r|  r   Útest___get___instanceø  s   z(ProvidesClassTests.test___get___instanceN)	r   r   r   rg   rn   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 ƒ  ¡ ‰ 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_mrosrQ   ©Ú_do_calculate_ro©r   r¢  rŽ  r   r   r¤    ó   ÿzQProvidesClassStrictTests._getTargetClass.<locals>.StrictProvides._do_calculate_roN©r   r   r   r¤  r   rŽ  r   r   ÚStrictProvides  ó    r¨  ©r"  rg   )r   r¨  r%  rŽ  r   rg     ó   
z(ProvidesClassStrictTests._getTargetClassc                 C   sz   ddl m} ddl m} ddl m} G dd„ d|ƒ}||ƒG dd„ dƒƒ}|  ||¡}|  |j|||ƒ||tƒ|f¡ d S )	Nr   rH   r¦   r¨   c                   @   r	   )zMProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr   r   r   r   r   rž     r   rž   c                   @   r	   )zLProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.BaseNr   r   r   r   r   rª      r2   rª   )r    rI   r§   r©   rn   r5   rV   rb   )r   rI   r§   r©   rž   rª   r  r   r   r   Ú%test_overlapping_interfaces_corrected  s   
ûz>ProvidesClassStrictTests.test_overlapping_interfaces_corrected©r   r   r   rg   r¬  r<  r   r   r%  r   r�    ó    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   rf   r�  r�  r‘  r   r   r   rg   0  rh   z%TestProvidesClassRepr._getTargetClassc                 O   ri   r   rj   rk   r   r   r   rn   4  ro   zTestProvidesClassRepr._makeOnec                 C   sj   t dƒ}|jdksJ ‚|jtksJ ‚t|ƒdt› d�ksJ ‚t dƒ}|  t| ƒ||¡}|  t|ƒd¡ d S )Nr   z<InterfaceClass z.IFoo>r   z3directlyProvides(TestProvidesClassRepr, IFoo, IBar))r   r   r   rÍ   rn   rQ  r5   )r   r   r   Úinstr   r   r   Útest__repr__7  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  r5   rÍ   )r   r³  Úprovidesr   r   r   Ú'test__repr__module_provides_typical_useE  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   ƒ q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_pickleQ  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lm} |j	}|`	|  
t|d|¡ |||ƒ |j	}|  t|ƒd¡ |||ƒ |j	}|  t|ƒd	¡ dd
lm}	 t|	dƒr\J ‚||	||ƒ |  
t|	d¡ |  |	j	|¡ |  t|ƒd¡ d S )Nr   ©ÚalsoProvides©ÚdirectlyProvidesr²  )r   )r   r  zAdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IFoo)zGdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IFoo, IBar))Útest_declarationszfdirectlyProvides(('zope.interface.tests.dummy', 'zope.interface.tests.test_declarations'), IFoo, IBar))Úsysr4   r¼  r¾  r´  r³  r  r   r   r  Z
addCleanupÚsetattrr5   rÍ   r¿  ÚhasattrÚdelattrr²   )
r   rÀ  r¼  r¾  r³  r   r   Zorig_providesrµ  Z	my_moduler   r   r   Ú#test__repr__directlyProvides_module[  s<   
þ
þ	þz9TestProvidesClassRepr.test__repr__directlyProvides_modulec                 C   sP   ddl m} tdƒ}|  ||¡}| jd7  _| jd7  _|  t|ƒd¡ d S )Nr   )Ú
ModuleTyper   )zsome.module)zanother.modulez9directlyProvides(('some.module', 'another.module'), IFoo))r4   rÅ  r   rn   Z_v_module_namesr5   rÍ   )r   rÅ  r   r°  r   r   r   Ú)test__repr__module_provides_cached_shared‰  s   þz?TestProvidesClassRepr.test__repr__module_provides_cached_sharedc                 C   sH   t ddd�}t ddd�}t dƒ}|  t| ƒ|||¡}|  t|ƒd¡ d S )Nr   Úmod1©r   Úmod2r—   z>directlyProvides(TestProvidesClassRepr, IFoo, IBaz, mod2.IFoo)©r   rn   rQ  r5   rÍ   ©r   r   ZIFoo2r—   r°  r   r   r   Útest__repr__duplicate_names•  s   þz1TestProvidesClassRepr.test__repr__duplicate_namesc                 C   sd   ddl m} ddl m} G dd„ d|ƒ}G dd„ dƒ}|t| ƒƒ}|  |||¡}|  t|ƒd¡ d S )	Nr   rH   r¦   c                   @   rë   )zKTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.IFooúDoes nothingN©r   r   r   Ú__doc__r   r   r   r   r   ¤  r   r   c                   @   rë   )zJTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.BarrÍ  NrÎ  r   r   r   r   r‰  §  r   r‰  zCdirectlyProvides(Bar, IFoo, classImplements(TestProvidesClassRepr)))r    rI   r§   rQ  rn   r5   rÍ   )r   rI   r§   r   r‰  rx   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)©rn   rQ  r5   rÍ   ©r   r°  r   r   r   Útest__repr__empty_interfaces´  s
   þz2TestProvidesClassRepr.test__repr__empty_interfacesc                    s>   ‡ fdd„‰G ‡fdd„dƒ}ˆ   |ƒ ¡}ˆ  t|ƒd¡ d S )Nc                      s   ˆ   d¡ d S )NzShould not call str)r'   r   r   r   r   Ústr___dont_call_me½  s   zGTestProvidesClassRepr.test__repr__non_class.<locals>.str___dont_call_mec                       s   e Zd ZdZ” Zdd„ ZdS )z;TestProvidesClassRepr.test__repr__non_class.<locals>.Objectr   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   rp   Ú__str__rÕ  r   )rÔ  r   r   ÚObjectÀ  s    r×  zdirectlyProvides(<Object>))rn   r5   rÍ   )r   r×  r°  r   )r   rÔ  r   Útest__repr__non_class»  s   þz+TestProvidesClassRepr.test__repr__non_classc                 C   sT   ddl m} ddl m} tdƒ}||ƒG dd„ dƒƒ}||ƒ ƒ}|  t|ƒd¡ d S )Nr   r¨   ©rZ  r   c                   @   r	   )zDTestProvidesClassRepr.test__repr__providedBy_from_class.<locals>.FooNr   r   r   r   r   r
   Ò  r2   r
   úclassImplements(Foo, IFoo))r4   r©   rZ  r   r5   rÍ   )r   r©   rZ  r   r
   r°  r   r   r   Ú!test__repr__providedBy_from_classÍ  s   
þz7TestProvidesClassRepr.test__repr__providedBy_from_classc           	      C   sv   ddl m} ddl m} ddl m} tdƒ}tdƒ}||ƒG dd„ dƒƒ}|ƒ }|||ƒ ||ƒ}|  t|ƒd	¡ d S )
Nr   r»  r¨   rÙ  r   r   c                   @   r	   )zFTestProvidesClassRepr.test__repr__providedBy_alsoProvides.<locals>.FooNr   r   r   r   r   r
   ã  r2   r
   z7directlyProvides(Foo, IBar, classImplements(Foo, IFoo)))r4   r¼  r©   rZ  r   r5   rÍ   )	r   r¼  r©   rZ  r   r   r
   r1   r°  r   r   r   Ú#test__repr__providedBy_alsoProvidesÜ  s   
þz9TestProvidesClassRepr.test__repr__providedBy_alsoProvidesN)r   r   r   rg   rn   r±  r¶  rº  rÄ  rÆ  rÌ  rÐ  rÓ  rØ  rÛ  rÜ  r   r   r   r   r¯  .  s    
.r¯  c                   @   r-   )ÚTest_Providesc                 O   rp  )Nr   r”  )r4   r•  )r   rl   rm   r•  r   r   r   rê   ó  rr  zTest_Provides._callFUTc                 C   sˆ   ddl m} tdƒ}i }G dd„ dƒ}t||d�� |  ||¡}W d   ƒ n1 s*w   Y  |  t|ƒ|g¡ |  |||f |¡ d S )Nr   rú   r   c                   @   r	   )z.Test_Provides.test_no_cached_spec.<locals>.FooNr   r   r   r   r   r
   ü  r   r
   ©ZInstanceDeclarations)r    rû   r   Ú_Monkeyrê   r5   rC   r²   )r   rû   r   Úcacher
   r  r   r   r   Útest_no_cached_spec÷  s   ÿz!Test_Provides.test_no_cached_specc                 C   s|   ddl m} tdƒ}tƒ }G dd„ dƒ}||f|i}t||d�� |  ||¡}W d   ƒ n1 s1w   Y  |  ||¡ d S )Nr   rú   r   c                   @   r	   )z-Test_Provides.test_w_cached_spec.<locals>.FooNr   r   r   r   r   r
   	  r   r
   rÞ  )r    rû   r   rb   rß  rê   r²   )r   rû   r   Zpriorr
   rà  r  r   r   r   Útest_w_cached_spec  s   ÿz Test_Provides.test_w_cached_specN)r   r   r   rê   rá  râ  r   r   r   r   rÝ  ñ  s    rÝ  c                   @   rÖ   )
ÚTest_directlyProvidesc                 O   rp  )Nr   r½  )r4   r¾  )r   rl   rm   r¾  r   r   r   rê     rr  zTest_directlyProvides._callFUTc                 C   óZ   ddl m} tdƒ}G dd„ dƒ}|ƒ }|  ||¡ |  |j|¡ |  t|jƒ|g¡ d S )Nr   rŽ  r   c                   @   r	   )z7Test_directlyProvides.test_w_normal_object.<locals>.FooNr   r   r   r   r   r
     r   r
   ©r4   r�  r   rê   r�   r  r5   rC   ©r   r�  r   r
   Úobjr   r   r   Útest_w_normal_object  ó   ÿÿz*Test_directlyProvides.test_w_normal_objectc                 C   sT   ddl m} tdƒ}G dd„ dƒ}|  ||¡ |  |j|¡ |  t|jƒ|g¡ d S )Nr   r  r   c                   @   r	   )z/Test_directlyProvides.test_w_class.<locals>.FooNr   r   r   r   r   r
   ,  r   r
   )r4   r  r   rê   r�   r  r5   rC   ©r   r  r   r
   r   r   r   Útest_w_class(  s   ÿÿz"Test_directlyProvides.test_w_classc                    sf   ddl m} tdƒ}i ‰ G ‡ fdd„dƒ}|ƒ }|  ||¡ |  ˆ d |¡ |  tˆ d ƒ|g¡ d S )Nr   rŽ  r   c                       s    e Zd Zdd„ Z‡ fdd„ZdS )z:Test_directlyProvides.test_w_classless_object.<locals>.Fooc                 S   s   |dkrd S t |ƒ‚©Nr&  r   rÛ   r   r   r   Ú__getattribute__=  s   zKTest_directlyProvides.test_w_classless_object.<locals>.Foo.__getattribute__c                    s   |ˆ |< d S r   r   ©r   rÀ   Úvalue©Zthe_dictr   r   Ú__setattr__C  s   zFTest_directlyProvides.test_w_classless_object.<locals>.Foo.__setattr__N©r   r   r   rí  rñ  r   rð  r   r   r
   <  s    r
   r  )r4   r�  r   rê   r�   r5   rC   ræ  r   rð  r   Útest_w_classless_object7  s   
z-Test_directlyProvides.test_w_classless_objectN)r   r   r   rê   rè  rë  ró  r   r   r   r   rã    s
    rã  c                   @   r-   )ÚTest_alsoProvidesc                 O   rp  )Nr   r»  )r4   r¼  )r   rl   rm   r¼  r   r   r   rê   N  rr  zTest_alsoProvides._callFUTc                 C   rä  )Nr   rŽ  r   c                   @   r	   )z8Test_alsoProvides.test_wo_existing_provides.<locals>.FooNr   r   r   r   r   r
   V  r   r
   rå  ræ  r   r   r   Útest_wo_existing_providesR  ré  z+Test_alsoProvides.test_wo_existing_providesc                 C   sz   ddl m} ddl m} tdƒ}tdƒ}G dd„ dƒ}|ƒ }|||ƒ |  ||¡ |  |j|¡ |  t|jƒ||g¡ d S )Nr   rŽ  r½  r   r   c                   @   r	   )z7Test_alsoProvides.test_w_existing_provides.<locals>.FooNr   r   r   r   r   r
   h  r   r
   )	r4   r�  r¾  r   rê   r�   r  r5   rC   )r   r�  r¾  r   r   r
   rç  r   r   r   Útest_w_existing_providesb  s   
ÿÿz*Test_alsoProvides.test_w_existing_providesN)r   r   r   rê   rõ  rö  r   r   r   r   rô  L  s    rô  c                   @   rƒ  )ÚTest_noLongerProvidesc                 O   rp  )Nr   )ÚnoLongerProvides)r4   rø  )r   rl   rm   rø  r   r   r   rê   x  rr  zTest_noLongerProvides._callFUTc                 C   s>   t dƒ}G dd„ dƒ}|ƒ }|  ||¡ |  t|jƒg ¡ d S )Nr   c                   @   r	   )z<Test_noLongerProvides.test_wo_existing_provides.<locals>.FooNr   r   r   r   r   r
     r   r
   )r   rê   r5   rC   r  )r   r   r
   rç  r   r   r   rõ  |  s   
ÿz/Test_noLongerProvides.test_wo_existing_providesc                 C   sT   ddl m} tdƒ}G dd„ dƒ}|ƒ }|||ƒ |  ||¡ |  t|jƒg ¡ d S )Nr   r½  r   c                   @   r	   )z?Test_noLongerProvides.test_w_existing_provides_hit.<locals>.FooNr   r   r   r   r   r
   Œ  r   r
   ©r4   r¾  r   rê   r5   rC   r  )r   r¾  r   r
   rç  r   r   r   Útest_w_existing_provides_hitˆ  s   

ÿz2Test_noLongerProvides.test_w_existing_provides_hitc                 C   s^   ddl m} tdƒ}tdƒ}G dd„ dƒ}|ƒ }|||ƒ |  ||¡ |  t|jƒ|g¡ d S )Nr   r½  r   r   c                   @   r	   )z@Test_noLongerProvides.test_w_existing_provides_miss.<locals>.FooNr   r   r   r   r   r
   ›  r   r
   rù  )r   r¾  r   r   r
   rç  r   r   r   Útest_w_existing_provides_miss–  s   
ÿz3Test_noLongerProvides.test_w_existing_provides_missc                 C   sF   ddl m} tdƒ}||ƒG dd„ dƒƒ}|ƒ }|  t| j||¡ d S )Nr   r¨   r   c                   @   r	   )zDTest_noLongerProvides.test_w_iface_implemented_by_class.<locals>.FooNr   r   r   r   r   r
   ©  r2   r
   )r4   r©   r   r¸   r‡  rê   )r   r©   r   r
   rç  r   r   r   Ú!test_w_iface_implemented_by_class¥  s   z7Test_noLongerProvides.test_w_iface_implemented_by_classN)r   r   r   rê   rõ  rú  rû  rü  r   r   r   r   r÷  v  s    r÷  c                   @   rƒ  )ÚClassProvidesBaseFallbackTestsc                 C   rf   ©Nr   )ÚClassProvidesBaseFallback©r4   rÿ  ©r   rÿ  r   r   r   rg   ³  ré   z.ClassProvidesBaseFallbackTests._getTargetClassc                 C   s   G dd„ d|   ¡ ƒ}|||ƒS )Nc                   @   r=  )z8ClassProvidesBaseFallbackTests._makeOne.<locals>.Derivedc                 S   s   || _ || _d S r   )Ú_clsZ_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   rj   )r   r–  Z
implementsr   r   r   r   rn   ¸  s   
z'ClassProvidesBaseFallbackTests._makeOnec                 C   s:   t dƒ}G dd„ dƒ}|  ||¡ }|_|  |j|¡ d S )Nr   c                   @   r	   )zGClassProvidesBaseFallbackTests.test_w_same_class_via_class.<locals>.FooNr   r   r   r   r   r
   Æ  r   r
   r—  )r   r   r
   Zcpbpr   r   r   Útest_w_same_class_via_classÃ  s   z:ClassProvidesBaseFallbackTests.test_w_same_class_via_classc                 C   s<   t dƒ}G dd„ dƒ}|ƒ }|  ||¡|_|  |j|¡ d S )Nr   c                   @   r	   )zJClassProvidesBaseFallbackTests.test_w_same_class_via_instance.<locals>.FooNr   r   r   r   r   r
   Ï  r   r
   r—  )r   r   r
   r1   r   r   r   Útest_w_same_class_via_instanceÌ  s
   z=ClassProvidesBaseFallbackTests.test_w_same_class_via_instancec                 C   s^   t dƒ}G dd„ dƒ}G dd„ d|ƒ}|ƒ }|  ||¡|_|  tt|d¡ |  tt|d¡ d S )Nr   c                   @   r	   )zBClassProvidesBaseFallbackTests.test_w_different_class.<locals>.FooNr   r   r   r   r   r
   Ù  r   r
   c                   @   r	   )zBClassProvidesBaseFallbackTests.test_w_different_class.<locals>.BarNr   r   r   r   r   r‰  Ü  r   r‰  r  )r   rn   r  r¸   rš  Úgetattr)r   r   r
   r‰  Úbarr   r   r   Útest_w_different_classÖ  s   z5ClassProvidesBaseFallbackTests.test_w_different_classN)r   r   r   rg   rn   r  r  r	  r   r   r   r   rý  ±  s    	
rý  c                   @   rl  )ÚClassProvidesBaseTestsc                 C   rf   )Nr   )ÚClassProvidesBase)r4   r  )r   r  r   r   r   rg   ì  rh   z&ClassProvidesBaseTests._getTargetClassc                 C   rf   rþ  r   r  r   r   r   r;  ð  ré   z(ClassProvidesBaseTests._getFallbackClassN)r   r   r   rg   r;  r   r   r   r   r
  å  s    r
  c                   @   rÖ   )
ÚClassProvidesTestsc                 C   rf   ©Nr   r  ©r4   r  ©r   r  r   r   r   rg   ø  rh   z"ClassProvidesTests._getTargetClassc                 O   ri   r   rj   rk   r   r   r   rn   ü  ro   zClassProvidesTests._makeOnec                 C   sr   ddl m} tdƒ}tdƒ}||ƒG dd„ dƒƒ}|  |t|ƒ|¡ }|_|  |j|¡ |  t|ƒ jƒ|g¡ d S )Nr   r¨   r   r   c                   @   r	   )z7ClassProvidesTests.test_w_simple_metaclass.<locals>.FooNr   r   r   r   r   r
     r2   r
   )	r4   r©   r   rn   rQ  r  r²   r5   rC   ©r   r©   r   r   r
   Úcpr   r   r   Útest_w_simple_metaclassÿ  s   z*ClassProvidesTests.test_w_simple_metaclassc                 C   sp   ddl m} tdƒ}tdƒ}||ƒG dd„ dƒƒ}|  |t|ƒ|¡ }|_|  | ¡ t|ƒ|t|ƒ|ff¡ d S )Nr   r¨   r   r   c                   @   r	   )z/ClassProvidesTests.test___reduce__.<locals>.FooNr   r   r   r   r   r
     r2   r
   )r4   r©   r   rn   rQ  r  r5   rÏ   r  r   r   r   rÐ     s   
ÿz"ClassProvidesTests.test___reduce__N)r   r   r   rg   rn   r  rÐ   r   r   r   r   r  ö  s
    r  c                       rœ  )ÚClassProvidesStrictTestsc                    rž  )Nc                       rŸ  )zEClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvidesc                    r   r¡  r£  r¥  r  r   r   r¤  !  r¦  zVClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvides._do_calculate_roNr§  r   r  r   r   ÚStrictClassProvides   r©  r  rª  )r   r  r%  r  r   rg     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   rH   r¦   r¨   c                   @   r	   )zMClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr   r   r   r   r   rž   /  r   rž   c                   @   r	   )zQClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.metaclassNr   r   r   r   r   Ú	metaclass2  r2   r  rB  )	r    rI   r§   r©   rQ  rb   rn   r5   rV   )r   rI   r§   r©   rž   r  rB  r  r   r   r   r¬  (  s(   ý
úz>ClassProvidesStrictTests.test_overlapping_interfaces_correctedr­  r   r   r%  r   r    r®  r  c                   @   rS  )ÚTestClassProvidesReprc                 C   rf   r  r  r  r   r   r   rg   I  rh   z%TestClassProvidesRepr._getTargetClassc                 O   ri   r   rj   rk   r   r   r   rn   M  ro   zTestClassProvidesRepr._makeOnec                 C   s$   |   t| ƒt¡}|  t|ƒd¡ d S )Nz'directlyProvides(TestClassProvidesRepr)rÑ  rÒ  r   r   r   Útest__repr__emptyP  s
   þz'TestClassProvidesRepr.test__repr__emptyc                 C   sB   ddl m} G dd„ d|ƒ}|  t| ƒt|¡}|  t|ƒd¡ d S )Nr   rH   c                   @   rë   )z=TestClassProvidesRepr.test__repr__providing_one.<locals>.IFoorÍ  NrÎ  r   r   r   r   r   Z  r   r   z-directlyProvides(TestClassProvidesRepr, IFoo))r    rI   rn   rQ  r5   rÍ   )r   rI   r   r°  r   r   r   Útest__repr__providing_oneW  s   þz/TestClassProvidesRepr.test__repr__providing_onec                 C   sJ   t ddd�}t ddd�}t dƒ}|  t| ƒt|||¡}|  t|ƒd¡ d S )Nr   rÇ  rÈ  rÉ  r—   z>directlyProvides(TestClassProvidesRepr, IFoo, IBaz, mod2.IFoo)rÊ  rË  r   r   r   rÌ  c  s   þz1TestClassProvidesRepr.test__repr__duplicate_namesc                 C   sR   ddl m} ddl m} tdƒ}||ƒG dd„ dƒƒ}||ƒ}|  t|ƒd¡ d S )Nr   r¦   r¨   r   c                   @   r	   )z<TestClassProvidesRepr.test__repr__implementedBy.<locals>.FooNr   r   r   r   r   r
   s  r2   r
   rÚ  )r4   r§   r©   r   r5   rÍ   )r   r§   r©   r   r
   r°  r   r   r   Útest__repr__implementedByn  s   þz/TestClassProvidesRepr.test__repr__implementedByc                 C   sd   ddl m} G dd„ dƒ}||ƒ ƒ}|  t|ƒdt› d�¡ |ƒ }d|_||ƒ}|  t|ƒd¡ d S )Nr   r¦   c                   @   r=  )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(z.?)zclassImplements(Callable))r4   r§   r5   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   rg   rn   r  r  rÌ  r  r  r   r   r   r   r  G  s    r  c                   @   rƒ  )ÚTest_directlyProvidedByc                 O   rp  )Nr   )ÚdirectlyProvidedBy)r4   r  )r   rl   rm   r  r   r   r   rê   —  rr  z Test_directlyProvidedBy._callFUTc                 C   s.   G dd„ dƒ}|ƒ }|   t|  |¡ƒg ¡ d S )Nc                   @   r	   )zNTest_directlyProvidedBy.test_wo_declarations_in_class_or_instance.<locals>.FooNr   r   r   r   r   r
   �  r   r
   r  rï   r   r   r   Ú)test_wo_declarations_in_class_or_instance›  s   zATest_directlyProvidedBy.test_wo_declarations_in_class_or_instancec                 C   sJ   ddl m} tdƒ}||ƒG dd„ dƒƒ}|ƒ }|  t|  |¡ƒg ¡ d S )Nr   r¨   r   c                   @   r	   )zRTest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance.<locals>.FooNr   r   r   r   r   r
   §  r2   r
   )r4   r©   r   r5   rC   rê   )r   r©   r   r
   r1   r   r   r   Ú-test_w_declarations_in_class_but_not_instance£  s   zETest_directlyProvidedBy.test_w_declarations_in_class_but_not_instancec                 C   sN   ddl m} tdƒ}G dd„ dƒ}|ƒ }|||ƒ |  t|  |¡ƒ|g¡ d S )Nr   r½  r   c                   @   r	   )zRTest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class.<locals>.FooNr   r   r   r   r   r
   ²  r   r
   )r4   r¾  r   r5   rC   rê   )r   r¾  r   r
   r1   r   r   r   Ú-test_w_declarations_in_instance_but_not_class®  s   
zETest_directlyProvidedBy.test_w_declarations_in_instance_but_not_classc                 C   sj   ddl m} ddl m} tdƒ}tdƒ}||ƒG dd„ dƒƒ}|ƒ }|||ƒ |  t|  |¡ƒ|g¡ d S )Nr   r½  r¨   r   r   c                   @   r	   )zNTest_directlyProvidedBy.test_w_declarations_in_instance_and_class.<locals>.FooNr   r   r   r   r   r
   ¿  r2   r
   )r4   r¾  r©   r   r5   rC   rê   )r   r¾  r©   r   r   r
   r1   r   r   r   Ú)test_w_declarations_in_instance_and_class¹  s   
zATest_directlyProvidedBy.test_w_declarations_in_instance_and_classN)r   r   r   rê   r   r!  r"  r#  r   r   r   r   r  •  s    r  c                   @   r-   )ÚTest_providerc                 C   rf   )Nr   )Úprovider)r4   r%  )r   r%  r   r   r   rg   Ê  rh   zTest_provider._getTargetClassc                 O   ri   r   rj   rk   r   r   r   rn   Î  ro   zTest_provider._makeOnec                 C   sR   ddl m} tdƒ}|  |¡G dd„ dƒƒ}|  |j|¡ |  t|jƒ|g¡ d S )Nr   r  r   c                   @   r	   )z'Test_provider.test_w_class.<locals>.FooNr   r   r   r   r   r
   Õ  r2   r
   )r4   r  r   rn   r�   r  r5   rC   rê  r   r   r   rë  Ñ  s   ÿÿzTest_provider.test_w_classN)r   r   r   rg   rn   rë  r   r   r   r   r$  È  s    r$  c                   @   rÖ   )
ÚTest_moduleProvidesc                 C   sV   ddl m} tdƒ}d||dœ}i }d ddg¡}t|||ƒ |d	 }|  t|¡ d S )
Nr   ©ÚmoduleProvidesr   úzope.interface.tests.foo©r   r(  r   Ú
z
def foo():ú    moduleProvides(IFoo)r1   )r4   r(  r   Újoinr%   r¸   r&   )r   r(  r   r)   r*   ÚCODEr1   r   r   r   Útest_called_from_functionä  s   ÿþz-Test_moduleProvides.test_called_from_functionc                 C   sn   ddl m} tdƒ}d||dœ}i }d ddg¡}|  t¡� t|||ƒ W d   ƒ d S 1 s0w   Y  d S )	Nr   r'  r   r)  r*  r+  zclass Foo(object):r,  ©r4   r(  r   r-  r¸   r&   r%   )r   r(  r   r)   r*   r.  r   r   r   Útest_called_from_classò  s   ÿþ"ÿz*Test_moduleProvides.test_called_from_classc                 C   sT   ddl m} tdƒ}d||dœ}d dg¡}t||ƒ |d }|  t|ƒ|g¡ d S )	Nr   r'  r   r)  r*  r+  úmoduleProvides(IFoo)r  )r4   r(  r   r-  r%   r5   rC   )r   r(  r   r)   r.  r  r   r   r   Ú"test_called_once_from_module_scopeÿ  s   ÿÿ
z6Test_moduleProvides.test_called_once_from_module_scopec                 C   sh   ddl m} tdƒ}d||dœ}d ddg¡}|  t¡� t||ƒ W d   ƒ d S 1 s-w   Y  d S )Nr   r'  r   r)  r*  r+  r2  r0  )r   r(  r   r)   r.  r   r   r   Ú#test_called_twice_from_module_scope  s   ÿþ"ÿz7Test_moduleProvides.test_called_twice_from_module_scopeN)r   r   r   r/  r1  r3  r4  r   r   r   r   r&  á  s
    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d„ Zdd„ Zdd„ Zdd„ ZdS )Ú#Test_getObjectSpecificationFallbackc                 C   rf   )Nr   )ÚgetObjectSpecificationFallback)r4   r6  )r   r6  r   r   r   r;    ré   z5Test_getObjectSpecificationFallback._getFallbackClassc                 O   ri   r   rj   rk   r   r   r   rê   "  ro   z,Test_getObjectSpecificationFallback._callFUTc                    s:   i ‰ G ‡ fdd„dƒ}|ƒ }|   |¡}|  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   rñ  2  r   z`Test_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__setattr__Nrò  r   rð  r   r   r
   (  s    	r
   ©rê   r5   rC   ©r   r
   r1   r  r   rð  r   Ú#test_wo_existing_provides_classless%  s
   
zGTest_getObjectSpecificationFallback.test_wo_existing_provides_classlessc                 C   sB   ddl m} tdƒ}dd„ }|||ƒ |  |¡}|  ||j¡ d S )Nr   r½  r   c                   S   r   r   r   r   r   r   r   r1   =  r   zOTest_getObjectSpecificationFallback.test_existing_provides_is_spec.<locals>.foo)r4   r¾  r   rê   r²   r  )r   r¾  r   r1   r  r   r   r   Útest_existing_provides_is_spec9  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   r1   F  r   zSTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec.<locals>.foo)rb   r  rê   r5   rC   )r   r1   r  r   r   r   Ú"test_existing_provides_is_not_specD  s   
zFTest_getObjectSpecificationFallback.test_existing_provides_is_not_specc                 C   sR   ddl m} tdƒ}G dd„ dƒ}|ƒ }|||ƒ |  |¡}|  t|ƒ|g¡ d S )Nr   r½  r   c                   @   r	   )zGTest_getObjectSpecificationFallback.test_existing_provides.<locals>.FooNr   r   r   r   r   r
   Q  r   r
   )r4   r¾  r   rê   r5   rC   )r   r¾  r   r
   r1   r  r   r   r   Útest_existing_providesM  s   

z:Test_getObjectSpecificationFallback.test_existing_providesc                 C   sP   ddl m} tdƒ}||ƒG dd„ dƒƒ}|ƒ }|  |¡}|  t|ƒ|g¡ d S )Nr   r¨   r   c                   @   r	   )zWTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implements.<locals>.FooNr   r   r   r   r   r
   ]  r2   r
   )r4   r©   r   rê   r5   rC   ©r   r©   r   r
   r1   r  r   r   r   Ú&test_wo_provides_on_class_w_implementsY  s   
zJTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implementsc                 C   ó2   G dd„ dƒ}|ƒ }|   |¡}|  t|ƒg ¡ d S )Nc                   @   r	   )zXTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements.<locals>.FooNr   r   r   r   r   r
   g  r   r
   r8  r9  r   r   r   Ú'test_wo_provides_on_class_wo_implementse  ó   
zKTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implementsc                 C   ó   t j| | jdd� d S )Nr  ©Úexpected_missing©r   Útest_raisesrê   r   r   r   r   Ú,test_catches_only_AttributeError_on_providesn  s   
ÿzPTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_providesc                 C   s   t j| | jdd d� d S )Nr&  )rE  r  rF  r   r   r   r   Ú)test_catches_only_AttributeError_on_classs  s   
üzMTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_classc                 C   s   G dd„ dƒ}|   |ƒ ¡ d S )Nc                   @   ó   e Zd ZeeƒZdS )zlTest_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_AttrError.<locals>.FooN)r   r   r   r   rš  r  r   r   r   r   r
     rŠ  r
   )rê   r  r   r   r   Ú;test_raises_AttrError_w_provides_fails_type_check_AttrError{  s   z_Test_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_AttrErrorc                 C   s\   G dd„ dƒ}|   t¡�}|  |ƒ ¡ W d   ƒ n1 sw   Y  |  d|jjd ¡ d S )Nc                   @   rJ  )zoTest_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_RuntimeError.<locals>.FooN)r   r   r   r   ÚRuntimeErrorr  r   r   r   r   r
   ˆ  rŠ  r
   r&  r   )r¸   rL  rê   r5   Ú	exceptionrl   )r   r
   Úexcr   r   r   Ú>test_raises_AttrError_w_provides_fails_type_check_RuntimeError…  s
   ÿzbTest_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_RuntimeErrorN)r   r   r   r;  rg   rê   r:  r;  r<  r=  r?  rA  rH  rI  rK  rO  r   r   r   r   r5    s    		
r5  c                   @   r=  )ÚTest_getObjectSpecificationc                 C   rf   )Nr   )ÚgetObjectSpecification)r4   rQ  )r   rQ  r   r   r   rg   •  rh   z+Test_getObjectSpecification._getTargetClassNr?  r   r   r   r   rP  ‘  r@  rP  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   rf   )Nr   )ÚprovidedByFallback)r4   rS  )r   rS  r   r   r   r;  œ  ré   z)Test_providedByFallback._getFallbackClassc                 O   ri   r   rj   rk   r   r   r   rê   £  ro   z Test_providedByFallback._callFUTc                 C   r@  )Nc                   @   r	   )zNTest_providedByFallback.test_wo_providedBy_on_class_wo_implements.<locals>.FooNr   r   r   r   r   r
   ¨  r   r
   r8  r9  r   r   r   Ú)test_wo_providedBy_on_class_wo_implements¦  rB  zATest_providedByFallback.test_wo_providedBy_on_class_wo_implementsc                 C   sT   ddl m} tdƒ}G dd„ dƒ}|ƒ }|||ƒ|_|  |¡}|  t|ƒ|g¡ d S )Nr   r”  r   c                   @   r	   )zATest_providedByFallback.test_w_providedBy_valid_spec.<locals>.FooNr   r   r   r   r   r
   ³  r   r
   )r4   r•  r   r  rê   r5   rC   )r   r•  r   r
   r1   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|ƒg ¡ d S )Nc                   @   r	   )zCTest_providedByFallback.test_w_providedBy_invalid_spec.<locals>.FooNr   r   r   r   r   r
   ½  r   r
   )rb   r  rê   r5   rC   r9  r   r   r   Útest_w_providedBy_invalid_spec»  s
   
z6Test_providedByFallback.test_w_providedBy_invalid_specc                 C   sX   ddl m} tdƒ}||ƒG dd„ dƒƒ}|ƒ }tƒ |_|  |¡}|  t|ƒ|g¡ d S )Nr   r¨   r   c                   @   r	   )zVTest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements.<locals>.FooNr   r   r   r   r   r
   É  r2   r
   )r4   r©   r   rb   r  rê   r5   rC   r>  r   r   r   Ú1test_w_providedBy_invalid_spec_class_w_implementsÅ  s   
zITest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implementsc                 C   sB   G dd„ dƒ}|ƒ }t ƒ |_t ƒ  }|_|  |¡}|  ||¡ d S )Nc                   @   r	   )zcTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_class.<locals>.FooNr   r   r   r   r   r
   Ô  r   r
   ©rb   r  r  rê   r²   ©r   r
   r1   Ú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   sJ   G dd„ dƒ}|ƒ }t ƒ |_t ƒ  }|_t ƒ |_|  |¡}|  ||¡ d S )Nc                   @   r	   )zeTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class.<locals>.FooNr   r   r   r   r   r
   ß  r   r
   rX  rY  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   sf   ddl m} tdƒ}||ƒG dd„ dƒƒ}|ƒ }tƒ |_tƒ  |_|_|  |¡}|  t|ƒ|g¡ d S )Nr   r¨   r   c                   @   r	   )zeTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_class.<locals>.FooNr   r   r   r   r   r
   í  r2   r
   )	r4   r©   r   rb   r  r  rê   r5   rC   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	ƒƒ}||ƒG d
d„ d|ƒƒ}|ƒ }|  t|  |¡ƒ||g¡ t||ƒ}|  |¡}	|  |	j	¡ |  t|	ƒ|g¡ d S )Nr   rH   r¨   c                   @   r	   )zPTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr   r   r   r   r   rž   û  r   rž   c                   @   r	   )zSTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr   r   r   r   r   rŸ   þ  r   rŸ   c                   @   r	   )zOTest_providedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr   r   r   r   r   rª   	  r2   rª   c                   @   r	   )zRTest_providedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr   r   r   r   r   r   	  r2   r   ©
r    rI   r4   r©   r5   rC   rê   r"  r]   r,  )
r   rI   r©   rž   rŸ   rª   r   Úderivedr$  r-  r%  r   r   r'  ÷  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	ƒ}||ƒG d
d„ d|ƒƒ}|ƒ }|  t|  |¡ƒ|g¡ t||ƒ}|  t|  |¡ƒg ¡ d S )Nr   rH   r¨   c                   @   r	   )zVTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr   r   r   r   r   rž   	  r   rž   c                   @   r	   )zYTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr   r   r   r   r   rŸ   	  r   rŸ   c                   @   r	   )zUTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr   r   r   r   r   rª   	  r   rª   c                   @   r	   )zXTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr   r   r   r   r   r   	  r2   r   r!  )	r   rI   r©   rž   rŸ   rª   r   r_  r$  r%  r   r   r/  	  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|  |¡ƒ|g¡ t||ƒ}|  |¡}|  |j	¡ |  t|ƒg ¡ d S )
Nr   rH   r¨   c                   @   r	   )zETest_providedByFallback.test_super_when_base_is_object.<locals>.IBaseNr   r   r   r   r   rž   ,	  r   rž   c                   @   r	   )zHTest_providedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr   r   r   r   r   rŸ   /	  r   rŸ   c                   @   r	   )zGTest_providedByFallback.test_super_when_base_is_object.<locals>.DerivedNr   r   r   r   r   r   2	  r2   r   r^  )	r   rI   r©   rž   rŸ   r   r_  r$  r-  r%  r   r   r0  (	  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
ƒƒ}G dd„ d|ƒ}|ƒ }|  t|  |¡ƒ|g¡ |||ƒ |  t|  |¡ƒ||g¡ t||ƒ}	|  |	¡}
|  	|
j
¡ |  t|
ƒ|g¡ d S )Nr   rH   r½  r¨   c                   @   r	   )zOTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IBaseNr   r   r   r   r   rž   C	  r   rž   c                   @   r	   )zRTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IDerivedNr   r   r   r   r   rŸ   F	  r   rŸ   c                   @   r	   )zNTest_providedByFallback.test_super_when_object_directly_provides.<locals>.BaseNr   r   r   r   r   rª   I	  r2   rª   c                   @   r	   )zQTest_providedByFallback.test_super_when_object_directly_provides.<locals>.DerivedNr   r   r   r   r   r   M	  r   r   )r    rI   r4   r¾  r©   r5   rC   rê   r"  r]   r,  )r   rI   r¾  r©   rž   rŸ   rª   r   r_  r$  r-  r%  r   r   Ú(test_super_when_object_directly_provides>	  s    


z@Test_providedByFallback.test_super_when_object_directly_providesc                    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ƒƒ}||ƒ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   rH   r¨   c                   @   r	   )zOTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr   r   r   r   r   rž   _	  r   rž   c                   @   r	   )zMTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr   r   r   r   r   r1  b	  r   r1  c                   @   r	   )zMTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr   r   r   r   r   r2  e	  r   r2  c                   @   r	   )zRTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr   r   r   r   r   rŸ   h	  r   rŸ   c                   @   r	   )zTTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr   r   r   r   r   r3  k	  r   r3  c                   @   r	   )zNTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr   r   r   r   r   rª   n	  r2   rª   c                   @   r	   )zLTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr   r   r   r   r   r4  r	  r2   r4  c                   @   r	   )zLTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr   r   r   r   r   r5  v	  r2   r5  c                   @   r	   )zQTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr   r   r   r   r   r   z	  r2   r   r6  r7  r%  r   r   r:  [	  s>   


ÿÿÿÿz@Test_providedByFallback.test_super_multi_level_multi_inheritancec                 C   s   t j| | jdtd� d S )Nr  )rE  r&  )r   rG  rê   rb   r   r   r   r   Ú.test_catches_only_AttributeError_on_providedByŒ	  s   

þzFTest_providedByFallback.test_catches_only_AttributeError_on_providedByc                 C   rC  )Nr&  rD  rF  r   r   r   r   rI  ‘	  s   
ÿzATest_providedByFallback.test_catches_only_AttributeError_on_class)r   r   r   r;  rg   rê   rT  rU  rV  rW  r[  r\  r]  r'  r/  r0  r`  r:  ra  rI  r<  r   r   r%  r   rR  š  s$    	
1rR  c                   @   r=  )ÚTest_providedByc                 C   rf   )Nr   rÙ  )r4   rZ  )r   rZ  r   r   r   rg   œ	  rh   zTest_providedBy._getTargetClassNr?  r   r   r   r   rb  ˜	  r@  rb  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   rf   )Nr   )Ú%ObjectSpecificationDescriptorFallback)r4   rd  )r   rd  r   r   r   r;  £	  s   z<ObjectSpecificationDescriptorFallbackTests._getFallbackClassc                 O   ri   r   rj   rk   r   r   r   rn   «	  ro   z3ObjectSpecificationDescriptorFallbackTests._makeOnec                 C   sP   ddl m} tdƒ}G dd„ dƒ}|||ƒ|_|  ¡ |_|  t|jƒ|g¡ d S )Nr   r”  r   c                   @   r	   )zOObjectSpecificationDescriptorFallbackTests.test_accessed_via_class.<locals>.FooNr   r   r   r   r   r
   ²	  r   r
   )r4   r•  r   r  rn   r  r5   rC   )r   r•  r   r
   r   r   r   Útest_accessed_via_class®	  s   
zBObjectSpecificationDescriptorFallbackTests.test_accessed_via_classc                 C   sr   ddl m} ddl m} tdƒ}tdƒ}||ƒG dd„ dƒƒ}|||ƒ|_|  ¡ |_|ƒ }|  t|jƒ|g¡ d S )Nr   r”  r¨   r   r   c                   @   r	   )zZObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_provides.<locals>.FooNr   r   r   r   r   r
   ¿	  r2   r
   )	r4   r•  r©   r   r  rn   r  r5   rC   )r   r•  r©   r   r   r
   r1   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} tdƒ}tdƒ}tdƒ}||ƒG dd	„ d	ƒƒ}|||ƒ|_|  ¡ |_|ƒ }|||ƒ |  t	|jƒ||g¡ d S )
Nr   r”  r½  r¨   r   r   r—   c                   @   r	   )zYObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides.<locals>.FooNr   r   r   r   r   r
   Ð	  r2   r
   )
r4   r•  r¾  r©   r   r  rn   r  r5   rC   )	r   r•  r¾  r©   r   r   r—   r
   r1   r   r   r   Ú!test_accessed_via_inst_w_providesÈ	  s   

zLObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_providesc                    sd   G dd„ dt ƒ‰ G ‡ ‡fdd„dƒ}|ƒ }ˆ ˆ ¡� 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Ü	  r   rh  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   )rh  r   r   r  â	  rD  z{ObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Foo.__provides__N©r   r   r   rn   r  r÷   r  r   ©rh  r   r   r   r
   ß	  s    r
   r  )Ú	Exceptionr¸   r  rï   r   rj  r   Ú6test_arbitrary_exception_accessing_provides_not_caughtÚ	  s   "ÿzaObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caughtc                    s@   G dd„ dt ƒ}G ‡ fdd„dƒ}|ƒ }t|dƒ}ˆ  |¡ d S )Nc                   @   r	   )zmObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.MyExceptionNr   r   r   r   r   rh  ì	  r   rh  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  ò	  rD  zrObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Foo.__provides__Nri  r   r   r   r   r
   ï	  s    r
   r  )rk  r  ZassertIsNotNone)r   rh  r
   r1   Úprovidedr   r   r   Ú-test_AttributeError_accessing_provides_caughtê	  s
   
zXObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caughtc                 C   sb   ddl m} ddl m} G dd„ d|ƒ}||ƒG dd„ dƒƒ}|  ¡ |_t|ƒ dƒ}|  |¡ d S )	Nr   rH   r¨   c                   @   r	   )zZObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.IFooNr   r   r   r   r   r   þ	  r   r   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  
  rD  zfObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Foo.__provides__N)r   r   r   r÷   r  r   r   r   r   r
   
  s    r
   r  )r    rI   r©   rn   r  r  r]   )r   rI   r©   r   r
   rm  r   r   r   Ú!test_None_in__provides__overridesú	  s   
zLObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overridesN)r   r   r   r;  rg   rn   re  rf  rg  rl  rn  ro  r   r   r   r   rc  ¡	  s    rc  c                   @   r=  )Ú"ObjectSpecificationDescriptorTestsc                 C   rf   )Nr   )ÚObjectSpecificationDescriptor)r4   rq  )r   rq  r   r   r   rg   
  rh   z2ObjectSpecificationDescriptorTests._getTargetClassNr?  r   r   r   r   rp  
  s    rp  c                   @   r-   )rß  c                    s<   ˆ | _ ‡ fdd„|D ƒ| _| ¡ D ]
\}}tˆ ||ƒ qd S )Nc                    s   i | ]}|t ˆ |ƒ“qS r   )r  )Ú.0Úkey©Úmoduler   r   Ú
<dictcomp>!
  s    z$_Monkey.__init__.<locals>.<dictcomp>)ru  Ú
to_restoreÚitemsrÁ  )r   ru  rm   rs  rï  r   rt  r   rÙ   
  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   )rw  rx  rÁ  ru  )r   Úexc_typeÚexc_valÚexc_tbrs  rï  r   r   r   Ú__exit__(
  s   ÿz_Monkey.__exit__N©r   r   r   rÙ   ry  r}  r   r   r   r   rß  
  s    rß  c                   @   r-   )rý   c                 K   s8   || _ t||ƒ| _| j ¡ | _| j ¡  | j |¡ d S r   )ru  r  ÚtargetÚcopyrw  ÚclearÚupdate)r   ru  Úattrnamerm   r   r   r   rÙ   0
  s
   
z_MonkeyDict.__init__c                 C   s   | j S r   )r  r   r   r   r   ry  7
  r   z_MonkeyDict.__enter__c                 C   s   | j  ¡  | j  | j¡ d S r   )r  r�  r‚  rw  )r   rz  r{  r|  r   r   r   r}  :
  s   
z_MonkeyDict.__exit__Nr~  r   r   r   r   rý   -
  s    rý   )6rÏ  ZunittestrJ   r   r´  r   r   r   Z#zope.interface.tests.test_interfacer   r   r   r
   r   r   r    ZTestCaser.   r=   re   r¬   rÅ   rç   r>  rA  rK  rT  rm  ro  rw  r„  rŒ  r�  r¯  rÝ  rã  rô  r÷  rý  r
  r  r  r  r  r$  r&  r5  rP  rR  rb  rc  rp  rß  rý   r   r   r   r   Ú<module>   sŽ   #: ;Cÿ}  aÿ	)0o>!8& D!:*;
4ý$-N38xÿ	 ÿ	
mý