o
    U˟il                    @   s  d Z ddl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 e	 Z
ejjd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eeZG dd deZG dd deZG dd deZG dd deeeejZG dd de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+Z d,d- Z!d.d/ Z"G d0d1 d1Z#G d2d3 d3ejZ$dS )4zTest Interface implementation
    N)CleanUp)MissingSomeAttrs)OptimizationTestMixin)SubclassableMixinHashMec                   @      e Zd Zdd Zdd ZdS )Test_invariantc                    sR   ddl m} ddl m dd  G  fddd}| t||d d gi d S )	Nr   TAGGED_DATA	invariantc                  _      t  NNotImplementedErrorargskw r   k/var/www/apps/myagent/mysuperagent/venv/lib/python3.10/site-packages/zope/interface/tests/test_interface.py_check3      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   Foo6       r   
invariantszope.interface.interfacer
   r   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||d d
 gi d S )Nr   r	   r   c                  _   r   r   r   r   r   r   r   r   @   r   z.Test_invariant.test_w_multiple.<locals>._checkc                  _   r   r   r   r   r   r   r   _another_checkC   r   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   F   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                   @   $   e Zd Zdd Zdd Zdd ZdS )Test_taggedValuec                    sH   ddl m} ddl m  G  fddd}| t||d ddgi d S )Nr   r	   taggedValuec                       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   T       r   r.   r/   r!   r
   r-   r"   r#   r$   r   r,   r   r&   P   s   zTest_taggedValue.test_w_singlec                    sJ   ddl m} ddl m  G  fddd}| 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   ^   s    r   r/   r3   r.   r2   r1   r$   r   r,   r   r)   Z   s   
