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

r  c                   @   r   )Test_alsoProvidesc                 O   r  )Nr   r  )r)   r  )r   rh   ri   r  r   r   r   r     r  zTest_alsoProvides._callFUTc                 C   r  )Nr   r  ro   rq   c                   @   r$   )z8Test_alsoProvides.test_wo_existing_provides.<locals>.FooNr%   r   r   r   r   r&     r5   r&   r  r   r   r   r   test_wo_existing_provides  r#  z+Test_alsoProvides.test_wo_existing_providesc                 C   s   ddl m} ddl m} ddlm} |d}|d}G dd dt}| }||| | || | |j| | 	t
|j||g d S )	Nr   r  r  ro   rq   r   c                   @   r$   )z7Test_alsoProvides.test_w_existing_provides.<locals>.FooNr%   r   r   r   r   r&     r5   r&   )r)   r  r  rE   rp   r*   r   r   r"  r   r>   )r   r  r  rp   rq   r   r&   r!  r   r   r   test_w_existing_provides  s   
z*Test_alsoProvides.test_w_existing_providesN)r   r   r   r   r5  r6  r   r   r   r   r4    s    r4  c                   @   r  )Test_noLongerProvidesc                 O   r  )Nr   )noLongerProvides)r)   r8  )r   rh   ri   r8  r   r   r   r     r  zTest_noLongerProvides._callFUTc                 C   sL   ddl m} |d}G dd dt}| }| || | t|jg  d S )Nr   ro   rq   c                   @   r$   )z<Test_noLongerProvides.test_wo_existing_provides.<locals>.FooNr%   r   r   r   r   r&     r5   r&   )rE   rp   r*   r   r   r>   r"  r+  r   r   r   r5    s   z/Test_noLongerProvides.test_wo_existing_providesc                 C   sb   ddl m} ddlm} |d}G dd dt}| }||| | || | t|jg  d S )Nr   r  ro   rq   c                   @   r$   )z?Test_noLongerProvides.test_w_existing_provides_hit.<locals>.FooNr%   r   r   r   r   r&     r5   r&   	r)   r  rE   rp   r*   r   r   r>   r"  )r   r  rp   rq   r&   r!  r   r   r   test_w_existing_provides_hit  s   
z2Test_noLongerProvides.test_w_existing_provides_hitc                 C   sl   ddl m} ddlm} |d}|d}G dd dt}| }||| | || | t|j|g d S )Nr   r  ro   rq   r   c                   @   r$   )z@Test_noLongerProvides.test_w_existing_provides_miss.<locals>.FooNr%   r   r   r   r   r&     r5   r&   r9  )r   r  rp   rq   r   r&   r!  r   r   r   test_w_existing_provides_miss  s   
z3Test_noLongerProvides.test_w_existing_provides_missc                 C   sT   ddl m} ddlm} |d}||G dd dt}| }| t| j|| d S )Nr   r   ro   rq   c                   @   r$   )zDTest_noLongerProvides.test_w_iface_implemented_by_class.<locals>.FooNr%   r   r   r   r   r&     r'   r&   )r)   r   rE   rp   r*   r   r  r   )r   r   rp   rq   r&   r!  r   r   r   !test_w_iface_implemented_by_class  s   z7Test_noLongerProvides.test_w_iface_implemented_by_classN)r   r   r   r   r5  r:  r;  r<  r   r   r   r   r7    s    	r7  c                   @   r  )ClassProvidesBaseFallbackTestsc                 C   rb   Nr   )ClassProvidesBaseFallbackr)   r?  r   r?  r   r   r   rc     r   z.ClassProvidesBaseFallbackTests._getTargetClassc                 C   s   G dd d|   }|||S )Nc                   @   rH  )z8ClassProvidesBaseFallbackTests._makeOne.<locals>.Derivedc                 S   s   || _ || _d S r.   )_cls_implements)r   kir   r   r   r     s   
zAClassProvidesBaseFallbackTests._makeOne.<locals>.Derived.__init__N)r   r   r   r   r   r   r   r   r)    r  r)  rf   )r   r  r  r)  r   r   r   rj     s   
z'ClassProvidesBaseFallbackTests._makeOnec                 C   sJ   ddl m} |d}G dd dt}| || }|_| |j|u  d S )Nr   ro   rq   c                   @   r$   )zGClassProvidesBaseFallbackTests.test_w_same_class_via_class.<locals>.FooNr%   r   r   r   r   r&     r5   r&   )rE   rp   r*   rj   r"  rM   )r   rp   rq   r&   cpbpr   r   r   test_w_same_class_via_class  s
   z:ClassProvidesBaseFallbackTests.test_w_same_class_via_classc                 C   sJ   ddl m} |d}G dd dt}| }| |||_| |j| d S )Nr   ro   rq   c                   @   r$   )zJClassProvidesBaseFallbackTests.test_w_same_class_via_instance.<locals>.FooNr%   r   r   r   r   r&     r5   r&   r  )r   rp   rq   r&   r#   r   r   r   test_w_same_class_via_instance  s   z=ClassProvidesBaseFallbackTests.test_w_same_class_via_instancec                 C   sl   ddl m} |d}G dd dt}G dd d|}| }| |||_| tt|d | tt|d d S )	Nr   ro   rq   c                   @   r$   )zBClassProvidesBaseFallbackTests.test_w_different_class.<locals>.FooNr%   r   r   r   r   r&     r5   r&   c                   @   r$   )zBClassProvidesBaseFallbackTests.test_w_different_class.<locals>.BarNr%   r   r   r   r   r    r5   r  r"  )rE   rp   r*   rj   r"  r   r  getattr)r   rp   rq   r&   r  barr   r   r   test_w_different_class  s   z5ClassProvidesBaseFallbackTests.test_w_different_classN)r   r   r   rc   rj   rG  rH  rK  r   r   r   r   r=    s    		r=  c                   @   r  )ClassProvidesBaseTestsc                 C   rb   )Nr   )ClassProvidesBase)r)   rM  )r   rM  r   r   r   rc     rd   z&ClassProvidesBaseTests._getTargetClassc                 C   rb   r>  r@  rA  r   r   r   rF    r   z(ClassProvidesBaseTests._getFallbackClassN)r   r   r   rc   rF  r   r   r   r   rL    s    rL  c                   @   r   )
