U
    ؒ]k!                    @   sJ  d Z ddlZddlmZ e ZG dd dejZG dd dejZG dd	 d	ejZ	G d
d dejZ
G dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd de	ZG dd deZG dd dejZG dd dejZG d d! d!eZd"d# Zd$d% ZG d&d' d'eZdS )(zTest Interface implementation
    N)_skip_under_py3kc                   @   s   e Zd Zdd Zdd ZdS )Test_invariantc                    sT   ddl m ddl m} dd  G  fdddt}| t||d d gi d S )	Nr   	invariantTAGGED_DATAc                  _   s
   t  d S NNotImplementedErrorargskw r   E/usr/lib/python3/dist-packages/zope/interface/tests/test_interface.py_check   s    z,Test_invariant.test_w_single.<locals>._checkc                       s   e Zd Z  dS )z)Test_invariant.test_w_single.<locals>.FooN__name__
__module____qualname__r   r   r   r   r   Foo!   s   r   
invariantszope.interface.interfacer   r   objectassertEqualgetattrselfr   r   r   r   r   test_w_single   s    zTest_invariant.test_w_singlec                    s`   ddl m ddl m} dd dd  G  fdd	d	t}| t||d d
 gi d S )Nr   r   r   c                  _   s
   t  d S r   r	   r   r   r   r   r   +   s    z.Test_invariant.test_w_multiple.<locals>._checkc                  _   s
   t  d S r   r	   r   r   r   r   _another_check.   s    z6Test_invariant.test_w_multiple.<locals>._another_checkc                       s   e Zd Z   dS )z+Test_invariant.test_w_multiple.<locals>.FooNr   r   r    r   r   r   r   r   1   s   r   r   r   r   r   r!   r   test_w_multiple'   s    
zTest_invariant.test_w_multipleN)r   r   r   r   r"   r   r   r   r   r      s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Test_taggedValuec                    sJ   ddl m  ddl m} G  fdddt}| t||d ddgi d S )Nr   taggedValuer   c                       s   e Zd Z ddg dS )z+Test_taggedValue.test_w_single.<locals>.FoobarbazNr   r   r$   r   r   r   ?   s   r   r&   r'   r   r%   r   r   r   r   r   r   r$   r   r   ;   s    zTest_taggedValue.test_w_singlec                    sL   ddl m  ddl m} G  fdddt}| t||d dgdd d S )	Nr   r$   r   c                       s"   e Zd Z ddg  dd dS )z-Test_taggedValue.test_w_multiple.<locals>.Foor&   r'   quxspamNr   r   r$   r   r   r   I   s   r   r'   r*   r&   r)   r(   r   r   r$   r   r"   E   s    
z Test_taggedValue.test_w_multiplec                    sJ   ddl m  ddl m} G  fdddt}| t||d ddd d S )	Nr   r$   r   c                       s,   e Zd Z ddg  dd  dd dS )z9Test_taggedValue.test_w_multiple_overwriting.<locals>.Foor&   r'   r)   r*   frobNr   r   r$   r   r   r   T   s   
r   r,   r*   r+   r(   r   r   r$   r   test_w_multiple_overwritingP   s    z,Test_taggedValue.test_w_multiple_overwritingN)r   r   r   r   r"   r-   r   r   r   r   r#   9   s   
r#   c                   @   sR   e Zd ZdZdd ZdddZdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )ElementTestsZ	AnElementc                 C   s   ddl m} |S )Nr   )Element)r   r/   )r   r/   r   r   r   _getTargetClassa   s    zElementTests._getTargetClassNc                 C   s   |d kr| j }|  |S r   )DEFAULT_NAMEr0   )r   namer   r   r   _makeOnee   s    zElementTests._makeOnec                 C   s`   |   }| |j| j | | | j | |jd | | d | t| g  d S )N )	r3   r   r   r1   getName__doc__getDoclistgetTaggedValueTagsr   elementr   r   r   test_ctor_defaultsj   s    zElementTests.test_ctor_defaultsc                 C   s*   |  d}| |jd  | |jd d S )Nz
An Element)r3   r   r   r6   r:   r   r   r   test_ctor_no_doc_space_in_namer   s    
z+ElementTests.test_ctor_no_doc_space_in_namec                 C   s   |   }| t|jd d S Nnonesuch)r3   assertRaisesKeyErrorgetTaggedValuer:   r   r   r   test_getTaggedValue_missw   s    z%ElementTests.test_getTaggedValue_missc                 C   s   |   }| |dd  d S r>   r3   r   queryTaggedValuer:   r   r   r   test_queryTaggedValue_miss{   s    z'ElementTests.test_queryTaggedValue_missc                 C   s    |   }| |ddd d S )Nr?   r&   rD   r:   r   r   r   $test_queryTaggedValue_miss_w_default   s    z1ElementTests.test_queryTaggedValue_miss_w_defaultc                 C   sR   |   }|dd | t| dg | |dd | |dd d S Nfoor&   )r3   setTaggedValuer   r8   r9   rB   rE   r:   r   r   r   test_setTaggedValue   s
    z ElementTests.test_setTaggedValue)N)r   r   r   r1   r0   r3   r<   r=   rC   rF   rG   rK   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 )SpecificationBasePyTestsc                 C   s   ddl m} |S Nr   )SpecificationBasePy)r   rN   )r   rN   r   r   r   r0      s    z(SpecificationBasePyTests._getTargetClassc                 C   s
   |    S r   r0   r   r   r   r   r3      s    z!SpecificationBasePyTests._makeOnec              	      sZ   ddl m} ddlm  |  } fdd}t||d | |t  W 5 Q R X d S )Nr   	interface_emptyc                    s    S r   r   objrS   r   r   _providedBy   s    zBSpecificationBasePyTests.test_providedBy_miss.<locals>._providedBy
