a
    _&/                    @   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j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e"Z#G d8d9 d9ejZ$G d:d; d;ejZ%G d<d= d=ejeZ&G d>d? d?ejZ'G d@dA dAejZ(G dBdC dCejZ)G dDdE dEe)eZ*G dFdG dGejZ+G dHdI dIe+eZ,G dJdK dKejZ-G dLdM dMe-eZ.G dNdO dOe
Z/G dPdQ dQe
Z0dS )Rz@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}|  tsNt||| | t|d W d    dS zt||| W n  ty~   Y W d    dS 0 |r| d W d    d S 1 s0    Y  d S )Nr   TrecordFDidn't raise TypeError)	warningscatch_warningsresetwarningsr   execassertEquallen	TypeErrorfail)selfcodeglobslocsZ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                   @   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   Foo8   s   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   s
   t  d S NNotImplementedError)or   r   r   doFooA   s    z'NamedTests.test_function.<locals>.doFoo)r%   r    r   r'   )r   r    r-   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                   @   s   e Zd ZdS )z%NamedTests.test_instance.<locals>.FooNr"   r   r   r   r   r#   J   s   r#   r!   r$   )r   r    r#   r!   r   r   r   test_instanceG   s
    zNamedTests.test_instanceN)r   r   r   r(   r.   r/   r   r   r   r   r   3   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S )EmptyDeclarationTestsc                 C   s   ddl m} | S Nr   )Declarationr%   r2   r   r2   r   r   r   	_getEmptyV   s    zEmptyDeclarationTests._getEmptyc                 C   s   |   }| t|g  d S r)   )r5   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.interfacer<   r5   r   r6   	flattenedr   r<   r8   r   r   r   test_flattened_empty^   s    z*EmptyDeclarationTests.test_flattened_emptyc                 C   s$   ddl m} |  }| || d S r:   )r=   r<   r5   assertNotInr?   r   r   r   test___contains___emptyc   s    z-EmptyDeclarationTests.test___contains___emptyc                 C   s<   ddl m} |  }| || | |j|dd d S )Nr   r;   Tstrict)r=   r<   r5   
assertTrueextendsr?   r   r   r   test_extends_emptyh   s    z(EmptyDeclarationTests.test_extends_emptyc                 C   s$   |   }t| }| |g  d S r)   )r5   r6   Z
interfacesr   )r   r8   lr   r   r   test_interfaces_emptyn   s    z+EmptyDeclarationTests.test_interfaces_emptyc                 C   s*   ddl m} |  }| |j||f d S r:   )r=   r<   r5   r   Z__sro__r?   r   r   r   test___sro___s   s    z#EmptyDeclarationTests.test___sro___c                 C   s(   ddl m} |  }| |j|f d S r:   )r=   r<   r5   r   Z__iro__r?   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)r5   assertIsNonegetr   assertFalse_v_attrsr7   r   r   r   test_get}   s    zEmptyDeclarationTests.test_getc                 C   s*   |   }t |_|| | |j d S r)   )r5   r&   rR   changedrQ   r7   r   r   r    test_changed_w_existing__v_attrs   s    
z6EmptyDeclarationTests.test_changed_w_existing__v_attrsN)r   r   r   r5   r9   r@   rB   rG   rI   rJ   rK   rS   rU   r   r   r   r   r0   R   s   r0   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-S ).DeclarationTestsc                 C   s   ddl m} |S r1   r3   r4   r   r   r   _getTargetClass   s    z DeclarationTests._getTargetClassc                 O   s   |   |i |S r)   rW   r   argskwr   r   r   _makeOne   s    zDeclarationTests._makeOnec                 C   s   |   }| t|jg  d S r)   )r\   r   r6   	__bases__r7   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)r=   ra   r\   r   r6   r]   r   ra   rb   r8   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%   rg   r\   r   r6   r]   )r   rg   implr8   r   r   r   test_ctor_w_implements_in_bases   s    
z0DeclarationTests.test_ctor_w_implements_in_basesc                 C   s"   |   }|| | |j d S r)   )r\   rT   rO   rR   r7   r   r   r   !test_changed_wo_existing__v_attrs   s    
z2DeclarationTests.test_changed_wo_existing__v_attrsc                 C   s   |   }| || d S r)   )r\   rA   r7   r   r   r   test___contains__w_self   s    z(DeclarationTests.test___contains__w_selfc                 C   s,   ddl m} |d}|  }| || d S r_   )r=   ra   r\   rA   rc   r   r   r   "test___contains__w_unrelated_iface   s    z3DeclarationTests.test___contains__w_unrelated_ifacec                 C   s.   ddl m} |d}| |}| || d S r_   )r=   ra   r\   assertInrc   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 r_   r=   ra   r\   r   r6   rc   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`   rb   IBarro   r   ra   rb   rr   r8   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 rq   ro   rs   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 rq   ro   rs   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   r;   r`   rb   r=   r<   ra   r\   r   r6   r>   )r   r<   ra   rb   r8   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`   rb   rr   rw   r   r<   ra   rb   rr   r8   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 ry   rw   rz   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 ry   rw   rz   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 rq   r=   ra   r\   assertIsInstancerW   r   r6   r   ra   rb   rr   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_   ro   )r   ra   rb   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 rq   ro   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 rq   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   r`   rb   rr   IBazro   )r   ra   rb   rr   r   r   otherr   r   r   r   test___add___related_interface  s    z/DeclarationTests.test___add___related_interfaceN)r   r   r   rW   r\   r^   rd   ri   rj   rk   rl   rn   rp   rt   ru   rv   rx   r{   r|   r}   r   r   r   r   r   r   r   r   r   rV      s,   		rV   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   s   ddl m} |S )Nr   )_ImmutableDeclaration)r%   r   )r   r   r   r   r   rW   '  s    z(TestImmutableDeclaration._getTargetClassc                 C   s   ddl m} |S )Nr   )_empty)r%   r   )r   r   r   r   r   r5   +  s    z"TestImmutableDeclaration._getEmptyc                 C   s0   dd l }|||  }| ||   d S )Nr   )pickleloadsdumpsr5   assertIs)r   r   Zcopiedr   r   r   test_pickle/  s    z$TestImmutableDeclaration.test_picklec                 C   s   |  |   |   d S r)   )r   rW   r5   r   r   r   r   test_singleton4  s    z'TestImmutableDeclaration.test_singletonc                 C   s   |  |  jd d S )Nr   )r   r5   r]   r   r   r   r   test__bases__:  s    z&TestImmutableDeclaration.test__bases__c                 C   sT   |   }d|_| |   jd | t d|_W d    n1 sF0    Y  d S )Nr   )   )r5   r]   r   assertRaisesr   )r   emptyr   r   r   test_change__bases__=  s
    z-TestImmutableDeclaration.test_change__bases__c                 C   s4   |   }|j}| i | d|d< | i |j d S )N   r   )r5   Z