z Test_taggedValue.test_w_multiplec                    sH   ddl m} ddl m  G  fddd}| 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/   r2   r3   frobNr   r   r,   r   r   r   i   s    
r   r5   r3   r4   r1   r$   r   r,   r   test_w_multiple_overwritinge   s   z,Test_taggedValue.test_w_multiple_overwritingN)r   r   r   r&   r)   r6   r   r   r   r   r+   N   s    
r+   c                   @   sz   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d Zdd Zdd Zdd Zdd ZdS )ElementTests	AnElementc                 C      ddl m} |S )Nr   )Element)r!   r:   )r%   r:   r   r   r   _getTargetClassv      zElementTests._getTargetClassNc                 C   s   |d u r| j }|  |S r   )DEFAULT_NAMEr;   )r%   namer   r   r   _makeOnez   s   zElementTests._makeOnec                 C   s`   |   }| |j| j | | | j | |jd | | d | t| g  d S )N )	r?   r"   r   r=   getName__doc__getDoclistgetTaggedValueTagsr%   elementr   r   r   test_ctor_defaults   s   zElementTests.test_ctor_defaultsc                 C   s*   |  d}| |jd  | |jd d S )Nz
An Element)r?   r"   r   rB   rF   r   r   r   test_ctor_no_doc_space_in_name   s   
z+ElementTests.test_ctor_no_doc_space_in_namec                 C      |   }| t|jd d S Nnonesuch)r?   assertRaisesKeyErrorgetTaggedValuerF   r   r   r   test_getTaggedValue_miss      z%ElementTests.test_getTaggedValue_missc                 C   sB   |   }| g t|  |dd | dgt|  d S Nfoor.   )r?   r"   rD   getDirectTaggedValueTagssetTaggedValuerF   r   r   r   test_getDirectTaggedValueTags   s   z*ElementTests.test_getDirectTaggedValueTagsc                 C      |   }| |dd  d S rK   r?   r"   queryTaggedValuerF   r   r   r   test_queryTaggedValue_miss      z'ElementTests.test_queryTaggedValue_missc                 C       |   }| |ddd d S NrL   r.   rX   rF   r   r   r   $test_queryTaggedValue_miss_w_default      z1ElementTests.test_queryTaggedValue_miss_w_defaultc                 C   rJ   rK   )r?   rM   rN   getDirectTaggedValuerF   r   r   r   test_getDirectTaggedValue_miss   rQ   z+ElementTests.test_getDirectTaggedValue_missc                 C   rW   rK   r?   r"   queryDirectTaggedValuerF   r   r   r    test_queryDirectTaggedValue_miss   r[   z-ElementTests.test_queryDirectTaggedValue_missc                 C   r\   r]   rb   rF   r   r   r   *test_queryDirectTaggedValue_miss_w_default   s   z7ElementTests.test_queryDirectTaggedValue_miss_w_defaultc                 C   sR   |   }|dd | t| dg | |dd | |dd d S rR   )r?   rU   r"   rD   rE   rO   rY   rF   r   r   r   test_setTaggedValue   s
   z ElementTests.test_setTaggedValuec                 C   s.   ddl m} ddlm} |  }||| d S )Nr   )IElementverifyObject)zope.interface.interfacesrg   zope.interface.verifyri   r?   )r%   rg   ri   rG   r   r   r   test_verifies   s   zElementTests.test_verifiesr   )r   r   r   r=   r;   r?   rH   rI   rP   rV   rZ   r^   ra   rd   re   rf   rl   r   r   r   r   r7   r   s    
r7   c                   @   s0   e Zd Zdd ZeZdd Zdd Zdd Zd	S )
GenericSpecificationBaseTestsc                 C   r9   )Nr   )SpecificationBasePy)r!   rn   )r%   rn   r   r   r   _getFallbackClass   r<   z/GenericSpecificationBaseTests._getFallbackClassc                 C   s
   |    S r   r;   r%   r   r   r   r?         
z&GenericSpecificationBaseTests._makeOnec                    p   ddl m} ddlm  |  } fdd}t||d | |t  W d    d S 1 s1w   Y  d S )Nr   	interface_emptyc                        S r   r   objrv   r   r   _providedBy      zGGenericSpecificationBaseTests.test_providedBy_miss.<locals>._providedBy
providedBy)	zope.interfaceru   zope.interface.declarationsrw   r?   _MonkeyassertFalser~   object)r%   ru   sbr{   r   rv   r   test_providedBy_miss      "z2GenericSpecificationBaseTests.test_providedBy_missc                    rs   )Nr   rt   rv   c                    rx   r   r   ry   rv   r   r   _implementedBy   r|   zMGenericSpecificationBaseTests.test_implementedBy_miss.<locals>._implementedByimplementedBy)	r   ru   r   rw   r?   r   r   r   r   )r%   ru   r   r   r   rv   r   test_implementedBy_miss   r   z5GenericSpecificationBaseTests.test_implementedBy_missN)r   r   r   ro   r;   r?   r   r   r   r   r   r   rm      s    rm   c                   @      e Zd Zdd ZdS )SpecificationBaseTestsc                 C   r9   )Nr   )SpecificationBase)r!   r   )r%   r   r   r   r   r;      r<   z&SpecificationBaseTests._getTargetClassNr   r   r   r;   r   r   r   r   r          r   c                   @   <   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )SpecificationBasePyTestsc                 C   $   |   }i |_| |t  d S r   r?   _impliedr   isOrExtendsr   r%   r   r   r   r   test___call___miss      z+SpecificationBasePyTests.test___call___missc                 C   *   |   }t }|i i|_| || d S r   r?   r   r   
assertTruer%   r   testingr   r   r   test___call___hit      
z*SpecificationBasePyTests.test___call___hitc                 C   r   r   r   r   r   r   r   test_isOrExtends_miss   r   z.SpecificationBasePyTests.test_isOrExtends_missc                 C   r   r   r   r   r   r   r   test_isOrExtends_hit   r   z-SpecificationBasePyTests.test_isOrExtends_hitc                    v   ddl m} |  G fddd  fdd}t||d | t  W d    d S 1 s4w   Y  d S )Nr   rt   c                          e Zd Z i iZdS )z>SpecificationBasePyTests.test_implementedBy_hit.<locals>._DeclNr   r   r   r   r   r   r   r   _Decl  r   r   c                         S r   r   ry   r   r   r   r   
  r   zGSpecificationBasePyTests.test_implementedBy_hit.<locals>._implementedByr   )r   ru   r?   r   r   r   r   )r%   ru   r   r   r   r   r   test_implementedBy_hit     "z/SpecificationBasePyTests.test_implementedBy_hitc                    r   )Nr   rt   c                       r   )z;SpecificationBasePyTests.test_providedBy_hit.<locals>._DeclNr   r   r   r   r   r     r   r   c                    r   r   r   ry   r   r   r   r{     r   zASpecificationBasePyTests.test_providedBy_hit.<locals>._providedByr}   )r   ru   r?   r   r   r~   r   )r%   ru   r{   r   r   r   test_providedBy_hit  r   z,SpecificationBasePyTests.test_providedBy_hitN)	r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    r   c                   @   r   )!NameAndModuleComparisonTestsMixinc                 C   s   |  ddS )Nab)r?   rq   r   r   r   _makeOneToCompare   s   z3NameAndModuleComparisonTestsMixin._makeOneToComparec              	      s  dd l }|  }t||}t|d| }G  fddd G dd d }G dd d }| | jd	 | | jd	 | t t| d
 W d    n1 sSw   Y  | t t| d W d    n1 snw   Y  ||fD ]}| || t	 qwG dd d }	| 
|||	  | ||	 t	 G dd d}
| ||
 t	 | t |||
  W d    n1 sw   Y  G dd dt}| _| | t| d
 W d    n1 sw   Y  | | t| d W d    n	1 sw   Y  ||fD ]:}| | |||  W d    n	1 s'w   Y  | | ||  W d    n	1 sBw   Y  qd S )Nr   z__%s__c                       s   e Zd ZeZ fddZdS )zaNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnMissingc                    s,   zt | |W S  ty    j}||w r   )r   __getattribute__AttributeErrorExc)r%   r>   excRaisesErrorOnMissingr   r   r   2  s   zrNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnMissing.__getattribute__N)r   r   r   r   r   r   r   r   r   r   r   /  s    r   c                   @   s    e Zd Zdd Zedd ZdS )z`NameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnModulec                 S   
   d| _ d S NrS   )r   rq   r   r   r   __init__:  rr   ziNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnModule.__init__c                 S      t r   )r   rq   r   r   r   r   =     zkNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnModule.__module__N)r   r   r   r   propertyr   r   r   r   RaisesErrorOnModule9  s    r   c                   @   r   )z^NameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnNamec                 S   r   r   r   rq   r   r   r   r   B  rr   zgNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnName.__init__Nr   r   r   r   r   r   r   r   RaisesErrorOnNameA  r   r   rS   r   r   c                   @   s(   e Zd Zdd ZeZeZeZeZeZdS )z`NameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.AllowsAnyComparisonc                 S      dS NTr   )r%   otherr   r   r   __eq__S  r|   zgNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.AllowsAnyComparison.__eq__N	r   r   r   r   __lt____le____gt____ge____ne__r   r   r   r   AllowsAnyComparisonR  s    r   c                   @   s$   e Zd ZdZeZeZeZeZeZdS )z_NameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.AllowsNoComparisonNr   r   r   r   r   AllowsNoComparison_  s    r   c                   @      e Zd ZdS )zXNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.MyExceptionNr   r   r   r   r   MyExceptionl      r   )operatorr   r#   r"   r   r   rM   r   assertIsNotImplementedr   	TypeError	Exceptionr   )r%   r>   r   ibopmethr   r   clsr   r   r   r   r   r   !__check_NotImplemented_comparison#  sT   

	zCNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparisonc                 C      |  d d S )NltC_NameAndModuleComparisonTestsMixin__check_NotImplemented_comparisonrq   r   r   r   test__lt__NotImplemented|     z:NameAndModuleComparisonTestsMixin.test__lt__NotImplementedc                 C   r   )Nler   rq   r   r   r   test__le__NotImplemented  r   z:NameAndModuleComparisonTestsMixin.test__le__NotImplementedc                 C   r   )Ngtr   rq   r   r   r   test__gt__NotImplemented  r   z:NameAndModuleComparisonTestsMixin.test__gt__NotImplementedc                 C   r   )Nger   rq   r   r   r   test__ge__NotImplemented  r   z:NameAndModuleComparisonTestsMixin.test__ge__NotImplementedN)	r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    Yr   c                   @   sF   e Zd Zdd Zdd ZdddZd	d
 Zdd Zdd Zdd Z	dS )InterfaceBaseTestsMixinc                 C   r   r   r   rq   r   r   r   r;     r|   z'InterfaceBaseTestsMixin._getTargetClassc                 C   r9   )Nr   )InterfaceBasePy)r!   r   )r%   r   r   r   r   ro     s   z)InterfaceBaseTestsMixin._getFallbackClassFNc                    s"   G  fddd|   }|||S )Nc                       s    e Zd Zdd Z fddZdS )z,InterfaceBaseTestsMixin._makeOne.<locals>.IBc                 S   s   || S r   r   )r%   conformr   r   r   _call_conform     z:InterfaceBaseTestsMixin._makeOne.<locals>.IB._call_conformc                    rx   r   r   r%   rz   object_should_provider   r   r~     r|   z7InterfaceBaseTestsMixin._makeOne.<locals>.IB.providedByN)r   r   r   r   r~   r   r   r   r   IB  s    r   rp   )r%   r   r>   moduler   r   r   r   r?     s   
z InterfaceBaseTestsMixin._makeOnec                    s8   |  d}t  G  fddd}| ||   d S )NFc                          e Zd Z fddZdS )zUInterfaceBaseTestsMixin.test___call___w___conform___returning_value.<locals>._Adaptedc                    rx   r   r   r%   iface	conformedr   r   __conform__  r|   zaInterfaceBaseTestsMixin.test___call___w___conform___returning_value.<locals>._Adapted.__conform__Nr   r   r   r   r   r   r   r   _Adapted  r0   r   )r?   r   r   )r%   r   r   r   r   r   +test___call___w___conform___returning_value  s   
zCInterfaceBaseTestsMixin.test___call___w___conform___returning_valuec                 C   s8   |  d}||  f}t }t }| |||| d S )NF)r?   r;   r   r   )r%   r   __traceback_info__adapted	alternater   r   r   7test___call___wo___conform___ob_no_provides_w_alternate  s
   
zOInterfaceBaseTestsMixin.test___call___wo___conform___ob_no_provides_w_alternatec                 C   sT   |  d}| t}|t  W d    n1 sw   Y  | dt|j d S )NFzCould not adapt)r?   rM   r   r   assertInstr	exception)r%   r   r   r   r   r   7test___call___w___conform___ob_no_provides_wo_alternate  s
   
zOInterfaceBaseTestsMixin.test___call___w___conform___ob_no_provides_wo_alternatec                 C   s   t j| |  dd d S )Nr   )expected_missing)r   test_raisesr?   rq   r   r   r   6test___call___w_no_conform_catches_only_AttributeError  s   

zNInterfaceBaseTestsMixin.test___call___w_no_conform_catches_only_AttributeError)FNN)
r   r   r   r;   ro   r?   r   r   r   r  r   r   r   r   r     s    

r   c                   @   r   )InterfaceBaseTestsc                 C   r9   )Nr   )InterfaceBase)r!   r  )r%   r  r   r   r   r;     r<   z"InterfaceBaseTests._getTargetClassNr   r   r   r   r   r    r   r  c                   @   s*   e Zd ZejZdd Zdd Zdd ZdS )InterfaceBasePyTestsc                 C   s2   |  d}G dd d}| }| ||| d S )NTc                   @   r   )zSInterfaceBasePyTests.test___call___w___conform___miss_ob_provides.<locals>._Adaptedc                 S      d S r   r   r   r   r   r   r     r|   z_InterfaceBasePyTests.test___call___w___conform___miss_ob_provides.<locals>._Adapted.__conform__Nr   r   r   r   r   r     r   r   )r?   r   )r%   r   r   r   r   r   r   ,test___call___w___conform___miss_ob_provides  s   
zAInterfaceBasePyTests.test___call___w___conform___miss_ob_providesc                 C   s&   |  d}t }| ||| d S r   )r?   r   r   	__adapt__)r%   r   r   r   r   r   test___adapt___ob_provides  s   
z/InterfaceBasePyTests.test___adapt___ob_providesc                    s   ddl m} | d}t }g   fdd}dd }t|||gd | ||| |  ||fg W d    d S 1 s@w   Y  d S )	Nr   rt   Fc                    s     | |f d S r   appendr   rz   _missedr   r   
_hook_miss     zQInterfaceBasePyTests.test___adapt___ob_no_provides_uses_hooks.<locals>._hook_missc                 S      |S r   r   r  r   r   r   	_hook_hit  r|   zPInterfaceBasePyTests.test___adapt___ob_no_provides_uses_hooks.<locals>._hook_hitadapter_hooks)r   ru   r?   r   r   r   r	  r"   )r%   ru   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   r   ro   r;   r  r
  r  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d  Zd!S )"SpecificationTestsc                 C   r9   )Nr   )Specification)r!   r  )r%   r  r   r   r   r;     r<   z"SpecificationTests._getTargetClassc                 C   s   |t u r	|   S |  |S r   )_markerr;   )r%   basesr   r   r   r?     s   
zSpecificationTests._makeOnec                 C   sf   ddl m} |  }| |jd | t|jd | ||j | ||j | t|jd d S )Nr   	Interfacer      )	r!   r  r?   r"   	__bases__lenr   r   
dependents)r%   r  specr   r   r   	test_ctor  s   zSpecificationTests.test_ctorc                 C   s@   |   }t }|| | t|jd | |j| d d S N   )r?   DummyDependent	subscriber"   r  r   r%   r!  depr   r   r   test_subscribe_first_time  s
   
z,SpecificationTests.test_subscribe_first_timec                 C   s8   |   }t }|| || | |j| d d S )Nr  )r?   r%  r&  r"   r   r'  r   r   r   test_subscribe_again	  s
   

z'SpecificationTests.test_subscribe_againc                 C   s"   |   }t }| t|j| d S r   )r?   r%  rM   rN   unsubscriber'  r   r   r   test_unsubscribe_miss     z(SpecificationTests.test_unsubscribe_missc                 C   sZ   |   }t }|| || || | |j| d || | ||j d S r#  )r?   r%  r&  r+  r"   r   assertNotInr'  r   r   r   test_unsubscribe  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                   @   r   )zYSpecificationTests.test___setBases_subscribes_bases_and_notifies_dependents.<locals>.IFooNr   r   r   r   r   IFoo%  r   r0  c                   @   r   )zYSpecificationTests.test___setBases_subscribes_bases_and_notifies_dependents.<locals>.IBarNr   r   r   r   r   IBar(  r   r1  r$  )
r!   r  r?   r%  r&  r  r"   _changedr   get)r%   r  r!  r(  r0  r1  r   r   r   8test___setBases_subscribes_bases_and_notifies_dependents  s   
zKSpecificationTests.test___setBases_subscribes_bases_and_notifies_dependentsc                 C   s\   ddl m} G dd d|}|  }d|_d|j|< || | |j | ||j d S )Nr   r  c                   @   r   )zJSpecificationTests.test_changed_clears_volatiles_and_implied.<locals>.IFooNr   r   r   r   r   r0  5  r   r0  r   r   )r!   r  r?   _v_attrsr   changedassertIsNoner.  r%   r  r0  r!  r   r   r   )test_changed_clears_volatiles_and_implied2  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                   @   r   )zCSpecificationTests.test_interfaces_skips_already_seen.<locals>.IFooNr   r   r   r   r   r0  B  r   r0  )r!   r  r?   r"   rD   
interfacesr8  r   r   r   "test_interfaces_skips_already_seen?  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                   @   r   )z<SpecificationTests.test_extends_strict_wo_self.<locals>.IFooNr   r   r   r   r   r0  K  r   r0  Tstrict)r!   r  r?   r   extendsr8  r   r   r   test_extends_strict_wo_selfH  s   
z.SpecificationTests.test_extends_strict_wo_selfc                 C       |   }| |j|dd d S )NTr<  )r?   r   r>  r%   r!  r   r   r   test_extends_strict_w_selfQ  r_   z-SpecificationTests.test_extends_strict_w_selfc                 C   r@  )NFr<  )r?   r   r>  rA  r   r   r   test_extends_non_strict_w_selfU  r_   z1SpecificationTests.test_extends_non_strict_w_selfc                 C   s.   |   }t }d|i|_| |d| d S r   )r?   r   r5  r   r3  )r%   r!  rS   r   r   r   test_get_hit_w__v_attrsY  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 | |d	|d	 d S )
Nr   	Attributer  c                          e Zd Z dZdS )zCSpecificationTests.test_get_hit_from_base_wo__v_attrs.<locals>.IFoorS   N)r   r   r   rS   r   rE  r   r   r0  c  r   r0  c                       rG  )zCSpecificationTests.test_get_hit_from_base_wo__v_attrs.<locals>.IBarr.   Nr   r   r   r.   r   rE  r   r   r1  f  r   r1  rS   r.   )r!   rF  r  r?   r   r3  )r%   r  r0  r1  r!  r   rE  r   "test_get_hit_from_base_wo__v_attrs_  s   z5SpecificationTests.test_get_hit_from_base_wo__v_attrsc           
   	   C   s   ddl m} ddl m} ddlm} G dd d|}G dd d}G d	d
 d
|}G dd d|}||G dd d}G dd d||}	| ||	j||	||||||t|f d S )Nr   r   implementerr  c                   @   r   )zTSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.IDefaultViewNameNr   r   r   r   r   IDefaultViewNamew  r   rL  c                   @   r   )zKSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.ContextNr   r   r   r   r   Contextz  r   rM  c                   @   r   )zLSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.RDBModelNr   r   r   r   r   RDBModel}  r   rN  c                   @   r   )zJSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.IOtherNr   r   r   r   r   IOther  r   rO  c                   @   r   )zMSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.OtherBaseNr   r   r   r   r   	OtherBase      rP  c                   @   r   )zISpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.ModelNr   r   r   r   r   Model  r   rR  )r   r   rK  r!   r  r"   __sro__r   )
r%   r   rK  r  rL  rM  rN  rO  rP  rR  r   r   r   'test_multiple_inheritance_no_interfacesm  s(   z:SpecificationTests.test_multiple_inheritance_no_interfacesN)r   r   r   r;   r  r?   r"  r)  r*  r,  r/  r4  r9  r;  r?  rB  rC  rD  rI  rT  r   r   r   r   r    s"    	
		r  c                   @   s  e Zd Zdd Z		diddZdd	 Zd
d Zdd Zdd Zdd Z	djd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#dGdH Z$dIdJ Z%dKdL Z&dMdN Z'dOdP Z(dQdR Z)dSdT Z*dUdV Z+dWdX Z,dYdZ Z-d[d\ Z.d]d^ Z/d_d` Z0dadb Z1dcdd Z2dedf Z3dgdh Z4dS )kInterfaceClassTestsc                 C   r9   )Nr   InterfaceClass)r!   rW  )r%   rW  r   r   r   r;     r<   z#InterfaceClassTests._getTargetClassITestr   Nc                 C   s   |   |||||S r   rp   )r%   r>   r  attrsrB   r   r   r   r   r?     s   zInterfaceClassTests._makeOnec                 C   sN   |   }|d}| |jd | |jd | |jd | | d d S )NITestingr@   r   )r;   r"   r   rB   r  getBases)r%   klassinstr   r   r   rH     s   z&InterfaceClassTests.test_ctor_defaultsc                 C   s    |   }| t|dt f d S )NrZ  )r;   rM   r   r   )r%   r\  r   r   r   test_ctor_bad_bases  r_   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   rE  fromFunctionc                   S   r   	DOCSTRINGNr   r   r   r   r   _bar      zBInterfaceClassTests.test_ctor_w_attrs_attrib_methods.<locals>._barr   r@   rS   r.   rZ  rY  r   )
r!   rF  r`  r;   r"   r   rB   r  nameskeys)r%   rF  r`  rc  ATTRSr\  r]  r   r   r    test_ctor_w_attrs_attrib_methods  s   z4InterfaceClassTests.test_ctor_w_attrs_attrib_methodsc                 C   ^   di i}|   }|d|d}| |jd | |jd | |jd | t| g  d S )N
__locals__rZ  rf  r@   r   r;   r"   r   rB   r  rD   rg  r%   ri  r\  r]  r   r   r   test_ctor_attrs_w___locals__     z0InterfaceClassTests.test_ctor_attrs_w___locals__c                 C   rk  )N__annotations__rZ  rf  r@   r   rm  rn  r   r   r   !test_ctor_attrs_w___annotations__  rp  z5InterfaceClassTests.test_ctor_attrs_w___annotations__returnc                    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
g | }||| ||| d S )Nr   rE  r  directlyProvidesrh   c                       s   e Zd ZU  dZeed< dS )zKInterfaceClassTests.test_ctor_attrs_w___annotate_func__.<locals>.IAnnotatedValuevalueNr   r   r   rw  intrq  r   rE  r   r   
IAnnotated  s   
 rz  c                   @   s   e Zd ZU dZeed< dS )zJInterfaceClassTests.test_ctor_attrs_w___annotate_func__.<locals>.Annotatedr   rw  Nrx  r   r   r   r   	Annotated  s   
 r{  rw  )	r   rF  r  ru  rk   ri   r"   rD   rg  )r%   r  ru  ri   rz  r{  	annotatedr   rE  r   #test_ctor_attrs_w___annotate_func__  s   