providedBy)	zope.interfacerR   zope.interface.declarationsrT   r3   _MonkeyassertFalserY   r   )r   rR   sbrW   r   rS   r   test_providedBy_miss   s    z-SpecificationBasePyTests.test_providedBy_missc              	      sb   ddl m} |  G fdddt  fdd}t||d | t  W 5 Q R X d S )Nr   rQ   c                       s   e Zd Z i iZdS )z;SpecificationBasePyTests.test_providedBy_hit.<locals>._DeclNr   r   r   _impliedr   r^   r   r   _Decl   s   rc   c                    s     S r   r   rU   rc   r   r   rW      s    zASpecificationBasePyTests.test_providedBy_hit.<locals>._providedByrX   )rZ   rR   r3   r   r\   
assertTruerY   )r   rR   rW   r   rc   r^   r   test_providedBy_hit   s    z,SpecificationBasePyTests.test_providedBy_hitc              	      sZ   ddl m} ddlm  |  } fdd}t||d | |t  W 5 Q R X d S )Nr   rQ   rS   c                    s    S r   r   rU   rS   r   r   _implementedBy   s    zHSpecificationBasePyTests.test_implementedBy_miss.<locals>._implementedByimplementedBy)	rZ   rR   r[   rT   r3   r\   r]   rj   r   )r   rR   r^   rh   r   rS   r   test_implementedBy_miss   s    z0SpecificationBasePyTests.test_implementedBy_missc              	      sb   ddl m} |  G fdddt  fdd}t||d | t  W 5 Q R X d S )Nr   rQ   c                       s   e Zd Z i iZdS )z>SpecificationBasePyTests.test_implementedBy_hit.<locals>._DeclNr`   r   rb   r   r   rc      s   rc   c                    s     S r   r   rU   rd   r   r   rh      s    zGSpecificationBasePyTests.test_implementedBy_hit.<locals>._implementedByri   )rZ   rR   r3   r   r\   re   rj   )r   rR   rh   r   rf   r   test_implementedBy_hit   s    z/SpecificationBasePyTests.test_implementedBy_hitc                 C   s$   |   }i |_| |t  d S r   r3   ra   r]   ZisOrExtendsr   r   r^   r   r   r   test_isOrExtends_miss   s    z.SpecificationBasePyTests.test_isOrExtends_missc                 C   s*   |   }t }|i i|_| || d S r   r3   r   ra   re   r   r^   Ztestingr   r   r   test_isOrExtends_hit   s    
z-SpecificationBasePyTests.test_isOrExtends_hitc                 C   s$   |   }i |_| |t  d S r   rm   rn   r   r   r   test___call___miss   s    z+SpecificationBasePyTests.test___call___missc                 C   s*   |   }t }|i i|_| || d S r   rp   rq   r   r   r   test___call___hit   s    
z*SpecificationBasePyTests.test___call___hitN)r   r   r   r0   r3   r_   rg   rk   rl   ro   rr   rs   rt   r   r   r   r   rL      s   	
	
rL   c                   @   s   e Zd Zdd Zdd ZdS )SpecificationBaseTestsc                 C   s   ddl m} |S )Nr   )SpecificationBase)r   rv   )r   rv   r   r   r   r0      s    z&SpecificationBaseTests._getTargetClassc                 C   sR   ddl m} zdd l}W n$ tk
r<   | |  | Y nX | |  | d S rM   )r   rN   -zope.interface._zope_interface_coptimizationsImportErrorassertIsr0   assertIsNot)r   rN   zoper   r   r   test_optimizations   s    z)SpecificationBaseTests.test_optimizationsNr   r   r   r0   r|   r   r   r   r   ru      s   ru   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )InterfaceBasePyTestsc                 C   s   ddl m} |S Nr   )InterfaceBasePy)r   r   )r   r   r   r   r   r0      s    z$InterfaceBasePyTests._getTargetClassc                    s   G  fddd|   }| S )Nc                       s    e Zd Zdd Z fddZdS )z)InterfaceBasePyTests._makeOne.<locals>.IBc                 S   s   || S r   r   )r   Zconformr   r   r   _call_conform   s    z7InterfaceBasePyTests._makeOne.<locals>.IB._call_conformc                    s    S r   r   )r   rV   object_should_provider   r   rY      s    z4InterfaceBasePyTests._makeOne.<locals>.IB.providedByN)r   r   r   r   rY   r   r   r   r   IB   s   r   rO   )r   r   r   r   r   r   r3      s    zInterfaceBasePyTests._makeOnec                    s<   |  d}t  G  fdddt}| ||  k d S )NFc                       s   e Zd Z fddZdS )zRInterfaceBasePyTests.test___call___w___conform___returning_value.<locals>._Adaptedc                    s    S r   r   r   ifaceZ	conformedr   r   __conform__   s    z^InterfaceBasePyTests.test___call___w___conform___returning_value.<locals>._Adapted.__conform__Nr   r   r   r   r   r   r   r   _Adapted   s   r   r3   r   re   )r   ibr   r   r   r   +test___call___w___conform___returning_value   s    
z@InterfaceBasePyTests.test___call___w___conform___returning_valuec                 C   s6   |  d}G dd dt}| }| |||k d S )NTc                   @   s   e Zd Zdd ZdS )zSInterfaceBasePyTests.test___call___w___conform___miss_ob_provides.<locals>._Adaptedc                 S   s   d S r   r   r   r   r   r   r      s    z_InterfaceBasePyTests.test___call___w___conform___miss_ob_provides.<locals>._Adapted.__conform__Nr   r   r   r   r   r      s   r   r   )r   r   r   adaptedr   r   r   ,test___call___w___conform___miss_ob_provides   s    
zAInterfaceBasePyTests.test___call___w___conform___miss_ob_providesc                 C   s.   |  d}t }t }| ||||k d S NFr   )r   r   r   Z	alternater   r   r   7test___call___wo___conform___ob_no_provides_w_alternate   s    
zLInterfaceBasePyTests.test___call___wo___conform___ob_no_provides_w_alternatec                 C   s"   |  d}t }| t|| d S r   )r3   r   r@   	TypeErrorr   r   r   r   r   r   7test___call___w___conform___ob_no_provides_wo_alternate  s    
zLInterfaceBasePyTests.test___call___w___conform___ob_no_provides_wo_alternatec                 C   s(   |  d}t }| |||k d S NT)r3   r   re   	__adapt__r   r   r   r   test___adapt___ob_provides
  s    
z/InterfaceBasePyTests.test___adapt___ob_providesc              	      sz   ddl m} | d}t }g   fdd}dd }t|||gd, | |||k |  ||fg W 5 Q R X d S )	Nr   rQ   Fc                    s     | |f d S r   appendr   rV   Z_missedr   r   
_hook_miss  s    zQInterfaceBasePyTests.test___adapt___ob_no_provides_uses_hooks.<locals>._hook_missc                 S   s   |S r   r   r   r   r   r   	_hook_hit  s    zPInterfaceBasePyTests.test___adapt___ob_no_provides_uses_hooks.<locals>._hook_hitadapter_hooks)rZ   rR   r3   r   r\   re   r   r   )r   rR   r   r   r   r   r   r   r   (test___adapt___ob_no_provides_uses_hooks  s    
z=InterfaceBasePyTests.test___adapt___ob_no_provides_uses_hooksN)r   r   r   r0   r3   r   r   r   r   r   r   r   r   r   r   r~      s   r~   c                   @   s   e Zd Zdd Zdd ZdS )InterfaceBaseTestsc                 C   s   ddl m} |S )Nr   )InterfaceBase)r   r   )r   r   r   r   r   r0      s    z"InterfaceBaseTests._getTargetClassc                 C   sR   ddl m} zdd l}W n$ tk
r<   | |  | Y nX | |  | d S r   )r   r   rw   rx   ry   r0   rz   )r   r   r{   r   r   r   r|   $  s    z%InterfaceBaseTests.test_optimizationsNr}   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zef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 ) SpecificationTestsc                 C   s   ddl m} |S )Nr   )Specification)r   r   )r   r   r   r   r   r0   0  s    z"SpecificationTests._getTargetClassc                 C   s   |t kr|   S |  |S r   )_markerr0   )r   basesr   r   r   r3   4  s    
zSpecificationTests._makeOnec                 C   sj   ddl m} |  }| |jd | t|jd | ||jk | ||jk | t|jd d S )Nr   	Interfacer      )	r   r   r3   r   	__bases__lenra   re   
dependents)r   r   specr   r   r   	test_ctor9  s    zSpecificationTests.test_ctorc                 C   s@   |   }t }|| | t|jd | |j| d d S N   )r3   DummyDependent	subscriber   r   r   r   r   depr   r   r   test_subscribe_first_timeB  s
    
z,SpecificationTests.test_subscribe_first_timec                 C   s8   |   }t }|| || | |j| d d S )Nr   )r3   r   r   r   r   r   r   r   r   test_subscribe_againI  s
    

z'SpecificationTests.test_subscribe_againc                 C   s"   |   }t }| t|j| d S r   )r3   r   r@   rA   unsubscriber   r   r   r   test_unsubscribe_missP  s    z(SpecificationTests.test_unsubscribe_missc                 C   s\   |   }t }|| || || | |j| d || | ||jk d S r   )r3   r   r   r   r   r   r]   r   r   r   r   test_unsubscribeU  s    



z#SpecificationTests.test_unsubscribec                 C   s   ddl m} |  }t }|| G dd d|}G dd d|}|f|_| |j|g | |j| d |f|_| |j	|d  | |j| d d S )Nr   r   c                   @   s   e Zd ZdS )zVSpecificationTests.test___setBases_subscribes_bases_and_notifies_dependents.<locals>.INr   r   r   r   r   Id  s   r   c                   @   s   e Zd ZdS )zVSpecificationTests.test___setBases_subscribes_bases_and_notifies_dependents.<locals>.JNr   r   r   r   r   Jf  s   r   r   )
r   r   r3   r   r   r   r   _changedr   get)r   r   r   r   r   r   r   r   r   8test___setBases_subscribes_bases_and_notifies_dependents_  s    
zKSpecificationTests.test___setBases_subscribes_bases_and_notifies_dependentsc                 C   sh   ddl m} G dd d|}|  }d|_d|j|< || | t|d| | k | ||jk d S )Nr   r   c                   @   s   e Zd ZdS )zGSpecificationTests.test_changed_clears_volatiles_and_implied.<locals>.INr   r   r   r   r   r   q  s   r   r   r   _v_attrs)	r   r   r3   r   ra   changedre   r   r]   )r   r   r   r   r   r   r   )test_changed_clears_volatiles_and_impliedo  s    

z<SpecificationTests.test_changed_clears_volatiles_and_impliedc                 C   sD   ddl m} G dd d|}| ||g}| t| |g d S )Nr   r   c                   @   s   e Zd ZdS )zCSpecificationTests.test_interfaces_skips_already_seen.<locals>.IFooNr   r   r   r   r   IFoo|  s   r   )r   r   r3   r   r8   
interfacesr   r   r   r   r   r   r   "test_interfaces_skips_already_seenz  s    z5SpecificationTests.test_interfaces_skips_already_seenc                 C   s>   ddl m} G dd d|}| |}| |j|dd d S )Nr   r   c                   @   s   e Zd ZdS )z<SpecificationTests.test_extends_strict_wo_self.<locals>.IFooNr   r   r   r   r   r     s   r   Tstrict)r   r   r3   r]   extendsr   r   r   r   test_extends_strict_wo_self  s    
z.SpecificationTests.test_extends_strict_wo_selfc                 C   s    |   }| |j|dd d S )NTr   )r3   r]   r   r   r   r   r   r   test_extends_strict_w_self  s    z-SpecificationTests.test_extends_strict_w_selfc                 C   s    |   }| |j|dd d S )NFr   )r3   re   r   r   r   r   r   test_extends_non_strict_w_self  s    z1SpecificationTests.test_extends_non_strict_w_selfc                 C   s0   |   }t }d|i|_| |d|k d S )NrI   )r3   r   r   re   r   )r   r   rI   r   r   r   test_get_hit_w__v_attrs  s    
z*SpecificationTests.test_get_hit_w__v_attrsc                    s   ddl m  ddl m} G  fddd|}G  fddd|}| ||g}| |d|dk | |d	|d	k d S )
Nr   	Attributer   c                       s   e Zd Z dZdS )zCSpecificationTests.test_get_hit_from_base_wo__v_attrs.<locals>.IFoorI   N)r   r   r   rI   r   r   r   r   r     s   r   c                       s   e Zd Z dZdS )zCSpecificationTests.test_get_hit_from_base_wo__v_attrs.<locals>.IBarr&   Nr   r   r   r&   r   r   r   r   IBar  s   r   rI   r&   )r   r   r   r3   re   r   )r   r   r   r   r   r   r   r   "test_get_hit_from_base_wo__v_attrs  s    z5SpecificationTests.test_get_hit_from_base_wo__v_attrsN)r   r   r   r0   r   r3   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   .  s   	
r   c                   @   sv  e Zd Zdd Zd^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d0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Z d@dA Z!dBdC Z"dDdE Z#dFdG Z$dHdI Z%dJdK Z&dLdM Z'dNdO Z(dPdQ Z)dRdS Z*dTdU Z+dVdW Z,dXdY Z-dZd[ Z.d\d] Z/dS )_InterfaceClassTestsc                 C   s   ddl m} |S )Nr   InterfaceClass)r   r   )r   r   r   r   r   r0     s    z#InterfaceClassTests._getTargetClassITestr   Nc                 C   s   |   |||||S r   rO   )r   r2   r   attrsr6   r   r   r   r   r3     s    zInterfaceClassTests._makeOnec                 C   sN   |   }|d}| |jd | |jd | |jd | | d d S )NITestingr4   r   )r0   r   r   r6   r   getBases)r   klassinstr   r   r   r<     s    z&InterfaceClassTests.test_ctor_defaultsc                 C   s    |   }| t|dt f d S )Nr   )r0   r@   r   r   )r   r   r   r   r   test_ctor_bad_bases  s    z'InterfaceClassTests.test_ctor_bad_basesc                 C   s   ddl m} ddl m} dd }|dd||d}|  }|d	|d
}| |jd	 | |jd | |jd | | |	  d S )Nr   r   fromFunctionc                   S   s   dS 	DOCSTRINGNr   r   r   r   r   _bar  s    zBInterfaceClassTests.test_ctor_w_attrs_attrib_methods.<locals>._barr   r4   rI   r&   r   r   r   )
r   r   r   r0   r   r   r6   r   nameskeys)r   r   r   r   ATTRSr   r   r   r   r    test_ctor_w_attrs_attrib_methods  s    z4InterfaceClassTests.test_ctor_w_attrs_attrib_methodsc                 C   s^   di i}|   }|d|d}| |jd | |jd | |jd | | |  d S )NZ
__locals__r   r   r4   r   r0   r   r   r6   r   r   r   r   r   r   r   r   r   r   test_ctor_attrs_w___locals__  s    z0InterfaceClassTests.test_ctor_attrs_w___locals__c                 C   s^   di i}|   }|d|d}| |jd | |jd | |jd | | |  d S )N__annotations__r   r   r4   r   r   r   r   r   r   !test_ctor_attrs_w___annotations__  s    z5InterfaceClassTests.test_ctor_attrs_w___annotations__c                 C   sj   ddl m} d|i}|  }|d|d}| |jd | |jd | |jd | t| g  d S )Nr   )_decorator_non_returnZdropmer   r   r4   r   )	r   r   r0   r   r   r6   r   r8   r   )r   r   r   r   r   r   r   r   'test_ctor_attrs_w__decorator_non_return  s    z;InterfaceClassTests.test_ctor_attrs_w__decorator_non_returnc                 C   s4   ddl m} dt i}|  }| j||d|d d S )Nr   )InvalidInterfaceZinvalidr   r   )zope.interface.exceptionsr   r   r0   r@   )r   r   r   r   r   r   r   #test_ctor_attrs_w_invalid_attr_type  s    
z7InterfaceClassTests.test_ctor_attrs_w_invalid_attr_typec                 C   s0   ddi}|   }|d|dd}| |jd d S )Nr6   ZATTRr   ZEXPLICIT)r   r6   )r0   r   r6   r   r   r   r   test_ctor_w_explicit___doc__  s    z0InterfaceClassTests.test_ctor_w_explicit___doc__c                 C   s"   |   }| t| |g d S r   )r3   r   r8   r   r   r   r   r   test_interfaces  s    z#InterfaceClassTests.test_interfacesc                 C   s.   |   }| j d|fd}| | |f d S NZISub)r   )r3   r   r   r   r   subr   r   r   test_getBases  s    z!InterfaceClassTests.test_getBasesc                 C   s   |   }| || d S r   )r3   re   isEqualOrExtendedByr   r   r   r   !test_isEqualOrExtendedBy_identity  s    z5InterfaceClassTests.test_isEqualOrExtendedBy_identityc                 C   s<   |   }| j d|fd}| || | || d S r   )r3   re   r   r]   r   r   r   r   !test_isEqualOrExtendedBy_subiface  s    z5InterfaceClassTests.test_isEqualOrExtendedBy_subifacec                 C   s8   |  d}|  d}| || | || d S )NZOneZAnother)r3   r]   r   )r   oneZanotherr   r   r   "test_isEqualOrExtendedBy_unrelated  s    

z6InterfaceClassTests.test_isEqualOrExtendedBy_unrelatedc                 C   s   ddl m} ddl m} dd }|dd||d}d	|d
di}| jd|d}| jd|f|d}| t|jddd	g d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r   
  s    zFInterfaceClassTests.test_names_w_all_False_ignores_bases.<locals>._barr   r4   r   r'   BazIBaser   IDerivedr   r   Fallr   r   r   r3   r   sortedr   r   r   r   r   
BASE_ATTRSDERIVED_ATTRSbasederivedr   r   r   $test_names_w_all_False_ignores_bases  s    z8InterfaceClassTests.test_names_w_all_False_ignores_basesc                 C   s`   ddl m} ddl m} dd }|dd||d}| j|d	}| t|jd
dddg d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r     s    z@InterfaceClassTests.test_names_w_all_True_no_bases.<locals>._barr   r4   r   r   Tr  r&   rI   r  r   r   r   r   r   r   r   r   r   test_names_w_all_True_no_bases  s    z2InterfaceClassTests.test_names_w_all_True_no_basesc                 C   s   ddl m} ddl m} dd }|dd||d}d	|d
di}| jd|d}| jd|f|d}| t|jdddd	dg d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r   #  s    zFInterfaceClassTests.test_names_w_all_True_w_bases_simple.<locals>._barr   r4   r   r'   r   r   r   r   r   Tr  r&   rI   r  r  r   r   r   $test_names_w_all_True_w_bases_simple   s    z8InterfaceClassTests.test_names_w_all_True_w_bases_simplec           	      C   s   ddl m} ddl m} dd }dd }|dd	||d
}|||dd	d}| jd|d}| jd|f|d}| t|jdddddg d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r   1  s    zJInterfaceClassTests.test_names_w_all_True_bases_w_same_names.<locals>._barc                   S   s   dS r   r   r   r   r   r   _foo3  s    zJInterfaceClassTests.test_names_w_all_True_bases_w_same_names.<locals>._foor   r4   r   r   rI   r'   r   r   r   r   Tr  r&   r'   rI   r  	r   r   r   r   r  r  r  r  r	  r   r   r   (test_names_w_all_True_bases_w_same_names.  s    z<InterfaceClassTests.test_names_w_all_True_bases_w_same_namesc           	      C   s   ddl m} ddl m} dd }dd }|dd	||d
}|||dd	d}| jd|d}| jd|f|d}| t|dddg d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r   B  s    z/InterfaceClassTests.test___iter__.<locals>._barc                   S   s   dS r   r   r   r   r   r   r  D  s    z/InterfaceClassTests.test___iter__.<locals>._foor   r4   r   r   r  r   r   r   r   r&   r'   rI   )r   r   r   r3   r   r  r  r   r   r   test___iter__?  s    z!InterfaceClassTests.test___iter__c                 C   s   ddl m} ddl m} dd }|dd||d}d	|d
di}| jd|d}| jd|f|d}| t|jddd	|d	 fg d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r   S  s    zUInterfaceClassTests.test_namesAndDescriptions_w_all_False_ignores_bases.<locals>._barr   r4   r   r'   r   r   r   r   r   Fr  r   r   r   r3   r   r  namesAndDescriptionsr  r   r   r   3test_namesAndDescriptions_w_all_False_ignores_basesP  s    zGInterfaceClassTests.test_namesAndDescriptions_w_all_False_ignores_basesc                 C   sp   ddl m} ddl m} dd }|dd||d}| j|d	}| t|jd
dd|d fd|d fg d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r   c  s    zOInterfaceClassTests.test_namesAndDescriptions_w_all_True_no_bases.<locals>._barr   r4   r   r   Fr  r&   rI   r  r  r   r   r   -test_namesAndDescriptions_w_all_True_no_bases`  s    

zAInterfaceClassTests.test_namesAndDescriptions_w_all_True_no_basesc                 C   s   ddl m} ddl m} dd }|dd||d}d	|d
di}| jd|d}| jd|f|d}| t|jddd|d fd	|d	 fd|d fg d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r   q  s    zMInterfaceClassTests.test_namesAndDescriptions_w_all_True_simple.<locals>._barr   r4   r   r'   r   r   r   r   r   Tr  r&   rI   r  r  r   r   r   +test_namesAndDescriptions_w_all_True_simplen  s    


z?InterfaceClassTests.test_namesAndDescriptions_w_all_True_simplec           	      C   s   ddl m} ddl m} dd }dd }|dd	||d
}|||dd	d}| jd|d}| jd|f|d}| t|jddd|d fd|d fd|d fg d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r     s    zYInterfaceClassTests.test_namesAndDescriptions_w_all_True_bases_w_same_names.<locals>._barc                   S   s   dS r   r   r   r   r   r   r    s    zYInterfaceClassTests.test_namesAndDescriptions_w_all_True_bases_w_same_names.<locals>._foor   r4   r   r   r  r   r   r   r   Tr  r&   r'   rI   r  r  r   r   r   7test_namesAndDescriptions_w_all_True_bases_w_same_names  s$    


zKInterfaceClassTests.test_namesAndDescriptions_w_all_True_bases_w_same_namesc                 C   s   |   }| t|jd d S r>   )r3   r@   rA   getDescriptionForr   r   r   r   r   test_getDescriptionFor_miss  s    z/InterfaceClassTests.test_getDescriptionFor_missc                 C   sp   ddl m} ddl m} dd }|dd||d}| j|d	}| |d
|d
  | |d|d  d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r     s    z<InterfaceClassTests.test_getDescriptionFor_hit.<locals>._barr   r4   r   r   rI   r&   )r   r   r   r3   r   r  r  r   r   r   test_getDescriptionFor_hit  s    z.InterfaceClassTests.test_getDescriptionFor_hitc                    s$   |     fdd}| t| d S )Nc                      s    d S r>   r   r   r   r   r   _test  s    z8InterfaceClassTests.test___getitem___miss.<locals>._test)r3   r@   rA   )r   r  r   r  r   test___getitem___miss  s    z)InterfaceClassTests.test___getitem___missc                 C   sl   ddl m} ddl m} dd }|dd||d}| j|d	}| |d
 |d
  | |d |d  d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r     s    z6InterfaceClassTests.test___getitem___hit.<locals>._barr   r4   r   r   rI   r&   )r   r   r   r3   r   r  r   r   r   test___getitem___hit  s    z(InterfaceClassTests.test___getitem___hitc                 C   s   |   }| d|k d S r>   )r3   r]   r  r   r   r   test___contains___miss  s    z*InterfaceClassTests.test___contains___missc                 C   s`   ddl m} ddl m} dd }|dd||d}| j|d	}| d