dependentsr   )r   r   Zdepsr   r   r   test_dependentsE  s
    z(TestImmutableDeclaration.test_dependentsc                 C   s   |   d  d S r)   )r5   rT   r   r   r   r   test_changedM  s    z%TestImmutableDeclaration.test_changedc                 C   sH   |  |  |  |  |  j| dd |  |  j| dd d S )NTrC   F)rQ   r5   rF   r   r   r   r   test_extends_always_falseQ  s    z2TestImmutableDeclaration.test_extends_always_falsec                 C   s0   |  |  d | |  ddd d S )Nname*   )rO   r5   rP   r   r   r   r   r   test_get_always_defaultV  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   rL   )r5   r   rR   rO   rP   )r   r8   attrsr   r   r   test_v_attrsZ  s    

z%TestImmutableDeclaration.test_v_attrsN)r   r   r   rW   r5   r   r   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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 re   )r%   rg   )r   rg   r   r   r   rW   k  s    zTestImplements._getTargetClassc                 O   s   |   |i |S r)   rX   rY   r   r   r   r\   o  s    zTestImplements._makeOnec                 C   s$   ddl m} G dd dt}||S )Nr   implementedByc                   @   s   e Zd ZdS )z+TestImplements._makeOneToCompare.<locals>.ANr"   r   r   r   r   At  s   r   )r%   r   r&   )r   r   r   r   r   r   _makeOneToComparer  s    z TestImplements._makeOneToComparec                 C   sH   |   }| |jd  | |jd | |jd | t|jg  d S )Nr   ?)r\   r   inheritdeclaredr   r6   r]   r   rh   r   r   r   r^   y  s
    z!TestImplements.test_ctor_no_basesc                 C   s"   |   }d|_| t|d d S )NZTestingz<implementedBy Testing>)r\   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   r\   r   
__reduce__)r   r   rh   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   r     s   r   c                   @   s   e Zd ZdS )z#TestImplements.test_sort.<locals>.BNr"   r   r   r   r   B  s   r   r`   rb   )r%   r   r&   r=   ra   r   hashrE   )r   r   r   r   ra   rb   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   r   r   r   r   __getattr__  s    z=TestImplements.test_proxy_equality.<locals>.Proxy.__getattr__c                 S   s
   | j |kS r)   r   r   r   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     s   r   )r&   r%   r   rE   rQ   )r   r   r   r   r   ZimplementedByAZimplementedByBproxyr   r   r   test_proxy_equality  s     z"TestImplements.test_proxy_equalityc                 C   s^   |   }| |j | d|j d|_| d|j |d  | |j | d|j d S )N_super_cacher   )r\   rO   r   rA   __dict__rm   rT   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   )r\   rO   r   rA   r   rT   r   r   r   r   %test_changed_does_not_add_super_cache  s    
z4TestImplements.test_changed_does_not_add_super_cacheN)r   r   r   rW   r\   r   r^   r   r   r   r   r   r   r   r   r   r   r   h  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   s   ddl m} |S )Nr   )implementedByFallback)r%   r   )r   r   r   r   r   rW     s    z*Test_implementedByFallback._getTargetClassc                 O   s   |   |i |S r)   rX   rY   r   r   r   _callFUT  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#     s   r#   )r&   r   r   r6   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   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_impl  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_impl  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#     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   sx   ddl m} G dd dt}| }d |_t }t|d,}|||< | | ||u  W d    n1 sj0    Y  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#     s   r#   #BuiltinImplementationSpecifications)zope.interfacer   r&   r   _MonkeyDictrE   r   )r   r   r#   r!   Z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   rf   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#   
  s   r#   )r%   rg   r&   r   rE   r   )r   rg   rh   r#   r!   r   r   r   #test_dictless_w_existing_Implements  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#     s   r#   rb   )r=   ra   r&   r   r   r6   r   )r   ra   r#   r!   rb   r   r   r   'test_dictless_w_existing_not_Implements  s    zBTest_implementedByFallback.test_dictless_w_existing_not_Implementsc                    s>   ddl m} |  G  fdddt}| | | u  d S )Nr   rf   c                       s   e Zd Z ZdS )zJTest_implementedByFallback.test_w_existing_attr_as_Implements.<locals>.FooNr   r   r   r   r   rh   r   r   r#     s   r#   r%   rg   r&   rE   r   r   rg   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 ]2}|| }| || | t|d||jf  q|W d    n1 s0    Y  d S )Nr   r   rf   )	_BUILTINSr   z<implementedBy %s.%s>)r   r   r%   rg   zope.interface._compatr   r   r   r6   r   tupledictr   r   r   )r   r   rg   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d}||t< ||t< ||t< | | t|u  | | t|u  | | t|u  W d    n1 s0    Y  d S )Nr   r   r   )	r   r   r&   r   r   r6   r   rE   r   )r   r   Zt_specZl_specZd_specr   r   r   r   test_builtins_w_existing_cache0  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   r6   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#   D  s   r#   r&   r   r6   r   r   r   r   r   test_no_assertionsB  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#   I  s   r#   r   r   r   r   r    test_w_None_no_bases_not_factoryH  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   s
   t  d S r)   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#   P  s   r#   r!   z*zope.interface.tests.test_declarations.foo__provides__)r%   r   r&   r   r   r   r   r   r   __providedBy__rA   r   )r   r   r#   r!   r   r   r   r   test_w_None_no_bases_w_factoryN  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                   @   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#   a  s   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                    s>   ddl m} |  G  fdddt}| | | u  d S )Nr   rf   c                       s   e Zd Z ZdS )zBTest_implementedByFallback.test_w_existing_Implements.<locals>.FooNr   r   r   r   r   r#   o  s   r#   r   r   r   r   r   test_w_existing_Implementsl  s    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   r;   implementerc                   @   s   e Zd ZdS )zSTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr"   r   r   r   r   IBasew  s   r   c                   @   s   e Zd ZdS )zVTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr"   r   r   r   r   IDerivedz  s   r   c                   @   s   e Zd ZdS )zRTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr"   r   r   r   r   Base}  s   r   c                   @   s   e Zd ZdS )zUTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr"   r   r   r   r   Derived  s   r   	r   r<   r%   r   r&   r   r6   r   superr   r<   r   r   r   r   r   sup	__class__r   r   )test_super_when_base_implements_interfaces  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   r;   r   c                   @   s   e Zd ZdS )z[Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IBaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )z^Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IDerivedNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zZTest_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.BaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )z\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child1Nr"   r   r   r   r   Child1  s   r  c                   @   s   e Zd ZdS )z\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child2Nr"   r   r   r   r   Child2  s   r  c                   @   s   e Zd ZdS )z]Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.DerivedNr"   r   r   r   r   r     s   r   r   )