z7InterfaceClassTests.test_ctor_attrs_w___annotate_func__c                 C   sj   ddl m} d|i}|  }|d|d}| |jd | |jd | |jd | t| g  d S )Nr   )_decorator_non_returndropmerZ  rf  r@   r   )	r!   r~  r;   r"   r   rB   r  rD   rg  )r%   r~  ri  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   )InvalidInterfaceinvalidrZ  rf  )zope.interface.exceptionsr  r   r;   rM   )r%   r  ri  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 )NrB   ATTRrZ  EXPLICIT)rY  rB   )r;   r"   rB   rn  r   r   r   test_ctor_w_explicit___doc__  s   z0InterfaceClassTests.test_ctor_w_explicit___doc__c                 C   s"   |   }| t| |g d S r   )r?   r"   rD   r:  r   r   r   r   test_interfaces  s   z#InterfaceClassTests.test_interfacesc                 C   s.   |   }| j d|fd}| | |f d S NISub)r  )r?   r"   r[  r%   r   subr   r   r   test_getBases  s   z!InterfaceClassTests.test_getBasesc                 C   s   |   }| || d S r   )r?   r   isEqualOrExtendedByr   r   r   r   !test_isEqualOrExtendedBy_identity  rQ   z5InterfaceClassTests.test_isEqualOrExtendedBy_identityc                 C   s<   |   }| j d|fd}| || | || d S r  )r?   r   r  r   r  r   r   r   !test_isEqualOrExtendedBy_subiface  s   z5InterfaceClassTests.test_isEqualOrExtendedBy_subifacec                 C   s8   |  d}|  d}| || | || d S )NOneAnother)r?   r   r  )r%   one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   rE  r_  c                   S   r   ra  r   r   r   r   r   rc    rd  zFInterfaceClassTests.test_names_w_all_False_ignores_bases.<locals>._barr   r@   re  r/   BazIBaserf  IDerivedr  rY  Fallr!   rF  r`  r?   r"   sortedrg  r%   rF  r`  rc  
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   rE  r_  c                   S   r   ra  r   r   r   r   r   rc  '  rd  z@InterfaceClassTests.test_names_w_all_True_no_bases.<locals>._barr   r@   re  rf  Tr  r.   rS   r  r%   rF  r`  rc  ri  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g d d S )Nr   rE  r_  c                   S   r   ra  r   r   r   r   r   rc  5  rd  zFInterfaceClassTests.test_names_w_all_True_w_bases_simple.<locals>._barr   r@   re  r/   r  r  rf  r  r  Tr  r.   r/   rS   r  r  r   r   r   $test_names_w_all_True_w_bases_simple1  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g d d S )Nr   rE  r_  c                   S   r   ra  r   r   r   r   r   rc  I  rd  zJInterfaceClassTests.test_names_w_all_True_bases_w_same_names.<locals>._barc                   S   r   ra  r   r   r   r   r   _fooL  rd  zJInterfaceClassTests.test_names_w_all_True_bases_w_same_names.<locals>._foor   r@   re  r  rS   r/   r  rf  r  r  Tr  r  r  	r%   rF  r`  rc  r  r  r  r  r  r   r   r   (test_names_w_all_True_bases_w_same_namesE  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|g d d S )Nr   rE  r_  c                   S   r   ra  r   r   r   r   r   rc  a  rd  z/InterfaceClassTests.test___iter__.<locals>._barc                   S   r   ra  r   r   r   r   r   r  d  rd  z/InterfaceClassTests.test___iter__.<locals>._foor   r@   re  r  r  r  rf  r  r  r  )r!   rF  r`  r?   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   rE  r_  c                   S   r   ra  r   r   r   r   r   rc  w  rd  zUInterfaceClassTests.test_namesAndDescriptions_w_all_False_ignores_bases.<locals>._barr   r@   re  r/   r  r  rf  r  r  Fr  r!   rF  r`  r?   r"   r  namesAndDescriptionsr  r   r   r   3test_namesAndDescriptions_w_all_False_ignores_basess  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   rE  r_  c                   S   r   ra  r   r   r   r   r   rc    rd  zOInterfaceClassTests.test_namesAndDescriptions_w_all_True_no_bases.<locals>._barr   r@   re  rf  Fr  r.   rS   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   rE  r_  c                   S   r   ra  r   r   r   r   r   rc    rd  zMInterfaceClassTests.test_namesAndDescriptions_w_all_True_simple.<locals>._barr   r@   re  r/   r  r  rf  r  r  Tr  r.   rS   r  r  r   r   r   +test_namesAndDescriptions_w_all_True_simple  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   rE  r_  c                   S   r   ra  r   r   r   r   r   rc    rd  zYInterfaceClassTests.test_namesAndDescriptions_w_all_True_bases_w_same_names.<locals>._barc                   S   r   ra  r   r   r   r   r   r    rd  zYInterfaceClassTests.test_namesAndDescriptions_w_all_True_bases_w_same_names.<locals>._foor   r@   re  r  r  r  rf  r  r  Tr  r.   r/   rS   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   rJ   rK   )r?   rM   rN   getDescriptionForr%   r  r   r   r   test_getDescriptionFor_miss  rQ   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   rE  r_  c                   S   r   ra  r   r   r   r   r   rc    rd  z<InterfaceClassTests.test_getDescriptionFor_hit.<locals>._barr   r@   re  rf  rS   r.   )r!   rF  r`  r?   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 rK   r   r   r  r   r   _test  r   z8InterfaceClassTests.test___getitem___miss.<locals>._test)r?   rM   rN   )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   rE  r_  c                   S   r   ra  r   r   r   r   r   rc    rd  z6InterfaceClassTests.test___getitem___hit.<locals>._barr   r@   re  rf  rS   r.   )r!   rF  r`  r?   r"   r  r   r   r   test___getitem___hit  s   z(InterfaceClassTests.test___getitem___hitc                 C   s   |   }| d| d S rK   )r?   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
| | d| d S )Nr   rE  r_  c                   S   r   ra  r   r   r   r   r   rc    rd  z7InterfaceClassTests.test___contains___hit.<locals>._barr   r@   re  rf  rS   r.   )r!   rF  r`  r?   r   r  r   r   r   test___contains___hit  s   z)InterfaceClassTests.test___contains___hitc                 C   rW   rK   )r?   r"   directr  r   r   r   test_direct_miss  r[   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   rE  r_  c                   S   r   ra  r   r   r   r   r   rc    rd  zBInterfaceClassTests.test_direct_hit_local_miss_bases.<locals>._barc                   S   r   ra  r   r   r   r   r   r    rd  zBInterfaceClassTests.test_direct_hit_local_miss_bases.<locals>._foor   r@   re  r  r  r  rf  r  r  rS   r/   r.   )r!   rF  r`  r?   r"   r  r  r   r   r    test_direct_hit_local_miss_bases  s   z4InterfaceClassTests.test_direct_hit_local_miss_basesc                 C   rW   rK   )r?   r"   queryDescriptionForr   r   r   r   test_queryDescriptionFor_miss)  r[   z1InterfaceClassTests.test_queryDescriptionFor_missc                 C   s@   ddl m} d|ddi}| j|d}| |d|d  d S )Nr   rE  attrTitleDescriptionrf  )r   rF  r?   r"   r  )r%   rF  ri  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                          | |f dS r   r  r   _called_withr   r   	_passable6     zCInterfaceClassTests.test_validateInvariants_pass.<locals>._passabler   )r?   r   rU   r"   validateInvariants)r%   r  r   rz   r   r  r   test_validateInvariants_pass3  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                     r  r   r  r   _passable_called_withr   r   r  D  r  zTInterfaceClassTests.test_validateInvariants_fail_wo_errors_passed.<locals>._passablec                         | |f  r   r  r   r  _fail_called_withr   r   _failJ  r  zPInterfaceClassTests.test_validateInvariants_fail_wo_errors_passed.<locals>._failr   r  r  r?   r   rU   rM   r  r"   )r%   r  r  r   rz   r   r  r  r  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 | 	|d   d S )Nr   r  c                     r  r   r  r   r  r   r   r  Z  r  zOInterfaceClassTests.test_validateInvariants_fail_w_errors_passed.<locals>._failr   r$  
r  r  r?   r   rU   rM   r  r"   r  assertIsInstance)r%   _errorsr  r   rz   r   r  r   ,test_validateInvariants_fail_w_errors_passedU  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                     r  r   r  r   r  r   r   r  j  r  z\InterfaceClassTests.test_validateInvariants_fail_in_base_wo_errors_passed.<locals>._passablec                     r  r   r  r   r  r   r   r  p  r  zXInterfaceClassTests.test_validateInvariants_fail_in_base_wo_errors_passed.<locals>._failr  r  r   r  )r%   r  r  r  r  rz   r   r  r   5test_validateInvariants_fail_in_base_wo_errors_passedf  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
 | 	|d   d S )Nr   r  c                     r  r   r  r   r  r   r   r    r  z[InterfaceClassTests.test_validateInvariants_fail_in_base_w_errors_passed.<locals>._passablec                     r  r   r  r   r  r   r   r    r  zWInterfaceClassTests.test_validateInvariants_fail_in_base_w_errors_passed.<locals>._failr  r  r   r$  r  )r%   r  r  r  r  r  rz   r   r  r   4test_validateInvariants_fail_in_base_w_errors_passed}  s    