ClassProvidesTestsc                 C   rb   Nr   r%  r)   r&  r   r&  r   r   r   rc     rd   z"ClassProvidesTests._getTargetClassc                 O   re   r.   rf   rg   r   r   r   rj     rk   zClassProvidesTests._makeOnec                 C   s   ddl m} ddlm} |d}|d}||G dd dt}| |t|| }|_| |j|u  | 	t
| j|g d S )Nr   r   ro   rq   r   c                   @   r$   )z7ClassProvidesTests.test_w_simple_metaclass.<locals>.FooNr%   r   r   r   r   r&   '  r'   r&   )r)   r   rE   rp   r*   rj   rb  r"  rM   r   r>   r   r   rp   rq   r   r&   cpr   r   r   test_w_simple_metaclass"  s   z*ClassProvidesTests.test_w_simple_metaclassc                 C   s~   ddl m} ddlm} |d}|d}||G dd dt}| |t|| }|_| |	 t||t||ff d S )Nr   r   ro   rq   r   c                   @   r$   )z/ClassProvidesTests.test___reduce__.<locals>.FooNr%   r   r   r   r   r&   3  r'   r&   )
r)   r   rE   rp   r*   rj   rb  r"  r   r   rR  r   r   r   r   .  s   
z"ClassProvidesTests.test___reduce__N)r   r   r   rc   rj   rT  r   r   r   r   r   rN    s
    rN  c                       r  )ClassProvidesStrictTestsc                    r  )Nc                       r  )zEClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvidesc                    r  r  r  r  r%  r   r   r  A  r  zVClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvides._do_calculate_roNr  r   r%  r   r   StrictClassProvides@  r  rV  )r+  rU  rc   )r   rV  r.  r%  r   rc   >  r  z(ClassProvidesStrictTests._getTargetClassc              	   C   s   ddl m} ddl m} ddl m} G dd d|}||G dd dt}|d	tfi }| |||}| |j|||||t|t|f d S )