|k | d|k d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r     s    z7InterfaceClassTests.test___contains___hit.<locals>._barr   r4   r   r   rI   r&   )r   r   r   r3   re   r  r   r   r   test___contains___hit  s    z)InterfaceClassTests.test___contains___hitc                 C   s   |   }| |dd  d S r>   )r3   r   directr  r   r   r   test_direct_miss  s    z$InterfaceClassTests.test_direct_missc           	      C   s   ddl m} ddl m} dd }dd }|dd	||d
}|||dd	d}| jd|d}| jd|f|d}| |d|d  | |d|d  | |dd  d S )Nr   r   r   c                   S   s   dS r   r   r   r   r   r   r     s    zBInterfaceClassTests.test_direct_hit_local_miss_bases.<locals>._barc                   S   s   dS r   r   r   r   r   r   r    s    zBInterfaceClassTests.test_direct_hit_local_miss_bases.<locals>._foor   r4   r   r   r  r   r   r   r   rI   r'   r&   )r   r   r   r3   r   r#  r  r   r   r    test_direct_hit_local_miss_bases  s    z4InterfaceClassTests.test_direct_hit_local_miss_basesc                 C   s   |   }| |dd  d S r>   )r3   r   queryDescriptionForr   r   r   r   test_queryDescriptionFor_miss  s    z1InterfaceClassTests.test_queryDescriptionFor_missc                 C   s@   ddl m} d|ddi}| j|d}| |d|d  d S )Nr   r   attrZTitleZDescriptionr   )rZ   r   r3   r   r&  )r   r   r   r   r   r   r   test_queryDescriptionFor_hit  s    z0InterfaceClassTests.test_queryDescriptionFor_hitc                    sV   g   fdd}|   }t }|d|g | ||d  |  |fi fg d S )Nc                     s     | |f dS r   r   r   Z_called_withr   r   	_passable  s    zCInterfaceClassTests.test_validateInvariants_pass.<locals>._passabler   )r3   r   rJ   r   validateInvariants)r   r+  r   rV   r   r*  r   test_validateInvariants_pass  s    z0InterfaceClassTests.test_validateInvariants_passc                    s   ddl m  g fdd}g  fdd}|  }t }|d||g |  |j| | |fi fg | |fi fg d S )Nr   Invalidc                     s     | |f dS r   r   r   _passable_called_withr   r   r+    s    zTInterfaceClassTests.test_validateInvariants_fail_wo_errors_passed.<locals>._passablec                     s    | |f  d S r   r   r   r/  _fail_called_withr   r   _fail  s    zPInterfaceClassTests.test_validateInvariants_fail_wo_errors_passed.<locals>._failr   r   r/  r3   r   rJ   r@   r,  r   )r   r+  r4  r   rV   r   r/  r3  r1  r   -test_validateInvariants_fail_wo_errors_passed  s    zAInterfaceClassTests.test_validateInvariants_fail_wo_errors_passedc                    s   ddl m  g }g  fdd}|  }t }|d|g |  |j|| | |fi fg | t|d | 	t
|d   d S )Nr   r.  c                     s    | |f  d S r   r   r   r2  r   r   r4    s    zOInterfaceClassTests.test_validateInvariants_fail_w_errors_passed.<locals>._failr   r   r   r/  r3   r   rJ   r@   r,  r   r   re   
isinstance)r   _errorsr4  r   rV   r   r2  r   ,test_validateInvariants_fail_w_errors_passed  s    z@InterfaceClassTests.test_validateInvariants_fail_w_errors_passedc                    s   ddl m  g fdd}g  fdd}| d}| d|f}t }|d	|g |d	|g |  |j| | |fi fg | |fi fg d S )
Nr   r.  c                     s     | |f dS r   r   r   r0  r   r   r+    s    z\InterfaceClassTests.test_validateInvariants_fail_in_base_wo_errors_passed.<locals>._passablec                     s    | |f  d S r   r   r   r2  r   r   r4    s    zXInterfaceClassTests.test_validateInvariants_fail_in_base_wo_errors_passed.<locals>._failr   r   r   r5  )r   r+  r4  r  r	  rV   r   r6  r   5test_validateInvariants_fail_in_base_wo_errors_passed  s    
zIInterfaceClassTests.test_validateInvariants_fail_in_base_wo_errors_passedc                    s   ddl m  g }g fdd}g  fdd}| d}| d|f}t }|d	|g |d	|g |  |j|| | |fi fg | |fi fg | t|d
 | 	t