zHInterfaceClassTests.test_validateInvariants_fail_in_base_w_errors_passedc                    sZ   g   fdd}t  }| d}|d|g | d|f}|| | dt  d S )Nc                     r  r   r  r   r  r   r   r    r  zbInterfaceClassTests.test_validateInvariants_inherited_not_called_multiple_times.<locals>._passabler  r   r  r$  )r   r?   rU   r  r"   r  )r%   r  rz   r  r  r   r  r   ;test_validateInvariants_inherited_not_called_multiple_times  s   

zOInterfaceClassTests.test_validateInvariants_inherited_not_called_multiple_timesc                 C   s   |  d}| | d d S )NPickleMe)r?   r"   
__reduce__r   r   r   r   test___reduce__  s   
z#InterfaceClassTests.test___reduce__c                 C   s$   ddl m} | t|td d S )Nr   )r   )r   z#zope.interface.tests.test_interface)#zope.interface.tests.test_interfacer   r"   hashr   r   r   r   test___hash___normal  s
   z(InterfaceClassTests.test___hash___normalc                 C   sR   G dd d|   }| }| t t| W d    d S 1 s"w   Y  d S )Nc                   @   r   )zIInterfaceClassTests.test___hash___missing_required_attrs.<locals>.Derivedc                 S   r  r   r   rq   r   r   r   r     r|   zRInterfaceClassTests.test___hash___missing_required_attrs.<locals>.Derived.__init__Nr   r   r   r   r   Derived  r   r  )r;   rM   r   r  )r%   r  r  r   r   r   $test___hash___missing_required_attrs  s
   
"z8InterfaceClassTests.test___hash___missing_required_attrsc                 C   s   |   }| |d  | |d  | |d  | |d  | |d k | |d k | d |k  | d |k | d | | d | | d | | d | d S r   )r?   
assertLessassertLessEqualassertNotEqualr   assertGreaterEqualassertGreaterr   r   r   r   test_comparison_with_None  s   z-InterfaceClassTests.test_comparison_with_Nonec                 C   sX   |   }| ||k  | || | || | || | || | ||k d S r   )r?   r   r  r"   r  r   r   r   r   "test_comparison_with_same_instance  s   z6InterfaceClassTests.test_comparison_with_same_instancec                 C   s   | j ddd}| j ddd}| || | ||k  | || | ||k | || | || | || | || | ||k | || | ||k | || d S )NINamezzope.interface.tests.oner   zzope.interface.tests.other)r?   r  r   r  r  r  r  )r%   r  r   r   r   r   8test_comparison_with_same_named_instance_in_other_module  s   zLInterfaceClassTests.test_comparison_with_same_named_instance_in_other_modulec                    s   G dd dt  G  fddd|  }| d}| ||   | t||   | t |d W d    n1 s?w   Y  ||_| || | t|| |   |d W d    d S 1 sjw   Y  d S )Nc                   @   r   )zDInterfaceClassTests.test_assignment_to__class__.<locals>.MyExceptionNr   r   r   r   r   r     r   r   c                       r   )zIInterfaceClassTests.test_assignment_to__class__.<locals>.MyInterfaceClassc                    s    |r   r   )r%   targetr   r   r   __call__  r   zRInterfaceClassTests.test_assignment_to__class__.<locals>.MyInterfaceClass.__call__Nr   r   r   r  r   r  r   r   MyInterfaceClass  r0   r  r  r$  )	r   r;   r?   r  r   typerM   r   	__class__)r%   r  r0  r   r  r   test_assignment_to__class__  s   


"z/InterfaceClassTests.test_assignment_to__class__c                 C   s   ddl m} G dd d|  }|d|f}| |dd G dd	 d	|}| |dd G d
d d|}| t |  W d    n1 sIw   Y  ||_| |dd d S )Nr   r  c                   @   r   )zJInterfaceClassTests.test_assignment_to__class__2.<locals>.MyInterfaceClassc                 W   r  r   r   )r%   r   r   r   r   r    r|   zSInterfaceClassTests.test_assignment_to__class__2.<locals>.MyInterfaceClass.__call__Nr  r   r   r   r   r    r   r  r0  r$  )r$  c                   @   r   )z>InterfaceClassTests.test_assignment_to__class__2.<locals>.IBarNr   r   r   r   r   r1    r   r1  c                   @   r   )z?InterfaceClassTests.test_assignment_to__class__2.<locals>.ISpamNr   r   r   r   r   ISpam  r   r  )r   r  r;   r"   rM   r   r  )r%   r  r  r0  r1  r  r   r   r   test_assignment_to__class__2  s   z0InterfaceClassTests.test_assignment_to__class__2c                 C   s>   |   }| t d|_W d    d S 1 sw   Y  d S )Nzdifferent.module)r?   rM   r   r   )r%   r]  r   r   r   test__module__is_readonly  s   "z-InterfaceClassTests.test__module__is_readonly)rX  r   NNN)rs  N)5r   r   r   r;   r?   rH   r^  rj  ro  rr  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  r   r   r   r   rU    sj    
	
	

rU  c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6diS )jInterfaceTestsc                    sB   ddl m  ddl m} G  fddd|}| |d j| d S )Nr   rE  r  c                       rG  )z<InterfaceTests.test_attributes_link_to_interface.<locals>.I1My attrN)r   r   r   r  r   rE  r   r   I1&  r   r  r  )r   rF  r  r   ru   r%   r  r  r   rE  r   !test_attributes_link_to_interface"  s   z0InterfaceTests.test_attributes_link_to_interfacec                 C   s2   ddl m} G dd d|}| |d j| d S )Nr   r  c                   @   r   )z9InterfaceTests.test_methods_link_to_interface.<locals>.I1c                 S   r   zA methodNr   )rS   r.   bingor   r   r   method/  rd  z@InterfaceTests.test_methods_link_to_interface.<locals>.I1.methodNr   r   r   r  r   r   r   r   r  .  r   r  r  )r   r  r   ru   r  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
}| }|  | | || |    |  || | ||| |  || | ||| d S )Nr   r  r   r}   c                   @   r   )z<InterfaceTests.test_classImplements_simple.<locals>.ICurrentc                 S   r   	docstringNr   r   r   r   r   r   method1:  rd  zDInterfaceTests.test_classImplements_simple.<locals>.ICurrent.method1c                 S   r   r  r   r  r   r   r   method2=  rd  zDInterfaceTests.test_classImplements_simple.<locals>.ICurrent.method2N)r   r   r   r  r	  r   r   r   r   ICurrent9  s    r
  c                   @   r   )z:InterfaceTests.test_classImplements_simple.<locals>.IOtherNr   r   r   r   r   rO  @  r   rO  c                       s    e Zd Z Zdd Zdd ZdS )z;InterfaceTests.test_classImplements_simple.<locals>.Currentc                 S   r   r   r   r%   r   r   r   r   r   r  F  r   zCInterfaceTests.test_classImplements_simple.<locals>.Current.method1c                 S   r   r   r   r  r   r   r   r	  I  r   zCInterfaceTests.test_classImplements_simple.<locals>.Current.method2N)r   r   r   __implemented__r  r	  r   r
  r   r   CurrentC  s    r  )	r   r  r   r~   r   r   r"   r   r.  )r%   r  r   r~   rO  r  currentr   r  r   test_classImplements_simple4  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
}| }|  | | || |  || | ||| |  || | ||| d S )Nr   r  r   r}   c                   @   r   )zCInterfaceTests.test_classImplements_base_not_derived.<locals>.IBasec                   S   r   r  r   r   r   r   r   r  \  rd  zJInterfaceTests.test_classImplements_base_not_derived.<locals>.IBase.methodNr  r   r   r   r   r  [  r   r  c                   @   r   )zFInterfaceTests.test_classImplements_base_not_derived.<locals>.IDerivedNr   r   r   r   r   r  _  r   r  c                          e Zd Z Zdd ZdS )zEInterfaceTests.test_classImplements_base_not_derived.<locals>.Currentc                 S   r   r   r   rq   r   r   r   r  e  r   zLInterfaceTests.test_classImplements_base_not_derived.<locals>.Current.methodNr   r   r   r  r  r   r  r   r   r  b      r  r   r  r   r~   r   r   r   r.  )r%   r  r   r~   r  r  r  r   r  r   %test_classImplements_base_not_derivedV  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
}| }| || |  | | ||| | |||  |  || | ||| | |||  |  || d S )Nr   r  r   r}   c                   @   r   )zCInterfaceTests.test_classImplements_base_and_derived.<locals>.IBasec                   S   r   r  r   r   r   r   r   r  w  rd  zJInterfaceTests.test_classImplements_base_and_derived.<locals>.IBase.methodNr  r   r   r   r   r  v  r   r  c                   @   r   )zFInterfaceTests.test_classImplements_base_and_derived.<locals>.IDerivedNr   r   r   r   r   r  z  r   r  c                       r  )zEInterfaceTests.test_classImplements_base_and_derived.<locals>.Currentc                 S   r   r   r   rq   r   r   r   r    r   zLInterfaceTests.test_classImplements_base_and_derived.<locals>.Current.methodNr  r   r  r   r   r  }  r  r  )r   r  r   r~   r   r.  r   	flattened)r%   r  r   r~   r  r  r  r   r  r   %test_classImplements_base_and_derivedq  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
}G fddd}G dd d||}| }|  | | | |  || | || |  || | || d S )Nr   r  r   r}   c                   @   r   )z;InterfaceTests.test_classImplements_multiple.<locals>.ILeftc                   S   r   r  r   r   r   r   r   r    rd  zBInterfaceTests.test_classImplements_multiple.<locals>.ILeft.methodNr  r   r   r   r   ILeft  r   r  c                   @   r   )z<InterfaceTests.test_classImplements_multiple.<locals>.IRightNr   r   r   r   r   IRight  r   r  c                       r  )z:InterfaceTests.test_classImplements_multiple.<locals>.Leftc                 S   r   r   r   rq   r   r   r   r    r   zAInterfaceTests.test_classImplements_multiple.<locals>.Left.methodNr  r   r  r   r   Left  r  r  c                          e Zd Z ZdS )z;InterfaceTests.test_classImplements_multiple.<locals>.RightNr   r   r   r  r   r  r   r   Right      r!  c                   @   r   )z:InterfaceTests.test_classImplements_multiple.<locals>.AmbiNr   r   r   r   r   Ambi  r   r#  )r   r  r   r~   r   r   )r%   r  r   r~   r  r!  r#  ambir   )r  r  r   test_classImplements_multiple  s   z,InterfaceTests.test_classImplements_multiplec                    s<  ddl m} ddl m} ddl m} G dd d| G dd d G d	d
 d