Nr   r   rC   r   c                   @   r$   )zMClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr%   r   r   r   r   r   L  r5   r   c                   @   r$   )zQClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.metaclassNr%   r   r   r   r   	metaclassO  r'   rW  rM  )	r   r   rD   r   rb  r*   rj   r   rS   )r   r   rD   r   r   rW  rM  r  r   r   r   r  E  s(   
z>ClassProvidesStrictTests.test_overlapping_interfaces_correctedr  r   r   r.  r   rU  ;  r  rU  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestClassProvidesReprc                 C   rb   rO  rP  rQ  r   r   r   rc   f  rd   z%TestClassProvidesRepr._getTargetClassc                 O   re   r.   rf   rg   r   r   r   rj   j  rk   zTestClassProvidesRepr._makeOnec                 C   s$   |  t| t}| t|d d S )Nz'directlyProvides(TestClassProvidesRepr)r	  r
  r   r   r   test__repr__emptym  s
   z'TestClassProvidesRepr.test__repr__emptyc                 C   sB   ddl m} G dd d|}| t| t|}| t|d d S )Nr   rC   c                   @   r   )z=TestClassProvidesRepr.test__repr__providing_one.<locals>.IFoor  Nr  r   r   r   r   rq   v  r   rq   z-directlyProvides(TestClassProvidesRepr, IFoo))r   rD   rj   rb  r   r   )r   rD   rq   r  r   r   r   test__repr__providing_onet  s   z/TestClassProvidesRepr.test__repr__providing_onec                 C   sV   ddl m} |ddd}|ddd}|d}| t| t|||}| t|d d S )	Nr   ro   rq   r  r  r   r   z>directlyProvides(TestClassProvidesRepr, IFoo, IBaz, mod2.IFoo)r  r  r   r   r   r    s   z1TestClassProvidesRepr.test__repr__duplicate_namesc                 C   s`   ddl m} ddl m} ddlm} |d}||G dd dt}||}| t|d d S )	Nr   r   r   ro   rq   c                   @   r$   )z<TestClassProvidesRepr.test__repr__implementedBy.<locals>.FooNr%   r   r   r   r   r&     r'   r&   r  )r)   r   r   rE   rp   r*   r   r   )r   r   r   rp   rq   r&   r  r   r   r   test__repr__implementedBy  s   z/TestClassProvidesRepr.test__repr__implementedByc                 C   sd   ddl m} G dd dt}|| }| t|dtf  | }d|_||}| t|d d S )Nr   r   c                   @   rH  )zRTestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callablec                 S      | S r.   r   r   r   r   r   r     r   z[TestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callable.__call__N)r   r   r   r   r   r   r   r   Callable  r  r]  zclassImplements(%s.?)zclassImplements(Callable))r)   r   r*   r   r   r   )r   r   r]  r  cr   r   r   *test__repr__implementedBy_generic_callable  s   
z@TestClassProvidesRepr.test__repr__implementedBy_generic_callableN)
r   r   r   rc   rj   rY  rZ  r  r[  r_  r   r   r   r   rX  d  s    rX  c                   @   r  )Test_directlyProvidedByc                 O   r  )Nr   )directlyProvidedBy)r)   ra  )r   rh   ri   ra  r   r   r   r     r  z Test_directlyProvidedBy._callFUTc                 C   s0   G dd dt }| }| t| |g  d S )Nc                   @   r$   )zNTest_directlyProvidedBy.test_wo_declarations_in_class_or_instance.<locals>.FooNr%   r   r   r   r   r&     r5   r&   r  r   r   r   r   )test_wo_declarations_in_class_or_instance  s   zATest_directlyProvidedBy.test_wo_declarations_in_class_or_instancec                 C   sX   ddl m} ddlm} |d}||G dd dt}| }| t| |g  d S )Nr   r   ro   rq   c                   @   r$   )zRTest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance.<locals>.FooNr%   r   r   r   r   r&     r'   r&   )r)   r   rE   rp   r*   r   r>   r   )r   r   rp   rq   r&   r#   r   r   r   -test_w_declarations_in_class_but_not_instance  s   zETest_directlyProvidedBy.test_w_declarations_in_class_but_not_instancec                 C   s\   ddl m} ddlm} |d}G dd dt}| }||| | t| ||g d S )Nr   r  ro   rq   c                   @   r$   )zRTest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class.<locals>.FooNr%   r   r   r   r   r&     r5   r&   )r)   r  rE   rp   r*   r   r>   r   )r   r  rp   rq   r&   r#   r   r   r   -test_w_declarations_in_instance_but_not_class  s   
zETest_directlyProvidedBy.test_w_declarations_in_instance_but_not_classc                 C   sx   ddl m} ddl m} ddlm} |d}|d}||G dd dt}| }||| | t| ||g d S )	Nr   r  r   ro   rq   r   c                   @   r$   )zNTest_directlyProvidedBy.test_w_declarations_in_instance_and_class.<locals>.FooNr%   r   r   r   r   r&     r'   r&   )	r)   r  r   rE   rp   r*   r   r>   r   )r   r  r   rp   rq   r   r&   r#   r   r   r   )test_w_declarations_in_instance_and_class  s   
zATest_directlyProvidedBy.test_w_declarations_in_instance_and_classN)r   r   r   r   rb  rc  rd  re  r   r   r   r   r`    s    

r`  c                   @   r   )Test_classProvidesc           
      C   s   dd l }ddlm} ddlm} |d}||d}i }dddg}t||| |d	 }|jd