|d   d S )Nr   r.  c                     s     | |f dS r   r   r   r0  r   r   r+  *  s    z[InterfaceClassTests.test_validateInvariants_fail_in_base_w_errors_passed.<locals>._passablec                     s    | |f  d S r   r   r   r2  r   r   r4  .  s    zWInterfaceClassTests.test_validateInvariants_fail_in_base_w_errors_passed.<locals>._failr   r   r   r   r8  )r   r:  r+  r4  r  r	  rV   r   r6  r   4test_validateInvariants_fail_in_base_w_errors_passed&  s     
zHInterfaceClassTests.test_validateInvariants_fail_in_base_w_errors_passedc                 C   s   |  d}| | d d S )NZPickleMe)r3   r   
__reduce__r   r   r   r   test___reduce__<  s    
z#InterfaceClassTests.test___reduce__c                 C   s"   |  d}| t|td d S )NHashMe)r@  z#zope.interface.tests.test_interface)r3   r   hashr   r   r   r   test___hash___normal@  s    

z(InterfaceClassTests.test___hash___normalc              	   C   s   dd l }ddl m} G dd d|  }| }|ddZ}|d | t|d | t|d | |d jt	k | t
|d jd	 W 5 Q R X d S )
Nr   )catch_warningsc                   @   s   e Zd Zdd ZdS )zIInterfaceClassTests.test___hash___missing_required_attrs.<locals>.Derivedc                 S   s   d S r   r   rP   r   r   r   __init__K  s    zRInterfaceClassTests.test___hash___missing_required_attrs.<locals>.Derived.__init__Nr   r   r   rD  r   r   r   r   DerivedJ  s   rF  T)recordalwaysr   z-Hashing uninitialized InterfaceClass instance)warningsrC  r0   simplefilterr   rA  r   re   categoryUserWarningstrmessage)r   rI  rC  rF  r	  Zwarnedr   r   r   $test___hash___missing_required_attrsF  s    
z8InterfaceClassTests.test___hash___missing_required_attrsc                 C   s   |   }| |d k  | |d k | |d k | |d k | |d k | |d k | d |k  | d |k | d |k | d |k | d |k | d |k d S r   r3   re   r]   r   r   r   r   test_comparison_with_NoneV  s    z-InterfaceClassTests.test_comparison_with_Nonec                 C   s`   |   }| ||k  | ||k | ||k | ||k | ||k | ||k d S r   )r3   r]   re   r   r   r   r   "test_comparison_with_same_instancef  s    z6InterfaceClassTests.test_comparison_with_same_instancec                 C   s   | j ddd}| j ddd}| ||k  | ||k  | ||k | ||k | ||k | ||k | ||k | ||k | ||k | ||k | ||k | ||k d S )NZINamezzope.interface.tests.one)r   zzope.interface.tests.otherrP  )r   r   otherr   r   r   8test_comparison_with_same_named_instance_in_other_modulep  s    zLInterfaceClassTests.test_comparison_with_same_named_instance_in_other_module)r   r   NNN)0r   r   r   r0   r3   r<   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r$  r%  r'  r)  r-  r7  r;  r<  r=  r?  rB  rO  rQ  rR  rT  r   r   r   r   r     s^     
		

r   c                   @   sp  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%e&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.dWdX Z/dYS )ZInterfaceTestsc                    sD   ddl m} ddl m  G  fddd|}| |d j|k d S )Nr   r   r   c                       s   e Zd Z dZdS )z<InterfaceTests.test_attributes_link_to_interface.<locals>.I1My attrN)r   r   r   r(  r   r   r   r   I1  s   rW  r(  )rZ   r   r   re   rR   r   r   rW  r   r   r   !test_attributes_link_to_interface  s    z0InterfaceTests.test_attributes_link_to_interfacec                 C   s4   ddl m} G dd d|}| |d j|k d S )Nr   r   c                   @   s   e Zd Zdd ZdS )z9InterfaceTests.test_methods_link_to_interface.<locals>.I1c                 S   s   dS zA methodNr   )rI   r&   Zbingor   r   r   method  s    z@InterfaceTests.test_methods_link_to_interface.<locals>.I1.methodNr   r   r   r[  r   r   r   r   rW    s   rW  r[  )rZ   r   re   rR   rX  r   r   r   test_methods_link_to_interface  s    z-InterfaceTests.test_methods_link_to_interfacec                    s   ddl m} ddl m} ddl m} G dd d| G dd d|}G  fd	d
d
t}| }|  | | || |  ||k | |||k |  ||k | |||k d S )Nr   r   ri   rX   c                   @   s   e Zd Zdd Zdd ZdS )z<InterfaceTests.test_classImplements_simple.<locals>.ICurrentc                 S   s   d S r   r   abr   r   r   method1  s    zDInterfaceTests.test_classImplements_simple.<locals>.ICurrent.method1c                 S   s   d S r   r   r^  r   r   r   method2  s    zDInterfaceTests.test_classImplements_simple.<locals>.ICurrent.method2N)r   r   r   ra  rb  r   r   r   r   ICurrent  s   rc  c                   @   s   e Zd ZdS )z:InterfaceTests.test_classImplements_simple.<locals>.IOtherNr   r   r   r   r   IOther  s   rd  c                       s    e Zd Z Zdd Zdd ZdS )z;InterfaceTests.test_classImplements_simple.<locals>.Currentc                 S   s
   t  d S r   r	   r   r_  r`  r   r   r   ra    s    zCInterfaceTests.test_classImplements_simple.<locals>.Current.method1c                 S   s
   t  d S r   r	   re  r   r   r   rb    s    zCInterfaceTests.test_classImplements_simple.<locals>.Current.method2N)r   r   r   __implemented__ra  rb  r   rc  r   r   Current  s   rh  rZ   r   rj   rY   r   re   r]   )r   r   rj   rY   rd  rh  currentr   rg  r   test_classImplements_simple  s    z*InterfaceTests.test_classImplements_simplec                    s   ddl m} ddl m} ddl m} G dd d| G dd d }G  fd	d
d
}| }|  | | || |  ||k | |||k |  ||k | |||k d S )Nr   r   ri   rX   c                   @   s   e Zd Zdd ZdS )zCInterfaceTests.test_classImplements_base_not_derived.<locals>.IBasec                   S   s   d S r   r   r   r   r   r   r[    s    zJInterfaceTests.test_classImplements_base_not_derived.<locals>.IBase.methodNr\  r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zFInterfaceTests.test_classImplements_base_not_derived.<locals>.IDerivedNr   r   r   r   r   r     s   r   c                       s   e Zd Z Zdd ZdS )zEInterfaceTests.test_classImplements_base_not_derived.<locals>.Currentc                 S   s
   t  d S r   r	   rP   r   r   r   r[    s    zLInterfaceTests.test_classImplements_base_not_derived.<locals>.Current.methodNr   r   r   rf  r[  r   r   r   r   rh    s   rh  )rZ   r   rj   rY   re   r]   )r   r   rj   rY   r   rh  rj  r   rm  r   %test_classImplements_base_not_derived  s    z4InterfaceTests.test_classImplements_base_not_derivedc                    s   ddl m} ddl m} ddl m} G dd d|}G dd d| G  fd	d
d
t}| }| || |  | | |||k | ||| k |  ||k | |||k | ||| k |  ||k d S )Nr   r   ri   rX   c                   @   s   e Zd Zdd ZdS )zCInterfaceTests.test_classImplements_base_and_derived.<locals>.IBasec                   S   s   d S r   r   r   r   r   r   r[    s    zJInterfaceTests.test_classImplements_base_and_derived.<locals>.IBase.methodNr\  r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zFInterfaceTests.test_classImplements_base_and_derived.<locals>.IDerivedNr   r   r   r   r   r     s   r   c                       s   e Zd Z Zdd ZdS )zEInterfaceTests.test_classImplements_base_and_derived.<locals>.Currentc                 S   s
   t  d S r   r	   rP   r   r   r   r[    s    zLInterfaceTests.test_classImplements_base_and_derived.<locals>.Current.methodNrl  r   r   r   r   rh    s   rh  )rZ   r   rj   rY   r   re   r]   Z	flattened)r   r   rj   rY   r   rh  rj  r   ro  r   %test_classImplements_base_and_derived  s    z4InterfaceTests.test_classImplements_base_and_derivedc                    s   ddl m} ddl m} ddl m} G dd d| G dd d G  fd	d