|G  fdddG fddd}G fdddG fddd|}| }|  | | | | | |  || | || | || |  || | || | || d S )Nr   r  r   r}   c                   @   r   )zPInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.ILeftc                   S   r   r  r   r   r   r   r   r    rd  zWInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.ILeft.methodNr  r   r   r   r   r        r  c                   @   r   )zQInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.IRightNr   r   r   r   r   r    r   r  c                   @   r   )zQInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.IOtherNr   r   r   r   r   rO    r   rO  c                       r  )zOInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.Leftc                 S   r   r   r   rq   r   r   r   r    r   zVInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.Left.methodNr  r   r  r   r   r    r  r  c                       r  )zPInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.RightNr  r   r   r   r   r!    r"  r!  c                       r  )zPInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.OtherNr  r   )rO  r   r   Other  r"  r'  c                       s   e Zd Z jjfZdS )zPInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.MixedNr  r   )r  r'  r   r   Mixed  r0   r(  r  )r%   r  r   r~   r!  r(  mixedr   )r  rO  r  r  r'  r   2test_classImplements_multiple_w_explict_implements  s(   zAInterfaceTests.test_classImplements_multiple_w_explict_implementsc                 C   s   ddl m} |j}|d}|d|f}|d}|d||f}| || | || | || | || | || | || | || d S )Nr   r  FunInterfaceBarInterfaceBobInterfaceBazInterface)r   r  r  r   r>  r   )r%   r  newr+  r,  r-  r.  r   r   r   testInterfaceExtendsInterface  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}| || d S )	Nr   rE  r  )verifyClassc                          e Zd Z dZdd ZdS )z1InterfaceTests.test_verifyClass.<locals>.ICheckMer  c                   S   r   r   r   r   r   r   r   r    rd  z8InterfaceTests.test_verifyClass.<locals>.ICheckMe.methodNr   r   r   r  r  r   rE  r   r   ICheckMe      r4  c                          e Zd Z ZdZdd ZdS )z0InterfaceTests.test_verifyClass.<locals>.CheckMerw  c                 S   r   r   r   rq   r   r   r   r    r   z7InterfaceTests.test_verifyClass.<locals>.CheckMe.methodNr   r   r   r  r  r  r   r4  r   r   CheckMe      r9  )r   rF  r  rk   r1  r   )r%   r  r1  r9  r   rF  r4  r   test_verifyClass  s   zInterfaceTests.test_verifyClassc                    sd   ddl m  ddl m} ddlm} G  fddd|G fddd}| }| || d S )	Nr   rE  r  rh   c                       r2  )z2InterfaceTests.test_verifyObject.<locals>.ICheckMer  c                   S   r   r   r   r   r   r   r   r    rd  z9InterfaceTests.test_verifyObject.<locals>.ICheckMe.methodNr3  r   rE  r   r   r4    r5  r4  c                       r6  )z1InterfaceTests.test_verifyObject.<locals>.CheckMerw  c                 S   r   r   r   rq   r   r   r   r    r   z8InterfaceTests.test_verifyObject.<locals>.CheckMe.methodNr7  r   r8  r   r   r9  
  r:  r9  )r   rF  r  rk   ri   r   )r%   r  ri   r9  check_mer   r;  r   test_verifyObject  s   z InterfaceTests.test_verifyObjectc                 C   s0   ddl m} G dd d|}| || d S )Nr   r  c                   @   r   )zLInterfaceTests.test_interface_object_provides_Interface.<locals>.AnInterfaceNr   r   r   r   r   AnInterface  r   r?  )r   r  r   r~   )r%   r  r?  r   r   r   (test_interface_object_provides_Interface     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   rE  r  c                       r2  )z1InterfaceTests.test_names_simple.<locals>.ISimpler  c                   S   r   r  r   r   r   r   r   r  $  rd  z8InterfaceTests.test_names_simple.<locals>.ISimple.methodNr3  r   rE  r   r   ISimple!  r5  rB  r  r  r   rF  r  r"   r  rg  r%   r  rB  r   rE  r   test_names_simple     z InterfaceTests.test_names_simplec                    sx   ddl m  ddl m} G  fddd|}G  fddd|}| t| g d | t|jd	d
g d d S )Nr   rE  r  c                       r2  )z0InterfaceTests.test_names_derived.<locals>.IBaser  c                   S   r   r  r   r   r   r   r   r  0  rd  z7InterfaceTests.test_names_derived.<locals>.IBase.methodNr3  r   rE  r   r   r  -  r5  r  c                       $   e Zd Z dZdd Zdd ZdS )z3InterfaceTests.test_names_derived.<locals>.IDerivedMy attr2c                   S   r   r  r   r   r   r   r   r  6  rd  z:InterfaceTests.test_names_derived.<locals>.IDerived.methodc                   S   r   r  r   r   r   r   r   r	  9  rd  z;InterfaceTests.test_names_derived.<locals>.IDerived.method2Nr   r   r   attr2r  r	  r   rE  r   r   r  3      r  )rJ  r  r	  Tr  r  rJ  r  r	  rC  r%   r  r  r  r   rE  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 | 	|d d	   | |d d	 j
d | |d d	 jd
 | |d	 d d | 	|d	 d	 | | |d	 d	 j
d | |d	 d	 jd d S )Nr   rE  r  Methodc                       r2  )z@InterfaceTests.test_namesAndDescriptions_simple.<locals>.ISimpler  c                   S   r   	My methodNr   r   r   r   r   r  I  rd  zGInterfaceTests.test_namesAndDescriptions_simple.<locals>.ISimple.methodNr3  r   rE  r   r   rB  F  r5  rB  r  r  r$  r  r  rR  r   rF  r  r!   rP  r  r  r"   r  r  r   rB   )r%   r  rP  rB  name_valuesr   rE  r    test_namesAndDescriptions_simpleA  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
 | 	|d d   | |d d j
d
 | |d d jd | |d d d | 	|d d | | |d d j
d | |d d jd | |d d d | 	|d d | | |d d j
d | |d d jd t|jdd}| t|d | |d d d | 	|d d   | |d d j
d | |d d jd | |d d d
 | 	|d d   | |d d j
d
 | |d d jd | |d d d | 	|d d | | |d d j