d%}	|  | 	t
| tsO| t|	d W d    d S W d    d S 1 sZw   Y  d S )Nr   classProvidesro   rq   rh  rq   r  r      classProvides(IFoo)r#   Tr   )r   r)   rh  rE   rp   r  r   r   r   r   r   r   r   r   )
r   r   rh  rp   rq   r   r   r  r#   r   r   r   r   r    s(   
"z,Test_classProvides.test_called_from_functionc           
   	   C   r  )Nr   rg  ro   rq   r   )rh  rq   r   r  )r  rj  z    classProvides(IBar)Tr   r
   )r   r)   rh  rE   rp   r  r   r   r   r   r   r   r   r   )
r   r   rh  rp   rq   r   r   r   r  r   r   r   r   r    r  z/Test_classProvides.test_called_twice_from_classc           	      C   r  )
Nr   rg  ro   rq   ri  r  r  rj  r&   )	r)   rh  rE   rp   r  r   r#  r   r>   )	r   rh  rp   rq   r   r   r  r&   r  r   r   r   r    r  z.Test_classProvides.test_called_once_from_classNr  r   r   r   r   rf    s    rf  c                   @   r   )Test_providerc                 C   rb   )Nr   )provider)r)   rl  )r   rl  r   r   r   rc   !  rd   zTest_provider._getTargetClassc                 O   re   r.   rf   rg   r   r   r   rj   %  rk   zTest_provider._makeOnec                 C   s`   ddl m} ddlm} |d}| |G dd dt}| |j| | t	|j|g d S )Nr   r%  ro   rq   c                   @   r$   )z'Test_provider.test_w_class.<locals>.FooNr%   r   r   r   r   r&   ,  r'   r&   )
r)   r&  rE   rp   rj   r*   r   r"  r   r>   r$  r   r   r   r%  (  s   zTest_provider.test_w_classN)r   r   r   rc   rj   r%  r   r   r   r   rk    s    rk  c                   @   r   )
Test_moduleProvidesc                 C   sb   ddl m} ddlm} |d}d||d}i }ddd	g}t||| |d
 }| t| d S )Nr   moduleProvidesro   rq   zope.interface.tests.foor   ro  rq   r  r      moduleProvides(IFoo)r#   )r)   ro  rE   rp   r  r   r   r   )r   ro  rp   rq   r   r   r  r#   r   r   r   r  6  s   z-Test_moduleProvides.test_called_from_functionc                 C   sz   ddl m} ddlm} |d}d||d}i }ddd	g}| t t||| W d    d S 1 s6w   Y  d S )
Nr   rn  ro   rq   rp  rq  r  r  rr  r)   ro  rE   rp   r  r   r   r   )r   ro  rp   rq   r   r   r  r   r   r   test_called_from_classE  s   "z*Test_moduleProvides.test_called_from_classc                 C   s`   ddl m} ddlm} |d}d||d}ddg}t|| |d	 }| t||g d S )
Nr   rn  ro   rq   rp  rq  r  moduleProvides(IFoo)r"  )r)   ro  rE   rp   r  r   r   r>   )r   ro  rp   rq   r   r  r  r   r   r   "test_called_once_from_module_scopeS  s   
z6Test_moduleProvides.test_called_once_from_module_scopec                 C   st   ddl m} ddlm} |d}d||d}dddg}| t t|| W d    d S 1 s3w   Y  d S )	Nr   rn  ro   rq   rp  rq  r  ru  rs  )r   ro  rp   rq   r   r  r   r   r   #test_called_twice_from_module_scope`  s   "z7Test_moduleProvides.test_called_twice_from_module_scopeN)r   r   r   r  rt  rv  rw  r   r   r   r   rm  3  s
    rm  c                   @   sp   e Zd Zdd ZeZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )#Test_getObjectSpecificationFallbackc                 C   rb   )Nr   )getObjectSpecificationFallback)r)   ry  )r   ry  r   r   r   rF  q  r   z5Test_getObjectSpecificationFallback._getFallbackClassc                 O   re   r.   rf   rg   r   r   r   r   x  rk   z,Test_getObjectSpecificationFallback._callFUTc                    s<   i  G  fdddt }| }| |}| t|g  d S )Nc                       s    e Zd Z fddZdd ZdS )zTTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Fooc                    s2   |dkrt |z | W S  ty   t |w r&  )r  KeyErrorr   r/  r   r   r'  ~  s   
zeTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__getattribute__c                 S   r-   r.   r/   r-  r   r   r   r1    r   z`Test_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__setattr__Nr2  r   r/  r   r   r&   }  s    r&   r*   r   r   r>   r   r&   r#   r  r   r/  r   #test_wo_existing_provides_classless{  s
   
zGTest_getObjectSpecificationFallback.test_wo_existing_provides_classlessc                 C   sN   ddl m} ddlm} |d}dd }||| | |}| ||j d S )Nr   r  ro   rq   c                   S   r-   r.   r/   r   r   r   r   r#     r   zOTest_getObjectSpecificationFallback.test_existing_provides_is_spec.<locals>.foo)r)   r  rE   rp   r   r   r"  )r   r  rp   rq   r#   r  r   r   r   test_existing_provides_is_spec  s   

zBTest_getObjectSpecificationFallback.test_existing_provides_is_specc                 C   s.   dd }t  |_| |}| t|g  d S )Nc                   S   r-   r.   r/   r   r   r   r   r#     r   zSTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec.<locals>.foo)r*   r"  r   r   r>   )r   r#   r  r   r   r   "test_existing_provides_is_not_spec  s   
zFTest_getObjectSpecificationFallback.test_existing_provides_is_not_specc                 C   s`   ddl m} ddlm} |d}G dd dt}| }||| | |}| t||g d S )Nr   r  ro   rq   c                   @   r$   )zGTest_getObjectSpecificationFallback.test_existing_provides.<locals>.FooNr%   r   r   r   r   r&     r5   r&   )r)   r  rE   rp   r*   r   r   r>   )r   r  rp   rq   r&   r#   r  r   r   r   test_existing_provides  s   

z:Test_getObjectSpecificationFallback.test_existing_providesc                 C   s^   ddl m} ddlm} |d}||G dd dt}| }| |}| t||g d S )Nr   r   ro   rq   c                   @   r$   )zWTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implements.<locals>.FooNr%   r   r   r   r   r&     r'   r&   )r)   r   rE   rp   r*   r   r   r>   r   r   rp   rq   r&   r#   r  r   r   r   &test_wo_provides_on_class_w_implements  s   
zJTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implementsc                 C   4   G dd dt }| }| |}| t|g  d S )Nc                   @   r$   )zXTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements.<locals>.FooNr%   r   r   r   r   r&     r5   r&   r{  r|  r   r   r   'test_wo_provides_on_class_wo_implements     
zKTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implementsc                 C   s   t j| | jdd d S )Nr"  expected_missingr   test_raisesr   r   r   r   r   ,test_catches_only_AttributeError_on_provides  r   zPTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_providesc                 C   s   t j| | jdd d d S )Nr/  )r  r"  r  r   r   r   r   )test_catches_only_AttributeError_on_class  s   
zMTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_classc                 C   s    G dd dt }| |  d S )Nc                   @      e Zd ZeeZdS )zyTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_AttributeError.<locals>.FooN)r   r   r   r   r  r"  r   r   r   r   r&     r  r&   )r*   r   r  r   r   r   Htest_raises_AttributeError_when_provides_fails_type_check_AttributeError  s   zlTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_AttributeErrorc                 C   sr   G dd dt }tr1| t}| |  W d    n1 s w   Y  | d|jjd  d S | |  d S )Nc                   @   r  )zwTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_RuntimeError.<locals>.FooN)r   r   r   r   RuntimeErrorr"  r   r   r   r   r&     r  r&   r/  r   )r*   r   r   r  r   r   	exceptionrh   )r   r&   excr   r   r   Ftest_raises_AttributeError_when_provides_fails_type_check_RuntimeError  s   zjTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_RuntimeErrorN)r   r   r   rF  rc   r   r}  r~  r  r  r  r  r  r  r  r  r   r   r   r   rx  o  s    

rx  c                   @   rH  )Test_getObjectSpecificationc                 C   rb   )Nr   )getObjectSpecification)r)   r  )r   r  r   r   r   rc     rd   z+Test_getObjectSpecification._getTargetClassNrJ  r   r   r   r   r    rK  r  c                       s   e Zd Zdd ZeZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Z fddZ fddZ fddZ fddZ fddZdd Zdd  Z  ZS )!Test_providedByFallbackc                 C   rb   )Nr   )providedByFallback)r)   r  )r   r  r   r   r   rF    r   z)Test_providedByFallback._getFallbackClassc                 O   re   r.   rf   rg   r   r   r   r     rk   z Test_providedByFallback._callFUTc                 C   r  )Nc                   @   r$   )zNTest_providedByFallback.test_wo_providedBy_on_class_wo_implements.<locals>.FooNr%   r   r   r   r   r&     r5   r&   r{  r|  r   r   r   )test_wo_providedBy_on_class_wo_implements  r  zATest_providedByFallback.test_wo_providedBy_on_class_wo_implementsc                 C   sb   ddl m} ddlm} |d}G dd dt}| }||||_| |}| t||g d S )Nr   r  ro   rq   c                   @   r$   )zATest_providedByFallback.test_w_providedBy_valid_spec.<locals>.FooNr%   r   r   r   r   r&     r5   r&   )	r)   r  rE   rp   r*   r#  r   r   r>   )r   r  rp   rq   r&   r#   r  r   r   r   test_w_providedBy_valid_spec  s   
z4Test_providedByFallback.test_w_providedBy_valid_specc                 C   s<   G dd dt }| }t  |_| |}| t|g  d S )Nc                   @   r$   )zCTest_providedByFallback.test_w_providedBy_invalid_spec.<locals>.FooNr%   r   r   r   r   r&   	  r5   r&   )r*   r#  r   r   r>   r|  r   r   r   test_w_providedBy_invalid_spec	  s
   