r   r<   r   r   r   r   r  r  r   r   r   r   r   1test_super_when_base_implements_interface_diamond  s    
zLTest_implementedByFallback.test_super_when_base_implements_interface_diamondc                    s   ddl m} ddlm} G dd d|}G dd d|}G dd	 d	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   r;   r   c                   @   s   e Zd ZdS )z]Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IBaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )z`Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IDerivedNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )z\Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.BaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )z^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child1Nr"   r   r   r   r   r    s   r  c                   @   s   e Zd ZdS )z^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child2Nr"   r   r   r   r   r    s   r  c                   @   s   e Zd ZdS )z_Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.DerivedNr"   r   r   r   r   r     s   r   )r   r<   r%   r   r&   r   __mro__r6   r   r   rO   _dependents)r   r<   r   r   r   r   r  r  r   r   futr   r   r   3test_super_when_parent_implements_interface_diamond  s     

zNTest_implementedByFallback.test_super_when_parent_implements_interface_diamondc                    s   ddl m} ddlm} G dd d|}G dd d|}G dd	 d	t}||G d
d d|}| t| ||g t||}| t| |g  d S )Nr   r;   r   c                   @   s   e Zd ZdS )zYTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )z\Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zXTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )z[Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr"   r   r   r   r   r     s   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   r;   r   c                   @   s   e Zd ZdS )zHTest_implementedByFallback.test_super_when_base_is_object.<locals>.IBaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zKTest_implementedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zJTest_implementedByFallback.test_super_when_base_is_object.<locals>.DerivedNr"   r   r   r   r   r     s   r   r   )r   r<   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   r;   c                   @   s   e Zd ZdS )zRTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zPTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr"   r   r   r   r   IM1  s   r
  c                   @   s   e Zd ZdS )zPTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr"   r   r   r   r   IM2  s   r  c                   @   s   e Zd ZdS )zUTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zWTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr"   r   r   r   r   
IUnrelated  s   r  c                   @   s   e Zd ZdS )zQTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr"   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )zOTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr"   r   r   r   r   M1  s   r  c                   @   s   e Zd ZdS )zOTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr"   r   r   r   r   M2  s   r  c                   @   s   e Zd ZdS )zTTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr"   r   r   r   r   r     s   r   	r%   r   r   r<   r&   r   r   r6   r   r   r   r<   r   r
  r  r   r  r   r  r  r   dZsdZsm1Zsm2r   r   r   (test_super_multi_level_multi_inheritance  s>    


zCTest_implementedByFallback.test_super_multi_level_multi_inheritance)r   r   r   rW   _getFallbackClassr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r  __classcell__r   r   r   r   r     s.   		 r   c                   @   s   e Zd Zdd ZdS )Test_implementedByc                 C   s   ddl m} |S )Nr   r   )r%   r   )r   r   r   r   r   rW   #  s    z"Test_implementedBy._getTargetClassNr   r   r   rW   r   r   r   r   r    s   r  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   s   t d S r)   r*   )r   clsifacer   r   r   r   +  s    z_ImplementsTestMixin._callFUTNz.Foo	not givenc           
      C   s   ddl m} ddlm} |d}| ||}| || |j}	|d urR| |	| | |	j| |dkrl|n|}| |	j	| | |j|	 | j
r| |j| | |j| | |j|j ||fS )Nr   r   r`   rb   r  )r%   r   r=   ra   r   r   r   r   r   r   FUT_SETS_PROVIDED_BYr   r   r   )
r   r#   Z	orig_specZ	spec_namer   r   ra   rb   returnedr   r   r   r   _check_implementer/  s&    z'_ImplementsTestMixin._check_implementerc                 C   s   G dd d}|  | d S )Nc                   @   s   e Zd ZdS )z5_ImplementsTestMixin.test_oldstyle_class.<locals>.FooNr"   r   r   r   r   r#   L  s   r#   )r  r   r   r   r   test_oldstyle_classJ  s    z(_ImplementsTestMixin.test_oldstyle_classc                 C   s   G dd dt }| | d S )Nc                   @   s   e Zd ZdS )z5_ImplementsTestMixin.test_newstyle_class.<locals>.FooNr"   r   r   r   r   r#   Q  s   r#   )r&   r  r   r   r   r   test_newstyle_classP  s    z(_ImplementsTestMixin.test_newstyle_class)r   r   r   r  r   r  r  r  r   r   r   r   r  (  s   
r  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   r  r  r!  r   r   r   r   X  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   rf   r`   rb   rr   c                       s   e Zd Z ZdS )z@Test_classImplementsOnly.test_w_existing_Implements.<locals>.FooNr   r   r   r   r   r#   d  s   r#   )r%   rg   r=   ra   r   r&   r   r   rE   r   r   r   rg   ra   rb   rr   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   rf   r`   rr   c                       s   e Zd Z ZdS )z9Test_classImplementsOnly.test_oldstyle_class.<locals>.FooNr   r   Zold_specr   r   r#   s  s   r#   r   r   )r%   rg   r=   ra   r  r   rg   ra   rr   r#   r   r#  r   r  m  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   rf   r`   rr   c                       s   e Zd Z ZdS )z9Test_classImplementsOnly.test_newstyle_class.<locals>.FooNr   r   r#  r   r   r#   }  s   r#   r   r$  )r%   rg   r=   ra   r&   r  r%  r   r#  r   r  w  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                   @   s   e Zd ZdS )zRTest_classImplementsOnly.test_redundant_with_super_still_implements.<locals>.ChildNr"   r   r   r   r   Child  s   r&  )r  typer&   r   rE   r   )r   r   r   r&  r   r   r   *test_redundant_with_super_still_implements  s    
zCTest_classImplementsOnly.test_redundant_with_super_still_implementsN)	r   r   r   r  r   r   r  r  r(  r   r   r   r   r   U  s   
r   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   s$   ddl m} |||}| | |S )Nr   classImplements)r%   r+  rO   )r   r  r  r+  resultr   r   r   r     s    