d
t}G fdddt}G dd d||}| }|  | | | |  ||k | ||k |  ||k | ||k d S )Nr   r   ri   rX   c                   @   s   e Zd Zdd ZdS )z;InterfaceTests.test_classImplements_multiple.<locals>.ILeftc                   S   s   d S r   r   r   r   r   r   r[    s    zBInterfaceTests.test_classImplements_multiple.<locals>.ILeft.methodNr\  r   r   r   r   ILeft  s   rq  c                   @   s   e Zd ZdS )z<InterfaceTests.test_classImplements_multiple.<locals>.IRightNr   r   r   r   r   IRight  s   rr  c                       s   e Zd Z Zdd ZdS )z:InterfaceTests.test_classImplements_multiple.<locals>.Leftc                 S   s
   t  d S r   r	   rP   r   r   r   r[    s    zAInterfaceTests.test_classImplements_multiple.<locals>.Left.methodNrl  r   rq  r   r   Left  s   rt  c                       s   e Zd Z ZdS )z;InterfaceTests.test_classImplements_multiple.<locals>.RightNr   r   r   rf  r   rr  r   r   Right  s   rw  c                   @   s   e Zd ZdS )z:InterfaceTests.test_classImplements_multiple.<locals>.AmbiNr   r   r   r   r   Ambi  s   rx  )rZ   r   rj   rY   r   re   )r   r   rj   rY   rt  rw  rx  Zambir   )rq  rr  r   test_classImplements_multiple  s    z,InterfaceTests.test_classImplements_multiplec                    sL  ddl m} ddl m} ddl m} G dd d| G dd d G d	d
 d