z6Test_providedByFallback.test_w_providedBy_invalid_specc                 C   sf   ddl m} ddlm} |d}||G dd dt}| }t |_| |}| t||g d S )Nr   r   ro   rq   c                   @   r$   )zVTest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements.<locals>.FooNr%   r   r   r   r   r&   	  r'   r&   )	r)   r   rE   rp   r*   r#  r   r   r>   r  r   r   r   1test_w_providedBy_invalid_spec_class_w_implements
	  s   
zITest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implementsc                 C   sF   G dd dt }| }t  |_t   }|_| |}| ||u  d S )Nc                   @   r$   )zcTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_class.<locals>.FooNr%   r   r   r   r   r&   	  r5   r&   r*   r#  r"  r   rM   r   r&   r#   expectedr  r   r   r   >test_w_providedBy_invalid_spec_w_provides_no_provides_on_class	  s   
zVTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_classc                 C   sN   G dd dt }| }t  |_t   }|_t  |_| |}| ||u  d S )Nc                   @   r$   )zeTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class.<locals>.FooNr%   r   r   r   r   r&    	  r5   r&   r  r  r   r   r   @test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class	  s   
zXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_classc                 C   st   ddl m} ddlm} |d}||G dd dt}| }t |_t  |_|_| |}| t	||g d S )Nr   r   ro   rq   c                   @   r$   )zeTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_class.<locals>.FooNr%   r   r   r   r   r&   -	  r'   r&   )
r)   r   rE   rp   r*   r#  r"  r   r   r>   r  r   r   r   @test_w_providedBy_invalid_spec_w_provides_same_provides_on_class)	  s   
zXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_classc           
         s   ddl m} ddlm} G dd d|}G dd d|}||G dd	 d	t}||G d
d d|}| }| t| |||g t||}| |}	| 	|	j
 | t|	|g d S )Nr   rC   r   c                   @   r$   )zPTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr%   r   r   r   r   r   :	  r5   r   c                   @   r$   )zSTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr%   r   r   r   r   r   =	  r5   r   c                   @   r$   )zOTest_providedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr%   r   r   r   r   r   @	  r'   r   c                   @   r$   )zRTest_providedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr%   r   r   r   r   r)  D	  r'   r)  r   rD   r)   r   r*   r   r>   r   r+  rZ   r5  )
r   rD   r   r   r   r   r)  derivedr-  r6  r.  r   r   r0  6	  s   

zATest_providedByFallback.test_super_when_base_implements_interfacec           	         s   ddl m} ddlm} G dd d|}G dd d|}G dd	 d	t}||G d
d d|}| }| t| ||g t||}| t| |g  d S )Nr   rC   r   c                   @   r$   )zVTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr%   r   r   r   r   r   T	  r5   r   c                   @   r$   )zYTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr%   r   r   r   r   r   W	  r5   r   c                   @   r$   )zUTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr%   r   r   r   r   r   Z	  r5   r   c                   @   r$   )zXTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr%   r   r   r   r   r)  ]	  r'   r)  r*  )	r   rD   r   r   r   r   r)  r  r-  r.  r   r   r8  P	  s   
zGTest_providedByFallback.test_super_when_base_doesnt_implement_interfacec           	         s   ddl m} ddlm} G dd d|}G dd d|}||G dd	 d	t}| }| t| ||g t||}| |}| 	|j
 | t|g  d S )
Nr   rC   r   c                   @   r$   )zETest_providedByFallback.test_super_when_base_is_object.<locals>.IBaseNr%   r   r   r   r   r   k	  r5   r   c                   @   r$   )zHTest_providedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr%   r   r   r   r   r   n	  r5   r   c                   @   r$   )zGTest_providedByFallback.test_super_when_base_is_object.<locals>.DerivedNr%   r   r   r   r   r)  q	  r'   r)  r  )	r   rD   r   r   r   r)  r  r-  r6  r.  r   r   r9  g	  s   

z6Test_providedByFallback.test_super_when_base_is_objectc                    s   ddl m} ddlm} ddlm} G dd d|}G dd d|}||G d	d
 d
