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