|G  fdddG fdddt}G fdddtG fddd|}| }|  | | | | | |  ||k | ||k | ||k |  ||k | ||k | ||k d S )Nr   r   ri   rX   c                   @   s   e Zd Zdd ZdS )zPInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.ILeftc                   S   s   d S r   r   r   r   r   r   r[    s    zWInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.ILeft.methodNr\  r   r   r   r   rq    s   rq  c                   @   s   e Zd ZdS )zQInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.IRightNr   r   r   r   r   rr    s   rr  c                   @   s   e Zd ZdS )zQInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.IOtherNr   r   r   r   r   rd    s   rd  c                       s   e Zd Z Zdd ZdS )zOInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.Leftc                 S   s
   t  d S r   r	   rP   r   r   r   r[    s    zVInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.Left.methodNrl  r   rs  r   r   rt    s   rt  c                       s   e Zd Z ZdS )zPInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.RightNru  r   rv  r   r   rw    s   rw  c                       s   e Zd Z ZdS )zPInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.OtherNru  r   )rd  r   r   Other"  s   rz  c                       s   e Zd Z jjfZdS )zPInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.MixedNru  r   )rt  rz  r   r   Mixed%  s   r{  ri  )r   r   rj   rY   rw  r{  Zmixedr   )rq  rd  rr  rt  rz  r   2test_classImplements_multiple_w_explict_implements	  s(    zAInterfaceTests.test_classImplements_multiple_w_explict_implementsc                 C   s   ddl m} |j}|d}|d|g}|d}|d||g}| || | || | || | || | || | || | || d S )Nr   r   FunInterfaceBarInterfaceBobInterfaceBazInterface)rZ   r   	__class__re   r   r]   )r   r   newr}  r~  r  r  r   r   r   testInterfaceExtendsInterface4  s    z,InterfaceTests.testInterfaceExtendsInterfacec                    s`   ddl m  ddl m} ddlm} G  fddd|G fdddt}| || d S )	Nr   r   r   )verifyClassc                       s   e Zd Z dZdd ZdS )z1InterfaceTests.test_verifyClass.<locals>.ICheckMerV  c                   S   s   dS rZ  r   r   r   r   r   r[  N  s    z8InterfaceTests.test_verifyClass.<locals>.ICheckMe.methodNr   r   r   r(  r[  r   r   r   r   ICheckMeK  s   r  c                       s   e Zd Z ZdZdd ZdS )z0InterfaceTests.test_verifyClass.<locals>.CheckMevaluec                 S   s
   t  d S r   r	   rP   r   r   r   r[  U  s    z7InterfaceTests.test_verifyClass.<locals>.CheckMe.methodNr   r   r   rf  r(  r[  r   r  r   r   CheckMeQ  s   r  )rZ   r   r   zope.interface.verifyr  r   re   )r   r   r  r  r   r   r  r   test_verifyClassE  s    zInterfaceTests.test_verifyClassc                    sf   ddl m  ddl m} ddlm} G  fddd|G fdddt}| }| || d S )	Nr   r   r   )verifyObjectc                       s   e Zd Z dZdd ZdS )z2InterfaceTests.test_verifyObject.<locals>.ICheckMerV  c                   S   s   dS rZ  r   r   r   r   r   r[  c  s    z9InterfaceTests.test_verifyObject.<locals>.ICheckMe.methodNr  r   r   r   r   r  `  s   r  c                       s   e Zd Z ZdZdd ZdS )z1InterfaceTests.test_verifyObject.<locals>.CheckMer  c                 S   s
   t  d S r   r	   rP   r   r   r   r[  j  s    z8InterfaceTests.test_verifyObject.<locals>.CheckMe.methodNr  r   r  r   r   r  f  s   r  )rZ   r   r   r  r  r   re   )r   r   r  r  Zcheck_mer   r  r   test_verifyObjectZ  s    z InterfaceTests.test_verifyObjectc                 C   s0   ddl m} G dd d|}| || d S )Nr   r   c                   @   s   e Zd ZdS )zLInterfaceTests.test_interface_object_provides_Interface.<locals>.AnInterfaceNr   r   r   r   r   AnInterfacet  s   r  )rZ   r   re   rY   )r   r   r  r   r   r   (test_interface_object_provides_Interfaceq  s    z7InterfaceTests.test_interface_object_provides_Interfacec                    sH   ddl m  ddl m} G  fddd|}| t| ddg d S )Nr   r   r   c                       s   e Zd Z dZdd ZdS )z1InterfaceTests.test_names_simple.<locals>.ISimplerV  c                   S   s   d S r   r   r   r   r   r   r[    s    z8InterfaceTests.test_names_simple.<locals>.ISimple.methodNr  r   r   r   r   ISimple~  s   r  r(  r[  rZ   r   r   r   r  r   r   r   r  r   r   r   test_names_simpley  s    z InterfaceTests.test_names_simplec                    s~   ddl m  ddl m} G  fddd|}G  fddd|}| t| dd	d
g | t|jddddd	d
g d S )Nr   r   r   c                       s   e Zd Z dZdd ZdS )z0InterfaceTests.test_names_derived.<locals>.IBaserV  c                   S   s   d S r   r   r   r   r   r   r[    s    z7InterfaceTests.test_names_derived.<locals>.IBase.methodNr  r   r   r   r   r     s   r   c                       s$   e Zd Z dZdd Zdd ZdS )z3InterfaceTests.test_names_derived.<locals>.IDerivedMy attr2c                   S   s   d S r   r   r   r   r   r   r[    s    z:InterfaceTests.test_names_derived.<locals>.IDerived.methodc                   S   s   d S r   r   r   r   r   r   rb    s    z;InterfaceTests.test_names_derived.<locals>.IDerived.method2Nr   r   r   attr2r[  rb  r   r   r   r   r     s   r   r  r[  rb  Tr  r(  r  r   r   r   r   r   r   r   test_names_derived  s    	
z!InterfaceTests.test_names_derivedc                    s  ddl m  ddlm} ddl m} G  fddd|}t| }| t|d | |d d d | 	t
|d d	   | |d d	 jd | |d d	 jd
 | |d	 d d | 	t
|d	 d	 | | |d	 d	 jd | |d	 d	 jd d S )Nr   r   Methodr   c                       s   e Zd Z dZdd ZdS )z@InterfaceTests.test_namesAndDescriptions_simple.<locals>.ISimplerV  c                   S   s   dS 	My methodNr   r   r   r   r   r[    s    zGInterfaceTests.test_namesAndDescriptions_simple.<locals>.ISimple.methodNr  r   r   r   r   r    s   r  r   r(  r   rV  r[  r  )rZ   r   r   r  r   r  r  r   r   re   r9  r   r6   )r   r  r   r  name_valuesr   r   r    test_namesAndDescriptions_simple  s    z/InterfaceTests.test_namesAndDescriptions_simplec                    s  ddl m  ddl m} ddlm} G  fddd|}G  fddd|}t| }| t|d	 | |d d d
 | 	t
|d d   | |d d jd
 | |d d jd | |d d d | 	t
|d d | | |d d jd | |d d jd | |d d d | 	t
|d d | | |d d jd | |d d jd t|jdd}| t|d | |d d d | 	t
|d d   | |d d jd | |d d jd | |d d d
 | 	t
|d d   | |d d jd
 | |d d jd | |d d d | 	t
|d d | | |d d jd | |d d jd | |d	 d d | 	t
|d	 d | | |d	 d jd | |d	 d jd d S )Nr   r   r   r  c                       s   e Zd Z dZdd ZdS )z?InterfaceTests.test_namesAndDescriptions_derived.<locals>.IBaserV  c                   S   s   dS r  r   r   r   r   r   r[    s    zFInterfaceTests.test_namesAndDescriptions_derived.<locals>.IBase.methodNr  r   r   r   r   r     s   r   c                       s$   e Zd Z dZdd Zdd ZdS )zBInterfaceTests.test_namesAndDescriptions_derived.<locals>.IDerivedr  c                   S   s   dS My method, overriddenNr   r   r   r   r   r[    s    zIInterfaceTests.test_namesAndDescriptions_derived.<locals>.IDerived.methodc                   S   s   dS 
My method2Nr   r   r   r   r   rb    s    zJInterfaceTests.test_namesAndDescriptions_derived.<locals>.IDerived.method2Nr  r   r   r   r   r     s   r      r  r   r  r[  r  r   rb  r  Tr     r(  rV  )rZ   r   r   r   r  r  r  r   r   re   r9  r   r6   )r   r   r  r   r   r  r   r   r   !test_namesAndDescriptions_derived  sJ    	z0InterfaceTests.test_namesAndDescriptions_derivedc                 C   s0   ddl m} G dd d|}| t|jd d S )Nr   r   c                   @   s   e Zd ZdS )zIInterfaceTests.test_getDescriptionFor_nonesuch_no_default.<locals>.IEmptyNr   r   r   r   r   IEmpty  s   r  r?   )rZ   r   r@   rA   r  r   r   r  r   r   r   *test_getDescriptionFor_nonesuch_no_default  s    z9InterfaceTests.test_getDescriptionFor_nonesuch_no_defaultc                    s   ddl m  ddlm} ddl m} G  fddd|}|d}| t|  | |j	d | |j
d |d	}| t|| | |j	d	 | |j
d
 d S )Nr   r   r  r   c                       s   e Zd Z dZdd ZdS )z=InterfaceTests.test_getDescriptionFor_simple.<locals>.ISimplerV  c                   S   s   dS r  r   r   r   r   r   r[    s    zDInterfaceTests.test_getDescriptionFor_simple.<locals>.ISimple.methodNr  r   r   r   r   r    s   r  r(  rV  r[  r  rZ   r   r   r  r   r  re   r9  r   r   r6   r   r  r   r  a_descm_descr   r   r   test_getDescriptionFor_simple  s    

z,InterfaceTests.test_getDescriptionFor_simplec           	         s(  ddl m  ddlm} ddl m} G  fddd|}G  fddd|}|d	}| t|  | |j	d	 | |j
d
 |d}| t|| | |j	d | |j
d |d}| t|  | |j	d | |j
d |d}| t|| | |j	d | |j
d d S )Nr   r   r  r   c                       s   e Zd Z dZdd ZdS )z<InterfaceTests.test_getDescriptionFor_derived.<locals>.IBaserV  c                   S   s   dS r  r   r   r   r   r   r[    s    zCInterfaceTests.test_getDescriptionFor_derived.<locals>.IBase.methodNr  r   r   r   r   r     s   r   c                       s$   e Zd Z dZdd Zdd ZdS )z?InterfaceTests.test_getDescriptionFor_derived.<locals>.IDerivedr  c                   S   s   dS r  r   r   r   r   r   r[    s    zFInterfaceTests.test_getDescriptionFor_derived.<locals>.IDerived.methodc                   S   s   dS r  r   r   r   r   r   rb     s    zGInterfaceTests.test_getDescriptionFor_derived.<locals>.IDerived.method2Nr  r   r   r   r   r     s   r   r(  rV  r[  r  r  r  rb  r  r  	r   r  r   r   r   r  r  Za2_descZm2_descr   r   r   test_getDescriptionFor_derived  s*    	



z-InterfaceTests.test_getDescriptionFor_derivedc                 C   s0   ddl m} G dd d|}| t|jd d S )Nr   r   c                   @   s   e Zd ZdS )z7InterfaceTests.test___getitem__nonesuch.<locals>.IEmptyNr   r   r   r   r   r  :  s   r  r?   )rZ   r   r@   rA   __getitem__r  r   r   r   test___getitem__nonesuch7  s    z'InterfaceTests.test___getitem__nonesuchc                    s   ddl m  ddlm} ddl m} G  fddd|}|d }| t|  | |jd | |j	d |d	 }| t|| | |jd	 | |j	d
 d S )Nr   r   r  r   c                       s   e Zd Z dZdd ZdS )z6InterfaceTests.test___getitem__simple.<locals>.ISimplerV  c                   S   s   dS r  r   r   r   r   r   r[  H  s    z=InterfaceTests.test___getitem__simple.<locals>.ISimple.methodNr  r   r   r   r   r  E  s   r  r(  rV  r[  r  
rZ   r   r   r  r   re   r9  r   r   r6   r  r   r   r   test___getitem__simple?  s    z%InterfaceTests.test___getitem__simplec           	         s   ddl m  ddlm} ddl m} G  fddd|}G  fddd|}|d	 }| t|  | |jd	 | |j	d
 |d }| t|| | |jd | |j	d |d }| t|  | |jd | |j	d |d }| t|| | |jd | |j	d d S )Nr   r   r  r   c                       s   e Zd Z dZdd ZdS )z6InterfaceTests.test___getitem___derived.<locals>.IBaserV  c                   S   s   dS r  r   r   r   r   r   r[  ^  s    z=InterfaceTests.test___getitem___derived.<locals>.IBase.methodNr  r   r   r   r   r   [  s   r   c                       s$   e Zd Z dZdd Zdd ZdS )z9InterfaceTests.test___getitem___derived.<locals>.IDerivedr  c                   S   s   dS r  r   r   r   r   r   r[  d  s    z@InterfaceTests.test___getitem___derived.<locals>.IDerived.methodc                   S   s   dS r  r   r   r   r   r   rb  g  s    zAInterfaceTests.test___getitem___derived.<locals>.IDerived.method2Nr  r   r   r   r   r   a  s   r   r(  rV  r[  r  r  r  rb  r  r  r  r   r   r   test___getitem___derivedU  s*    	z'InterfaceTests.test___getitem___derivedc                 C   s.   ddl m} G dd d|}| d|k d S )Nr   r   c                   @   s   e Zd ZdS )z8InterfaceTests.test___contains__nonesuch.<locals>.IEmptyNr   r   r   r   r   r    s   r  r?   )rZ   r   r]   r  r   r   r   test___contains__nonesuch~  s    z(InterfaceTests.test___contains__nonesuchc                    sL   ddl m  ddl m} G  fddd|}| d|k | d|k d S )Nr   r   r   c                       s   e Zd Z dZdd ZdS )z7InterfaceTests.test___contains__simple.<locals>.ISimplerV  c                   S   s   dS r  r   r   r   r   r   r[    s    z>InterfaceTests.test___contains__simple.<locals>.ISimple.methodNr  r   r   r   r   r    s   r  r(  r[  rZ   r   r   re   r  r   r   r   test___contains__simple  s
    z&InterfaceTests.test___contains__simplec                    s|   ddl m  ddl m} G  fddd|}G  fddd|}| d|k | d	|k | d
|k | d|k d S )Nr   r   r   c                       s   e Zd Z dZdd ZdS )z6InterfaceTests.test___contains__derived.<locals>.IBaserV  c                   S   s   dS r  r   r   r   r   r   r[    s    z=InterfaceTests.test___contains__derived.<locals>.IBase.methodNr  r   r   r   r   r     s   r   c                       s$   e Zd Z dZdd Zdd ZdS )z9InterfaceTests.test___contains__derived.<locals>.IDerivedr  c                   S   s   dS r  r   r   r   r   r   r[    s    z@InterfaceTests.test___contains__derived.<locals>.IDerived.methodc                   S   s   dS r  r   r   r   r   r   rb    s    zAInterfaceTests.test___contains__derived.<locals>.IDerived.method2Nr  r   r   r   r   r     s   r   r(  r[  r  rb  r  r  r   r   r   test___contains__derived  s    	z'InterfaceTests.test___contains__derivedc                 C   s0   ddl m} G dd d|}| t|g  d S )Nr   r   c                   @   s   e Zd ZdS )z1InterfaceTests.test___iter__empty.<locals>.IEmptyNr   r   r   r   r   r    s   r  )rZ   r   r   r8   r  r   r   r   test___iter__empty  s    z!InterfaceTests.test___iter__emptyc                    sH   ddl m  ddl m} G  fddd|}| tt|ddg d S )Nr   r   r   c                       s   e Zd Z dZdd ZdS )z3InterfaceTests.test___iter__simple.<locals>.ISimplerV  c                   S   s   dS r  r   r   r   r   r   r[    s    z:InterfaceTests.test___iter__simple.<locals>.ISimple.methodNr  r   r   r   r   r    s   r  r(  r[  rZ   r   r   r   r  r8   r  r   r   r   test___iter__simple  s    z"InterfaceTests.test___iter__simplec                    s`   ddl m  ddl m} G  fddd|}G  fddd|}| tt|dd	d
dg d S )Nr   r   r   c                       s   e Zd Z dZdd ZdS )z2InterfaceTests.test___iter__derived.<locals>.IBaserV  c                   S   s   dS r  r   r   r   r   r   r[    s    z9InterfaceTests.test___iter__derived.<locals>.IBase.methodNr  r   r   r   r   r     s   r   c                       s$   e Zd Z dZdd Zdd ZdS )z5InterfaceTests.test___iter__derived.<locals>.IDerivedr  c                   S   s   dS r  r   r   r   r   r   r[    s    z<InterfaceTests.test___iter__derived.<locals>.IDerived.methodc                   S   s   dS r  r   r   r   r   r   rb    s    z=InterfaceTests.test___iter__derived.<locals>.IDerived.method2Nr  r   r   r   r   r     s   r   r(  r  r[  rb  r  r  r   r   r   test___iter__derived  s    	
z#InterfaceTests.test___iter__derivedc                 C   s:   ddl m} G dd d|}|d }| |dd d S )Nr   r   c                   @   s   e Zd Zdd Zde_dS )zLInterfaceTests.test_function_attributes_become_tagged_values.<locals>.ITagMec                   S   s   d S r   r   r   r   r   r   r[    s    zSInterfaceTests.test_function_attributes_become_tagged_values.<locals>.ITagMe.methodr   N)r   r   r   r[  optionalr   r   r   r   ITagMe  s   r  r[  r  r   )rZ   r   r   rB   )r   r   r  r[  r   r   r   -test_function_attributes_become_tagged_values  s    z<InterfaceTests.test_function_attributes_become_tagged_valuesc                 C   s>   ddl m} G dd d|}| |jd | t|g  d S )Nr   r   c                   @   s   e Zd ZdZdS )z@InterfaceTests.test___doc___non_element.<locals>.IHaveADocStringxxxNr   r   r   r6   r   r   r   r   IHaveADocString  s   r  r  )rZ   r   r   r6   r8   r   r   r  r   r   r   test___doc___non_element  s    z'InterfaceTests.test___doc___non_elementc                    sP   ddl m  ddl m} G  fddd|}| |jd | t|dg d S )Nr   r   r   c                       s   e Zd ZdZ dZdS )z?InterfaceTests.test___doc___as_element.<locals>.IHaveADocStringr  the docNr  r   r   r   r   r    s   r  r4   r6   )rZ   r   r   r   r6   r8   r  r   r   r   test___doc___as_element  s
    z&InterfaceTests.test___doc___as_elementc           
   
   C   s   ddl m} | ||j| g }z||| | d W n4 |k
rn } z| |jd | W 5 d }~X Y nX | t|| dd |D }|  |D ]}	| |	|	d qd S )Nr   r.  z&validateInvariants should always raisec                 S   s   g | ]}|j d  qS )r   r   ).0errorr   r   r   
<listcomp>  s     z/InterfaceTests._errorsEqual.<locals>.<listcomp>)
r   r/  r@   r,  failr   r   r   sortpop)
r   has_invariantZ	error_lenZ
error_msgsr   r/  er  Zmsgsmsgr   r   r   _errorsEqual  s    $zInterfaceTests._errorsEqualc                    s   ddl m  ddl m} ddl m} ddl m G  fddd|}G dd	 d	t}| }||| | |d
tg | |	|d  d|_
| |	|d  d|_| |	|d  |`
| |ddg| d S )Nr   r   r   directlyProvidesr   c                       s$   e Zd Z dZ dZe dS )z8InterfaceTests.test_invariant_simple.<locals>.IInvariantrI   *bar; must eval to Boolean True if foo doesNr   r   r   rI   r&   _ifFooThenBarr   r   r   r   r   
IInvariant  s   r  c                   @   s   e Zd ZdS )z:InterfaceTests.test_invariant_simple.<locals>.HasInvariantNr   r   r   r   r   HasInvariant  s   r  r      *   r   If Foo, then Bar!)rZ   r   r   r  r   r   r   rB   r  r,  r&   rI   r  )r   r   r  r  r  r  r   r  r   test_invariant_simple  s(    
z$InterfaceTests.test_invariant_simplec                    s  ddl m  ddl m} ddl m} ddl m G  fddd|}G fdd	d	|}G d
d dt}| |dtg | }||| d|_	| 
|ddg| d|_	d|_| 
|ddg| d|_	d|_| 
|dddg| d|_	d|_| ||d  d S )Nr   r   r   r  r   c                       s$   e Zd Z dZ dZe dS )z8InterfaceTests.test_invariant_nested.<locals>.IInvariantrI   r  Nr  r   r  r   r   r  ,  s   r  c                       s   e Zd Z e dS )z;InterfaceTests.test_invariant_nested.<locals>.ISubInvariantN)r   r   r   _barGreaterThanFoor   r   r   r   ISubInvariant1  s   r  c                   @   s   e Zd ZdS )z:InterfaceTests.test_invariant_nested.<locals>.HasInvariantNr   r   r   r   r   r  4  s   r  r   r  r   r  r   %Please, Boo MUST be greater than Foo!)rZ   r   r   r  r   r   r   rB   r  rI   r  r&   r,  )r   r   r  r  r  r  r  r   r  r   test_invariant_nested&  sB    
z$InterfaceTests.test_invariant_nestedc                    s  ddl m  ddl m} ddl m} ddl m G  fddd|}G dd	 d	t}| }||| d
|_|d}|d d  }|t	 |
d| | |ddg| d|_d|_| |ddg| d|_d|_| |dddg| d|_d|_| ||d  |
d| d S )Nr   r   r   r  r   c                       s$   e Zd Z dZ dZe dS )z:InterfaceTests.test_invariant_mutandis.<locals>.IInvariantrI   r  Nr  r   r  r   r   r  [  s   r  c                   @   s   e Zd ZdS )z<InterfaceTests.test_invariant_mutandis.<locals>.HasInvariantNr   r   r   r   r   r  `  s   r  r  r   r   r  r   r  )rZ   r   r   r  r   r   rI   rB   r   r  rJ   r  r&   r   r,  )r   r   r  r  r  r  Zold_invariantsr   r   r  r   test_invariant_mutandisU  sD    


 z&InterfaceTests.test_invariant_mutandisc                    s~   ddl m} ddl m  G dd d|}| |jd | t|g  G  fddd|}| |jd | t|d	g d S )