t}G dd d|}| }| t| ||g ||| | t| |||g t	||}	| |	}
| 
|
j | t|
|g d S )Nr   rC   r   r  c                   @   r$   )zOTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IBaseNr%   r   r   r   r   r   	  r5   r   c                   @   r$   )zRTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IDerivedNr%   r   r   r   r   r   	  r5   r   c                   @   r$   )zNTest_providedByFallback.test_super_when_object_directly_provides.<locals>.BaseNr%   r   r   r   r   r   	  r'   r   c                   @   r$   )zQTest_providedByFallback.test_super_when_object_directly_provides.<locals>.DerivedNr%   r   r   r   r   r)  	  r5   r)  )r   rD   r)   r   r  r*   r   r>   r   r+  rZ   r5  )r   rD   r   r  r   r   r   r)  r  r-  r6  r.  r   r   (test_super_when_object_directly_provides}	  s    


z@Test_providedByFallback.test_super_when_object_directly_providesc                    sb  ddl m} ddlm} G dd d|}G dd d|}G dd	 d	|}G d
d d|}G dd d|}||G dd dt}||G dd d|}	||G dd d|}
|||G dd d|	|
}| }t||}t|	|}t|
|}| t| ||||||g | t| ||||g | t| |||g | t| ||g d S )Nr   r   rC   c                   @   r$   )zOTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr%   r   r   r   r   r   	  r5   r   c                   @   r$   )zMTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr%   r   r   r   r   r:  	  r5   r:  c                   @   r$   )zMTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr%   r   r   r   r   r;  	  r5   r;  c                   @   r$   )zRTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr%   r   r   r   r   r   	  r5   r   c                   @   r$   )zTTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr%   r   r   r   r   r<  	  r5   r<  c                   @   r$   )zNTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr%   r   r   r   r   r   	  r'   r   c                   @   r$   )zLTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr%   r   r   r   r   r=  	  r'   r=  c                   @   r$   )zLTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr%   r   r   r   r   r>  	  r'   r>  c                   @   r$   )zQTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr%   r   r   r   r   r)  	  r'   r)  r?  r@  r.  r   r   rE  	  s>   


z@Test_providedByFallback.test_super_multi_level_multi_inheritancec                 C   s   t j| | jdtd d S )Nr#  )r  r/  )r   r  r   r*   r   r   r   r   .test_catches_only_AttributeError_on_providedBy	  s   

zFTest_providedByFallback.test_catches_only_AttributeError_on_providedByc                 C   s&   t tu}tj| | j|rdndd d S )Nr/  r#  r  )strbytesr   r  r   )r   PY3r   r   r   r  	  s   


zATest_providedByFallback.test_catches_only_AttributeError_on_class)r   r   r   rF  rc   r   r  r  r  r  r  r  r  r0  r8  r9  r  rE  r  r  rG  r   r   r.  r   r    s$    	
1r  c                   @   rH  )Test_providedByc                 C   rb   )Nr   r  )r)   rj  )r   rj  r   r   r   rc   	  rd   zTest_providedBy._getTargetClassNrJ  r   r   r   r   r  	  rK  r  c                   @   sP   e Zd Zdd ZeZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd ZdS )*ObjectSpecificationDescriptorFallbackTestsc                 C   rb   )Nr   )%ObjectSpecificationDescriptorFallback)r)   r  )r   r  r   r   r   rF  	  s   z<ObjectSpecificationDescriptorFallbackTests._getFallbackClassc                 O   re   r.   rf   rg   r   r   r   rj   	  rk   z3ObjectSpecificationDescriptorFallbackTests._makeOnec                 C   s^   ddl m} ddlm} |d}G dd dt}||||_|  |_| t	|j|g d S )Nr   r  ro   rq   c                   @   r$   )zOObjectSpecificationDescriptorFallbackTests.test_accessed_via_class.<locals>.FooNr%   r   r   r   r   r&   	  r5   r&   )
r)   r  rE   rp   r*   r"  rj   r#  r   r>   )r   r  rp   rq   r&   r   r   r   test_accessed_via_class	  s   
zBObjectSpecificationDescriptorFallbackTests.test_accessed_via_classc                 C   s   ddl m} ddl m} ddlm} |d}|d}||G dd dt}||||_|  |_| }| 	t
|j|g d S )	Nr   r   r  ro   rq   r   c                   @   r$   )zZObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_provides.<locals>.FooNr%   r   r   r   r   r&   	  r'   r&   )r)   r   r  rE   rp   r*   r"  rj   r#  r   r>   )r   r   r  rp   rq   r   r&   r#   r   r   r   "test_accessed_via_inst_wo_provides	  s   
zMObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_providesc           
      C   s   ddl m} ddl m} ddl m} ddlm} |d}|d}|d}||G d	d
 d
