o
    U˟i4                    @   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   n/var/www/apps/myagent/mysuperagent/venv/lib/python3.10/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locs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.declarationsr1   assertEqual__component_name__)r   r1   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   r0   r2   c                 S   r   r   r   )or   r   r   doFooT      z'NamedTests.test_function.<locals>.doFoor4   )r   r1   r:   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   r0   c                   @   r	   )z%NamedTests.test_instance.<locals>.FooNr   r   r   r   r   r
   ]   r   r
   r2   r4   )r   r1   r
   r2   r   r   r   test_instanceZ   s   zNamedTests.test_instanceN)r   r   r   r8   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r5   rA   r   rA   r   r   r   	_getEmptyk   s   zEmptyDeclarationTests._getEmptyc                 C   s   |   }| t|g  d S r   )rD   r6   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.interfacerK   rD   r6   rE   	flattenedr   rK   rG   r   r   r   test_flattened_emptys   s   z*EmptyDeclarationTests.test_flattened_emptyc                 C   s$   ddl m} |  }| || d S rI   )rL   rK   rD   assertNotInrN   r   r   r   test___contains___emptyx   s   z-EmptyDeclarationTests.test___contains___emptyc                 C   s<   ddl m} |  }| || | |j|dd d S )Nr   rJ   Tstrict)rL   rK   rD   
assertTrueextendsrN   r   r   r   test_extends_empty}   s   z(EmptyDeclarationTests.test_extends_emptyc                 C   s$   |   }t| }| |g  d S r   )rD   rE   
interfacesr6   )r   rG   
iface_listr   r   r   test_interfaces_empty   s   z+EmptyDeclarationTests.test_interfaces_emptyc                 C   s*   ddl m} |  }| |j||f d S rI   )rL   rK   rD   r6   __sro__rN   r   r   r   test___sro___   s   z#EmptyDeclarationTests.test___sro___c                 C   s(   ddl m} |  }| |j|f d S rI   )rL   rK   rD   r6   __iro__rN   r   r   r   test___iro___   s   z#EmptyDeclarationTests.test___iro___c                 C   s<   |   }| |d | |ddd | |j d S )Nattrabcdef)rD   assertIsNonegetr6   assertFalse_v_attrsrF   r   r   r   test_get   s   zEmptyDeclarationTests.test_getc                 C   s*   |   }t |_|| | |j d S r   )rD   objectrd   changedrc   rF   r   r   r    test_changed_w_existing__v_attrs   s   
z6EmptyDeclarationTests.test_changed_w_existing__v_attrsN)r   r   r   rD   rH   rO   rQ   rV   rY   r[   r]   re   rh   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@   rB   rC   r   r   r   _getTargetClass      z DeclarationTests._getTargetClassc                 O      |   |i |S r   rk   r   argskwr   r   r   _makeOne      zDeclarationTests._makeOnec                 C   s   |   }| t|jg  d S r   )rr   r6   rE   	__bases__rF   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   rr   r6   rE   rt   r   r   rG   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)r5   r{   rr   r6   rE   rt   )r   r{   implrG   r   r   r   test_ctor_w_implements_in_bases   s   
z0DeclarationTests.test_ctor_w_implements_in_basesc                 C   s"   |   }|| | |j d S r   )rr   rg   ra   rd   rF   r   r   r   !test_changed_wo_existing__v_attrs      
z2DeclarationTests.test_changed_wo_existing__v_attrsc                 C   s   |   }| || d S r   )rr   rP   rF   r   r   r   test___contains__w_self   s   z(DeclarationTests.test___contains__w_selfc                 C   s    t d}|  }| || d S rv   )r   rr   rP   rw   r   r   r   "test___contains__w_unrelated_iface   s   z3DeclarationTests.test___contains__w_unrelated_ifacec                 C   s"   t d}| |}| || d S rv   )r   rr   assertInrw   r   r   r   !test___contains__w_base_interface   r   z2DeclarationTests.test___contains__w_base_interfacec                 C   s(   t d}| |}| t||g d S rv   r   rr   r6   rE   rw   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   rG   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   rJ   r   rL   rK   r   rr   r6   rE   rM   )r   rK   r   rG   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   rJ   r   r   r   r   rK   r   r   rG   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   rr   assertIsInstancerk   r6   rE   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 rv   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   rJ   ro	C3SettingIBaseIDerivedT)zope.interfacerK   r   zope.interface.tests.test_ror   r   C3
STRICT_IROrr   r6   r\   rt   rE   )r   rK   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   rJ   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  r3   r   T)r   rK   r   r   r   r   r   r   r   r6   rZ   rt   rE   )
r   rK   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   rk   rr   ru   rx   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ri      s2    	ri   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   rj   )Nr   )_ImmutableDeclaration)r5   r   )r   r   r   r   r   rk   ]  rl   z(TestImmutableDeclaration._getTargetClassc                 C   rj   )Nr   )_empty)r5   r   )r   r   r   r   r   rD   a  rl   z"TestImmutableDeclaration._getEmptyc                 C   s0   dd l }|||  }| ||   d S )Nr   )pickleloadsdumpsrD   assertIs)r   r   copiedr   r   r   test_picklee  s   z$TestImmutableDeclaration.test_picklec                 C   s   |  |   |   d S r   )r   rk   rD   r   r   r   r   test_singletonj  s   z'TestImmutableDeclaration.test_singletonc                 C   s   |  |  jd d S )Nr   )r6   rD   rt   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   )   )rD   rt   r6   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   )rD   
dependentsr6   )r   r   depsr   r   r   test_dependents{  s
   z(TestImmutableDeclaration.test_dependentsc                 C   s   |   d  d S r   )rD   rg   r   r   r   r   test_changed  s   z%TestImmutableDeclaration.test_changedc                 C   sH   |  |  |  |  |  j| dd |  |  j| dd d S )NTrR   F)rc   rD   rU   r   r   r   r   test_extends_always_false  s   z2TestImmutableDeclaration.test_extends_always_falsec                 C   s0   |  |  d | |  ddd d S )Nname*   )ra   rD   rb   r6   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   r^   )rD   r6   rd   ra   rb   )r   rG   attrsr   r   r   test_v_attrs  s   