zTest_classImplements._callFUTc                 C   s   |  |\}}G dd d|}| ||}| d|j | d|j | d|j |j}| |jd | |j| | 	|
|  d S )Nc                   @   s   e Zd ZdS )zATest_classImplements.__check_implementer_redundant.<locals>.ChildNr"   r   r   r   r   r&    s   r&  r   r   r   r   )r  r   rm   r   rA   r   r   r   r   rE   
providedBy)r   r   r   r&  r  r   r   r   r   Z__check_implementer_redundant  s    z2Test_classImplements.__check_implementer_redundantc                 C   s   |  tdtfi  d S )Nr#   )2_Test_classImplements__check_implementer_redundantr'  r&   r   r   r   r   <test_redundant_implementer_empty_class_declarations_newstyle  s    zQTest_classImplements.test_redundant_implementer_empty_class_declarations_newstylec                 C   s   G dd d}|  | d S )Nc                   @   s   e Zd ZdS )z^Test_classImplements.test_redundant_implementer_empty_class_declarations_oldstyle.<locals>.FooNr"   r   r   r   r   r#     s   r#   )r.  r   r   r   r   <test_redundant_implementer_empty_class_declarations_oldstyle  s    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d | 	|| | 
t|||g G d	d
 d
|}| 	|| | 
t|||g W d    n1 s0    Y  d S )Nr   r;   r   )ro)	C3Settingc                   @   s   e Zd ZdS )zFTest_classImplements.test_redundant_implementer_Interface.<locals>.FooNr"   r   r   r   r   r#     s   r#   Fc                   @   s   e Zd ZdS )zFTest_classImplements.test_redundant_implementer_Interface.<locals>.BazNr"   r   r   r   r   Baz  s   r3  )r   r<   r   r1  Zzope.interface.tests.test_ror2  r&   ZC3Z
STRICT_IROr   r   r6   )r   r<   r   r1  r2  r#   r3  r   r   r   $test_redundant_implementer_Interface  s    z9Test_classImplements.test_redundant_implementer_Interfacec                 C   s   ||fS r)   r   r   Zapplied_firstZapplied_secondr   r   r   _order_for_two  s    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   rf   r`   rb   rr   c                       s   e Zd Z ZdS )z<Test_classImplements.test_w_existing_Implements.<locals>.FooNr   r   r   r   r   r#     s   r#   )r%   rg   r=   ra   r   r&   r   r   r   r   r   r6  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   rf   r`   IRootISecondRootIExtendsRootZRootc                       s   e Zd Z ZdS )zFTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root1Nr   r   	impl_rootr   r   Root1  s   r<  c                       s   e Zd Z ZdS )zFTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root2Nr   r   r:  r   r   Root2  s   r=  ZExtendsRoot1c                       s   e Zd Z ZdS )zLTest_classImplements.test_w_existing_Implements_w_bases.<locals>.ExtendsRootNr   r   )impl_extends_rootr   r   ExtendsRoot  s   r?  )r%   rg   r=   ra   r    r   r&   r   r   r   r   r   r6  r]   )	r   rg   ra   r7  r8  r9  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   r.  r/  r0  r4  r6  r   r@  r   r   r   r   r)    s   r)  c                   @   s   e Zd Zdd Zdd ZdS )Test_classImplementsFirstc                 C   s$   ddl m} |||}| | |S )Nr   )classImplementsFirst)r%   rB  rO   )r   r  r  rB  r,  r   r   r   r     s    

z"Test_classImplementsFirst._callFUTc                 C   s   ||fS r)   r   r5  r   r   r   r6    s    z(Test_classImplementsFirst._order_for_twoN)r   r   r   r   r6  r   r   r   r   rA    s   rA  c                   @   s   e Zd Zdd Zdd ZdS )Test__implements_advicec                 O   s   ddl m} ||i |S )Nr   )_implements_advice)r%   rD  )r   rZ   r[   rD  r   r   r   r     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 | 	|j
| | t|j
 g d S )	Nr   r*  rf   r`   rb   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   rb   r+  r   r   r#     s   r#   rE  )r%   r+  rg   r=   ra   r&   r   rA   r   r   r   r   r6   )r   rg   ra   r#   r   rF  r   test_no_existing_implements  s    
z3Test__implements_advice.test_no_existing_implementsN)r   r   r   r   rG  r   r   r   r   rC    s   rC  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   r   )r%   r   )r   r   r   r   r   rW     s    z Test_implementer._getTargetClassc                 O   s   |   |i |S r)   rX   rY   r   r   r   r\     s    zTest_implementer._makeOnec                 G   s   | j | }||S r)   r\   )r   r  Zifaces	decoratorr   r   r   r   !  s    
zTest_implementer._callFUTc                 C   s2   ddl m} |d}| |}| t|t  d S r_   )r=   ra   r\   r   r   r&   )r   ra   rb   rJ  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}| }| |}||}| ||u  |j}| |jd | |j	 | 
|j| d S )Nr   r`   rb   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=   ra   r&   r\   rE   r   r   r   rO   r   r   )r   ra   rb   r#   r!   rJ  r  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}| || q0|  t| }d}| 	|||  d S )Nr   r`   rb   il  c                   @   s   e Zd ZdS )zHTest_implementer.test_does_not_leak_on_unique_classes.<locals>.TestClassNr"   r   r   r   r   	TestClassF  s   rM  )
gcr=   ra   r   Zget_objectsranger&   r   ZcollectZassertLessEqual)	r   rN  ra   rb   Zbegin_count_rM  Z	end_countZfudge_factorr   r   r   $test_does_not_leak_on_unique_classes9  s    z5Test_implementer.test_does_not_leak_on_unique_classesN)	r   r   r   rW   r\   r   rK  rL  rQ  r   r   r   r   rH    s   rH  c                   @   s4   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   s   ddl m} |S )Nr   )implementer_only)r%   rS  )r   rS  r   r   r   rW   Z  s    z%Test_implementer_only._getTargetClassc                 O   s   |   |i |S r)   rX   rY   r   r   r   r\   ^  s    zTest_implementer_only._makeOnec                 C   s   |  |}||S r)   rI  )r   r  r  rJ  r   r   r   r   a  s    
zTest_implementer_only._callFUTc                 C   s8   ddl m} |d}| |}dd }| t|| d S )Nr   r`   rb   c                   S   s
   t  d S r)   r*   r   r   r   r   	_functioni  s    z6Test_implementer_only.test_function.<locals>._function)r=   ra   r\   r   
ValueError)r   ra   rb   rJ  rT  r   r   r   r.   e  s
    
z#Test_implementer_only.test_functionc                 C   s@   ddl m} |d}| |}G dd d}| t||j d S )Nr   r`   rb   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   _methodr  s    z6Test_implementer_only.test_method.<locals>.Bar._methodN)r   r   r   rV  r   r   r   r   Barq  s   rW  )r=   ra   r\   r   rU  rV  )r   ra   rb   rJ  rW  r   r   r   test_methodm  s
    