d | |d d jd | |d	 d d | 	|d	 d | | |d	 d j
d | |d	 d jd d S )Nr   rE  r  rO  c                       r2  )z?InterfaceTests.test_namesAndDescriptions_derived.<locals>.IBaser  c                   S   r   rQ  r   r   r   r   r   r  `  rd  zFInterfaceTests.test_namesAndDescriptions_derived.<locals>.IBase.methodNr3  r   rE  r   r   r  ]  r5  r  c                       rG  )zBInterfaceTests.test_namesAndDescriptions_derived.<locals>.IDerivedrH  c                   S   r   My method, overriddenNr   r   r   r   r   r  f  rd  zIInterfaceTests.test_namesAndDescriptions_derived.<locals>.IDerived.methodc                   S   r   
My method2Nr   r   r   r   r   r	  i  rd  zJInterfaceTests.test_namesAndDescriptions_derived.<locals>.IDerived.method2NrI  r   rE  r   r   r  c  rK  r     rJ  r$  rH  r  rW  r  r	  rY  Tr     r  r  rS  )r%   r  rP  r  r  rT  r   rE  r   !test_namesAndDescriptions_derivedX  sJ   	z0InterfaceTests.test_namesAndDescriptions_derivedc                 C   0   ddl m} G dd d|}| t|jd d S )Nr   r  c                   @   r   )zIInterfaceTests.test_getDescriptionFor_nonesuch_no_default.<locals>.IEmptyNr   r   r   r   r   IEmpty  r   r^  rL   )r   r  rM   rN   r  r%   r  r^  r   r   r   *test_getDescriptionFor_nonesuch_no_default  rA  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}| |  | |jd | |j	d |d	}| || | |jd	 | |j	d
 d S )Nr   rE  r  rO  c                       r2  )z=InterfaceTests.test_getDescriptionFor_simple.<locals>.ISimpler  c                   S   r   rQ  r   r   r   r   r   r    rd  zDInterfaceTests.test_getDescriptionFor_simple.<locals>.ISimple.methodNr3  r   rE  r   r   rB    r5  rB  r  r  r  rR  
r   rF  r  r!   rP  r  r  r"   r   rB   r%   r  rP  rB  a_descm_descr   rE  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	}| |  | |jd	 | |j	d
 |d}| || | |jd | |j	d |d}| |  | |jd | |j	d |d}| || | |jd | |j	d d S )Nr   rE  r  rO  c                       r2  )z<InterfaceTests.test_getDescriptionFor_derived.<locals>.IBaser  c                   S   r   rQ  r   r   r   r   r   r    rd  zCInterfaceTests.test_getDescriptionFor_derived.<locals>.IBase.methodNr3  r   rE  r   r   r    r5  r  c                       rG  )z?InterfaceTests.test_getDescriptionFor_derived.<locals>.IDerivedrH  c                   S   r   rV  r   r   r   r   r   r    rd  zFInterfaceTests.test_getDescriptionFor_derived.<locals>.IDerived.methodc                   S   r   rX  r   r   r   r   r   r	    rd  zGInterfaceTests.test_getDescriptionFor_derived.<locals>.IDerived.method2NrI  r   rE  r   r   r    rK  r  r  r  r  rW  rJ  rH  r	  rY  ra  	r%   r  rP  r  r  rc  rd  a2_descm2_descr   rE  r   test_getDescriptionFor_derived  s*   
	


z-InterfaceTests.test_getDescriptionFor_derivedc                 C   r]  )Nr   r  c                   @   r   )z7InterfaceTests.test___getitem__nonesuch.<locals>.IEmptyNr   r   r   r   r   r^    r   r^  rL   )r   r  rM   rN   __getitem__r_  r   r   r   test___getitem__nonesuch  rA  z'InterfaceTests.test___getitem__nonesuchc                    s   ddl m  ddl m} ddlm} G  fddd|}|d }| |  | |jd | |jd |d	 }| || | |jd	 | |jd
 d S )Nr   rE  r  rO  c                       r2  )z6InterfaceTests.test___getitem__simple.<locals>.ISimpler  c                   S   r   rQ  r   r   r   r   r   r    rd  z=InterfaceTests.test___getitem__simple.<locals>.ISimple.methodNr3  r   rE  r   r   rB    r5  rB  r  r  r  rR  	r   rF  r  r!   rP  r  r"   r   rB   rb  r   rE  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	 }| |  | |jd	 | |jd
 |d }| || | |jd | |jd |d }| |  | |jd | |jd |d }| || | |jd | |jd d S )Nr   rE  r  rO  c                       r2  )z6InterfaceTests.test___getitem___derived.<locals>.IBaser  c                   S   r   rQ  r   r   r   r   r   r    rd  z=InterfaceTests.test___getitem___derived.<locals>.IBase.methodNr3  r   rE  r   r   r    r5  r  c                       rG  )z9InterfaceTests.test___getitem___derived.<locals>.IDerivedrH  c                   S   r   rV  r   r   r   r   r   r     rd  z@InterfaceTests.test___getitem___derived.<locals>.IDerived.methodc                   S   r   rX  r   r   r   r   r   r	    rd  zAInterfaceTests.test___getitem___derived.<locals>.IDerived.method2NrI  r   rE  r   r   r    rK  r  r  r  r  rW  rJ  rH  r	  rY  rl  rf  r   rE  r   test___getitem___derived  s*   	z'InterfaceTests.test___getitem___derivedc                 C   s,   ddl m} G dd d|}| d| d S )Nr   r  c                   @   r   )z8InterfaceTests.test___contains__nonesuch.<locals>.IEmptyNr   r   r   r   r   r^    r   r^  rL   )r   r  r.  r_  r   r   r   test___contains__nonesuch  s   z(InterfaceTests.test___contains__nonesuchc                    sH   ddl m  ddl m} G  fddd|}| d| | d| d S )Nr   rE  r  c                       r2  )z7InterfaceTests.test___contains__simple.<locals>.ISimpler  c                   S   r   rQ  r   r   r   r   r   r  )  rd  z>InterfaceTests.test___contains__simple.<locals>.ISimple.methodNr3  r   rE  r   r   rB  &  r5  rB  r  r  r   rF  r  r   rD  r   rE  r   test___contains__simple"  s
   z&InterfaceTests.test___contains__simplec                    st   ddl m  ddl m} G  fddd|}G  fddd|}| d| | d	| | d
| | d| d S )Nr   rE  r  c                       r2  )z6InterfaceTests.test___contains__derived.<locals>.IBaser  c                   S   r   rQ  r   r   r   r   r   r  6  rd  z=InterfaceTests.test___contains__derived.<locals>.IBase.methodNr3  r   rE  r   r   r  3  r5  r  c                       rG  )z9InterfaceTests.test___contains__derived.<locals>.IDerivedrH  c                   S   r   rV  r   r   r   r   r   r  <  rd  z@InterfaceTests.test___contains__derived.<locals>.IDerived.methodc                   S   r   rX  r   r   r   r   r   r	  ?  rd  zAInterfaceTests.test___contains__derived.<locals>.IDerived.method2NrI  r   rE  r   r   r  9  rK  r  r  r  rJ  r	  rp  rM  r   rE  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                   @   r   )z1InterfaceTests.test___iter__empty.<locals>.IEmptyNr   r   r   r   r   r^  J  r   r^  )r   r  r"   rD   r_  r   r   r   test___iter__emptyG  rA  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   rE  r  c                       r2  )z3InterfaceTests.test___iter__simple.<locals>.ISimpler  c                   S   r   rQ  r   r   r   r   r   r  V  rd  z:InterfaceTests.test___iter__simple.<locals>.ISimple.methodNr3  r   rE  r   r   rB  S  r5  rB  r  r  r   rF  r  r"   r  rD   rD  r   rE  r   test___iter__simpleO  rF  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|g d d S )	Nr   rE  r  c                       r2  )z2InterfaceTests.test___iter__derived.<locals>.IBaser  c                   S   r   rQ  r   r   r   r   r   r  b  rd  z9InterfaceTests.test___iter__derived.<locals>.IBase.methodNr3  r   rE  r   r   r  _  r5  r  c                       rG  )z5InterfaceTests.test___iter__derived.<locals>.IDerivedrH  c                   S   r   rV  r   r   r   r   r   r  h  rd  z<InterfaceTests.test___iter__derived.<locals>.IDerived.methodc                   S   r   rX  r   r   r   r   r   r	  k  rd  z=InterfaceTests.test___iter__derived.<locals>.IDerived.method2NrI  r   rE  r   r   r  e  rK  r  rL  rt  rM  r   rE  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   r   r  r   r   r   r   r   r  u  rd  zSInterfaceTests.test_function_attributes_become_tagged_values.<locals>.ITagMe.methodr$  N)r   r   r   r  optionalr   r   r   r   ITagMet  s    
rx  r  rw  r$  )r   r  r"   rO   )r%   r  rx  r  r   r   r   -test_function_attributes_become_tagged_valuesq  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                   @      e Zd ZdZdS )z@InterfaceTests.test___doc___non_element.<locals>.IHaveADocStringxxxNr   r   r   rB   r   r   r   r   IHaveADocString  r"  r}  r{  )r   r  r"   rB   rD   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   rE  r  c                          e Zd ZdZ dZdS )z?InterfaceTests.test___doc___as_element.<locals>.IHaveADocStringr{  the docNr|  r   rE  r   r   r}    s    r}  r@   rB   r   rF  r  r"   rB   rD   r~  r   rE  r   test___doc___as_element  s
   z&InterfaceTests.test___doc___as_elementc           
   
   C   s   ddl m} | ||j| g }z||| | d W n |y8 } z| |jd | W Y d }~nd }~ww | t|| dd |D }|  |D ]}	| |	|	d qNd 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  rM   r  failr"   r   r  sortpop)
r%   has_invariant	error_len
error_msgsr   r  er  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	}| }||| | |d
tg | ||d  d|_	| ||d  d|_
| ||d  |`	| |ddg| d S )Nr   rE  r  rt  r   c                       $   e Zd Z dZ dZe dS )z8InterfaceTests.test_invariant_simple.<locals>.IInvariantrS   *bar; must eval to Boolean True if foo doesNr   r   r   rS   r.   _ifFooThenBarr   rF  r   r   r   
IInvariant      r  c                   @   r   )z:InterfaceTests.test_invariant_simple.<locals>.HasInvariantNr   r   r   r   r   HasInvariant  r   r  r      *   r$  If Foo, then Bar!)r   rF  r  ru  r   r"   rO   r  r  r.   rS   r  )r%   r  ru  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}| |dtg | }||| d|_| 	|ddg| d|_d|_
| 	|ddg| d|_d|_
| 	|dddg| d|_d|_
| ||d  d S )Nr   rE  r  rt  r   c                       r  )z8InterfaceTests.test_invariant_nested.<locals>.IInvariantrS   r  Nr  r   r  r   r   r    r  r  c                       s   e Zd Z e dS )z;InterfaceTests.test_invariant_nested.<locals>.ISubInvariantN)r   r   r   _barGreaterThanFoor   r   r   r   ISubInvariant  r   r  c                   @   r   )z:InterfaceTests.test_invariant_nested.<locals>.HasInvariantNr   r   r   r   r   r    r   r  r   r  r$  r  r  %Please, Boo MUST be greater than Foo!)r   rF  r  ru  r   r"   rO   r  rS   r  r.   r  )r%   r  ru  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	}| }||| 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   rE  r  rt  r   c                       r  )z:InterfaceTests.test_invariant_mutandis.<locals>.IInvariantrS   r  Nr  r   r  r   r   r    r  r  c                   @   r   )z<InterfaceTests.test_invariant_mutandis.<locals>.HasInvariantNr   r   r   r   r   r    r   r  r  r   r$  r  r  r  )r   rF  r  ru  r   rS   rO   r  r  rU   r  r.   r"   r  )r%   r  ru  r  r  r  old_invariantsr   r   r  r   test_invariant_mutandis  sH   


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   rE  r  c                   @   rz  )z7InterfaceTests.test___doc___element.<locals>.IDocstringr{  Nr|  r   r   r   r   
IDocstring*  r"  r  r{  c                       r  )zCInterfaceTests.test___doc___element.<locals>.IDocstringAndAttributer{  r  Nr|  r   rE  r   r   IDocstringAndAttribute0  r  r  r@   rB   r  )r%   r  r  r  r   rE  r   test___doc___element&  s   z#InterfaceTests.test___doc___elementc              
      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
}||dd ||dd z||dd W d S  yk } z| t	|d W Y d }~d S d }~ww )Nr   rE  r  rJ  r   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_invariantC  s   zJInterfaceTests.test_invariant_as_decorator.<locals>.IRange.range_invariantN)r   r   r   r  r  r  r   rF  r  r   r   r   IRange?  s
    r  c                   @   r   )z9InterfaceTests.test_invariant_as_decorator.<locals>.Rangec                 S   s   ||| _ | _d S r   )r  r  )r%   r  r  r   r   r   r   K  r  zBInterfaceTests.test_invariant_as_decorator.<locals>.Range.__init__Nr   r   r   r   r   RangeH  s    r  r$  r  r  )
r   rF  r  rK  r   r  r  r  r"   r   )r%   r  rK  r  r  r  r   r  r   test_invariant_as_decorator8  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 | t|	 dg | |dd | |dd | t
|	 ddh d S )Nr   rE  r  r,   c                       s&   e Zd Z dZ dZdd dS )z0InterfaceTests.test_taggedValue.<locals>.ITaggedrS   r  r2   SpamN)r   r   r   rS   r.   r   rF  r-   r   r   ITaggedZ  s    r  c                       s    e Zd Z dd  dd dS )z1InterfaceTests.test_taggedValue.<locals>.IDerivedr2   	Spam SpamrS   r.   Nr   r   r,   r   r   r  _  s    
r  c                   @   r   )z2InterfaceTests.test_taggedValue.<locals>.IDerived2Nr   r   r   r   r   	IDerived2c  r   r  r2   r  rS   r  r.   )r   rF  r  r-   r"   rO   rM   rN   rD   rE   set)r%   r  r  r  r  r   r  r   test_taggedValueU  s   zInterfaceTests.test_taggedValuec                    s   ddl m  ddl m G  fddd|}G  fddd|}G  fdd	d	|}G  fd
dd||}G dd d||}G dd d||}|S )Nr   rE  r,   c                          e Zd Zdd  dZdS )z0InterfaceTests._make_taggedValue_tree.<locals>.FtagFNr   r   r   r  r   r  r   r   r  r      
r  c                       r  )z0InterfaceTests._make_taggedValue_tree.<locals>.Er  ENr  r   r  r   r   r  v  r  r  c                       r  )z0InterfaceTests._make_taggedValue_tree.<locals>.Dr  DNr  r   r  r   r   r  z  r  r  c                       r  )z0InterfaceTests._make_taggedValue_tree.<locals>.Cr  CNr  r   r  r   r   r  ~  r  r  c                   @   r   )z0InterfaceTests._make_taggedValue_tree.<locals>.BNr   r   r   r   r   B  r   r  c                   @   r   )z0InterfaceTests._make_taggedValue_tree.<locals>.ANr   r   r   r   r   A  r   r  )r   rF  r-   )r%   r  r  r  r  r  r  r  r   r  r   _make_taggedValue_treen  s   z%InterfaceTests._make_taggedValue_treec                 C   s   ddl m} | t}| |jjd | |}| |d jd | |dd | |dd |j	d jdks=J |j	d 
dd | |dd d S )Nr   r  r  r  r  )r   r  r  r   r"   r  r   rO   rY   r  rU   )r%   r  class_Aiface_Ar   r   r   "test_getTaggedValue_follows__iro__  s   

z1InterfaceTests.test_getTaggedValue_follows__iro__c                 C   s  ddl m} | |}| |d | g t|  | t	 |
d W d    n1 s2w   Y  |dd | |dd | |
dd | dgt|  |jd jdksdJ |jd }| |dd | |
dd | dgt|  d S )Nr   r  r  r  r$  r  )r   r  r  r7  rc   r"   rD   rT   rM   rN   r`   rU   r  r   )r%   r  r  r  r   r   r   (test_getDirectTaggedValue_ignores__iro__  s    