z%TestImmutableDeclaration.test_v_attrsN)r   r   r   rk   rD   r   r   r   r   r   r   r   r   r   r   r   r   r   r   [  s    r   c                   @   r>   )TestImplementsc                 C   rj   ry   )r5   r{   )r   r{   r   r   r   rk     rl   zTestImplements._getTargetClassc                 O   rm   r   rn   ro   r   r   r   rr     rs   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   r5   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   ?)rr   r6   inheritdeclaredr   rE   rt   r   r|   r   r   r   ru     s
   z!TestImplements.test_ctor_no_basesc                 C   s"   |   }d|_| t|d d S )NTestingzclassImplements(Testing))rr   r   r6   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   )r5   r   rr   r6   
__reduce__)r   r   r|   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   )
r5   r   r   r6   hash
assertLessassertGreaterassertLessEqual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   _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   )r5   r   r6   r   )r   r   r   r   r   implementedByAimplementedByBproxyr   r   r   test_proxy_equality  s&   z"TestImplements.test_proxy_equalityc                 C   s^   |   }| |j | d|j d|_| d|j |d  | |j | d|j d S )N_super_cacher   )rr   ra   r   rP   __dict__r   rg   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   )rr   ra   r   rP   r   rg   r   r   r   r   %test_changed_does_not_add_super_cache  s   
z4TestImplements.test_changed_does_not_add_super_cacheN)r   r   r   rk   rr   r   ru   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   rj   )Nr   )implementedByFallback)r5   r   )r   r   r   r   r   rk        z*Test_implementedByFallback._getTargetClassc                 O   rm   r   rn   ro   r   r   r   _callFUT$  rs   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   r6   rE   r   r   r
   r2   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  r;   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   rf   _MonkeyDictr   r   )r   r  r
   r2   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   rz   c                   @   r   )zKTest_implementedByFallback.test_dictless_w_existing_Implements.<locals>.Foor   Nr   r   r   r   r   r
   R  r   r
   )r5   r{   r   r   r   )r   r{   r|   r
   r2   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   r6   rE   r   )r   r
   r2   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   rz   c                          e Zd Z ZdS )zJTest_implementedByFallback.test_w_existing_attr_as_Implements.<locals>.FooNr   r   r|   r   r   r
   g  r   r
   r5   r{   r   r   r   r{   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  rz   r  zclassImplements(%s))r   r  r5   r{   r	  r6   rE   r   tupledictr   r   r   )r   r  r{   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  rf   r	  r  rE   r  r   r   )r   r  t_specl_spec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
   r6   rE   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   r2   z*zope.interface.tests.test_declarations.foo__provides__)r5   r&  &zope.interface.tests.test_declarationsr   r   r   r6   r   r   r   __providedBy__rP   r   )r   r&  r   r2   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)r5   r,  r(  r   r   r6   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   rz   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   rJ   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     r3   r   c                   @   r	   )zUTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr   r   r   r   r   Derived  r3   r/  r   rK   r5   r   r6   rE   r   superr   rK   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   rJ   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     r3   r   c                   @   r	   )z\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child1Nr   r   r   r   r   Child1  r   r7  c                   @   r	   )z\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child2Nr   r   r   r   r   Child2  r   r8  c                   @   r	   )z]Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.DerivedNr   r   r   r   r   r/    r3   r/  r0  )