z!Test_implementer_only.test_methodN)r   r   r   rW   r\   r   r.   rX  r   r   r   r   rR  X  s
   rR  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}i }ddg}|jdd	}|  zt||| W n t	y   | 
td
 Y n@0 tr| d |d }	|	j}
| t|
|g | t|d W d    n1 s0    Y  d S )Nr   implementsOnlyr`   rb   )r[  rb   
z*class Foo(object):    implementsOnly(IFoo)Tr   zMust be Python 3r
   r#   )r   r%   r[  r=   ra   joinr   r   r   r   rE   r   r   r   r   r6   r   )r   r   r[  ra   rb   r   r   CODEr   r#   r   r   r   r   test_simple|  s.    
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	}| |||r|d
 }	|	j}
| t	|
|g d S )Nr   
implementsrZ  r`   rb   rr   )ra  r[  rb   rr   r\  )class Foo(object):    implements(IFoo)z'class Bar(Foo):    implementsOnly(IBar)rW  )
r%   ra  r[  r=   ra   r]  r   r   r   r6   )r   ra  r[  ra   rb   rr   r   r   r^  rW  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_  rd  r   r   r   r   rY  z  s   rY  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4}	|  | 	t
| | t|	d W d    n1 s0    Y  d S )Nr   r`  r`   rb   ra  rb   r\  
def foo():rc  Fr!   Tr   )r   r%   ra  r=   ra   r]  r   r   r   r   r   r   r   )
r   r   ra  ra   rb   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}|||d}i }dg d}|jd	d
Z}	|  zt||| W n& t	y   t
s| t|	d Y n0 | d W d    n1 s0    Y  d S )Nr   r`  r`   rb   rr   )ra  rb   rr   r\  )rb  rc  z    implements(IBar)Tr   r
   )r   r%   ra  r=   ra   r]  r   r   r   r   r   r   r   r   )
r   r   ra  ra   rb   rr   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`   rb   rf  r\  rb  rc  r#   )	r%   ra  r=   ra   r]  r   r   r   r6   )	r   ra  ra   rb   r   r   r^  r#   r   r   r   r   test_called_once_from_class  s    
z+Test_implements.test_called_once_from_classNr   r   r   rh  ri  rj  r   r   r   r   re    s   re  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )ProvidesClassTestsc                 C   s   ddl m} |S )Nr   ProvidesClass)r%   rn  )r   rn  r   r   r   rW     s    z"ProvidesClassTests._getTargetClassc                 O   s   |   |i |S r)   rX   rY   r   r   r   r\     s    zProvidesClassTests._makeOnec                 C   sF   ddl m} |d}G dd dt}| ||}| t||g d S )Nr   r`   rb   c                   @   s   e Zd ZdS )z?ProvidesClassTests.test_simple_class_one_interface.<locals>.FooNr"   r   r   r   r   r#     s   r#   )r=   ra   r&   r\   r   r6   r   ra   rb   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}| ||}| \}}| ||u  | |||f d S )Nr   Providesr`   rb   c                   @   s   e Zd ZdS )z/ProvidesClassTests.test___reduce__.<locals>.FooNr"   r   r   r   r   r#     s   r#   )	r%   rr  r=   ra   r&   r\   r   rE   r   )r   rr  ra   rb   r#   r   klassrZ   r   r   r   r     s    z"ProvidesClassTests.test___reduce__c                 C   sJ   ddl m} |d}G dd dt}| ||}||_| |j|u  d S )Nr   r`   rb   c                   @   s   e Zd ZdS )z2ProvidesClassTests.test___get___class.<locals>.FooNr"   r   r   r   r   r#   	  s   r#   r=   ra   r&   r\   r   rE   ro  r   r   r   test___get___class  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`   rb   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=   ra   r&   r\   r   r   AttributeError)r   ra   rb   r   rw  r   rv  r   test___get___instance  s    z(ProvidesClassTests.test___get___instancec                 C   s*   |  t| }| t|dt|   d S )Nz <zope.interface.Provides for %r>r\   r'  r   r   r   instr   r   r   test__repr__  s
    