t}||||_|  |_	| }	||	| | 
t|	j	||g d S )Nr   r  r   r  ro   rq   r   r   c                   @   r$   )zYObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides.<locals>.FooNr%   r   r   r   r   r&   
  r'   r&   )r)   r  r   r  rE   rp   r*   r"  rj   r#  r   r>   )
r   r  r   r  rp   rq   r   r   r&   r#   r   r   r   !test_accessed_via_inst_w_provides
  s   

zLObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_providesc                    sf   G dd dt  G  fdddt}| }  t|d W d    d S 1 s,w   Y  d S )Nc                   @   r$   )zvObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.MyExceptionNr%   r   r   r   r   MyException
  r5   r  c                       s$   e Zd Z Ze fddZdS )znObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Fooc                    s    r.   r   r   )r  r   r   r"   
  rO  z{ObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Foo.__provides__Nr   r   r   rj   r#  r   r"  r   r  r   r   r   r&   
  s    r&   r#  )	Exceptionr*   r   rI  r   r   r  r   6test_arbitrary_exception_accessing_provides_not_caught
  s   "zaObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caughtc                    sB   G dd dt }G  fdddt}| }t|d} | d S )Nc                   @   r$   )zmObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.MyExceptionNr%   r   r   r   r   r  *
  r5   r  c                       s    e Zd Z  Zedd ZdS )zeObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Fooc                 S   r   r.   )r  r   r   r   r   r"  0
  rO  zrObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Foo.__provides__Nr  r   r   r   r   r&   -
  s    r&   r#  )r  r*   rI  assertIsNotNone)r   r  r&   r#   providedr   r   r   -test_AttributeError_accessing_provides_caught(
  s
   
zXObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caughtc                 C   sd   ddl m} ddl m} G dd d|}||G dd dt}|  |_t| d}| | d S )	Nr   rC   r   c                   @   r$   )zZObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.IFooNr%   r   r   r   r   rq   <
  r5   rq   c                   @   s   e Zd Zedd ZdS )zYObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Fooc                 S   s   d S r.   r   r   r   r   r   r"  B
  rO  zfObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Foo.__provides__N)r   r   r   r   r"  r   r   r   r   r&   ?
  s    r&   r#  )r   rD   r   r*   rj   r#  rI  rZ   )r   rD   r   rq   r&   r  r   r   r   !test_None_in__provides__overrides8
  s   
zLObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overridesN)r   r   r   rF  rc   rj   r  r  r  r  r  r  r   r   r   r   r  	  s    
r  c                   @   rH  )"ObjectSpecificationDescriptorTestsc                 C   rb   )Nr   )ObjectSpecificationDescriptor)r)   r  )r   r  r   r   r   rc   P
  rd   z2ObjectSpecificationDescriptorTests._getTargetClassNrJ  r   r   r   r   r  K
  s    r  c                   @   r   )r  c                    s<    | _  fdd|D | _| D ]
\}}t || qd S )Nc                    s   i | ]}|t  |qS r   )rI  ).0keymoduler   r   
<dictcomp>\
  s    z$_Monkey.__init__.<locals>.<dictcomp>)r  
to_restoreitemsr  )r   r  ri   r  r.  r   r  r   r   Z
  s
   z_Monkey.__init__c                 C   r\  r.   r   r   r   r   r   	__enter__`
  r   z_Monkey.__enter__c                 C   s&   | j  D ]\}}t| j|| qd S r.   )r  r  r  r  )r   exc_typeexc_valexc_tbr  r.  r   r   r   __exit__c
  s   z_Monkey.__exit__Nr   r   r   r   r  r  r   r   r   r   r  X
  s    r  c                   @   r   )r  c                 K   s8   || _ t||| _| j | _| j  | j| d S r.   )r  rI  targetcopyr  clearupdate)r   r  attrnameri   r   r   r   r   j
  s
   
z_MonkeyDict.__init__c                 C   s   | j S r.   )r  r   r   r   r   r  q
  r   z_MonkeyDict.__enter__c                 C   s   | j   | j | j d S r.   )r  r  r  r  )r   r  r  r  r   r   r   r  t
  s   
z_MonkeyDict.__exit__Nr  r   r   r   r   r  h
  s    r  )5r  unittestzope.interface._compatr   r   r  r   r   #zope.interface.tests.test_interfacer   r*   r   TestCaser    r8   ra   r   r   r   rI  rL  rZ  rd  r  r  r  r  r  r  r  r  r  r  r  r4  r7  r=  rL  rN  rU  rX  r`  rf  rk  rm  rx  r  r  r  r  r  r  r  r   r   r   r   <module>   s   : LCs  E	-:j@"5;2" >A 1.")N.?<l	 v	
i