r   rK   r   r   r   r   r7  r8  r/  r3  r4  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   rJ   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   r7    r   r7  c                   @   r	   )z^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child2Nr   r   r   r   r   r8    r3   r8  c                   @   r	   )z_Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.DerivedNr   r   r   r   r   r/    r3   r/  )r   rK   r5   r   r6   __mro__rf   rE   r   r1  ra   _dependents)r   rK   r   r   r   r   r7  r8  r/  r3  futr4  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   rJ   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/  ,  r3   r/  r0  r2  r4  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   rJ   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/  ?  r3   r/  r0  )r   rK   r   r   r   r/  r3  r4  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   rJ   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   r@  c                   @   r	   )zPTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr   r   r   r   r   IM2R  r   rA  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   rB  c                   @   r	   )zQTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr   r   r   r   r   r   [  r3   r   c                   @   r	   )zOTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr   r   r   r   r   M1_  r3   rC  c                   @   r	   )zOTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr   r   r   r   r   M2c  r3   rD  c                   @   r	   )zTTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr   r   r   r   r   r/  g  r3   r/  r   rK   r5   r   r1  r6   rE   r   r   rK   r   r   r@  rA  r   rB  r   rC  rD  r/  dsdsm1sm2r4  r   r   (test_super_multi_level_multi_inheritanceH  s>   


zCTest_implementedByFallback.test_super_multi_level_multi_inheritance)r   r   r   rk   _getFallbackClassr   r   r  r  r  r  r  r  r  r"  r$  r%  r*  r-  r.  r6  r9  r=  r>  r?  rK  __classcell__r   r   r4  r   r     s0    
		!r   c                   @      e Zd Zdd ZdS )Test_implementedByc                 C   rj   )Nr   r   r   )r   r   r   r   r   rk   ~  rl   z"Test_implementedBy._getTargetClassNr   r   r   rk   r   r   r   r   rO  z      rO  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   rV  )r5   r,  r   r   r   r   r6   r   r   FUT_SETS_PROVIDED_BYr   r)  r'  )	r   r
   	orig_spec	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
   )r[  r!  r   r   r   r8        z_ImplementsTestMixin.test_class)r   r   r   rW  r   r[  r8   r   r   r   r   rR    s    
rR  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)r5   r_  )r   rS  rT  r_  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   rz   r   r   c                       r  )z@Test_classImplementsOnly.test_w_existing_Implements.<locals>.FooNr   r   r  r   r   r
     r   r
   )	r5   r{   r   r   r   r   r   r   r6   r   r{   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   rz   r   c                       r  )z0Test_classImplementsOnly.test_class.<locals>.FooNr   r   old_specr   r   r
     r   r
   r   r   )r5   r{   r   r[  )r   r{   r   r
   r   ra  r   r8     s
   z#Test_classImplementsOnly.test_classc                 C   sL   | j tdtfi d d\}}G dd d|}| || | || d S )Nr
   rc  c                   @   r	   )zRTest_classImplementsOnly.test_redundant_with_super_still_implements.<locals>.ChildNr   r   r   r   r   Child  r   rd  )r[  typerf   r   rT   r   )r   r   r   rd  r   r   r   *test_redundant_with_super_still_implements  s   