zProvidesClassTests.test__repr__N)
r   r   r   rW   r\   rp  r   ru  ry  r}  r   r   r   r   rl    s   	rl  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} ||i |S )Nr   rq  )r%   rr  )r   rZ   r[   rr  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 d    n1 sb0    Y  | t||g | 	|||f |u  d S )Nr   r   r`   rb   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=   ra   r&   _Monkeyr   r   r6   rE   )r   r   ra   rb   cacher#   r   r   r   r   test_no_cached_spec)  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 sp0    Y  | ||u  d S )Nr   r   r`   rb   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=   ra   r&   r  r   rE   )r   r   ra   rb   Zpriorr#   r  r   r   r   r   test_w_cached_spec5  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} ||i |S )Nr   directlyProvides)r%   r  )r   rZ   r[   r  r   r   r   r   D  s    zTest_directlyProvides._callFUTc                 C   sh   ddl m} ddlm} |d}G dd dt}| }| || | |j| | t	|j|g d S )Nr   rm  r`   rb   c                   @   s   e Zd ZdS )z7Test_directlyProvides.test_w_normal_object.<locals>.FooNr"   r   r   r   r   r#   L  s   r#   
r%   rn  r=   ra   r&   r   r   r   r   r6   r   rn  ra   rb   r#   objr   r   r   test_w_normal_objectH  s    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   r`   rb   c                   @   s   e Zd ZdS )z/Test_directlyProvides.test_w_class.<locals>.FooNr"   r   r   r   r   r#   W  s   r#   )
r%   r   r=   ra   r&   r   r   r   r   r6   r   r   ra   rb   r#   r   r   r   test_w_classS  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`   rb   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 Nr   )r'  __getattribute__)r  r   r   r   r   r  c  s    z_Test_directlyProvides.test_w_non_descriptor_aware_metaclass.<locals>.MetaClass.__getattribute__N)r   r   r   r  r   r   r   r   	MetaClassb  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#   k  s   r#   )r=   ra   r'  r&   r   r   r   r   ra   rb   r#   r  r   r  r   %test_w_non_descriptor_aware_metaclass]  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   rm  r`   rb   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  v  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#   u  s   r#   r   )	r%   rn  r=   ra   r&   r   r   r   r6   r  r   r  r   test_w_classless_objectp  s    z-Test_directlyProvides.test_w_classless_objectN)	r   r   r   r   r  r  r   r  r  r   r   r   r   r  B  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} ||i |S )Nr   )alsoProvides)r%   r  )r   rZ   r[   r  r   r   r   r     s    zTest_alsoProvides._callFUTc                 C   sh   ddl m} ddlm} |d}G dd dt}| }| || | |j| | t	|j|g d S )Nr   rm  r`   rb   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}| }||| | || | |j| | 	t
|j||g d S )	Nr   r  rm  r`   rb   rr   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  rn  r=   ra   r&   r   r   r   r   r6   )r   r  rn  ra   rb   rr   r#   r  r   r   r   test_w_existing_provides  s    
z*Test_alsoProvides.test_w_existing_providesN)r   r   r   r   r  r  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 )Test_noLongerProvidesc                 O   s   ddl m} ||i |S )Nr   )noLongerProvides)r%   r  )r   rZ   r[   r  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`   rb   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=   ra   r&   r   r   r6   r   r  r   r   r   r    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`   rb   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=   ra   r&   r   r   r6   r   )r   r  ra   rb   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`   rb   rr   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#   r  )r   r  ra   rb   rr   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`   rb   c                   @   s   e Zd ZdS )zDTest_noLongerProvides.test_w_iface_implemented_by_class.<locals>.FooNr"   r   r   r   r   r#     s   r#   )r%   r   r=   ra   r&   r   rU  r   )r   r   ra   rb   r#   r  r   r   r   !test_w_iface_implemented_by_class  s    z7Test_noLongerProvides.test_w_iface_implemented_by_classN)r   r   r   r   r  r  r  r  r   r   r   r   r    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 )ClassProvidesBaseFallbackTestsc                 C   s   ddl m} |S Nr   )ClassProvidesBaseFallbackr%   r  r   r  r   r   r   rW     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     s    zAClassProvidesBaseFallbackTests._makeOne.<locals>.Derived.__init__N)r   r   r   r   r   r   r   r   r     s   r   rX   )r   rs  ra  r   r   r   r   r\     s    z'ClassProvidesBaseFallbackTests._makeOnec                 C   sJ   ddl m} |d}G dd dt}| || }|_| |j|u  d S )Nr   r`   rb   c                   @   s   e Zd ZdS )zGClassProvidesBaseFallbackTests.test_w_same_class_via_class.<locals>.FooNr"   r   r   r   r   r#     s   r#   rt  )r   ra   rb   r#   Z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   r`   rb   c                   @   s   e Zd ZdS )zJClassProvidesBaseFallbackTests.test_w_same_class_via_instance.<locals>.FooNr"   r   r   r   r   r#     s   r#   )r=   ra   r&   r\   r   r   )r   ra   rb   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   r`   rb   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   rW    s   rW  r   )r=   ra   r&   r\   r   r   rx  getattr)r   ra   rb   r#   rW  Zbarr   r   r   test_w_different_class  s    z5ClassProvidesBaseFallbackTests.test_w_different_classN)r   r   r   rW   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 )ClassProvidesBaseTestsc                 C   s   ddl m} |S )Nr   )ClassProvidesBase)r%   r  )r   r  r   r   r   rW     s    z&ClassProvidesBaseTests._getTargetClassc                 C   s   ddl m} |S r  r  r  r   r   r   r  
  s    z(ClassProvidesBaseTests._getFallbackClassN)r   r   r   rW   r  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 )ClassProvidesTestsc                 C   s   ddl m} |S )Nr   r   )r%   r   )r   r   r   r   r   rW     s    z"ClassProvidesTests._getTargetClassc                 O   s   |   |i |S r)   rX   rY   r   r   r   r\     s    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   r`   rb   rr   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=   ra   r&   r\   r'  r   rE   r   r6   r   r   ra   rb   rr   r#   Z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`   rb   rr   c                   @   s   e Zd ZdS )z/ClassProvidesTests.test___reduce__.<locals>.FooNr"   r   r   r   r   r#   *  s   r#   )r%   r   r=   ra   r&   r\   r'  r   r   r   rW   r  r   r   r   r   %  s    
z"ClassProvidesTests.test___reduce__c                 C   s,   |  t| t}| t|dt|   d S )Nz2<zope.interface.declarations.ClassProvides for %r>rz  r{  r   r   r   r}  1  s
    
zClassProvidesTests.test__repr__N)r   r   r   rW   r\   r  r   r}  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 )Test_directlyProvidedByc                 O   s   ddl m} ||i |S )Nr   )directlyProvidedBy)r%   r  )r   rZ   r[   r  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`   rb   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#   H  s   r#   )r%   r   r=   ra   r&   r   r6   r   )r   r   ra   rb   r#   r!   r   r   r   -test_w_declarations_in_class_but_not_instanceD  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`   rb   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#   R  s   r#   )r%   r  r=   ra   r&   r   r6   r   )r   r  ra   rb   r#   r!   r   r   r   -test_w_declarations_in_instance_but_not_classN  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`   rb   rr   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=   ra   r&   r   r6   r   )r   r  r   ra   rb   rr   r#   r!   r   r   r   )test_w_declarations_in_instance_and_classX  s    
zATest_directlyProvidedBy.test_w_declarations_in_instance_and_classN)r   r   r   r   r  r  r  r  r   r   r   r   r  8  s
   