Nr   r   r   c                   @   s   e Zd ZdZdS ).InterfaceTests.test___doc___element.<locals>.Ir  Nr  r   r   r   r   r     s   r   r  c                       s   e Zd ZdZ dZdS )r  r  r  Nr  r   r   r   r   r     s   r4   r6   )rZ   r   r   r   r6   r8   )r   r   r   r   r   r   test___doc___element  s    z#InterfaceTests.test___doc___elementc                 C   sF   dd l }ddlm} G dd d|}G dd d}| t|j| d S )Nr   r   c                   @   s   e Zd ZdZdS )z&InterfaceTests.testIssue228.<locals>.Ir  Nr  r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )z-InterfaceTests.testIssue228.<locals>.OldStyleN)r   r   r   Z__providedBy__r   r   r   r   OldStyle  s   r  )sysrZ   r   r@   AttributeErrorrY   )r   r  r   r   r  r   r   r   testIssue228  s
    zInterfaceTests.testIssue228c              
      s   ddl m} ddl m  ddl m} ddl m ddlm G  fddd|}||G d	d
 d
t}||dd ||dd z||dd W n2 k
r } z| 	t
|d W 5 d }~X Y nX d S )Nr   r   r   implementerr   r.  c                       s,   e Zd Z dZ dZfddZdS )z:InterfaceTests.test_invariant_as_decorator.<locals>.IRangezLower boundzUpper boundc                    s   | j | jk r dd S )N	max < min)maxmin)obr.  r   r   range_invariant  s    zJInterfaceTests.test_invariant_as_decorator.<locals>.IRange.range_invariantN)r   r   r   r  r  r  r   r   r/  r   r   r   IRange  s   r  c                   @   s   e Zd Zdd ZdS )z9InterfaceTests.test_invariant_as_decorator.<locals>.Rangec                 S   s   || | _ | _d S r   )r  r  )r   r  r  r   r   r   rD    s    zBInterfaceTests.test_invariant_as_decorator.<locals>.Range.__init__NrE  r   r   r   r   Range  s   r  r   r   r  )rZ   r   r   r  r   r   r/  r   r,  r   rM  )r   r   r  r  r  r  r   r  r   test_invariant_as_decorator  s    	z*InterfaceTests.test_invariant_as_decoratorc                    s   ddl m  ddl m} ddl m G  fddd|}G fddd|}G d	d
 d
|}| |dd | t|jd | | dg | |dd | |dd | t	| t	ddg d S )Nr   r   r   r$   c                       s&   e Zd Z dZ dZdd dS )z0InterfaceTests.test_taggedValue.<locals>.ITaggedrI   r  r)   SpamN)r   r   r   rI   r&   r   r   r%   r   r   ITagged  s   r  c                       s    e Zd Z dd  dd dS )z1InterfaceTests.test_taggedValue.<locals>.IDerivedr)   	Spam SpamrI   r&   Nr   r   r$   r   r   r     s   
r   c                   @   s   e Zd ZdS )z2InterfaceTests.test_taggedValue.<locals>.IDerived2Nr   r   r   r   r   	IDerived2  s   r  r)   r  rI   r  r&   )
rZ   r   r   r%   r   rB   r@   rA   r9   set)r   r   r  r   r  r   r  r   test_taggedValue  s    zInterfaceTests.test_taggedValuec                    s   ddl m} ddl m  G  fddd|}G dd d|}G dd	 d	|}| |d
|d
k |f|_| |d
d k d S )Nr   r   r   c                       s   e Zd Z dZdS )z<InterfaceTests.test_description_cache_management.<locals>.I1r_  N)r   r   r   r_  r   r   r   r   rW    s   rW  c                   @   s   e Zd ZdS )z<InterfaceTests.test_description_cache_management.<locals>.I2Nr   r   r   r   r   I2  s   r  c                   @   s   e Zd ZdS )z<InterfaceTests.test_description_cache_management.<locals>.I3Nr   r   r   r   r   I3  s   r  r_  )rZ   r   r   re   r   r   )r   r   rW  r  r  r   r   r   !test_description_cache_management  s    z0InterfaceTests.test_description_cache_managementc                 C   sV   ddl m} ddl m} G dd d|}||G dd dt}| || d d S )Nr   r   r  c                   @   s   e Zd ZdS )z>InterfaceTests.test___call___defers_to___conform___.<locals>.INr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )z>InterfaceTests.test___call___defers_to___conform___.<locals>.Cc                 S   s   dS )Nr   r   )r   protor   r   r   r      s    zJInterfaceTests.test___call___defers_to___conform___.<locals>.C.__conform__Nr   r   r   r   r   C  s   r  )rZ   r   r  r   r   )r   r   r  r   r  r   r   r   $test___call___defers_to___conform___  s    z3InterfaceTests.test___call___defers_to___conform___c                 C   s\   ddl m} ddl m} G dd d|}||G dd dt}| }| |||k d S )Nr   r   r  c                   @   s   e Zd ZdS )z9InterfaceTests.test___call___object_implements.<locals>.INr   r   r   r   r   r   	  s   r   c                   @   s   e Zd ZdS )z9InterfaceTests.test___call___object_implements.<locals>.CNr   r   r   r   r   r    s   r  )rZ   r   r  r   re   )r   r   r  r   r  cr   r   r   test___call___object_implements  s    z.InterfaceTests.test___call___object_implementsc                 C   sD   ddl m} G dd d|}G dd dt}| }| t|| d S )Nr   r   c                   @   s   e Zd ZdS )z9InterfaceTests.test___call___miss_wo_alternate.<locals>.INr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )z9InterfaceTests.test___call___miss_wo_alternate.<locals>.CNr   r   r   r   r   r    s   r  )rZ   r   r   r@   r   r   r   r   r  r  r   r   r   test___call___miss_wo_alternate  s
    z.InterfaceTests.test___call___miss_wo_alternatec                 C   sJ   ddl m} G dd d|}G dd dt}| }| ||| | k d S )Nr   r   c                   @   s   e Zd ZdS )z8InterfaceTests.test___call___miss_w_alternate.<locals>.INr   r   r   r   r   r   "  s   r   c                   @   s   e Zd ZdS )z8InterfaceTests.test___call___miss_w_alternate.<locals>.CNr   r   r   r   r   r  %  s   r  )rZ   r   r   re   r  r   r   r   test___call___miss_w_alternate  s
    z-InterfaceTests.test___call___miss_w_alternatec           
   
      s   ddl m} ddlm} |d d  }dd } fdd}G dd	 d	|}G d
d dt}| }|d d  }	||g|d d < z || k W 5 |	|d d < X d S )Nr   r   r   c                 S   s   d S r   r   r   r   r   r   _miss0  s    z:InterfaceTests.test___call___w_adapter_hook.<locals>._missc                    s    S r   r   r   rP   r   r   _hit3  s    z9InterfaceTests.test___call___w_adapter_hook.<locals>._hitc                   @   s   e Zd ZdS )z6InterfaceTests.test___call___w_adapter_hook.<locals>.INr   r   r   r   r   r   6  s   r   c                   @   s   e Zd ZdS )z6InterfaceTests.test___call___w_adapter_hook.<locals>.CNr   r   r   r   r   r  9  s   r  )rZ   r   r   r   r   re   )
r   r   r   Z	old_hooksr  r	  r   r  r  Zold_adapter_hooksr   rP   r   test___call___w_adapter_hook+  s    z+InterfaceTests.test___call___w_adapter_hookN)0r   r   r   rY  r]  rk  rn  rp  ry  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r
  r   r   r   r   rU    sZ   	