zCTest_classImplementsOnly.test_redundant_with_super_still_implementsN)r   r   r   rW  r   r.  r8   rf  r   r   r   r   r^    s    
r^  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)r5   rk  ra   )r   rS  rT  rk  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   rd    r   rd  r   r)  r'  r   )r[  r   r   r   rP   r   r6   r   r   rT   
providedBy)r   r   r   rd  rZ  r  r   r   r   __check_implementer_redundant  s   z2Test_classImplements.__check_implementer_redundantc                 C   r\  )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  r]  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   rJ   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   rr  )r   rK   r   r   r   r   r   r   r   r6   rE   )r   rK   r   r   r   r
   rr  r   r   r   $test_redundant_implementer_Interface   s   "z9Test_classImplements.test_redundant_implementer_Interfacec                 C   s   ||fS r   r   r   applied_firstapplied_secondr   r   r   _order_for_two     z#Test_classImplements._order_for_twoc                    s   ddl m} td}td}|| |f _G  fddd}| _| || | |j  |  j| |  j| 	|| d S )Nr   rz   r   r   c                       r  )z<Test_classImplements.test_w_existing_Implements.<locals>.FooNr   r   r  r   r   r
     r   r
   )
r5   r{   r   r   r   r   r   r   r6   rw  r`  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   rz   IRootISecondRootIExtendsRootRootc                       r  )zFTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root1Nr   r   	impl_rootr   r   Root11  r   r  c                       r  )zFTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root2Nr   r   r}  r   r   Root24  r   r  ExtendsRoot1c                       r  )zLTest_classImplements.test_w_existing_Implements_w_bases.<locals>.ExtendsRootNr   r   )impl_extends_rootr   r   ExtendsRoot:  r   r  )r5   r{   r   r1   r   r   r   r   r   r6   rw  rt   )r   r{   ry  rz  r{  r  r  r  r   )r  r~  r   "test_w_existing_Implements_w_bases(  s,   
z7Test_classImplements.test_w_existing_Implements_w_basesN)
r   r   r   r   rp  rq  rs  rw  r.  r  r   r   r   r   rh    s    rh  c                   @      e Zd Zdd Zdd ZdS )Test_classImplementsFirstc                 C   ri  )Nr   )classImplementsFirst)r5   r  ra   )r   rS  rT  r  rl  r   r   r   r   M  rm  z"Test_classImplementsFirst._callFUTc                 C   s   ||fS r   r   rt  r   r   r   rw  U  rx  z(Test_classImplementsFirst._order_for_twoN)r   r   r   r   rw  r   r   r   r   r  K  s    r  c                   @   r  )Test__implements_advicec                 O      ddl m} ||i |S )Nr   )_implements_advice)r5   r  )r   rp   rq   r  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   rz   rj  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   rk  r   r   r
   d  s    r
   r  )r5   r{   rk  r   r   rP   r   r   r   r6   rE   r  r   r  r   test_no_existing_implements_  s   
z3Test__implements_advice.test_no_existing_implementsN)r   r   r   r   r  r   r   r   r   r  Y  s    r  c                   @   <   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )Test_implementerc                 C   rj   )Nr   r   )r5   r   )r   r   r   r   r   rk   s  rl   z Test_implementer._getTargetClassc                 O   rm   r   rn   ro   r   r   r   rr   w  rs   zTest_implementer._makeOnec                 G   s   | j | }||S r   rr   )r   rS  ifaces	decoratorr   r   r   r   z     
zTest_implementer._callFUTc                 C   s&   t d}| |}| t|t  d S rv   )r   rr   r   r&   rf   )r   r   r  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
   rr   r   r   r6   r   ra   r   )r   r   r
   r2   r  rZ  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   lenget_objectsranger   collectr   )r   r  r   begin_countr,   r  	end_countfudge_factorr   r   r   $test_does_not_leak_on_unique_classes  s   z5Test_implementer.test_does_not_leak_on_unique_classesN)	r   r   r   rk   rr   r   r  r  r  r   r   r   r   r  q  s    r  c                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )Test_implementer_onlyc                 C   rj   )Nr   )implementer_only)r5   r  )r   r  r   r   r   rk     rl   z%Test_implementer_only._getTargetClassc                 O   rm   r   rn   ro   r   r   r   rr     rs   zTest_implementer_only._makeOnec                 C   s   |  |}||S r   r  )r   rS  rT  r  r   r   r   r     r  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   rr   r   
ValueError)r   r   r  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                   @   rN  )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   rr   r   r  r  )r   r   r  r  r   r   r   test_method  s   
z!Test_implementer_only.test_methodN)r   r   r   rk   rr   r   r<   r  r   r   r   r   r    s    	r  c                   @   r  )ProvidesClassTestsc                 C   rj   Nr   ProvidesClassr5   r  r   r  r   r   r   rk     rl   z"ProvidesClassTests._getTargetClassc                 O   rm   r   rn   ro   r   r   r   rr     rs   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
   )r5   r  r   rr   r   r   r6   )r   r  r   r
   r  klassrp   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   rr   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'  )r2   r  r   r   _test  s   z7ProvidesClassTests.test___get___instance.<locals>._test)r   rr   r'  r   AttributeError)r   r   r  r  r   r  r   test___get___instance  s   z(ProvidesClassTests.test___get___instanceN)	r   r   r   rk   rr   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_mrosrS   _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  r1  rk   )r   r  r4  r  r   rk        
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   rJ   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      r3   r   )r   rK   r   r   rr   r6   rZ   rf   )r   rK   r   r   r   r   r  r   r   r   %test_overlapping_interfaces_corrected  s   
z>ProvidesClassStrictTests.test_overlapping_interfaces_correctedr   r   r   rk   r  rM  r   r   r4  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   rj   r  r  r  r   r   r   rk   0  rl   z%TestProvidesClassRepr._getTargetClassc                 O   rm   r   rn   ro   r   r   r   rr   4  rs   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   rr   re  r6   )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'  r6   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    n1 s-w   Y  qd S )Nr   r  r   )	r   r  r  r'  r  HIGHEST_PROTOCOLr   PicklingErrorr   )r   r   r  r  protor   r   r   test__repr__module_after_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))sysr5   r  r  r  r  r(  r   r   r'  
addCleanupsetattrr6   r   r  hasattrdelattrr   )
r   r  r  r  r  r   r   orig_providesr  	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))r5   r  r   rr   _v_module_namesr6   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   rr   re  r6   r   r   r   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   rJ   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   rK   r   re  rr   r6   r   )r   rK   r   r   r  r|   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)rr   re  r6   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   rt   __str__r  r   )r  r   r   Object  s    r  zdirectlyProvides(<Object>))rr   r6   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   rn  r   c                   @   r	   )zDTestProvidesClassRepr.test__repr__providedBy_from_class.<locals>.FooNr   r   r   r   r   r
     r3   r
   classImplements(Foo, IFoo))r5   r   rn  r   r6   r   )r   r   rn  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
     r3   r
   z7directlyProvides(Foo, IBar, classImplements(Foo, IFoo)))r5   r  r   rn  r   r6   r   )	r   r  r   rn  r   r   r
   r2   r  r   r   r   #test__repr__providedBy_alsoProvides  s   
z9TestProvidesClassRepr.test__repr__providedBy_alsoProvidesN)r   r   r   rk   rr   r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r  .  s    
.r  c                   @   r.   )Test_Providesc                 O   r  )Nr   r  )r5   r  )r   rp   rq   r  r   r   r   r     r  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
   InstanceDeclarations)r   r  r   _Monkeyr   r6   rE   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   rf   r  r   r   )r   r  r   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   r  )Nr   r  )r5   r  )r   rp   rq   r  r   r   r   r     r  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
   r5   r  r   r   r   r'  r6   rE   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
   )r5   r,  r   r   r   r'  r6   rE   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 |Nr5  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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'  )r5   r  r   r   r   r6   rE   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   r  )Nr   r  )r5   r  )r   rp   rq   r  r   r   r   r   N  r  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
   )	r5   r  r  r   r   r   r'  r6   rE   )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   r  )Nr   )noLongerProvides)r5   r  )r   rp   rq   r  r   r   r   r   x  r  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   r6   rE   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
   r5   r  r   r   r6   rE   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
     r3   r
   )r5   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   rj   Nr   )ClassProvidesBaseFallbackr5   r&  r   r&  r   r   r   rk     r   z.ClassProvidesBaseFallbackTests._getTargetClassc                 C   s   G dd d|   }|||S )Nc                   @   rN  )z8ClassProvidesBaseFallbackTests._makeOne.<locals>.Derivedc                 S   s   || _ || _d S r   )_cls_implements)r   kir   r   r   r     s   
zAClassProvidesBaseFallbackTests._makeOne.<locals>.Derived.__init__N)r   r   r   r   r   r   r   r   r/    r  r/  rn   )r   r  
implementsr/  r   r   r   rr     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
   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
   r2   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   rr   r'  r   r  getattr)r   r   r
   r  barr   r   r   test_w_different_class  s   z5ClassProvidesBaseFallbackTests.test_w_different_classN)r   r   r   rk   rr   r/  r0  r3  r   r   r   r   r$    s    	
r$  c                   @   r  )ClassProvidesBaseTestsc                 C   rj   )Nr   )ClassProvidesBase)r5   r5  )r   r5  r   r   r   rk     rl   z&ClassProvidesBaseTests._getTargetClassc                 C   rj   r%  r'  r(  r   r   r   rL    r   z(ClassProvidesBaseTests._getFallbackClassN)r   r   r   rk   rL  r   r   r   r   r4    s    r4  c                   @   r   )
ClassProvidesTestsc                 C   rj   Nr   r+  r5   r,  r   r,  r   r   r   rk     rl   z"ClassProvidesTests._getTargetClassc                 O   rm   r   rn   ro   r   r   r   rr     rs   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
     r3   r
   )	r5   r   r   rr   re  r'  r   r6   rE   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
     r3   r
   )r5   r   r   rr   re  r'  r6   r   r:  r   r   r   r     s   
z"ClassProvidesTests.test___reduce__N)r   r   r   rk   rr   r<  r   r   r   r   r   r6    s
    r6  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>  r4  r+  r   rk     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   rJ   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  r3   r?  rS  )	r   rK   r   r   re  rf   rr   r6   rZ   )r   rK   r   r   r   r?  rS  r  r   r   r   r  (  s(   
z>ClassProvidesStrictTests.test_overlapping_interfaces_correctedr  r   r   r4  r   r=    r  r=  c                   @   rg  )TestClassProvidesReprc                 C   rj   r7  r8  r9  r   r   r   rk   I  rl   z%TestClassProvidesRepr._getTargetClassc                 O   rm   r   rn   ro   r   r   r   rr   M  rs   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   rJ   c                   @   r   )z=TestClassProvidesRepr.test__repr__providing_one.<locals>.IFoor  Nr  r   r   r   r   r   Z  r   r   z-directlyProvides(TestClassProvidesRepr, IFoo))r   rK   rr   re  r6   r   )r   rK   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  r3   r
   r  )r5   r   r   r   r6   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                   @   rN  )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  rE  zclassImplements(z.?)zclassImplements(Callable))r5   r   r6   r   r   )r   r   rE  r  cr   r   r   *test__repr__implementedBy_generic_callable}  s   

z@TestClassProvidesRepr.test__repr__implementedBy_generic_callableN)
r   r   r   rk   rr   rA  rB  r  rC  rG  r   r   r   r   r@  G  s    r@  c                   @   r  )Test_directlyProvidedByc                 O   r  )Nr   )directlyProvidedBy)r5   rI  )r   rp   rq   rI  r   r   r   r     r  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
     r3   r
   )r5   r   r   r6   rE   r   )r   r   r   r
   r2   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
   )r5   r  r   r6   rE   r   )r   r  r   r
   r2   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
     r3   r
   )r5   r  r   r   r6   rE   r   )r   r  r   r   r   r
   r2   r   r   r   )test_w_declarations_in_instance_and_class  s   
zATest_directlyProvidedBy.test_w_declarations_in_instance_and_classN)r   r   r   r   rJ  rK  rL  rM  r   r   r   r   rH    s    rH  c                   @   r.   )Test_providerc                 C   rj   )Nr   )provider)r5   rO  )r   rO  r   r   r   rk     rl   zTest_provider._getTargetClassc                 O   rm   r   rn   ro   r   r   r   rr     rs   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
     r3   r
   )r5   r,  r   rr   r   r'  r6   rE   r  r   r   r   r    s   zTest_provider.test_w_classN)r   r   r   rk   rr   r  r   r   r   r   rN    s    rN  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   rR  r   
z
def foo():    moduleProvides(IFoo)r2   )r5   rR  r   joinr%   r   r&   )r   rR  r   r)   r*   CODEr2   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   rQ  r   rS  rT  rU  zclass Foo(object):rV  r5   rR  r   rW  r   r&   r%   )r   rR  r   r)   r*   rX  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   rQ  r   rS  rT  rU  moduleProvides(IFoo)r'  )r5   rR  r   rW  r%   r6   rE   )r   rR  r   r)   rX  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   rQ  r   rS  rT  rU  r\  rZ  )r   rR  r   r)   rX  r   r   r   #test_called_twice_from_module_scope  s   "z7Test_moduleProvides.test_called_twice_from_module_scopeN)r   r   r   rY  r[  r]  r^  r   r   r   r   rP    s
    rP  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   rj   )Nr   )getObjectSpecificationFallback)r5   r`  )r   r`  r   r   r   rL    r   z5Test_getObjectSpecificationFallback._getFallbackClassc                 O   rm   r   rn   ro   r   r   r   r   "  rs   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   r6   rE   r   r
   r2   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   r2   =  r   zOTest_getObjectSpecificationFallback.test_existing_provides_is_spec.<locals>.foo)r5   r  r   r   r   r'  )r   r  r   r2   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   r2   F  r   zSTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec.<locals>.foo)rf   r'  r   r6   rE   )r   r2   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
   )r5   r  r   r   r6   rE   )r   r  r   r
   r2   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
   ]  r3   r
   )r5   r   r   r   r6   rE   r   r   r   r
   r2   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
   rb  rc  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 )Nr5  )ro  r'  rp  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                   @   rt  )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
   r5  r   )r   rv  r   r6   	exceptionrp   )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   rL  rk   r   rd  re  rf  rg  ri  rk  rr  rs  ru  ry  r   r   r   r   r_    s    		
r_  c                   @   rN  )Test_getObjectSpecificationc                 C   rj   )Nr   )getObjectSpecification)r5   r{  )r   r{  r   r   r   rk     rl   z+Test_getObjectSpecification._getTargetClassNrP  r   r   r   r   rz    rQ  rz  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   rj   )Nr   )providedByFallback)r5   r}  )r   r}  r   r   r   rL    r   z)Test_providedByFallback._getFallbackClassc                 O   rm   r   rn   ro   r   r   r   r     rs   z Test_providedByFallback._callFUTc                 C   rj  )Nc                   @   r	   )zNTest_providedByFallback.test_wo_providedBy_on_class_wo_implements.<locals>.FooNr   r   r   r   r   r
     r   r
   rb  rc  r   r   r   )test_wo_providedBy_on_class_wo_implements  rl  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
   )r5   r  r   r)  r   r6   rE   )r   r  r   r
   r2   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
   )rf   r)  r   r6   rE   rc  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
     r3   r
   )r5   r   r   rf   r)  r   r6   rE   rh  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
   rf   r)  r'  r   r   r   r
   r2   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
   r  r  r   r   r   @test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class  s   
zXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_classc                 C   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
     r3   r
   )	r5   r   r   rf   r)  r'  r   r6   rE   rh  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   rJ   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   	  r3   r   c                   @   r	   )zRTest_providedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr   r   r   r   r   r/  	  r3   r/  
r   rK   r5   r   r6   rE   r   r1  ra   r;  )
r   rK   r   r   r   r   r/  derivedr3  r<  r4  r   r   r6    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   rJ   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/  	  r3   r/  r0  )	r   rK   r   r   r   r   r/  r  r3  r4  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   rJ   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	  r3   r/  r  )	r   rK   r   r   r   r/  r  r3  r<  r4  r   r   r?  (	  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   rJ   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	  r3   r   c                   @   r	   )zQTest_providedByFallback.test_super_when_object_directly_provides.<locals>.DerivedNr   r   r   r   r   r/  M	  r   r/  )r   rK   r5   r  r   r6   rE   r   r1  ra   r;  )r   rK   r  r   r   r   r   r/  r  r3  r<  r4  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   rJ   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   r@  b	  r   r@  c                   @   r	   )zMTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr   r   r   r   r   rA  e	  r   rA  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   rB  k	  r   rB  c                   @   r	   )zNTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr   r   r   r   r   r   n	  r3   r   c                   @   r	   )zLTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr   r   r   r   r   rC  r	  r3   rC  c                   @   r	   )zLTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr   r   r   r   r   rD  v	  r3   rD  c                   @   r	   )zQTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr   r   r   r   r   r/  z	  r3   r/  rE  rF  r4  r   r   rK  [	  s>   


z@Test_providedByFallback.test_super_multi_level_multi_inheritancec                 C   s   t j| | jdtd d S )Nr)  )ro  r5  )r   rq  r   rf   r   r   r   r   .test_catches_only_AttributeError_on_providedBy	  s   

zFTest_providedByFallback.test_catches_only_AttributeError_on_providedByc                 C   rm  )Nr5  rn  rp  r   r   r   r   rs  	  s   
zATest_providedByFallback.test_catches_only_AttributeError_on_class)r   r   r   rL  rk   r   r~  r  r  r  r  r  r  r6  r>  r?  r  rK  r  rs  rM  r   r   r4  r   r|    s$    	
1r|  c                   @   rN  )Test_providedByc                 C   rj   )Nr   r  )r5   rn  )r   rn  r   r   r   rk   	  rl   zTest_providedBy._getTargetClassNrP  r   r   r   r   r  	  rQ  r  c                   @   sP   e Zd Zdd ZeZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd ZdS )*ObjectSpecificationDescriptorFallbackTestsc                 C   rj   )Nr   )%ObjectSpecificationDescriptorFallback)r5   r  )r   r  r   r   r   rL  	  s   z<ObjectSpecificationDescriptorFallbackTests._getFallbackClassc                 O   rm   r   rn   ro   r   r   r   rr   	  rs   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
   )r5   r  r   r'  rr   r)  r6   rE   )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
   	  r3   r
   )	r5   r  r   r   r'  rr   r)  r6   rE   )r   r  r   r   r   r
   r2   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
   	  r3   r
   )
r5   r  r  r   r   r'  rr   r)  r6   rE   )	r   r  r  r   r   r   r   r
   r2   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   r  c                       s$   e Zd Z Ze fddZdS )znObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Fooc                    s    r   r   r   )r  r   r   r'  	  rU  z{ObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Foo.__provides__Nr   r   r   rr   r)  r  r'  r   r  r   r   r   r
   	  s    r
   r)  )	Exceptionr   r1  r   r   r  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   r  	  r   r  c                       s    e Zd Z  Zedd ZdS )zeObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Fooc                 S   r   r   )r  r   r   r   r   r'  	  rU  zrObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Foo.__provides__Nr  r   r   r   r   r
   	  s    r
   r)  )r  r1  assertIsNotNone)r   r  r
   r2   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   rJ   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'  
  rU  zfObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Foo.__provides__N)r   r   r   r  r'  r   r   r   r   r
   
  s    r
   r)  )r   rK   r   rr   r)  r1  ra   )r   rK   r   r   r
   r  r   r   r   !test_None_in__provides__overrides	  s   
zLObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overridesN)r   r   r   rL  rk   rr   r  r  r  r  r  r  r   r   r   r   r  	  s    r  c                   @   rN  )"ObjectSpecificationDescriptorTestsc                 C   rj   )Nr   )ObjectSpecificationDescriptor)r5   r  )r   r  r   r   r   rk   
  rl   z2ObjectSpecificationDescriptorTests._getTargetClassNrP  r   r   r   r   r  
  s    r  c                   @   r.   )r  c                    s<    | _  fdd|D | _| D ]
\}}t || qd S )Nc                    s   i | ]}|t  |qS r   )r1  ).0keymoduler   r   
<dictcomp>!
  s    z$_Monkey.__init__.<locals>.<dictcomp>)r  
to_restoreitemsr  )r   r  rq   r  r  r   r  r   r   
  s
   z_Monkey.__init__c                 C   rD  r   r   r   r   r   r   	__enter__%
  r  z_Monkey.__enter__c                 C   s&   | j  D ]\}}t| j|| qd S r   )r  r  r  r  )r   exc_typeexc_valexc_tbr  r  r   r   r   __exit__(
  s   z_Monkey.__exit__Nr   r   r   r   r  r  r   r   r   r   r  
  s    r  c                   @   r.   )r	  c                 K   s8   || _ t||| _| j | _| j  | j| d S r   )r  r1  targetcopyr  clearupdate)r   r  attrnamerq   r   r   r   r   0
  s
   
z_MonkeyDict.__init__c                 C   s   | j S r   )r  r   r   r   r   r  7
  r   z_MonkeyDict.__enter__c                 C   s   | j   | j | j d S r   )r  r  r  r  )r   r  r  r  r   r   r   r  :
  s   
z_MonkeyDict.__exit__Nr  r   r   r   r   r	  -
  s    r	  )6r  unittestrL   r   r  r   r   r   #zope.interface.tests.test_interfacer   r   r   r
   r   r   r    TestCaser/   r?   ri   r   r   r   rO  rR  r^  rh  r  r  r  r  r  r  r  r  r	  r  r  r$  r4  r6  r=  r@  rH  rN  rP  r_  rz  r|  r  r  r  r  r	  r   r   r   r   <module>   s   #: ;C}  a	)0o>!8& D!:*;
4$-N38x	 	
m