r  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}i }dddg}t||| |d	 }|jd
d8}	|  | 	t
| ts| t|	d W d    n1 s0    Y  d S )Nr   classProvidesr`   rb   r  rb   r\  rg      classProvides(IFoo)r!   Tr   )r   r%   r  r=   ra   r]  r   r   r   r   r   r   r   r   )
r   r   r  ra   rb   r   r   r^  r!   r   r   r   r   rh  i  s"    
z,Test_classProvides.test_called_from_functionc           
   	   C   s   dd l }ddlm} ddlm} |d}|d}|||d}i }dg d}|jd	d
Z}	|  zt||| W n& t	y   t
s| t|	d Y n0 | d W d    n1 s0    Y  d S )Nr   r  r`   rb   rr   )r  rb   rr   r\  )rb  r  z    classProvides(IBar)Tr   r
   )r   r%   r  r=   ra   r]  r   r   r   r   r   r   r   r   )
r   r   r  ra   rb   rr   r   r   r^  r   r   r   r   ri  |  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   r  r`   rb   r  r\  rb  r  r#   )	r%   r  r=   ra   r]  r   r   r   r6   )	r   r  ra   rb   r   r   r^  r#   r   r   r   r   rj    s    
z.Test_classProvides.test_called_once_from_classNrk  r   r   r   r   r  f  s   r  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   rW     s    zTest_provider._getTargetClassc                 O   s   |   |i |S r)   rX   rY   r   r   r   r\     s    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   r`   rb   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=   ra   r\   r&   r   r   r   r6   r  r   r   r   r    s    zTest_provider.test_w_classN)r   r   r   rW   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_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`   rb   zope.interface.tests.foor   r  rb   r\  rg      moduleProvides(IFoo)r!   )r%   r  r=   ra   r]  r   r   r   )r   r  ra   rb   r   r   r^  r!   r   r   r   rh    s    z-Test_moduleProvides.test_called_from_functionc                 C   sx   ddl m} ddlm} |d}d||d}i }ddd	g}| t t||| W d    n1 sj0    Y  d S )
Nr   r  r`   rb   r  r  r\  rb  r  r%   r  r=   ra   r]  r   r   r   )r   r  ra   rb   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`   rb   r  r  r\  moduleProvides(IFoo)r   )r%   r  r=   ra   r]  r   r   r6   )r   r  ra   rb   r   r^  r   r   r   r   "test_called_once_from_module_scope  s    
z6Test_moduleProvides.test_called_once_from_module_scopec                 C   sr   ddl m} ddlm} |d}d||d}dddg}| t t|| W d    n1 sd0    Y  d S )	Nr   r  r`   rb   r  r  r\  r  r  )r   r  ra   rb   r   r^  r   r   r   #test_called_twice_from_module_scope  s    z7Test_moduleProvides.test_called_twice_from_module_scopeN)r   r   r   rh  r  r  r  r   r   r   r   r    s   r  c                   @   sp   e Zd Zdd ZeZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )#Test_getObjectSpecificationFallbackc                 C   s   ddl m} |S )Nr   )getObjectSpecificationFallback)r%   r  )r   r  r   r   r   r    s    z5Test_getObjectSpecificationFallback._getFallbackClassc                 O   s   |   |i |S r)   rX   rY   r   r   r   r     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y4   t |Y n0 d S r  )rx  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    s    z`Test_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__setattr__Nr  r   r  r   r   r#     s   r#   r&   r   r   r6   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  r`   rb   c                   S   s
   t  d S r)   r*   r   r   r   r   r!     s    zOTest_getObjectSpecificationFallback.test_existing_provides_is_spec.<locals>.foo)r%   r  r=   ra   r   r   r   )r   r  ra   rb   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   s
   t  d S r)   r*   r   r   r   r   r!     s    zSTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec.<locals>.foo)r&   r   r   r   r6   )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  r`   rb   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=   ra   r&   r   r   r6   )r   r  ra   rb   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`   rb   c                   @   s   e Zd ZdS )zWTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implements.<locals>.FooNr"   r   r   r   r   r#   2  s   r#   )r%   r   r=   ra   r&   r   r   r6   r   r   ra   rb   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#   r  r  r   r   r   'test_wo_provides_on_class_wo_implements9  s    
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@  s    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_classC  s    zMTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_classc                 C   s    G dd dt }| |  d S )Nc                   @   s   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   rx  r   r   r   r   r   r#   K  s   r#   )r&   r   r   r   r   r   Htest_raises_AttributeError_when_provides_fails_type_check_AttributeErrorG  s    zlTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_AttributeErrorc                 C   sp   G dd dt }tr`| t}| |  W d    n1 s@0    Y  | d|jjd  n| |  d S )Nc                   @   s   e Zd ZeeZdS )zwTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_RuntimeError.<locals>.FooN)r   r   r   r   RuntimeErrorr   r   r   r   r   r#   T  s   r#   r   r   )r&   r   r   r  r   r   Z	exceptionrZ   )r   r#   excr   r   r   Ftest_raises_AttributeError_when_provides_fails_type_check_RuntimeErrorQ  s    *zjTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_RuntimeErrorN)r   r   r   r  rW   r   r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s   

r  c                   @   s   e Zd Zdd ZdS )Test_getObjectSpecificationc                 C   s   ddl m} |S )Nr   )getObjectSpecification)r%   r  )r   r  r   r   r   rW   e  s    z+Test_getObjectSpecification._getTargetClassNr  r   r   r   r   r  a  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 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   s   ddl m} |S )Nr   )providedByFallback)r%   r  )r   r  r   r   r   r  l  s    z)Test_providedByFallback._getFallbackClassc                 O   s   |   |i |S r)   rX   rY   r   r   r   r   s  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#   w  s   r#   r  r  r   r   r   )test_wo_providedBy_on_class_wo_implementsv  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   rq  r`   rb   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%   rr  r=   ra   r&   r   r   r   r6   )r   rr  ra   rb   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   r6   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   r`   rb   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=   ra   r&   r   r   r   r6   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                   @   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   rE   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  |_| |}| ||u  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`   rb   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=   ra   r&   r   r   r   r   r6   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   r;   r   c                   @   s   e Zd ZdS )zPTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zSTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zOTest_providedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zRTest_providedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr"   r   r   r   r   r     s   r   r   r<   r%   r   r&   r   r6   r   r   rO   r  )
r   r<   r   r   r   r   r   derivedr   r  r   r   r   r     s    