z7InterfaceTests.test_getDirectTaggedValue_ignores__iro__c                    s   ddl m  ddl m} G  fddd|}G dd d|}G dd	 d	|}| |d
|d
 |f|_| |d
 d S )Nr   rE  r  c                       rG  )z<InterfaceTests.test_description_cache_management.<locals>.I1r   N)r   r   r   r   r   rE  r   r   r    r   r  c                   @   r   )z<InterfaceTests.test_description_cache_management.<locals>.I2Nr   r   r   r   r   I2  r   r  c                   @   r   )z<InterfaceTests.test_description_cache_management.<locals>.I3Nr   r   r   r   r   I3  r   r  r   )r   rF  r  r   r3  r  r7  )r%   r  r  r  r  r   rE  r   !test_description_cache_management  s   z0InterfaceTests.test_description_cache_managementc                 C   sT   ddl m} ddl m} G dd d|}||G dd d}| || d d S )Nr   r  rJ  c                   @   r   )zAInterfaceTests.test___call___defers_to___conform___.<locals>.IFooNr   r   r   r   r   r0    r   r0  c                   @   r   )z>InterfaceTests.test___call___defers_to___conform___.<locals>.Cc                 S   r   )Nr   r   )r%   protor   r   r   r     r|   zJInterfaceTests.test___call___defers_to___conform___.<locals>.C.__conform__Nr   r   r   r   r   r    r&  r  )r   r  rK  r"   )r%   r  rK  r0  r  r   r   r   $test___call___defers_to___conform___  s   z3InterfaceTests.test___call___defers_to___conform___c                 C   sX   ddl m} ddl m} G dd d|}||G dd d}| }| ||| d S )Nr   r  rJ  c                   @   r   )z<InterfaceTests.test___call___object_implements.<locals>.IFooNr   r   r   r   r   r0    r   r0  c                   @   r   )z9InterfaceTests.test___call___object_implements.<locals>.CNr   r   r   r   r   r    rQ  r  )r   r  rK  r   )r%   r  rK  r0  r  cr   r   r   test___call___object_implements  s   z.InterfaceTests.test___call___object_implementsc                 C   sB   ddl m} G dd d|}G dd d}| }| t|| d S )Nr   r  c                   @   r   )z<InterfaceTests.test___call___miss_wo_alternate.<locals>.IFooNr   r   r   r   r   r0    r   r0  c                   @   r   )z9InterfaceTests.test___call___miss_wo_alternate.<locals>.CNr   r   r   r   r   r    r   r  )r   r  rM   r   r%   r  r0  r  r  r   r   r   test___call___miss_wo_alternate  s
   z.InterfaceTests.test___call___miss_wo_alternatec                 C   sF   ddl m} G dd d|}G dd d}| }| ||| |  d S )Nr   r  c                   @   r   )z;InterfaceTests.test___call___miss_w_alternate.<locals>.IFooNr   r   r   r   r   r0    r   r0  c                   @   r   )z8InterfaceTests.test___call___miss_w_alternate.<locals>.CNr   r   r   r   r   r    r   r  )r   r  r   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 } fdd}G dd	 d	|}G d
d d}| }|d d  }||g|d d < z ||  W ||d d < d S ||d d < w )Nr   r  r  c                 S   r  r   r   r  r   r   r   _miss	  r|   z:InterfaceTests.test___call___w_adapter_hook.<locals>._missc                    rx   r   r   r  rq   r   r   _hit	  r|   z9InterfaceTests.test___call___w_adapter_hook.<locals>._hitc                   @   r   )z9InterfaceTests.test___call___w_adapter_hook.<locals>.IFooNr   r   r   r   r   r0  	  r   r0  c                   @   r   )z6InterfaceTests.test___call___w_adapter_hook.<locals>.CNr   r   r   r   r   r  	  r   r  )r   r  r!   r  r   )	r%   r  r  r  r  r0  r  r  old_adapter_hooksr   rq   r   test___call___w_adapter_hook  s   z+InterfaceTests.test___call___w_adapter_hookc                    sv   ddl m} ddl m} ddl m  G  fddd|}||G dd d}| d	|t  | d	||  d S )
Nr   r  rJ  interfacemethodc                          e Zd Z dd ZdS )z=InterfaceTests.test___call___w_overridden_adapt.<locals>.IFooc                 S   r   Nr  r   r   r   r   r   r	  	  r   zGInterfaceTests.test___call___w_overridden_adapt.<locals>.IFoo.__adapt__Nr   r   r   r	  r   r  r   r   r0  	  s    r0  c                   @   r   )z<InterfaceTests.test___call___w_overridden_adapt.<locals>.ObjNr   r   r   r   r   Obj"	  rQ  r  r  )r   r  rK  r  r"   r   )r%   r  rK  r0  r  r   r  r    test___call___w_overridden_adapt	  s   z/InterfaceTests.test___call___w_overridden_adaptc                    s   ddl m} ddl m} ddl m  G  fddd|}G dd d|}||G d	d
 d
}||G dd d}| d|t  | d||  | d||  | t ||  W d    n1 sjw   Y  | d||  d S )Nr   r  rJ  r  c                       r  )zKInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.IAdaptc                 S   r   r  r   r   r   r   r   r	  3	  r   zUInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.IAdapt.__adapt__Nr  r   r  r   r   IAdapt2	      r  c                   @   rz  )zLInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.ISimplezNothing special.Nr|  r   r   r   r   rB  7	  r"  rB  c                   @   r   )zNInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.Conform24c                 S   r   N   r   r   r   r   r   r   <	  r|   zZInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.Conform24.__conform__Nr   r   r   r   r   	Conform24:	  r&  r  c                   @   r   )zPInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.ConformNonec                 S   r  r   r   r   r   r   r   r   A	  r|   z\InterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.ConformNone.__conform__Nr   r   r   r   r   ConformNone?	  r&  r  r  r  )r   r  rK  r  r"   r   rM   r   )r%   r  rK  r  rB  r  r  r   r  r   ,test___call___w_overridden_adapt_and_conform+	  s    z;InterfaceTests.test___call___w_overridden_adapt_and_conformc                    s   dd l }ddlm} ddlm} ddlm  G  fddd|}||G dd d}| d	|t  | }| ||| d S )
Nr   r  rJ  r  c                       s    e Zd Z fddZ  ZS )zHInterfaceTests.test___call___w_overridden_adapt_call_super.<locals>.IFooc                    s   |  |sdS t |S r  )r~   superr	  r   r  r   r   r	  W	  s   
zRInterfaceTests.test___call___w_overridden_adapt_call_super.<locals>.IFoo.__adapt__)r   r   r   r	  __classcell__r   r  r  r   r0  U	  s    r0  c                   @   r   )zGInterfaceTests.test___call___w_overridden_adapt_call_super.<locals>.ObjNr   r   r   r   r   r  ]	  rQ  r  r  )sysr   r  rK  r  r"   r   r   )r%   r  r  rK  r0  r  rz   r   r  r   +test___call___w_overridden_adapt_call_superN	  s   z:InterfaceTests.test___call___w_overridden_adapt_call_superc                    sV   ddl m} ddl m  G  fddd|}| d|t  | |d  d d S )	Nr   r  r  c                       s    e Zd Z dd Zdd ZdS )zHInterfaceTests.test___adapt___as_method_and_implementation.<locals>.IFooc                 S   r   r  r   r   r   r   r   r	  j	  r   zRInterfaceTests.test___adapt___as_method_and_implementation.<locals>.IFoo.__adapt__c                 S   r   )zThis is a protocolNr   )to_adaptr   r   r   r	  n	  rd  Nr  r   r  r   r   r0  i	  s    
r0  r  r	  z
(to_adapt))r   r  r  r"   r   getSignatureStringr%   r  r0  r   r  r   +test___adapt___as_method_and_implementatione	  s
   z:InterfaceTests.test___adapt___as_method_and_implementationc           	         sN  ddl m} ddl m  G dd d|}G  fddd|}G dd	 d	|}G d
d d|}G dd d|||}G  fddd|}| d|t  |||||fD ]	}| t|j qR|||fD ]}| t|t| qa| t|t| | t|t| | 	|t| | d|t  | t|t| | 	|t| d S )Nr   r  r  c                   @   rz  )z@InterfaceTests.test___adapt__inheritance_and_type.<locals>.IRootRootNr|  r   r   r   r   IRootx	  r"  r  c                       r  )zEInterfaceTests.test___adapt__inheritance_and_type.<locals>.IWithAdaptc                 S   r   r  r   r   r   r   r   r	  |	  r   zOInterfaceTests.test___adapt__inheritance_and_type.<locals>.IWithAdapt.__adapt__Nr  r   r  r   r   
IWithAdapt{	  r  r  c                   @   rz  )zAInterfaceTests.test___adapt__inheritance_and_type.<locals>.IOtherzSecond branchNr|  r   r   r   r   rO  	  r"  rO  c                   @   rz  )zEInterfaceTests.test___adapt__inheritance_and_type.<locals>.IUnrelated	UnrelatedNr|  r   r   r   r   
IUnrelated	  r"  r  c                   @   rz  )zHInterfaceTests.test___adapt__inheritance_and_type.<locals>.IDerivedAdaptzInherits an adaptNr|  r   r   r   r   IDerivedAdapt	  r"  r  c                       s   e Zd ZdZ dd ZdS )zIInterfaceTests.test___adapt__inheritance_and_type.<locals>.IDerived2Adaptz$Overrides an inherited custom adapt.c                 S   r   r  r   r   r   r   r   r	  	  r   zSInterfaceTests.test___adapt__inheritance_and_type.<locals>.IDerived2Adapt.__adapt__N)r   r   r   rB   r	  r   r  r   r   IDerived2Adapt	  s    r  r  r  )
r   r  r  r"   r   r   r   r  r  r  )	r%   r  r  r  rO  r  r  r  r   r   r  r   "test___adapt__inheritance_and_typet	  s&   z1InterfaceTests.test___adapt__inheritance_and_typec                    sP   ddl m} ddl m  G  fddd|}| || d | | d d S )Nr   r  r  c                       s$   e Zd Z dd Z dd ZdS )z<InterfaceTests.test_interfacemethod_is_general.<locals>.IFooc                 S   r   )zReplace an existing methodr  r   r   r   r   r   r  	  s   zEInterfaceTests.test_interfacemethod_is_general.<locals>.IFoo.__call__c                 S   r   r  r   rq   r   r   r   this_is_new	  r   zHInterfaceTests.test_interfacemethod_is_general.<locals>.IFoo.this_is_newN)r   r   r   r  r  r   r  r   r   r0  	  s
    