!+9))	/5
rU  c                   @   s   e Zd ZdZdd ZdS )AttributeTestsZTestAttributec                 C   s   ddl m} |S )Nr   r   )r   r   )r   r   r   r   r   r0   J  s    zAttributeTests._getTargetClassN)r   r   r   r1   r0   r   r   r   r   r  F  s   r  c                   @   sX   e Zd 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S )MethodTestsZ
TestMethodc                 C   s   ddl m} |S )Nr   r  )r   r  )r   r  r   r   r   r0   S  s    zMethodTests._getTargetClassc                 C   sH   |   }| |ji  ddi|_| |jddi |`| |ji  d S rH   )r3   r   r  r   r[  r   r   r   test_optional_as_propertyW  s    
z%MethodTests.test_optional_as_propertyc              
   C   sn   ddl m} |  }z
|  W n@ |k
r^ } z"| |jd  | |j| j W 5 d }~X Y nX | d d S )Nr   )BrokenImplementationz*__call__ should raise BrokenImplementation)r   r  r3   r   rR   r2   r1   r  )r   r  r[  r  r   r   r   )test___call___raises_BrokenImplementation_  s    
"z5MethodTests.test___call___raises_BrokenImplementationc                 C   sl   |   }| }| t|d g  | t|d g  | |d i  | |d d  | |d d  d S )N
positionalrequiredr  varargskwargs)r3   getSignatureInfor   r8   )r   r[  infor   r   r   test_getSignatureInfo_barej  s    z&MethodTests.test_getSignatureInfo_barec                 C   s   |   }| | d d S )Nz())r3   r   getSignatureStringr  r   r   r   test_getSignatureString_bares  s    z(MethodTests.test_getSignatureString_barec                 C   s*   |   }dg |_|_| | d d S )NrI   z(foo))r3   r  r  r   r  r  r   r   r   'test_getSignatureString_w_only_requiredw  s    z3MethodTests.test_getSignatureString_w_only_requiredc                 C   s4   |   }dg |_|_ddi|_| | d d S )NrI   r&   z(foo='bar'))r3   r  r  r  r   r  r  r   r   r   "test_getSignatureString_w_optional|  s    
z.MethodTests.test_getSignatureString_w_optionalc                 C   s"   |   }d|_| | d d S )Nr   z(*args))r3   r  r   r  r  r   r   r   !test_getSignatureString_w_varargs  s    z-MethodTests.test_getSignatureString_w_varargsc                 C   s"   |   }d|_| | d d S )Nr   z(**kw))r3   r  r   r  r  r   r   r    test_getSignatureString_w_kwargs  s    z,MethodTests.test_getSignatureString_w_kwargsN)r   r   r   r1   r0   r  r  r  r  r  r  r  r  r   r   r   r   r  O  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 )Test_fromFunctionc                 O   s   ddl m} |||S )Nr   r   )r   r   )r   r   r   r   r   r   r   _callFUT  s    zTest_fromFunction._callFUTc                 C   s   dd }|  |}| | d | | d | |jd  | t| g  | }| t|d g  | t|d g  | |d i  | |d d  | |d	 d  d S )
Nc                   S   s   dS r   r   r   r   r   r   _func  s    z*Test_fromFunction.test_bare.<locals>._funcr   r   r  r  r  r  r  r  r   r5   r7   rR   r8   r9   r  r   r   r[  r  r   r   r   	test_bare  s    
zTest_fromFunction.test_barec                 C   sD   ddl m} G dd d|}dd }| j||d}| |j| d S )Nr   r   c                   @   s   e Zd ZdS )z0Test_fromFunction.test_w_interface.<locals>.IFooNr   r   r   r   r   r     s   r   c                   S   s   dS r   r   r   r   r   r   r     s    z1Test_fromFunction.test_w_interface.<locals>._funcrQ   )r   r   r  r   rR   )r   r   r   r   r[  r   r   r   test_w_interface  s
    z"Test_fromFunction.test_w_interfacec                 C   s*   dd }| j |dd}| | d d S )Nc                   S   s   dS r   r   r   r   r   r   r     s    z,Test_fromFunction.test_w_name.<locals>._funcZanotherName)r2   )r  r   r5   )r   r   r[  r   r   r   test_w_name  s    zTest_fromFunction.test_w_namec                 C   sz   dd }|  |}| }| t|d dg | t|d dg | |d i  | |d d  | |d d  d S )	Nc                 S   s   dS r   r   rI   r   r   r   r     s    z5Test_fromFunction.test_w_only_required.<locals>._funcr  rI   r  r  r  r  r  r  r   r8   r"  r   r   r   test_w_only_required  s    
z&Test_fromFunction.test_w_only_requiredc                 C   s~   d
dd}|  |}| }| t|d dg | t|d g  | |d ddi | |d d  | |d	 d  d S )Nr&   c                 S   s   dS r   r   r&  r   r   r   r     s    z0Test_fromFunction.test_w_optional.<locals>._funcr  rI   r  r  r  r  )r&   r'  r"  r   r   r   test_w_optional  s    

z!Test_fromFunction.test_w_optionalc                 C   s|   ddd}| j |dd}| }| t|d g  | t|d g  | |d i  | |d	 d  | |d
 d  d S )Nr&   c                 S   s   dS r   r   rP   r   r   r   r     s    z5Test_fromFunction.test_w_optional_self.<locals>._funcr   )Zimlevelr  r  r  r  r  )r&   r'  r"  r   r   r   test_w_optional_self  s    
z&Test_fromFunction.test_w_optional_selfc                 C   sv   dd }|  |}| }| t|d g  | t|d g  | |d i  | |d d | |d d  d S )	Nc                  W   s   dS r   r   r  r   r   r   r     s    z/Test_fromFunction.test_w_varargs.<locals>._funcr  r  r  r  r   r  r'  r"  r   r   r   test_w_varargs  s    
z Test_fromFunction.test_w_varargsc                 C   sv   dd }|  |}| }| t|d g  | t|d g  | |d i  | |d d  | |d d d S )	Nc                  [   s   dS r   r   )r   r   r   r   r     s    z.Test_fromFunction.test_w_kwargs.<locals>._funcr  r  r  r  r  r   r'  r"  r   r   r   test_w_kwargs  s    
zTest_fromFunction.test_w_kwargsc                 C   s   ddd}|  |}| }| t|d ddg | t|d dg | |d ddi | |d	 d
 | |d d d S )Nr'   c                 _   s   dS r   r   )rI   r&   r   r   r   r   r   r     s    z3Test_fromFunction.test_full_spectrum.<locals>._funcr  rI   r&   r  r  r  r   r  r   )r'   r'  r"  r   r   r   test_full_spectrum  s    

z$Test_fromFunction.test_full_spectrumN)r   r   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d Zdd Zdd Zd	S )
Test_fromMethodc                 O   s   ddl m} |||S )Nr   )
fromMethod)r   r/  )r   r   r   r/  r   r   r   r    s    zTest_fromMethod._callFUTc                 C   s   G dd dt }| |j}| | d | | d | |jd  | t| g  |	 }| t|d g  | t|d g  | |d i  | |d d  | |d	 d  d S )
Nc                   @   s   e Zd Zdd ZdS )z)Test_fromMethod.test_no_args.<locals>.Fooc                 S   s   dS r   r   rP   r   r   r   r&     s    z-Test_fromMethod.test_no_args.<locals>.Foo.barNr   r   r   r   r   r     s   r   r&   r   r  r  r  r  r  )
r   r  r&   r   r5   r7   rR   r8   r9   r  r   r   r[  r  r   r   r   test_no_args  s    zTest_fromMethod.test_no_argsc                 C   s   G dd dt }| |j}| }| t|d ddg | t|d dg | |d ddi | |d	 d
 | |d d d S )Nc                   @   s   e Zd ZdddZdS )z/Test_fromMethod.test_full_spectrum.<locals>.Foor'   c                 _   s   dS r   r   )r   rI   r&   r   r   r   r   r   r&     s    z3Test_fromMethod.test_full_spectrum.<locals>.Foo.barN)r'   r   r   r   r   r   r     s   r   r  rI   r&   r  r  r'   r  r   r  r   )r   r  r&   r  r   r8   r0  r   r   r   r-    s    z"Test_fromMethod.test_full_spectrumc                 C   s   dd }|  |}| | d | | d | |jd  | t| g  | }| t|d g  | t|d g  | |d i  | |d d  | |d	 d  d S )
Nc                   S   s   dS r   r   r   r   r   r   rI     s    z.Test_fromMethod.test_w_non_method.<locals>.foorI   r   r  r  r  r  r  r!  )r   rI   r[  r  r   r   r   test_w_non_method  s    
z!Test_fromMethod.test_w_non_methodN)r   r   r   r  r1  r-  r2  r   r   r   r   r.    s   r.  c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s
   g | _ d S r   )r   rP   r   r   r   rD  .  s    zDummyDependent.__init__c                 C   s   | j | d S r   )r   r   )r   Zoriginally_changedr   r   r   r   1  s    zDummyDependent.changedN)r   r   r   rD  r   r   r   r   r   r   ,  s   r   c                 C   sN   ddl m} t| dd }t| dd }|d k	rJt|t|rJ||ksJ|dd S )Nr   r.  rI   r&   r  )r   r/  r   r9  type)rV   r/  rI   r&   r   r   r   r  5  s    r  c                 C   s0   ddl m} t| dd r,t| dd s,|dd S )Nr   r.  rI   r&   r  )r   r/  r   )rV   r/  r   r   r   r  A  s    r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r\   c                    s@    | _ t fdd|D | _| D ]\}}t || q&d S )Nc                    s   g | ]}|t  |fqS r   )r   )r  keymoduler   r   r  K  s     z$_Monkey.__init__.<locals>.<listcomp>)r6  dict
to_restoreitemssetattr)r   r6  r   r4  r  r   r5  r   rD  I  s    z_Monkey.__init__c                 C   s   | S r   r   rP   r   r   r   	__enter__O  s    z_Monkey.__enter__c                 C   s&   | j  D ]\}}t| j|| q
d S r   )r8  r9  r:  r6  )r   exc_typeZexc_valexc_tbr4  r  r   r   r   __exit__R  s    z_Monkey.__exit__N)r   r   r   rD  r;  r>  r   r   r   r   r\   G  s   r\   )r6   ZunittestZzope.interface._compatr   r   r   ZTestCaser   r#   r.   rL   ru   r~   r   r   r   rU  r  r  r  r.  r   r  r  r\   r   r   r   r   <module>   s>   !$.F=s   e       J	>n1	