zATest_providedByFallback.test_super_when_base_implements_interfacec           	         s   ddl m} ddlm} G dd d|}G dd d|}G dd	 d	t}||G d
d d|}| }| t| ||g t||}| t| |g  d S )Nr   r;   r   c                   @   s   e Zd ZdS )zVTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zYTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zUTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zXTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr"   r   r   r   r   r     s   r   r   )	r   r<   r   r   r   r   r   r  r   r   r   r   r    s    
zGTest_providedByFallback.test_super_when_base_doesnt_implement_interfacec           	         s   ddl m} ddlm} G dd d|}G dd d|}||G dd	 d	t}| }| t| ||g t||}| |}| 	|j
 | t|g  d S )
Nr   r;   r   c                   @   s   e Zd ZdS )zETest_providedByFallback.test_super_when_base_is_object.<locals>.IBaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zHTest_providedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zGTest_providedByFallback.test_super_when_base_is_object.<locals>.DerivedNr"   r   r   r   r   r     s   r   r  )	r   r<   r   r   r   r   r  r   r  r   r   r   r	    s    

z6Test_providedByFallback.test_super_when_base_is_objectc                    s   ddl m} ddlm} ddlm} G dd d|}G dd d|}||G d	d
 d
t}G dd d|}| }| t| ||g ||| | t| |||g t	||}	| |	}
| 
|
j | t|
|g d S )Nr   r;   r   r  c                   @   s   e Zd ZdS )zOTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IBaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zRTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IDerivedNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zNTest_providedByFallback.test_super_when_object_directly_provides.<locals>.BaseNr"   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zQTest_providedByFallback.test_super_when_object_directly_provides.<locals>.DerivedNr"   r   r   r   r   r     s   r   )r   r<   r%   r   r  r&   r   r6   r   r   rO   r  )r   r<   r   r  r   r   r   r   r  r   r  r   r   r   (test_super_when_object_directly_provides  s     


z@Test_providedByFallback.test_super_when_object_directly_providesc                    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   r;   c                   @   s   e Zd ZdS )zOTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr"   r   r   r   r   r   $  s   r   c                   @   s   e Zd ZdS )zMTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr"   r   r   r   r   r
  '  s   r
  c                   @   s   e Zd ZdS )zMTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr"   r   r   r   r   r  *  s   r  c                   @   s   e Zd ZdS )zRTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr"   r   r   r   r   r   -  s   r   c                   @   s   e Zd ZdS )zTTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr"   r   r   r   r   r  0  s   r  c                   @   s   e Zd ZdS )zNTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr"   r   r   r   r   r   3  s   r   c                   @   s   e Zd ZdS )zLTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr"   r   r   r   r   r  7  s   r  c                   @   s   e Zd ZdS )zLTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr"   r   r   r   r   r  ;  s   r  c                   @   s   e Zd ZdS )zQTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr"   r   r   r   r   r   ?  s   r   r  r  r   r   r   r     s>    


z@Test_providedByFallback.test_super_multi_level_multi_inheritancec                 C   s   t j| | jdtd d S )Nr   )r  r   )r   r  r   r&   r   r   r   r   .test_catches_only_AttributeError_on_providedByQ  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   ZPY3r   r   r   r  V  s    

zATest_providedByFallback.test_catches_only_AttributeError_on_class)r   r   r   r  rW   r   r  r  r  r  r  r  r  r   r  r	  r  r  r  r  r  r   r   r   r   r  j  s"   	
1r  c                   @   s   e Zd Zdd ZdS )Test_providedByc                 C   s   ddl m} |S )Nr   )r-  )r%   r-  )r   r-  r   r   r   rW   c  s    zTest_providedBy._getTargetClassNr  r   r   r   r   r  _  s   r  c                   @   s8   e Zd Zdd Ze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   r  j  s    z<ObjectSpecificationDescriptorFallbackTests._getFallbackClassc                 O   s   |   |i |S r)   rX   rY   r   r   r   r\   r  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   rq  r`   rb   c                   @   s   e Zd ZdS )zOObjectSpecificationDescriptorFallbackTests.test_accessed_via_class.<locals>.FooNr"   r   r   r   r   r#   y  s   r#   )
r%   rr  r=   ra   r&   r   r\   r   r   r6   )r   rr  ra   rb   r#   r   r   r   test_accessed_via_classu  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   rq  r`   rb   rr   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   rr  r=   ra   r&   r   r\   r   r   r6   )r   r   rr  ra   rb   rr   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   rq  r`   rb   rr   r   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   rr  r=   ra   r&   r   r\   r   r   r6   )
r   r  r   rr  ra   rb   rr   r   r#   r!   r   r   r   !test_accessed_via_inst_w_provides  s    

zLObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_providesN)	r   r   r   r  rW   r\   r  r  r  r   r   r   r   r  h  s   
r  c                   @   s   e Zd Zdd ZdS )"ObjectSpecificationDescriptorTestsc                 C   s   ddl m} |S )Nr   )ObjectSpecificationDescriptor)r%   r  )r   r  r   r   r   rW     s    z2ObjectSpecificationDescriptorTests._getTargetClassNr  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                    s<    | _  fdd|D | _| D ]\}}t || q"d S )Nc                    s   i | ]}|t  |qS r   )r  ).0keymoduler   r   
<dictcomp>      z$_Monkey.__init__.<locals>.<dictcomp>)r   
to_restoreitemssetattr)r   r   r[   r  r  r   r  r   r     s    z_Monkey.__init__c                 C   s   | S r)   r   r   r   r   r   	__enter__  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__  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   r  targetcopyr  clearupdate)r   r   attrnamer[   r   r   r   r     s
    
z_MonkeyDict.__init__c                 C   s   | j S r)   )r  r   r   r   r   r    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
    s    
z_MonkeyDict.__exit__Nr  r   r   r   r   r     s   r   )1__doc__Zunittestr   r   r   Zzope.interface.testsr   r   Z#zope.interface.tests.test_interfacer   r&   r   ZTestCaser   r0   rV   r   r   r   r  r  r   r)  rA  rC  rH  rR  rY  re  rl  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   <module>   sx   : Cs  F	-:j@"5;9A 1.(.?<l	 v	7