r0  r  )r   r  r  r"   r  r  r   r  r   test_interfacemethod_is_general	  s
   z.InterfaceTests.test_interfacemethod_is_generalN)7r   r   r   r  r  r  r  r  r%  r*  r0  r<  r>  r@  rE  rN  rU  r\  r`  re  ri  rk  rm  rn  ro  rq  rr  rs  ru  rv  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     sj    		"!+8((	/9#,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 )AttributeTestsTestAttributec                 C   r9   )Nr   rE  )r!   rF  )r%   rF  r   r   r   r;   	  r<   zAttributeTests._getTargetClassc                 C   sJ   |   }t| |_t|}| |d| | |dt d | d S )N-<zope.interface.interface.Attribute object at z.AttributeTests.TestAttribute>)r?   r  ru   reprr   
startswithendswithr   r%   r  rr   r   r   test__repr__w_interface	  s   

z&AttributeTests.test__repr__w_interfacec                 C   s8   |   }t|}| |d| | |d| d S )Nr  z TestAttribute>)r?   r  r   r  r  r  r   r   r   test__repr__wo_interface	  s   
z'AttributeTests.test__repr__wo_interfacec                 C   s.   |   }t| |_t|}| |td  d S )Nz.AttributeTests.TestAttribute)r?   r  ru   r   r"   r   r  r   r   r   test__str__w_interface	  s   
z%AttributeTests.test__str__w_interfacec                 C   s    |   }t|}| |d d S )Nr  )r?   r   r"   r  r   r   r   test__str__wo_interface	  s   z&AttributeTests.test__str__wo_interfaceN)	r   r   r   r=   r;   r  r  r   r  r   r   r   r   r  	  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d Zdd Zdd Zdd ZdS )MethodTests
TestMethodc                 C   r9   )Nr   rO  )r!   rP  )r%   rP  r   r   r   r;   	  r<   zMethodTests._getTargetClassc                 C   sH   |   }| |ji  ddi|_| |jddi |`| |ji  d S rR   )r?   r"   rw  r%   r  r   r   r   test_optional_as_property	  s   
z%MethodTests.test_optional_as_propertyc              
   C   sr   ddl m} |  }z|  W n" |y1 } z| |jd  | |j| j W Y d }~d S d }~ww | d d S )Nr   )BrokenImplementationz*__call__ should raise BrokenImplementation)r  r  r?   r"   ru   r>   r=   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requiredrw  varargskwargs)r?   getSignatureInfor"   rD   )r%   r  infor   r   r   test_getSignatureInfo_bare	  s   z&MethodTests.test_getSignatureInfo_barec                 C   s   |   }| | d d S )Nz())r?   r"   r  r  r   r   r   test_getSignatureString_bare	  rQ   z(MethodTests.test_getSignatureString_barec                 C   s*   |   }dg |_|_| | d d S )NrS   z(foo))r?   r  r	  r"   r  r  r   r   r   'test_getSignatureString_w_only_required
  s   z3MethodTests.test_getSignatureString_w_only_requiredc                 C   s4   |   }dg |_|_ddi|_| | d d S )NrS   r.   z(foo='bar'))r?   r  r	  rw  r"   r  r  r   r   r   "test_getSignatureString_w_optional
  s   
z.MethodTests.test_getSignatureString_w_optionalc                 C   "   |   }d|_| | d d S )Nr   z(*args))r?   r
  r"   r  r  r   r   r   !test_getSignatureString_w_varargs
  r-  z-MethodTests.test_getSignatureString_w_varargsc                 C   r  )Nr   z(**kw))r?   r  r"   r  r  r   r   r    test_getSignatureString_w_kwargs
  r-  z,MethodTests.test_getSignatureString_w_kwargsc                 C   sP   |   }d|_t| |_t|}| |d| | |dt d | d S )Nr   *<zope.interface.interface.Method object atr  z.MethodTests.TestMethod(**kw)>)	r?   r  r  ru   r  r   r  r  r   r  r   r   r   r  
  s   

z#MethodTests.test__repr__w_interfacec                 C   s>   |   }d|_t|}| |d| | |d| d S )Nr   r  z TestMethod(**kw)>)r?   r  r  r   r  r  r  r   r   r   r  #
  s   
z$MethodTests.test__repr__wo_interfacec                 C   s4   |   }d|_t| |_t|}| |td  d S )Nr   z.MethodTests.TestMethod(**kw))r?   r  r  ru   r   r"   r   r  r   r   r   r   ,
  s
   
z"MethodTests.test__str__w_interfacec                 C   s&   |   }d|_t|}| |d d S )Nr   zTestMethod(**kw))r?   r  r   r"   r  r   r   r   r  3
  s   z#MethodTests.test__str__wo_interfaceN)r   r   r   r=   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	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )Test_fromFunctionc                 O      ddl m} ||i |S )Nr   r_  )r!   r`  )r%   r   r   r`  r   r   r   _callFUT<
     zTest_fromFunction._callFUTc                 C      dd }|  |}| | d | | d | |jd  | t| g  | }| t|d g  | t|d g  | |d i  | |d d  | |d	 d  d S )
Nc                   S   r   ra  r   r   r   r   r   _funcB
  rd  z*Test_fromFunction.test_bare.<locals>._funcr  rb  r  r	  rw  r
  r  r  r"   rA   rC   ru   rD   rE   r  r%   r  r  r  r   r   r   	test_bare@
     
zTest_fromFunction.test_barec                 C   sD   ddl m} G dd d|}dd }| j||d}| |j| d S )Nr   rV  c                   @   r   )z0Test_fromFunction.test_w_interface.<locals>.IFooNr   r   r   r   r   r0  T
  r   r0  c                   S   r   ra  r   r   r   r   r   r  W
  rd  z1Test_fromFunction.test_w_interface.<locals>._funcrt   )r!   rW  r  r"   ru   )r%   rW  r0  r  r  r   r   r   test_w_interfaceQ
  s
   z"Test_fromFunction.test_w_interfacec                 C   s*   dd }| j |dd}| | d d S )Nc                   S   r   ra  r   r   r   r   r   r  _
  rd  z,Test_fromFunction.test_w_name.<locals>._funcanotherName)r>   )r  r"   rA   )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   r   ra  r   rS   r   r   r   r  g
  rd  z5Test_fromFunction.test_w_only_required.<locals>._funcr  rS   r	  rw  r
  r  r  r  r"   rD   r  r   r   r   test_w_only_requirede
  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   r   ra  r   r#  r   r   r   r  t
  rd  z0Test_fromFunction.test_w_optional.<locals>._funcr  rS   r	  rw  r
  r  r.   r$  r  r   r   r   test_w_optionalr
  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   r   ra  r   rq   r   r   r   r  
  rd  z5Test_fromFunction.test_w_optional_self.<locals>._funcr$  )imlevelr  r	  rw  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   r   ra  r   r  r   r   r   r  
  rd  z/Test_fromFunction.test_w_varargs.<locals>._funcr  r	  rw  r
  r   r  r$  r  r   r   r   test_w_varargs
     
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                  [   r   ra  r   )r   r   r   r   r  
  rd  z.Test_fromFunction.test_w_kwargs.<locals>._funcr  r	  rw  r
  r  r   r$  r  r   r   r   test_w_kwargs
  r+  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                 _   r   ra  r   )rS   r.   r   r   r   r   r   r  
  rd  z3Test_fromFunction.test_full_spectrum.<locals>._funcr  rS   r.   r	  rw  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   r  )Nr   )
fromMethod)r!   r0  )r%   r   r   r0  r   r   r   r  
  r  zTest_fromMethod._callFUTc                 C   s   G dd d}|  |j}| | d | | d | |jd  | t| g  | }| t|d g  | t|d g  | |d i  | |d d  | |d	 d  d S )
Nc                   @   r   )z)Test_fromMethod.test_no_args.<locals>.Fooc                 S   r   ra  r   rq   r   r   r   r.   
  rd  z-Test_fromMethod.test_no_args.<locals>.Foo.barNrH  r   r   r   r   r   
  r   r   r.   rb  r  r	  rw  r
  r  )	r  r.   r"   rA   rC   ru   rD   rE   r  r%   r   r  r  r   r   r   test_no_args
  s   zTest_fromMethod.test_no_argsc                 C   s   G dd d}|  |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                 _   r   ra  r   )r%   rS   r.   r   r   r   r   r   r.   
  rd  z3Test_fromMethod.test_full_spectrum.<locals>.Foo.barNr-  rH  r   r   r   r   r   
  s    r   r  rS   r.   r	  rw  r/   r
  r   r  r   )r  r.   r  r"   rD   r1  r   r   r   r.  
  s   z"Test_fromMethod.test_full_spectrumc                 C   r  )
Nc                   S   r   ra  r   r   r   r   r   rS   
  rd  z.Test_fromMethod.test_w_non_method.<locals>.foorS   rb  r  r	  rw  r
  r  r  )r%   rS   r  r  r   r   r   test_w_non_method
  r  z!Test_fromMethod.test_w_non_methodN)r   r   r   r  r2  r.  r3  r   r   r   r   r/  
  s
    r/  c                   @   r   )r%  c                 C   s
   g | _ d S r   )r2  rq   r   r   r   r   
  rr   zDummyDependent.__init__c                 C   s   | j | d S r   )r2  r  )r%   originally_changedr   r   r   r6  
  s   zDummyDependent.changedN)r   r   r   r   r6  r   r   r   r   r%  
  s    r%  c                 C   sV   ddl m} t| dd }t| dd }|d ur%t|t|r'||ks)|dd S d S d S )Nr   r  rS   r.   r  )r  r  r#   
isinstancer  )rz   r  rS   r.   r   r   r   r     s   r  c                 C   s4   ddl m} t| dd rt| dd s|dd S d S )Nr   r  rS   r.   r  )r  r  r#   )rz   r  r   r   r   r    s   r  c                   @   r*   )r   c                    s<    | _  fdd|D | _| D ]
\}}t || qd S )Nc                    s   i | ]}|t  |qS r   )r#   )r  keyr   r   r   
<dictcomp>  s    z$_Monkey.__init__.<locals>.<dictcomp>)r   
to_restoreitemssetattr)r%   r   r   r6  rw  r   r7  r   r     s
   z_Monkey.__init__c                 C   s   | S r   r   rq   r   r   r   	__enter__  r|   z_Monkey.__enter__c                 C   s&   | j  D ]\}}t| j|| qd S r   )r9  r:  r;  r   )r%   exc_typeexc_valexc_tbr6  rw  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Zdd Zdd ZdS )TestTypeAnnotationsz*Test using Interfaces in type annotations.c                    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
}| |j|  | f d d S )Nr   OptionalUnionr  c                   @   r   )z+TestTypeAnnotations.test___or__.<locals>.I1Nr   r   r   r   r   r  ,  r   r  c                   @   r   )z+TestTypeAnnotations.test___or__.<locals>.I2Nr   r   r   r   r   r  /  r   r  c                       s&   e Zd ZU  dB ed<  B ed< dS )z*TestTypeAnnotations.test___or__.<locals>.BNr   r   r   r   r   rq  r   r  r  r   r   r  2     
 r  r  typingrC  rE  r   r  r"   rq  r%   rC  rE  r  r  r   rG  r   test___or__&  s   zTestTypeAnnotations.test___or__c                    sz   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
}| |j| | f d d S )Nr   rB  rD  r  c                   @   r   )z,TestTypeAnnotations.test___ror__.<locals>.I1Nr   r   r   r   r   r  ?  r   r  c                   @   r   )z+TestTypeAnnotations.test___ror__.<locals>.ANr   r   r   r   r   r  B  r   r  c                       s&   e Zd ZU dB ed<  B ed< dS )z+TestTypeAnnotations.test___ror__.<locals>.BNr   r   rF  r   r  r  r   r   r  E  rH  r  r  rI  rK  r   rM  r   test___ror__9  s   z TestTypeAnnotations.test___ror__N)r   r   r   rB   rL  rN  r   r   r   r   rA  #  s    rA  )%rB   unittestr!   zopezope.interface.testsr   r   r   r   r   r  ru   rW  r   TestCaser   r+   r7   rm   r   r   r   r   r  r  r  rU  r  r  r  r  r/  r%  r  r  r   rA  r   r   r   r   <module>   sp   !$J
"4k
4% *              '` :	