U
    ¸~Hj-j ã                   @   s¶  d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ eƒ ZG dd„ dej	ƒZ
G d	d
„ d
ej	ƒZG dd„ dej	ƒZG dd„ dej	ƒZG dd„ de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 d/d0„ d0ƒZG d1d2„ d2ej	ƒZdS )3zTest Interface implementation
é    N)ÚCleanUp)ÚMissingSomeAttrs)ÚOptimizationTestMixin)ÚSubclassableMixinc                   @   s   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                  _   s
   t ƒ ‚d S ©N©ÚNotImplementedError©ÚargsÚkw© r   úG/tmp/pip-unpacked-wheel-f7it_kkc/zope/interface/tests/test_interface.pyÚ_check1   s    z,Test_invariant.test_w_single.<locals>._checkc                       s   e Zd Z”” ƒ dS )z)Test_invariant.test_w_single.<locals>.FooN©Ú__name__Ú
__module__Ú__qualname__r   ©r   r
   r   r   ÚFoo4   s   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                  _   s
   t ƒ ‚d S r   r   r   r   r   r   r   >   s    z.Test_invariant.test_w_multiple.<locals>._checkc                  _   s
   t ƒ ‚d S r   r   r   r   r   r   Ú_another_checkA   s    z6Test_invariant.test_w_multiple.<locals>._another_checkc                       s   e Zd Z””ƒ ”” ƒ dS )z+Test_invariant.test_w_multiple.<locals>.FooNr   r   ©r"   r   r
   r   r   r   D   s   r   r   r   r   r   r#   r   Útest_w_multiple:   s    
ÿzTest_invariant.test_w_multipleN)r   r   r   r!   r$   r   r   r   r   r   +   s   r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTest_taggedValuec                    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   R   s   r   r(   r)   ©r   r   r'   r   r   r   r   r&   r   r!   N   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)   r,   ©r(   r+   r*   r   r   r&   r   r$   X   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)   r+   r,   ÚfrobNr   r   r&   r   r   r   g   s   
r   r.   r,   r-   r*   r   r   r&   r   Útest_w_multiple_overwritingc   s    ÿz,Test_taggedValue.test_w_multiple_overwritingN)r   r   r   r!   r$   r/   r   r   r   r   r%   L   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 )ÚElementTestsZ	AnElementc                 C   s   ddl m} |S )Nr   )ÚElement)r   r1   )r    r1   r   r   r   Ú_getTargetClasst   s    zElementTests._getTargetClassNc                 C   s   |d kr| j }|  ¡ |ƒS r   )ÚDEFAULT_NAMEr2   )r    Únamer   r   r   Ú_makeOnex   s    zElementTests._makeOnec                 C   s`   |   ¡ }|  |j| j¡ |  | ¡ | j¡ |  |jd¡ |  | ¡ d¡ |  t| ¡ ƒg ¡ d S )NÚ )	r5   r   r   r3   Ú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)r5   r   r   r8   r<   r   r   r   Útest_ctor_no_doc_space_in_name…   s    
z+ElementTests.test_ctor_no_doc_space_in_namec                 C   s   |   ¡ }|  t|jd¡ d S ©NÚnonesuch)r5   ÚassertRaisesÚKeyErrorÚgetTaggedValuer<   r   r   r   Útest_getTaggedValue_missŠ   s    z%ElementTests.test_getTaggedValue_missc                 C   sB   |   ¡ }|  g t| ¡ ƒ¡ | dd¡ |  dgt| ¡ ƒ¡ d S ©NÚfoor(   )r5   r   r:   ÚgetDirectTaggedValueTagsÚsetTaggedValuer<   r   r   r   Útest_getDirectTaggedValueTagsŽ   s    z*ElementTests.test_getDirectTaggedValueTagsc                 C   s   |   ¡ }|  | d¡d ¡ d S r@   ©r5   r   ÚqueryTaggedValuer<   r   r   r   Útest_queryTaggedValue_miss•   s    z'ElementTests.test_queryTaggedValue_missc                 C   s    |   ¡ }|  | dd¡d¡ d S ©NrA   r(   rK   r<   r   r   r   Ú$test_queryTaggedValue_miss_w_default™   s    z1ElementTests.test_queryTaggedValue_miss_w_defaultc                 C   s   |   ¡ }|  t|jd¡ d S r@   )r5   rB   rC   ÚgetDirectTaggedValuer<   r   r   r   Útest_getDirectTaggedValue_miss�   s    z+ElementTests.test_getDirectTaggedValue_missc                 C   s   |   ¡ }|  | d¡d ¡ d S r@   ©r5   r   ÚqueryDirectTaggedValuer<   r   r   r   Ú test_queryDirectTaggedValue_miss¡   s    z-ElementTests.test_queryDirectTaggedValue_missc                 C   s    |   ¡ }|  | dd¡d¡ d S rN   rR   r<   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 rF   )r5   rI   r   r:   r;   rD   rL   r<   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)Zzope.interface.interfacesrW   Úzope.interface.verifyrY   r5   )r    rW   rY   r=   r   r   r   Útest_verifies²   s    zElementTests.test_verifies)N)r   r   r   r3   r2   r5   r>   r?   rE   rJ   rM   rO   rQ   rT   rU   rV   r[   r   r   r   r   r0   p   s   
r0   c                   @   s0   e Zd Zdd„ ZeZdd„ Zdd„ Zdd„ Zd	S )
ÚGenericSpecificationBaseTestsc                 C   s   ddl m} |S )Nr   )ÚSpecificationBasePy)r   r]   )r    r]   r   r   r   Ú_getFallbackClass¼   s    z/GenericSpecificationBaseTests._getFallbackClassc                 C   s
   |   ¡ ƒ S r   ©r2   ©r    r   r   r   r5   Â   s    z&GenericSpecificationBaseTests._makeOnec              	      sZ   ddl m} ddlm‰  |  ¡ }‡ fdd„}t||d�� |  | tƒ ¡¡ W 5 Q R X d S )Nr   ©Ú	interface©Ú_emptyc                    s   ˆ S r   r   ©Úobjrc   r   r   Ú_providedByÊ   s    zGGenericSpecificationBaseTests.test_providedBy_miss.<locals>._providedBy©Ú
providedBy)	Úzope.interfacerb   Úzope.interface.declarationsrd   r5   Ú_MonkeyÚassertFalseri   Úobject)r    rb   Úsbrg   r   rc   r   Útest_providedBy_missÅ   s    z2GenericSpecificationBaseTests.test_providedBy_missc              	      sZ   ddl m} ddlm‰  |  ¡ }‡ fdd„}t||d�� |  | tƒ ¡¡ W 5 Q R X d S )Nr   ra   rc   c                    s   ˆ S r   r   re   rc   r   r   Ú_implementedByÕ   s    zMGenericSpecificationBaseTests.test_implementedBy_miss.<locals>._implementedBy©ÚimplementedBy)	rj   rb   rk   rd   r5   rl   rm   rs   rn   )r    rb   ro   rq   r   rc   r   Útest_implementedBy_missÐ   s    z5GenericSpecificationBaseTests.test_implementedBy_missN)r   r   r   r^   r2   r5   rp   rt   r   r   r   r   r\   º   s
   r\   c                   @   s   e Zd Zdd„ ZdS )ÚSpecificationBaseTestsc                 C   s   ddl m} |S )Nr   )ÚSpecificationBase)r   rv   )r    rv   r   r   r   r2   ã   s    z&SpecificationBaseTests._getTargetClassN©r   r   r   r2   r   r   r   r   ru   Ü   s   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S )ÚSpecificationBasePyTestsc                 C   s$   |   ¡ }i |_|  | tƒ ¡¡ d S r   ©r5   Ú_impliedrm   ZisOrExtendsrn   ©r    ro   r   r   r   Útest___call___missë   s    z+SpecificationBasePyTests.test___call___missc                 C   s*   |   ¡ }tƒ }|i i|_|  ||ƒ¡ d S r   ©r5   rn   rz   Ú
assertTrue©r    ro   Ztestingr   r   r   Útest___call___hitð   s    
z*SpecificationBasePyTests.test___call___hitc                 C   s$   |   ¡ }i |_|  | tƒ ¡¡ d S r   ry   r{   r   r   r   Útest_isOrExtends_missö   s    z.SpecificationBasePyTests.test_isOrExtends_missc                 C   s*   |   ¡ }tƒ }|i i|_|  ||ƒ¡ d S r   r}   r   r   r   r   Útest_isOrExtends_hitû   s    
z-SpecificationBasePyTests.test_isOrExtends_hitc              	      s`   ddl m} |  ¡ ‰G ‡fdd„dƒ‰ ‡ fdd„}t||d�� |  ˆ tƒ ¡¡ W 5 Q R X d S )Nr   ra   c                       s   e Zd Z” i iZdS )z>SpecificationBasePyTests.test_implementedBy_hit.<locals>._DeclN©r   r   r   rz   r   ©ro   r   r   Ú_Decl  s   r…   c                    s   ˆ ƒ S r   r   re   ©r…   r   r   rq     s    zGSpecificationBasePyTests.test_implementedBy_hit.<locals>._implementedByrr   )rj   rb   r5   rl   r~   rs   rn   )r    rb   rq   r   ©r…   ro   r   Útest_implementedBy_hit  s    z/SpecificationBasePyTests.test_implementedBy_hitc              	      s`   ddl m} |  ¡ ‰G ‡fdd„dƒ‰ ‡ fdd„}t||d�� |  ˆ tƒ ¡¡ W 5 Q R X d S )Nr   ra   c                       s   e Zd Z” i iZdS )z;SpecificationBasePyTests.test_providedBy_hit.<locals>._DeclNrƒ   r   r„   r   r   r…     s   r…   c                    s   ˆ ƒ S r   r   re   r†   r   r   rg     s    zASpecificationBasePyTests.test_providedBy_hit.<locals>._providedByrh   )rj   rb   r5   rl   r~   ri   rn   )r    rb   rg   r   r‡   r   Útest_providedBy_hit  s    z,SpecificationBasePyTests.test_providedBy_hitN)	r   r   r   r|   r€   r�   r‚   rˆ   r‰   r   r   r   r   rx   è   s   rx   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú!NameAndModuleComparisonTestsMixinc                 C   s   |   dd¡S )NÚaÚb)r5   r`   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 5 Q R X |  t¡� t|ƒ dƒ W 5 Q R X ||fD ]}|  ||ƒ ƒt	¡ qÆG dd„ dˆ ƒ}	|  
|||	ƒ ƒ¡ |  ||	ƒ ƒt	¡ G dd„ dƒ}
|  ||
ƒ ƒt	¡ |  t¡� |||
ƒ ƒ W 5 Q R X G dd„ dtƒ}|ˆ _|  |¡� t|ƒ d
ƒ W 5 Q R X |  |¡� t|ƒ dƒ W 5 Q R X ||fD ]H}|  |¡� |||ƒ ƒ W 5 Q R X |  |¡� ||ƒ ƒ W 5 Q R X �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                    s6   zt  | |¡W S  tk
r0   ˆ j}||ƒ‚Y nX d S r   )rn   Ú__getattribute__ÚAttributeErrorÚExc)r    r4   Úexc©ÚRaisesErrorOnMissingr   r   rŽ   0  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   s
   d| _ d S ©NrG   )r   r`   r   r   r   Ú__init__8  s    ziNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnModule.__init__c                 S   s   t ‚d S r   )r�   r`   r   r   r   r   ;  s    zkNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnModule.__module__N)r   r   r   r•   Úpropertyr   r   r   r   ÚRaisesErrorOnModule7  s   r—   c                   @   s   e Zd Zdd„ ZdS )z^NameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnNamec                 S   s
   d| _ d S r”   ©r   r`   r   r   r   r•   @  s    zgNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnName.__init__N©r   r   r   r•   r   r   r   r   ÚRaisesErrorOnName?  s   rš   rG   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   s   dS ©NTr   )r    Úotherr   r   r   Ú__eq__Q  s    zgNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.AllowsAnyComparison.__eq__N©	r   r   r   r�   Ú__lt__Ú__le__Ú__gt__Ú__ge__Ú__ne__r   r   r   r   ÚAllowsAnyComparisonP  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                   @   s   e Zd ZdS )zXNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.MyExceptionNr   r   r   r   r   ÚMyExceptionj  s   r¦   )Úoperatorr�   r   r   r   r   rB   r�   ÚassertIsÚNotImplementedr~   Ú	TypeErrorÚ	Exceptionr�   )r    r4   r§   ÚibÚopÚmethr—   rš   Úclsr¤   r¥   r¦   r   r’   r   Z!__check_NotImplemented_comparison!  sB    

	zCNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparisonc                 C   s   |   d¡ d S )NÚlt©ÚC_NameAndModuleComparisonTestsMixin__check_NotImplemented_comparisonr`   r   r   r   Útest__lt__NotImplementedz  s    z:NameAndModuleComparisonTestsMixin.test__lt__NotImplementedc                 C   s   |   d¡ d S )NÚler±   r`   r   r   r   Útest__le__NotImplemented}  s    z:NameAndModuleComparisonTestsMixin.test__le__NotImplementedc                 C   s   |   d¡ d S )NÚgtr±   r`   r   r   r   Útest__gt__NotImplemented€  s    z:NameAndModuleComparisonTestsMixin.test__gt__NotImplementedc                 C   s   |   d¡ d S )NÚger±   r`   r   r   r   Útest__ge__NotImplementedƒ  s    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   s   t ‚d S r   r   r`   r   r   r   r2   Š  s    z'InterfaceBaseTestsMixin._getTargetClassc                 C   s   ddl m} |S )Nr   )ÚInterfaceBasePy)r   r»   )r    r»   r   r   r   r^   �  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    Zconformr   r   r   Ú_call_conform•  s    z:InterfaceBaseTestsMixin._makeOne.<locals>.IB._call_conformc                    s   ˆ S r   r   ©r    rf   ©Úobject_should_provider   r   ri   ˜  s    z7InterfaceBaseTestsMixin._makeOne.<locals>.IB.providedByN)r   r   r   r¼   ri   r   r¾   r   r   ÚIB”  s   rÀ   r_   )r    r¿   r4   ÚmodulerÀ   r   r¾   r   r5   ’  s    z InterfaceBaseTestsMixin._makeOnec                    s8   |   d¡}tƒ ‰ G ‡ fdd„dƒ}|  ||ƒ ƒˆ ¡ d S )NFc                       s   e Zd Z‡ fdd„ZdS )zUInterfaceBaseTestsMixin.test___call___w___conform___returning_value.<locals>._Adaptedc                    s   ˆ S r   r   ©r    Úiface©Z	conformedr   r   Ú__conform__¢  s    zaInterfaceBaseTestsMixin.test___call___w___conform___returning_value.<locals>._Adapted.__conform__N©r   r   r   rÅ   r   rÄ   r   r   Ú_Adapted¡  s   rÇ   )r5   rn   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)r5   r2   rn   r¨   )r    r¬   Z__traceback_info__ÚadaptedZ	alternater   r   r   Ú7test___call___wo___conform___ob_no_provides_w_alternate§  s
    
zOInterfaceBaseTestsMixin.test___call___wo___conform___ob_no_provides_w_alternatec              	   C   s@   |   d¡}|  t¡�}|tƒ ƒ W 5 Q R X |  dt|jƒ¡ d S )NFzCould not adapt)r5   rB   rª   rn   Ú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Å   )Zexpected_missing)r   Ztest_raisesr5   r`   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   r2   r^   r5   rÈ   rÊ   rÎ   rÏ   r   r   r   r   rº   ‡  s   

rº   c                   @   s   e Zd Zdd„ ZdS )ÚInterfaceBaseTestsc                 C   s   ddl m} |S )Nr   )ÚInterfaceBase)r   rÑ   )r    rÑ   r   r   r   r2   Â  s    z"InterfaceBaseTests._getTargetClassNrw   r   r   r   r   rÐ   »  s   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                   @   s   e Zd Zdd„ ZdS )zSInterfaceBasePyTests.test___call___w___conform___miss_ob_provides.<locals>._Adaptedc                 S   s   d S r   r   rÂ   r   r   r   rÅ   Ð  s    z_InterfaceBasePyTests.test___call___w___conform___miss_ob_provides.<locals>._Adapted.__conform__NrÆ   r   r   r   r   rÇ   Ï  s   rÇ   )r5   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›   )r5   rn   r¨   Ú	__adapt__)r    r¬   rÉ   r   r   r   Útest___adapt___ob_providesÖ  s    
z/InterfaceBasePyTests.test___adapt___ob_providesc              	      sx   ddl m} |  d¡}tƒ }g ‰ ‡ fdd„}dd„ }t|||gd��* |  | |¡|¡ |  ˆ ||fg¡ W 5 Q R X d S )	Nr   ra   Fc                    s   ˆ   | |f¡ d S r   ©Úappend©rÃ   rf   ©Z_missedr   r   Ú
_hook_missá  s    zQInterfaceBasePyTests.test___adapt___ob_no_provides_uses_hooks.<locals>._hook_missc                 S   s   |S r   r   rØ   r   r   r   Ú	_hook_hitä  s    zPInterfaceBasePyTests.test___adapt___ob_no_provides_uses_hooks.<locals>._hook_hit©Úadapter_hooks)rj   rb   r5   rn   rl   r¨   rÔ   r   )r    rb   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º   r^   r2   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   s   ddl m} |S )Nr   )ÚSpecification)r   rà   )r    rà   r   r   r   r2   î  s    z"SpecificationTests._getTargetClassc                 C   s   |t kr|  ¡ ƒ S |  ¡ |ƒS r   )Ú_markerr2   )r    Úbasesr   r   r   r5   ò  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ä   r5   r   Ú	__bases__Úlenrz   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é   )r5   Ú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å   )r5   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   )r5   rí   rB   rC   Úunsubscriberï   r   r   r   Útest_unsubscribe_miss  s    z(SpecificationTests.test_unsubscribe_missc                 C   sZ   |   ¡ }tƒ }| |¡ | |¡ | |¡ |  |j| d¡ | |¡ |  ||j¡ d S rë   )r5   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                   @   s   e Zd ZdS )zYSpecificationTests.test___setBases_subscribes_bases_and_notifies_dependents.<locals>.IFooNr   r   r   r   r   ÚIFoo#  s   r÷   c                   @   s   e Zd ZdS )zYSpecificationTests.test___setBases_subscribes_bases_and_notifies_dependents.<locals>.IBarNr   r   r   r   r   ÚIBar&  s   rø   rì   )
r   rä   r5   rí   rî   ræ   r   Ú_changedrè   Úget)r    rä   ré   rð   r÷   rø   r   r   r   Ú8test___setBases_subscribes_bases_and_notifies_dependents  s    
zKSpecificationTests.test___setBases_subscribes_bases_and_notifies_dependentsc                 C   s\   ddl m} G dd„ d|ƒ}|  ¡ }d|_d|j|< | |¡ |  |j¡ |  ||j¡ d S )Nr   rã   c                   @   s   e Zd ZdS )zJSpecificationTests.test_changed_clears_volatiles_and_implied.<locals>.IFooNr   r   r   r   r   r÷   3  s   r÷   r   r   )r   rä   r5   Ú_v_attrsrz   ÚchangedÚassertIsNonerõ   ©r    rä   r÷   ré   r   r   r   Ú)test_changed_clears_volatiles_and_implied0  s    

z<SpecificationTests.test_changed_clears_volatiles_and_impliedc                 C   sD   ddl m} G dd„ d|ƒ}|  ||g¡}|  t| ¡ ƒ|g¡ d S )Nr   rã   c                   @   s   e Zd ZdS )zCSpecificationTests.test_interfaces_skips_already_seen.<locals>.IFooNr   r   r   r   r   r÷   @  s   r÷   )r   rä   r5   r   r:   Ú
interfacesrÿ   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                   @   s   e Zd ZdS )z<SpecificationTests.test_extends_strict_wo_self.<locals>.IFooNr   r   r   r   r   r÷   I  s   r÷   T©Ústrict)r   rä   r5   rm   Úextendsrÿ   r   r   r   Útest_extends_strict_wo_selfF  s    
z.SpecificationTests.test_extends_strict_wo_selfc                 C   s    |   ¡ }|  |j|dd�¡ d S )NTr  )r5   rm   r  ©r    ré   r   r   r   Útest_extends_strict_w_selfO  s    z-SpecificationTests.test_extends_strict_w_selfc                 C   s    |   ¡ }|  |j|dd�¡ d S )NFr  )r5   r~   r  r  r   r   r   Útest_extends_non_strict_w_selfS  s    z1SpecificationTests.test_extends_non_strict_w_selfc                 C   s.   |   ¡ }tƒ }d|i|_|  | d¡|¡ d S r”   )r5   rn   rü   r¨   rú   )r    ré   rG   r   r   r   Útest_get_hit_w__v_attrsW  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                       s   e Zd Z” dƒZdS )zCSpecificationTests.test_get_hit_from_base_wo__v_attrs.<locals>.IFoorG   N)r   r   r   rG   r   r  r   r   r÷   a  s   r÷   c                       s   e Zd Z” dƒZdS )zCSpecificationTests.test_get_hit_from_base_wo__v_attrs.<locals>.IBarr(   N©r   r   r   r(   r   r  r   r   rø   d  s   rø   rG   r(   )r   r  rä   r5   r¨   rú   )r    rä   r÷   rø   ré   r   r  r   Ú"test_get_hit_from_base_wo__v_attrs]  s    z5SpecificationTests.test_get_hit_from_base_wo__v_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   rr   ©Úimplementerrã   c                   @   s   e Zd ZdS )zTSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.IDefaultViewNameNr   r   r   r   r   ÚIDefaultViewNameu  s   r  c                   @   s   e Zd ZdS )zKSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.ContextNr   r   r   r   r   ÚContextx  s   r  c                   @   s   e Zd ZdS )zLSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.RDBModelNr   r   r   r   r   ÚRDBModel{  s   r  c                   @   s   e Zd ZdS )zJSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.IOtherNr   r   r   r   r   ÚIOther~  s   r  c                   @   s   e Zd ZdS )zMSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.OtherBaseNr   r   r   r   r   Ú	OtherBase�  s   r  c                   @   s   e Zd ZdS )zISpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.ModelNr   r   r   r   r   ÚModel…  s   r  )rk   rs   r  r   rä   r   Z__sro__rn   )
r    rs   r  rä   r  r  r  r  r  r  r   r   r   Ú'test_multiple_inheritance_no_interfacesk  s(    úþz:SpecificationTests.test_multiple_inheritance_no_interfacesN)r   r   r   r2   rá   r5   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dfdd„Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Z d@dA„ Z!dBdC„ Z"dDdE„ Z#dFdG„ Z$dHdI„ Z%dJdK„ Z&dLdM„ Z'dNdO„ Z(dPdQ„ Z)dRdS„ Z*dTdU„ Z+dVdW„ Z,dXdY„ Z-dZd[„ Z.d\d]„ Z/d^d_„ Z0d`da„ Z1dbdc„ Z2ddde„ Z3dS )gÚInterfaceClassTestsc                 C   s   ddl m} |S )Nr   ©ÚInterfaceClass)r   r  )r    r  r   r   r   r2   —  s    z#InterfaceClassTests._getTargetClassÚITestr   Nc                 C   s   |   ¡ |||||ƒS r   r_   )r    r4   râ   Úattrsr8   r   r   r   r   r5   ›  s    zInterfaceClassTests._makeOnec                 C   sN   |   ¡ }|dƒ}|  |jd¡ |  |jd¡ |  |jd¡ |  | ¡ d¡ d S )NÚITestingr6   r   )r2   r   r   r8   ræ   ÚgetBases)r    ÚklassÚinstr   r   r   r>   Ÿ  s    z&InterfaceClassTests.test_ctor_defaultsc                 C   s    |   ¡ }|  t|dtƒ f¡ d S )Nr  )r2   rB   rª   rn   )r    r  r   r   r   Útest_ctor_bad_bases§  s    z'InterfaceClassTests.test_ctor_bad_basesc                 C   sŠ   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}|  ¡ }|d	|d
�}|  |jd	¡ |  |jd¡ |  |jd¡ |  | ¡ | 	¡ ¡ d S )Nr   r  ©ÚfromFunctionc                   S   s   dS ©Ú	DOCSTRINGNr   r   r   r   r   Ú_bar¯  s    zBInterfaceClassTests.test_ctor_w_attrs_attrib_methods.<locals>._barr   r6   ©rG   r(   r  ©r  r   )
r   r  r#  r2   r   r   r8   ræ   ÚnamesÚkeys)r    r  r#  r&  ÚATTRSr  r   r   r   r   Ú test_ctor_w_attrs_attrib_methods«  s    þz4InterfaceClassTests.test_ctor_w_attrs_attrib_methodsc                 C   s^   di i}|   ¡ }|d|d�}|  |jd¡ |  |jd¡ |  |jd¡ |  t| ¡ ƒg ¡ d S )NZ
__locals__r  r(  r6   r   ©r2   r   r   r8   ræ   r:   r)  ©r    r+  r  r   r   r   r   Útest_ctor_attrs_w___locals__½  s    z0InterfaceClassTests.test_ctor_attrs_w___locals__c                 C   s^   di i}|   ¡ }|d|d�}|  |jd¡ |  |jd¡ |  |jd¡ |  t| ¡ ƒg ¡ d S )NÚ__annotations__r  r(  r6   r   r-  r.  r   r   r   Ú!test_ctor_attrs_w___annotations__Æ  s    z5InterfaceClassTests.test_ctor_attrs_w___annotations__c                 C   sj   ddl m} d|i}|  ¡ }|d|d�}|  |jd¡ |  |jd¡ |  |jd¡ |  t| ¡ ƒg ¡ d S )Nr   )Ú_decorator_non_returnZdropmer  r(  r6   r   )	r   r2  r2   r   r   r8   ræ   r:   r)  )r    r2  r+  r  r   r   r   r   Ú'test_ctor_attrs_w__decorator_non_returnÏ  s    z;InterfaceClassTests.test_ctor_attrs_w__decorator_non_returnc                 C   s4   ddl m} dtƒ i}|  ¡ }| j||d|d� d S )Nr   )ÚInvalidInterfaceÚinvalidr  r(  )Úzope.interface.exceptionsr4  rn   r2   rB   )r    r4  r+  r  r   r   r   Ú#test_ctor_attrs_w_invalid_attr_typeÙ  s    
z7InterfaceClassTests.test_ctor_attrs_w_invalid_attr_typec                 C   s0   ddi}|   ¡ }|d|dd�}|  |jd¡ d S )Nr8   ZATTRr  ZEXPLICIT)r  r8   )r2   r   r8   r.  r   r   r   Útest_ctor_w_explicit___doc__ß  s    z0InterfaceClassTests.test_ctor_w_explicit___doc__c                 C   s"   |   ¡ }|  t| ¡ ƒ|g¡ d S r   )r5   r   r:   r  rÂ   r   r   r   Útest_interfaceså  s    z#InterfaceClassTests.test_interfacesc                 C   s.   |   ¡ }| j d|fd�}|  | ¡ |f¡ d S ©NZISub)râ   )r5   r   r  ©r    rÃ   Úsubr   r   r   Útest_getBasesé  s    z!InterfaceClassTests.test_getBasesc                 C   s   |   ¡ }|  | |¡¡ d S r   )r5   r~   ÚisEqualOrExtendedByrÂ   r   r   r   Ú!test_isEqualOrExtendedBy_identityî  s    z5InterfaceClassTests.test_isEqualOrExtendedBy_identityc                 C   s<   |   ¡ }| j d|fd�}|  | |¡¡ |  | |¡¡ d S r:  )r5   r~   r>  rm   r;  r   r   r   Ú!test_isEqualOrExtendedBy_subifaceò  s    z5InterfaceClassTests.test_isEqualOrExtendedBy_subifacec                 C   s8   |   d¡}|   d¡}|  | |¡¡ |  | |¡¡ d S )NZOneZAnother)r5   rm   r>  )r    ÚoneZanotherr   r   r   Ú"test_isEqualOrExtendedBy_unrelatedø  s    

z6InterfaceClassTests.test_isEqualOrExtendedBy_unrelatedc                 C   s€   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}d	|d
dƒi}| jd|d�}| jd|f|d�}|  t|jdd�ƒd	g¡ d S )Nr   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&    s    zFInterfaceClassTests.test_names_w_all_False_ignores_bases.<locals>._barr   r6   r'  r)   ÚBazÚIBaser(  ÚIDerived©râ   r  F©Úall©r   r  r#  r5   r   Úsortedr)  ©r    r  r#  r&  Ú
BASE_ATTRSÚDERIVED_ATTRSÚbaseÚderivedr   r   r   Ú$test_names_w_all_False_ignores_basesþ  s    þ ÿz8InterfaceClassTests.test_names_w_all_False_ignores_basesc                 C   s`   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}| j|d	�}|  t|jd
d�ƒddg¡ d S )Nr   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&    s    z@InterfaceClassTests.test_names_w_all_True_no_bases.<locals>._barr   r6   r'  r(  TrG  r(   rG   rI  ©r    r  r#  r&  r+  rA  r   r   r   Útest_names_w_all_True_no_bases  s    þz2InterfaceClassTests.test_names_w_all_True_no_basesc                 C   s„   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}d	|d
dƒi}| jd|d�}| jd|f|d�}|  t|jdd�ƒdd	dg¡ d S )Nr   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&  "  s    zFInterfaceClassTests.test_names_w_all_True_w_bases_simple.<locals>._barr   r6   r'  r)   rC  rD  r(  rE  rF  TrG  r(   rG   rI  rK  r   r   r   Ú$test_names_w_all_True_w_bases_simple  s    þ ÿ ÿz8InterfaceClassTests.test_names_w_all_True_w_bases_simplec           	      C   s’   ddl m} ddl m} dd„ }dd„ }|dd	ƒ||ƒd
œ}||ƒ|dd	ƒdœ}| jd|d�}| jd|f|d�}|  t|jdd�ƒdddg¡ d S )Nr   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&  6  s    zJInterfaceClassTests.test_names_w_all_True_bases_w_same_names.<locals>._barc                   S   s   dS r$  r   r   r   r   r   Ú_foo9  s    zJInterfaceClassTests.test_names_w_all_True_bases_w_same_names.<locals>._foor   r6   r'  rC  ©rG   r)   rD  r(  rE  rF  TrG  r(   r)   rG   rI  ©	r    r  r#  r&  rT  rL  rM  rN  rO  r   r   r   Ú(test_names_w_all_True_bases_w_same_names2  s"    þþ
ÿÿz<InterfaceClassTests.test_names_w_all_True_bases_w_same_namesc           	      C   sŠ   ddl m} ddl m} dd„ }dd„ }|dd	ƒ||ƒd
œ}||ƒ|dd	ƒdœ}| jd|d�}| jd|f|d�}|  t|ƒdddg¡ d S )Nr   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&  N  s    z/InterfaceClassTests.test___iter__.<locals>._barc                   S   s   dS r$  r   r   r   r   r   rT  Q  s    z/InterfaceClassTests.test___iter__.<locals>._foor   r6   r'  rC  rU  rD  r(  rE  rF  r(   r)   rG   )r   r  r#  r5   r   rJ  rV  r   r   r   Útest___iter__J  s    þþz!InterfaceClassTests.test___iter__c                 C   sˆ   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}d	|d
dƒi}| jd|d�}| jd|f|d�}|  t|jdd�ƒd	|d	 fg¡ d S )Nr   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&  d  s    zUInterfaceClassTests.test_namesAndDescriptions_w_all_False_ignores_bases.<locals>._barr   r6   r'  r)   rC  rD  r(  rE  rF  FrG  ©r   r  r#  r5   r   rJ  ÚnamesAndDescriptionsrK  r   r   r   Ú3test_namesAndDescriptions_w_all_False_ignores_bases`  s     þ ÿ
ÿÿzGInterfaceClassTests.test_namesAndDescriptions_w_all_False_ignores_basesc                 C   sp   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}| j|d	�}|  t|jd
d�ƒd|d fd|d fg¡ d S )Nr   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&  z  s    zOInterfaceClassTests.test_namesAndDescriptions_w_all_True_no_bases.<locals>._barr   r6   r'  r(  FrG  r(   rG   rY  rQ  r   r   r   Ú-test_namesAndDescriptions_w_all_True_no_basesv  s    þ

þÿzAInterfaceClassTests.test_namesAndDescriptions_w_all_True_no_basesc                 C   sœ   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}d	|d
dƒi}| jd|d�}| jd|f|d�}|  t|jdd�ƒd|d fd	|d	 fd|d fg¡ d S )Nr   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&  �  s    zMInterfaceClassTests.test_namesAndDescriptions_w_all_True_simple.<locals>._barr   r6   r'  r)   rC  rD  r(  rE  rF  TrG  r(   rG   rY  rK  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   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&  ¥  s    zYInterfaceClassTests.test_namesAndDescriptions_w_all_True_bases_w_same_names.<locals>._barc                   S   s   dS r$  r   r   r   r   r   rT  ¨  s    zYInterfaceClassTests.test_namesAndDescriptions_w_all_True_bases_w_same_names.<locals>._foor   r6   r'  rC  rU  rD  r(  rE  rF  TrG  r(   r)   rG   rY  rV  r   r   r   Ú7test_namesAndDescriptions_w_all_True_bases_w_same_names¡  s&    þþ


ýÿzKInterfaceClassTests.test_namesAndDescriptions_w_all_True_bases_w_same_namesc                 C   s   |   ¡ }|  t|jd¡ d S r@   )r5   rB   rC   ÚgetDescriptionFor©r    rA  r   r   r   Útest_getDescriptionFor_miss½  s    z/InterfaceClassTests.test_getDescriptionFor_missc                 C   sp   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}| j|d	�}|  | d
¡|d
 ¡ |  | d¡|d ¡ d S )Nr   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&  Å  s    z<InterfaceClassTests.test_getDescriptionFor_hit.<locals>._barr   r6   r'  r(  rG   r(   )r   r  r#  r5   r   r_  rQ  r   r   r   Útest_getDescriptionFor_hitÁ  s    þz.InterfaceClassTests.test_getDescriptionFor_hitc                    s$   |   ¡ ‰ ‡ fdd„}|  t|¡ d S )Nc                      s   ˆ d S r@   r   r   ©rA  r   r   Ú_testÓ  s    z8InterfaceClassTests.test___getitem___miss.<locals>._test)r5   rB   rC   )r    rd  r   rc  r   Útest___getitem___missÐ  s    z)InterfaceClassTests.test___getitem___missc                 C   sl   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}| j|d	�}|  |d
 |d
 ¡ |  |d |d ¡ d S )Nr   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&  Ü  s    z6InterfaceClassTests.test___getitem___hit.<locals>._barr   r6   r'  r(  rG   r(   )r   r  r#  r5   r   rQ  r   r   r   Útest___getitem___hitØ  s    þz(InterfaceClassTests.test___getitem___hitc                 C   s   |   ¡ }|  d|¡ d S r@   )r5   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   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&  ï  s    z7InterfaceClassTests.test___contains___hit.<locals>._barr   r6   r'  r(  rG   r(   )r   r  r#  r5   rË   rQ  r   r   r   Útest___contains___hitë  s    þz)InterfaceClassTests.test___contains___hitc                 C   s   |   ¡ }|  | d¡d ¡ d S r@   )r5   r   Údirectr`  r   r   r   Útest_direct_missú  s    z$InterfaceClassTests.test_direct_missc           	      C   s²   ddl m} ddl m} dd„ }dd„ }|dd	ƒ||ƒd
œ}||ƒ|dd	ƒdœ}| jd|d�}| jd|f|d�}|  | d¡|d ¡ |  | d¡|d ¡ |  | d¡d ¡ d S )Nr   r  r"  c                   S   s   dS r$  r   r   r   r   r   r&    s    zBInterfaceClassTests.test_direct_hit_local_miss_bases.<locals>._barc                   S   s   dS r$  r   r   r   r   r   rT    s    zBInterfaceClassTests.test_direct_hit_local_miss_bases.<locals>._foor   r6   r'  rC  rU  rD  r(  rE  rF  rG   r)   r(   )r   r  r#  r5   r   ri  rV  r   r   r   Ú test_direct_hit_local_miss_basesþ  s    þþz4InterfaceClassTests.test_direct_hit_local_miss_basesc                 C   s   |   ¡ }|  | d¡d ¡ d S r@   )r5   r   ÚqueryDescriptionForrÂ   r   r   r   Útest_queryDescriptionFor_miss  s    z1InterfaceClassTests.test_queryDescriptionFor_missc                 C   s@   ddl m} d|ddƒi}| j|d�}|  | d¡|d ¡ d S )Nr   r  ÚattrZTitleÚDescriptionr(  )rj   r  r5   r   rl  )r    r  r+  rÃ   r   r   r   Útest_queryDescriptionFor_hit  s    z0InterfaceClassTests.test_queryDescriptionFor_hitc                    sV   g ‰ ‡ fdd„}|   ¡ }tƒ }| d|g¡ |  | |¡d ¡ |  ˆ |fi fg¡ d S )Nc                     s   ˆ   | |f¡ dS r›   rÖ   r   ©Z_called_withr   r   Ú	_passable#  s    zCInterfaceClassTests.test_validateInvariants_pass.<locals>._passabler   )r5   rn   rI   r   ÚvalidateInvariants)r    rr  rÃ   rf   r   rq  r   Útest_validateInvariants_pass   s    z0InterfaceClassTests.test_validateInvariants_passc                    sˆ   ddl m‰  g ‰‡fdd„}g ‰‡ ‡fdd„}|  ¡ }tƒ }| d||g¡ |  ˆ |j|¡ |  ˆ|fi fg¡ |  ˆ|fi fg¡ d S )Nr   ©ÚInvalidc                     s   ˆ   | |f¡ dS r›   rÖ   r   ©Ú_passable_called_withr   r   rr  1  s    zTInterfaceClassTests.test_validateInvariants_fail_wo_errors_passed.<locals>._passablec                     s   ˆ  | |f¡ ˆ ‚d S r   rÖ   r   ©rv  Ú_fail_called_withr   r   Ú_fail7  s    zPInterfaceClassTests.test_validateInvariants_fail_wo_errors_passed.<locals>._failr   ©r6  rv  r5   rn   rI   rB   rs  r   )r    rr  r{  rÃ   rf   r   ©rv  rz  rx  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   ru  c                     s   ˆ  | |f¡ ˆ ‚d S r   rÖ   r   ry  r   r   r{  G  s    zOInterfaceClassTests.test_validateInvariants_fail_w_errors_passed.<locals>._failr   rì   ©
r6  rv  r5   rn   rI   rB   rs  r   rç   ÚassertIsInstance)r    Ú_errorsr{  rÃ   rf   r   ry  r   Ú,test_validateInvariants_fail_w_errors_passedB  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   ru  c                     s   ˆ   | |f¡ dS r›   rÖ   r   rw  r   r   rr  W  s    z\InterfaceClassTests.test_validateInvariants_fail_in_base_wo_errors_passed.<locals>._passablec                     s   ˆ  | |f¡ ˆ ‚d S r   rÖ   r   ry  r   r   r{  ]  s    zXInterfaceClassTests.test_validateInvariants_fail_in_base_wo_errors_passed.<locals>._failrD  rE  r   r|  )r    rr  r{  rN  rO  rf   r   r}  r   Ú5test_validateInvariants_fail_in_base_wo_errors_passedS  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   ru  c                     s   ˆ   | |f¡ dS r›   rÖ   r   rw  r   r   rr  o  s    z[InterfaceClassTests.test_validateInvariants_fail_in_base_w_errors_passed.<locals>._passablec                     s   ˆ  | |f¡ ˆ ‚d S r   rÖ   r   ry  r   r   r{  u  s    zWInterfaceClassTests.test_validateInvariants_fail_in_base_w_errors_passed.<locals>._failrD  rE  r   rì   r  )r    r�  rr  r{  rN  rO  rf   r   r}  r   Ú4test_validateInvariants_fail_in_base_w_errors_passedj  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                     s   ˆ   | |f¡ dS r›   rÖ   r   rw  r   r   rr  ‡  s    zbInterfaceClassTests.test_validateInvariants_inherited_not_called_multiple_times.<locals>._passablerD  r   rE  rì   )rn   r5   rI   rs  r   rç   )r    rr  rf   rN  rO  r   rw  r   Ú;test_validateInvariants_inherited_not_called_multiple_times„  s    

zOInterfaceClassTests.test_validateInvariants_inherited_not_called_multiple_timesc                 C   s   |   d¡}|  | ¡ d¡ d S )NZPickleMe)r5   r   Ú
__reduce__rÂ   r   r   r   Útest___reduce__’  s    
z#InterfaceClassTests.test___reduce__c                 C   s"   |   d¡}|  t|ƒtdƒ¡ d S )NÚHashMe)rˆ  z#zope.interface.tests.test_interface)r5   r   ÚhashrÂ   r   r   r   Útest___hash___normal–  s
    
þz(InterfaceClassTests.test___hash___normalc              	   C   s<   G dd„ d|   ¡ ƒ}|ƒ }|  t¡� t|ƒ W 5 Q R X d S )Nc                   @   s   e Zd Zdd„ ZdS )zIInterfaceClassTests.test___hash___missing_required_attrs.<locals>.Derivedc                 S   s   d S r   r   r`   r   r   r   r•      s    zRInterfaceClassTests.test___hash___missing_required_attrs.<locals>.Derived.__init__Nr™   r   r   r   r   ÚDerivedŸ  s   r‹  )r2   rB   r�   r‰  )r    r‹  rO  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   )r5   Ú
assertLessÚassertLessEqualÚassertNotEqualrm   ÚassertGreaterEqualÚassertGreaterrÂ   r   r   r   Útest_comparison_with_None§  s    z-InterfaceClassTests.test_comparison_with_Nonec                 C   sX   |   ¡ }|  ||k ¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||k¡ d S r   )r5   rm   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)r5   r�  rm   rŽ  r�  r�  r‘  )r    rA  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 5 Q R X ||_|  ||¡ |  t|ƒ|¡ |  ˆ ¡� |dƒ W 5 Q R X d S )Nc                   @   s   e Zd ZdS )zDInterfaceClassTests.test_assignment_to__class__.<locals>.MyExceptionNr   r   r   r   r   r¦   ×  s   r¦   c                       s   e Zd Z‡ fdd„ZdS )zIInterfaceClassTests.test_assignment_to__class__.<locals>.MyInterfaceClassc                    s   ˆ |ƒ‚d S r   r   )r    Útarget©r¦   r   r   Ú__call__Û  s    zRInterfaceClassTests.test_assignment_to__class__.<locals>.MyInterfaceClass.__call__N©r   r   r   r˜  r   r—  r   r   ÚMyInterfaceClassÚ  s   rš  r”  rì   )	r«   r2   r5   r€  r¨   ÚtyperB   rª   Ú	__class__)r    rš  r÷   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 5 Q R X ||_|  |dƒd¡ d S )Nr   rã   c                   @   s   e Zd Zdd„ ZdS )zJInterfaceClassTests.test_assignment_to__class__2.<locals>.MyInterfaceClassc                 W   s   |S r   r   )r    r   r   r   r   r˜  ó  s    zSInterfaceClassTests.test_assignment_to__class__2.<locals>.MyInterfaceClass.__call__Nr™  r   r   r   r   rš  ò  s   rš  r÷   rì   )rì   c                   @   s   e Zd ZdS )z>InterfaceClassTests.test_assignment_to__class__2.<locals>.IBarNr   r   r   r   r   rø   ù  s   rø   c                   @   s   e Zd ZdS )z?InterfaceClassTests.test_assignment_to__class__2.<locals>.ISpamNr   r   r   r   r   ÚISpamþ  s   rž  )rj   rä   r2   r   rB   rª   rœ  )r    rä   rš  r÷   rø   rž  r   r   r   Útest_assignment_to__class__2ì  s    z0InterfaceClassTests.test_assignment_to__class__2c              	   C   s(   |   ¡ }|  t¡� d|_W 5 Q R X d S )Nzdifferent.module)r5   rB   r�   r   )r    r   r   r   r   Útest__module__is_readonly  s    z-InterfaceClassTests.test__module__is_readonly)r  r   NNN)4r   r   r   r2   r5   r>   r!  r,  r/  r1  r3  r7  r8  r9  r=  r?  r@  rB  rP  rR  rS  rW  rX  r[  r\  r]  r^  ra  rb  re  rf  rg  rh  rj  rk  rm  rp  rt  r~  r‚  rƒ  r„  r…  r‡  rŠ  rŒ  r’  r“  r•  r�  rŸ  r   r   r   r   r   r  •  sf     ÿ
		

r  c                   @   s¬  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Z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   r  rã   c                       s   e Zd Z” dƒZdS )z<InterfaceTests.test_attributes_link_to_interface.<locals>.I1úMy attrN)r   r   r   rn  r   r  r   r   ÚI1  s   r£  rn  )rj   r  rä   r¨   rb   ©r    rä   r£  r   r  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                   @   s   e Zd Zdd„ ZdS )z9InterfaceTests.test_methods_link_to_interface.<locals>.I1c                 S   s   dS ©zA methodNr   )rG   r(   Zbingor   r   r   Úmethod  s    z@InterfaceTests.test_methods_link_to_interface.<locals>.I1.methodN©r   r   r   r§  r   r   r   r   r£    s   r£  r§  )rj   rä   r¨   rb   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ã   rr   rh   c                   @   s   e Zd Zdd„ Zdd„ ZdS )z<InterfaceTests.test_classImplements_simple.<locals>.ICurrentc                 S   s   dS ©Z	docstringNr   ©r‹   rŒ   r   r   r   Úmethod1'  s    zDInterfaceTests.test_classImplements_simple.<locals>.ICurrent.method1c                 S   s   dS rª  r   r«  r   r   r   Úmethod2*  s    zDInterfaceTests.test_classImplements_simple.<locals>.ICurrent.method2N)r   r   r   r¬  r­  r   r   r   r   ÚICurrent&  s   r®  c                   @   s   e Zd ZdS )z:InterfaceTests.test_classImplements_simple.<locals>.IOtherNr   r   r   r   r   r  -  s   r  c                       s    e Zd Z” Zdd„ Zdd„ ZdS )z;InterfaceTests.test_classImplements_simple.<locals>.Currentc                 S   s
   t ƒ ‚d S r   r   ©r    r‹   rŒ   r   r   r   r¬  3  s    zCInterfaceTests.test_classImplements_simple.<locals>.Current.method1c                 S   s
   t ƒ ‚d S r   r   r¯  r   r   r   r­  6  s    zCInterfaceTests.test_classImplements_simple.<locals>.Current.method2N)r   r   r   Ú__implemented__r¬  r­  r   ©r®  r   r   ÚCurrent0  s   r²  )	rj   rä   rs   ri   r~   rm   r   rË   rõ   )r    rä   rs   ri   r  r²  Úcurrentr   r±  r   Útest_classImplements_simple!  s    	z*InterfaceTests.test_classImplements_simplec                    sÀ   ddl m} ddl m} ddl m} G dd„ d|ƒ‰ G dd„ dˆ ƒ}G ‡ fd	d
„d
ƒ}|ƒ }|  ˆ  |¡¡ |  | |¡¡ |  ˆ ||ƒ¡ |  |||ƒ¡ |  ˆ ||ƒ¡ |  |||ƒ¡ d S )Nr   rã   rr   rh   c                   @   s   e Zd Zdd„ ZdS )zCInterfaceTests.test_classImplements_base_not_derived.<locals>.IBasec                   S   s   dS rª  r   r   r   r   r   r§  I  s    zJInterfaceTests.test_classImplements_base_not_derived.<locals>.IBase.methodNr¨  r   r   r   r   rD  H  s   rD  c                   @   s   e Zd ZdS )zFInterfaceTests.test_classImplements_base_not_derived.<locals>.IDerivedNr   r   r   r   r   rE  L  s   rE  c                       s   e Zd Z” Zdd„ ZdS )zEInterfaceTests.test_classImplements_base_not_derived.<locals>.Currentc                 S   s
   t ƒ ‚d S r   r   r`   r   r   r   r§  R  s    zLInterfaceTests.test_classImplements_base_not_derived.<locals>.Current.methodN©r   r   r   r°  r§  r   ©rD  r   r   r²  O  s   r²  ©rj   rä   rs   ri   r~   rm   rË   rõ   )r    rä   rs   ri   rE  r²  r³  r   r¶  r   Ú%test_classImplements_base_not_derivedC  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ã   rr   rh   c                   @   s   e Zd Zdd„ ZdS )zCInterfaceTests.test_classImplements_base_and_derived.<locals>.IBasec                   S   s   dS rª  r   r   r   r   r   r§  d  s    zJInterfaceTests.test_classImplements_base_and_derived.<locals>.IBase.methodNr¨  r   r   r   r   rD  c  s   rD  c                   @   s   e Zd ZdS )zFInterfaceTests.test_classImplements_base_and_derived.<locals>.IDerivedNr   r   r   r   r   rE  g  s   rE  c                       s   e Zd Z” Zdd„ ZdS )zEInterfaceTests.test_classImplements_base_and_derived.<locals>.Currentc                 S   s
   t ƒ ‚d S r   r   r`   r   r   r   r§  m  s    zLInterfaceTests.test_classImplements_base_and_derived.<locals>.Current.methodNrµ  r   ©rE  r   r   r²  j  s   r²  )rj   rä   rs   ri   r~   rõ   rË   Z	flattened)r    rä   rs   ri   rD  r²  r³  r   r¹  r   Ú%test_classImplements_base_and_derived^  s    z4InterfaceTests.test_classImplements_base_and_derivedc                    sä   ddl m} ddl m} ddl m} G dd„ d|ƒ‰ G dd„ dˆ ƒ‰G ‡ fd	d
„d
ƒ}G ‡fdd„dƒ}G dd„ d||ƒ}|ƒ }|  ˆ  |¡¡ |  ˆ |¡¡ |  ˆ ||ƒ¡ |  ˆ||ƒ¡ |  ˆ ||ƒ¡ |  ˆ||ƒ¡ d S )Nr   rã   rr   rh   c                   @   s   e Zd Zdd„ ZdS )z;InterfaceTests.test_classImplements_multiple.<locals>.ILeftc                   S   s   dS rª  r   r   r   r   r   r§  �  s    zBInterfaceTests.test_classImplements_multiple.<locals>.ILeft.methodNr¨  r   r   r   r   ÚILeft€  s   r»  c                   @   s   e Zd ZdS )z<InterfaceTests.test_classImplements_multiple.<locals>.IRightNr   r   r   r   r   ÚIRight„  s   r¼  c                       s   e Zd Z” Zdd„ ZdS )z:InterfaceTests.test_classImplements_multiple.<locals>.Leftc                 S   s
   t ƒ ‚d S r   r   r`   r   r   r   r§  Š  s    zAInterfaceTests.test_classImplements_multiple.<locals>.Left.methodNrµ  r   ©r»  r   r   ÚLeft‡  s   r¾  c                       s   e Zd Z” ZdS )z;InterfaceTests.test_classImplements_multiple.<locals>.RightN©r   r   r   r°  r   ©r¼  r   r   ÚRight�  s   rÁ  c                   @   s   e Zd ZdS )z:InterfaceTests.test_classImplements_multiple.<locals>.AmbiNr   r   r   r   r   ÚAmbi�  s   rÂ  )rj   rä   rs   ri   r~   rË   )r    rä   rs   ri   r¾  rÁ  rÂ  Z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ã   rr   rh   c                   @   s   e Zd Zdd„ ZdS )zPInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.ILeftc                   S   s   dS rª  r   r   r   r   r   r§  £  s    zWInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.ILeft.methodNr¨  r   r   r   r   r»  ¡  s   r»  c                   @   s   e Zd ZdS )zQInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.IRightNr   r   r   r   r   r¼  ¦  s   r¼  c                   @   s   e Zd ZdS )zQInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.IOtherNr   r   r   r   r   r  ©  s   r  c                       s   e Zd Z” Zdd„ ZdS )zOInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.Leftc                 S   s
   t ƒ ‚d S r   r   r`   r   r   r   r§  ¯  s    zVInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.Left.methodNrµ  r   r½  r   r   r¾  ¬  s   r¾  c                       s   e Zd Z” ZdS )zPInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.RightNr¿  r   rÀ  r   r   rÁ  ²  s   rÁ  c                       s   e Zd Z” ZdS )zPInterfaceTests.test_classImplements_multiple_w_explict_implements.<locals>.OtherNr¿  r   )r  r   r   ÚOtherµ  s   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¸  s   rÅ  r·  )r    rä   rs   ri   rÁ  rÅ  Úmixedr   )r»  r  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)rj   rä   rœ  r~   r  rm   )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   r  rã   )ÚverifyClassc                       s   e Zd Z” dƒZdd„ ZdS )z1InterfaceTests.test_verifyClass.<locals>.ICheckMer¢  c                   S   s   dS r¦  r   r   r   r   r   r§  à  s    z8InterfaceTests.test_verifyClass.<locals>.ICheckMe.methodN©r   r   r   rn  r§  r   r  r   r   ÚICheckMeÝ  s   rÐ  c                       s   e Zd Z” ZdZdd„ ZdS )z0InterfaceTests.test_verifyClass.<locals>.CheckMeÚvaluec                 S   s
   t ƒ ‚d S r   r   r`   r   r   r   r§  ç  s    z7InterfaceTests.test_verifyClass.<locals>.CheckMe.methodN©r   r   r   r°  rn  r§  r   ©rÐ  r   r   ÚCheckMeã  s   rÔ  )rj   r  rä   rZ   rÎ  r~   )r    rä   rÎ  rÔ  r   ©r  rÐ  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   r  rã   rX   c                       s   e Zd Z” dƒZdd„ ZdS )z2InterfaceTests.test_verifyObject.<locals>.ICheckMer¢  c                   S   s   dS r¦  r   r   r   r   r   r§  ô  s    z9InterfaceTests.test_verifyObject.<locals>.ICheckMe.methodNrÏ  r   r  r   r   rÐ  ñ  s   rÐ  c                       s   e Zd Z” ZdZdd„ ZdS )z1InterfaceTests.test_verifyObject.<locals>.CheckMerÑ  c                 S   s
   t ƒ ‚d S r   r   r`   r   r   r   r§  û  s    z8InterfaceTests.test_verifyObject.<locals>.CheckMe.methodNrÒ  r   rÓ  r   r   rÔ  ÷  s   rÔ  )rj   r  rä   rZ   rY   r~   )r    rä   rY   rÔ  Z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                   @   s   e Zd ZdS )zLInterfaceTests.test_interface_object_provides_Interface.<locals>.AnInterfaceNr   r   r   r   r   ÚAnInterface  s   rØ  )rj   rä   r~   ri   )r    rä   rØ  r   r   r   Ú(test_interface_object_provides_Interface  s    z7InterfaceTests.test_interface_object_provides_Interfacec                    sH   ddl m‰  ddl m} G ‡ fdd„d|ƒ}|  t| ¡ ƒddg¡ d S )Nr   r  rã   c                       s   e Zd Z” dƒZdd„ ZdS )z1InterfaceTests.test_names_simple.<locals>.ISimpler¢  c                   S   s   dS rª  r   r   r   r   r   r§    s    z8InterfaceTests.test_names_simple.<locals>.ISimple.methodNrÏ  r   r  r   r   ÚISimple  s   rÚ  rn  r§  ©rj   r  rä   r   rJ  r)  ©r    rä   rÚ  r   r  r   Útest_names_simple
  s    z InterfaceTests.test_names_simplec                    s~   ddl m‰  ddl m} G ‡ fdd„d|ƒ}G ‡ fdd„d|ƒ}|  t| ¡ ƒdd	d
g¡ |  t|jdd�ƒddd	d
g¡ d S )Nr   r  rã   c                       s   e Zd Z” dƒZdd„ ZdS )z0InterfaceTests.test_names_derived.<locals>.IBaser¢  c                   S   s   dS rª  r   r   r   r   r   r§    s    z7InterfaceTests.test_names_derived.<locals>.IBase.methodNrÏ  r   r  r   r   rD    s   rD  c                       s$   e Zd Z” dƒZdd„ Zdd„ ZdS )z3InterfaceTests.test_names_derived.<locals>.IDerivedúMy attr2c                   S   s   dS rª  r   r   r   r   r   r§  #  s    z:InterfaceTests.test_names_derived.<locals>.IDerived.methodc                   S   s   dS rª  r   r   r   r   r   r­  &  s    z;InterfaceTests.test_names_derived.<locals>.IDerived.method2N©r   r   r   Úattr2r§  r­  r   r  r   r   rE     s   rE  rà  r§  r­  TrG  rn  rÛ  ©r    rä   rD  rE  r   r  r   Útest_names_derived  s    	ÿ
ÿz!InterfaceTests.test_names_derivedc                    s   ddl m‰  ddl m} ddlm} G ‡ fdd„d|ƒ}t| ¡ ƒ}|  t|ƒd¡ |  |d d d¡ |  	|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   r  rã   ©ÚMethodc                       s   e Zd Z” dƒZdd„ ZdS )z@InterfaceTests.test_namesAndDescriptions_simple.<locals>.ISimpler¢  c                   S   s   dS ©ú	My methodNr   r   r   r   r   r§  6  s    zGInterfaceTests.test_namesAndDescriptions_simple.<locals>.ISimple.methodNrÏ  r   r  r   r   rÚ  3  s   rÚ  rå   rn  rì   r¢  r§  ræ  ©rj   r  rä   r   rä  rJ  rZ  r   rç   r€  r   r8   )r    rä   rä  rÚ  Úname_valuesr   r  r   Ú test_namesAndDescriptions_simple.  s    z/InterfaceTests.test_namesAndDescriptions_simplec                    sØ  ddl m‰  ddl m} ddlm} G ‡ fdd„d|ƒ}G ‡ fdd„d|ƒ}t| ¡ ƒ}|  t|ƒd	¡ |  |d d d
¡ |  	|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   r  rã   rã  c                       s   e Zd Z” dƒZdd„ ZdS )z?InterfaceTests.test_namesAndDescriptions_derived.<locals>.IBaser¢  c                   S   s   dS rå  r   r   r   r   r   r§  M  s    zFInterfaceTests.test_namesAndDescriptions_derived.<locals>.IBase.methodNrÏ  r   r  r   r   rD  J  s   rD  c                       s$   e Zd Z” dƒZdd„ Zdd„ ZdS )zBInterfaceTests.test_namesAndDescriptions_derived.<locals>.IDerivedrÞ  c                   S   s   dS ©úMy method, overriddenNr   r   r   r   r   r§  S  s    zIInterfaceTests.test_namesAndDescriptions_derived.<locals>.IDerived.methodc                   S   s   dS ©ú
My method2Nr   r   r   r   r   r­  V  s    zJInterfaceTests.test_namesAndDescriptions_derived.<locals>.IDerived.method2Nrß  r   r  r   r   rE  P  s   rE  é   rà  rì   rÞ  r§  rë  rå   r­  rí  TrG  é   rn  r¢  rç  )r    rä   rä  rD  rE  rè  r   r  r   Ú!test_namesAndDescriptions_derivedE  sJ    	z0InterfaceTests.test_namesAndDescriptions_derivedc                 C   s0   ddl m} G dd„ d|ƒ}|  t|jd¡ d S )Nr   rã   c                   @   s   e Zd ZdS )zIInterfaceTests.test_getDescriptionFor_nonesuch_no_default.<locals>.IEmptyNr   r   r   r   r   ÚIEmpty€  s   rñ  rA   )rj   rä   rB   rC   r_  ©r    rä   rñ  r   r   r   Ú*test_getDescriptionFor_nonesuch_no_default}  s    z9InterfaceTests.test_getDescriptionFor_nonesuch_no_defaultc                    s    ddl m‰  ddl m} ddlm} G ‡ fdd„d|ƒ}| d¡}|  |ˆ ¡ |  |jd¡ |  |j	d¡ | d	¡}|  ||¡ |  |jd	¡ |  |j	d
¡ d S )Nr   r  rã   rã  c                       s   e Zd Z” dƒZdd„ ZdS )z=InterfaceTests.test_getDescriptionFor_simple.<locals>.ISimpler¢  c                   S   s   dS rå  r   r   r   r   r   r§  �  s    zDInterfaceTests.test_getDescriptionFor_simple.<locals>.ISimple.methodNrÏ  r   r  r   r   rÚ  Š  s   rÚ  rn  r¢  r§  ræ  ©
rj   r  rä   r   rä  r_  r€  r   r   r8   ©r    rä   rä  rÚ  Úa_descÚm_descr   r  r   Útest_getDescriptionFor_simple…  s    

z,InterfaceTests.test_getDescriptionFor_simplec           	         s  ddl m‰  ddl m} ddlm} G ‡ fdd„d|ƒ}G ‡ fdd„d|ƒ}| d	¡}|  |ˆ ¡ |  |jd	¡ |  |j	d
¡ | d¡}|  ||¡ |  |jd¡ |  |j	d¡ | d¡}|  |ˆ ¡ |  |jd¡ |  |j	d¡ | d¡}|  ||¡ |  |jd¡ |  |j	d¡ d S )Nr   r  rã   rã  c                       s   e Zd Z” dƒZdd„ ZdS )z<InterfaceTests.test_getDescriptionFor_derived.<locals>.IBaser¢  c                   S   s   dS rå  r   r   r   r   r   r§  ¢  s    zCInterfaceTests.test_getDescriptionFor_derived.<locals>.IBase.methodNrÏ  r   r  r   r   rD  Ÿ  s   rD  c                       s$   e Zd Z” dƒZdd„ Zdd„ ZdS )z?InterfaceTests.test_getDescriptionFor_derived.<locals>.IDerivedrÞ  c                   S   s   dS rê  r   r   r   r   r   r§  ¨  s    zFInterfaceTests.test_getDescriptionFor_derived.<locals>.IDerived.methodc                   S   s   dS rì  r   r   r   r   r   r­  «  s    zGInterfaceTests.test_getDescriptionFor_derived.<locals>.IDerived.method2Nrß  r   r  r   r   rE  ¥  s   rE  rn  r¢  r§  rë  rà  rÞ  r­  rí  rô  ©	r    rä   rä  rD  rE  rö  r÷  Za2_descZm2_descr   r  r   Útest_getDescriptionFor_derivedš  s*    	



z-InterfaceTests.test_getDescriptionFor_derivedc                 C   s0   ddl m} G dd„ d|ƒ}|  t|jd¡ d S )Nr   rã   c                   @   s   e Zd ZdS )z7InterfaceTests.test___getitem__nonesuch.<locals>.IEmptyNr   r   r   r   r   rñ  Å  s   rñ  rA   )rj   rä   rB   rC   Ú__getitem__rò  r   r   r   Útest___getitem__nonesuchÂ  s    z'InterfaceTests.test___getitem__nonesuchc                    sœ   ddl m‰  ddl m} ddlm} G ‡ fdd„d|ƒ}|d }|  |ˆ ¡ |  |jd¡ |  |jd¡ |d	 }|  ||¡ |  |jd	¡ |  |jd
¡ d S )Nr   r  rã   rã  c                       s   e Zd Z” dƒZdd„ ZdS )z6InterfaceTests.test___getitem__simple.<locals>.ISimpler¢  c                   S   s   dS rå  r   r   r   r   r   r§  Ò  s    z=InterfaceTests.test___getitem__simple.<locals>.ISimple.methodNrÏ  r   r  r   r   rÚ  Ï  s   rÚ  rn  r¢  r§  ræ  ©	rj   r  rä   r   rä  r€  r   r   r8   rõ  r   r  r   Útest___getitem__simpleÊ  s    z%InterfaceTests.test___getitem__simplec           	         s  ddl m‰  ddl m} ddlm} G ‡ fdd„d|ƒ}G ‡ fdd„d|ƒ}|d	 }|  |ˆ ¡ |  |jd	¡ |  |jd
¡ |d }|  ||¡ |  |jd¡ |  |jd¡ |d }|  |ˆ ¡ |  |jd¡ |  |jd¡ |d }|  ||¡ |  |jd¡ |  |jd¡ d S )Nr   r  rã   rã  c                       s   e Zd Z” dƒZdd„ ZdS )z6InterfaceTests.test___getitem___derived.<locals>.IBaser¢  c                   S   s   dS rå  r   r   r   r   r   r§  ç  s    z=InterfaceTests.test___getitem___derived.<locals>.IBase.methodNrÏ  r   r  r   r   rD  ä  s   rD  c                       s$   e Zd Z” dƒZdd„ Zdd„ ZdS )z9InterfaceTests.test___getitem___derived.<locals>.IDerivedrÞ  c                   S   s   dS rê  r   r   r   r   r   r§  í  s    z@InterfaceTests.test___getitem___derived.<locals>.IDerived.methodc                   S   s   dS rì  r   r   r   r   r   r­  ð  s    zAInterfaceTests.test___getitem___derived.<locals>.IDerived.method2Nrß  r   r  r   r   rE  ê  s   rE  rn  r¢  r§  rë  rà  rÞ  r­  rí  rý  rù  r   r  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                   @   s   e Zd ZdS )z8InterfaceTests.test___contains__nonesuch.<locals>.IEmptyNr   r   r   r   r   rñ  
  s   rñ  rA   )rj   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   r  rã   c                       s   e Zd Z” dƒZdd„ ZdS )z7InterfaceTests.test___contains__simple.<locals>.ISimpler¢  c                   S   s   dS rå  r   r   r   r   r   r§    s    z>InterfaceTests.test___contains__simple.<locals>.ISimple.methodNrÏ  r   r  r   r   rÚ    s   rÚ  rn  r§  ©rj   r  rä   rË   rÜ  r   r  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   r  rã   c                       s   e Zd Z” dƒZdd„ ZdS )z6InterfaceTests.test___contains__derived.<locals>.IBaser¢  c                   S   s   dS rå  r   r   r   r   r   r§  #  s    z=InterfaceTests.test___contains__derived.<locals>.IBase.methodNrÏ  r   r  r   r   rD     s   rD  c                       s$   e Zd Z” dƒZdd„ Zdd„ ZdS )z9InterfaceTests.test___contains__derived.<locals>.IDerivedrÞ  c                   S   s   dS rê  r   r   r   r   r   r§  )  s    z@InterfaceTests.test___contains__derived.<locals>.IDerived.methodc                   S   s   dS rì  r   r   r   r   r   r­  ,  s    zAInterfaceTests.test___contains__derived.<locals>.IDerived.method2Nrß  r   r  r   r   rE  &  s   rE  rn  r§  rà  r­  r  rá  r   r  r   Útest___contains__derived  s    	z'InterfaceTests.test___contains__derivedc                 C   s0   ddl m} G dd„ d|ƒ}|  t|ƒg ¡ d S )Nr   rã   c                   @   s   e Zd ZdS )z1InterfaceTests.test___iter__empty.<locals>.IEmptyNr   r   r   r   r   rñ  7  s   rñ  )rj   rä   r   r:   rò  r   r   r   Útest___iter__empty4  s    z!InterfaceTests.test___iter__emptyc                    sH   ddl m‰  ddl m} G ‡ fdd„d|ƒ}|  tt|ƒƒddg¡ d S )Nr   r  rã   c                       s   e Zd Z” dƒZdd„ ZdS )z3InterfaceTests.test___iter__simple.<locals>.ISimpler¢  c                   S   s   dS rå  r   r   r   r   r   r§  C  s    z:InterfaceTests.test___iter__simple.<locals>.ISimple.methodNrÏ  r   r  r   r   rÚ  @  s   rÚ  rn  r§  ©rj   r  rä   r   rJ  r:   rÜ  r   r  r   Útest___iter__simple<  s    z"InterfaceTests.test___iter__simplec                    s`   ddl m‰  ddl m} G ‡ fdd„d|ƒ}G ‡ fdd„d|ƒ}|  tt|ƒƒdd	d
dg¡ d S )Nr   r  rã   c                       s   e Zd Z” dƒZdd„ ZdS )z2InterfaceTests.test___iter__derived.<locals>.IBaser¢  c                   S   s   dS rå  r   r   r   r   r   r§  O  s    z9InterfaceTests.test___iter__derived.<locals>.IBase.methodNrÏ  r   r  r   r   rD  L  s   rD  c                       s$   e Zd Z” dƒZdd„ Zdd„ ZdS )z5InterfaceTests.test___iter__derived.<locals>.IDerivedrÞ  c                   S   s   dS rê  r   r   r   r   r   r§  U  s    z<InterfaceTests.test___iter__derived.<locals>.IDerived.methodc                   S   s   dS rì  r   r   r   r   r   r­  X  s    z=InterfaceTests.test___iter__derived.<locals>.IDerived.method2Nrß  r   r  r   r   rE  R  s   rE  rn  rà  r§  r­  r  rá  r   r  r   Útest___iter__derivedH  s    	
ÿz#InterfaceTests.test___iter__derivedc                 C   s:   ddl m} G dd„ d|ƒ}|d }|  | d¡d¡ d S )Nr   rã   c                   @   s   e Zd Zdd„ Zde_dS )zLInterfaceTests.test_function_attributes_become_tagged_values.<locals>.ITagMec                   S   s   dS rª  r   r   r   r   r   r§  b  s    zSInterfaceTests.test_function_attributes_become_tagged_values.<locals>.ITagMe.methodrì   N)r   r   r   r§  Úoptionalr   r   r   r   ÚITagMea  s   r	  r§  r  rì   )rj   rä   r   rD   )r    rä   r	  r§  r   r   r   Ú-test_function_attributes_become_tagged_values^  s    z<InterfaceTests.test_function_attributes_become_tagged_valuesc                 C   s>   ddl m} G dd„ d|ƒ}|  |jd¡ |  t|ƒg ¡ d S )Nr   rã   c                   @   s   e Zd ZdZdS )z@InterfaceTests.test___doc___non_element.<locals>.IHaveADocStringÚxxxN©r   r   r   r8   r   r   r   r   ÚIHaveADocStringl  s   r  r  )rj   rä   r   r8   r:   ©r    rä   r  r   r   r   Útest___doc___non_elementi  s    z'InterfaceTests.test___doc___non_elementc                    sP   ddl m‰  ddl m} G ‡ fdd„d|ƒ}|  |jd¡ |  t|ƒdg¡ d S )Nr   r  rã   c                       s   e Zd ZdZ” dƒZdS )z?InterfaceTests.test___doc___as_element.<locals>.IHaveADocStringr  úthe docNr  r   r  r   r   r  v  s   r  r6   r8   ©rj   r  rä   r   r8   r:   r  r   r  r   Útest___doc___as_elementr  s
    z&InterfaceTests.test___doc___as_elementc           
   
   C   s¶   ddl m} |  ||j|¡ g }z| ||¡ |  d¡ W n4 |k
rn } z|  |jd |¡ W 5 d }~X Y nX |  t|ƒ|¡ dd„ |D ƒ}| ¡  |D ]}	|  |	| 	d¡¡ qšd S )Nr   ru  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>)
r6  rv  rB   rs  Úfailr   r   rç   ÚsortÚpop)
r    Úhas_invariantZ	error_lenZ
error_msgsrÃ   rv  Úer  ZmsgsÚmsgr   r   r   Ú_errorsEqual}  s    $zInterfaceTests._errorsEqualc                    sÔ   ddl m‰  ddl m} ddl m} ddl m‰ G ‡ ‡fdd„d|ƒ}G dd	„ d	ƒ}|ƒ }|||ƒ |  | d
¡tg¡ |  | |¡d ¡ d|_	|  | |¡d ¡ d|_
|  | |¡d ¡ |`	|  |ddg|¡ d S )Nr   r  rã   ©ÚdirectlyProvidesr	   c                       s$   e Zd Z” dƒZ” dƒZ”eƒ dS )z8InterfaceTests.test_invariant_simple.<locals>.IInvariantrG   ú*bar; must eval to Boolean True if foo doesN©r   r   r   rG   r(   Ú_ifFooThenBarr   ©r  r
   r   r   Ú
IInvariant“  s   r$  c                   @   s   e Zd ZdS )z:InterfaceTests.test_invariant_simple.<locals>.HasInvariantNr   r   r   r   r   ÚHasInvariant˜  s   r%  r   é   é*   rì   úIf Foo, then Bar!)rj   r  rä   r  r
   r   rD   r"  rs  r(   rG   r  )r    rä   r  r$  r%  r  r   r#  r   Útest_invariant_simple�  s(    
ÿÿz$InterfaceTests.test_invariant_simplec                    s  ddl m‰  ddl m} ddl m} ddl m‰ G ‡ ‡fdd„d|ƒ}G ‡fdd	„d	|ƒ}G d
d„ dƒ}|  | d¡tg¡ |ƒ }|||ƒ d|_|  	|ddg|¡ d|_d|_
|  	|ddg|¡ d|_d|_
|  	|dddg|¡ d|_d|_
|  | |¡d ¡ d S )Nr   r  rã   r  r	   c                       s$   e Zd Z” dƒZ” dƒZ”eƒ dS )z8InterfaceTests.test_invariant_nested.<locals>.IInvariantrG   r   Nr!  r   r#  r   r   r$  ±  s   r$  c                       s   e Zd Z” eƒ dS )z;InterfaceTests.test_invariant_nested.<locals>.ISubInvariantN)r   r   r   Ú_barGreaterThanFoor   r	   r   r   ÚISubInvariant¶  s   r+  c                   @   s   e Zd ZdS )z:InterfaceTests.test_invariant_nested.<locals>.HasInvariantNr   r   r   r   r   r%  ¹  s   r%  r   r'  rì   r(  rå   ú%Please, Boo MUST be greater than Foo!)rj   r  rä   r  r
   r   rD   r*  rG   r  r(   rs  )r    rä   r  r$  r+  r%  r  r   r#  r   Útest_invariant_nested«  sB    ÿ
ÿþÿýz$InterfaceTests.test_invariant_nestedc                    s  ddl m‰  ddl m} ddl m} ddl m‰ G ‡ ‡fdd„d|ƒ}G dd	„ d	ƒ}|ƒ }|||ƒ d
|_| d¡}|d d … }| t¡ | 	d|¡ |  
|ddg|¡ d|_d|_|  
|ddg|¡ d|_d|_|  
|dddg|¡ d|_d|_|  | |¡d ¡ | 	d|¡ d S )Nr   r  rã   r  r	   c                       s$   e Zd Z” dƒZ” dƒZ”eƒ dS )z:InterfaceTests.test_invariant_mutandis.<locals>.IInvariantrG   r   Nr!  r   r#  r   r   r$  à  s   r$  c                   @   s   e Zd ZdS )z<InterfaceTests.test_invariant_mutandis.<locals>.HasInvariantNr   r   r   r   r   r%  å  s   r%  r'  r   rì   r(  rå   r,  )rj   r  rä   r  r
   rG   rD   r×   r*  rI   r  r(   r   rs  )r    rä   r  r$  r%  r  Z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   r  rã   c                   @   s   e Zd ZdZdS )z7InterfaceTests.test___doc___element.<locals>.IDocstringr  Nr  r   r   r   r   Ú
IDocstring  s   r/  r  c                       s   e Zd ZdZ” dƒZdS )zCInterfaceTests.test___doc___element.<locals>.IDocstringAndAttributer  r  Nr  r   r  r   r   ÚIDocstringAndAttribute  s   r0  r6   r8   r  )r    rä   r/  r0  r   r  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 n2 ˆk
rÐ } z|  t	|ƒd¡ W 5 d }~X Y nX d S )Nr   r  rã   r  r	   ru  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)Úobru  r   r   Úrange_invariant0  s    zJInterfaceTests.test_invariant_as_decorator.<locals>.IRange.range_invariantN)r   r   r   r4  r3  r6  r   ©r  rv  r
   r   r   ÚIRange,  s   r8  c                   @   s   e Zd Zdd„ ZdS )z9InterfaceTests.test_invariant_as_decorator.<locals>.Rangec                 S   s   || | _ | _d S r   )r4  r3  )r    r4  r3  r   r   r   r•   8  s    zBInterfaceTests.test_invariant_as_decorator.<locals>.Range.__init__Nr™   r   r   r   r   ÚRange5  s   r9  rì   rå   r2  )
rj   r  rä   r  r
   r6  rv  rs  r   rÌ   )r    rä   r  r8  r9  r  r   r7  r   Útest_invariant_as_decorator%  s    	z*InterfaceTests.test_invariant_as_decoratorc                    sÖ   ddl m‰  ddl m} ddl m‰ G ‡ ‡fdd„d|ƒ}G ‡fdd„d|ƒ}G d	d
„ d
|ƒ}|  | d¡d¡ |  t|jd¡ |  t| 	¡ ƒdg¡ |  | d¡d¡ |  | d¡d¡ |  t
| 	¡ ƒddh¡ d S )Nr   r  rã   r&   c                       s&   e Zd Z” dƒZ” dƒZ”ddƒ dS )z0InterfaceTests.test_taggedValue.<locals>.ITaggedrG   r   r+   ÚSpamN)r   r   r   rG   r(   r   ©r  r'   r   r   ÚITaggedG  s   r=  c                       s    e Zd Z” ddƒ ” ddƒ dS )z1InterfaceTests.test_taggedValue.<locals>.IDerivedr+   ú	Spam SpamrG   r(   Nr   r   r&   r   r   rE  L  s   
rE  c                   @   s   e Zd ZdS )z2InterfaceTests.test_taggedValue.<locals>.IDerived2Nr   r   r   r   r   Ú	IDerived2P  s   r?  r+   r;  rG   r>  r(   )rj   r  rä   r'   r   rD   rB   rC   r:   r;   Úset)r    rä   r=  rE  r?  r   r<  r   Útest_taggedValueB  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   r  r&   c                       s   e Zd Z”ddƒ ” dƒZdS )z0InterfaceTests._make_taggedValue_tree.<locals>.FÚtagÚFN©r   r   r   rB  r   r<  r   r   rC  _  s   
rC  c                       s   e Zd Z”ddƒ ” dƒZdS )z0InterfaceTests._make_taggedValue_tree.<locals>.ErB  ÚENrD  r   r<  r   r   rE  c  s   
rE  c                       s   e Zd Z”ddƒ ” dƒZdS )z0InterfaceTests._make_taggedValue_tree.<locals>.DrB  ÚDNrD  r   r<  r   r   rF  g  s   
rF  c                       s   e Zd Z”ddƒ ” dƒZdS )z0InterfaceTests._make_taggedValue_tree.<locals>.CrB  ÚCNrD  r   r<  r   r   rG  k  s   
rG  c                   @   s   e Zd ZdS )z0InterfaceTests._make_taggedValue_tree.<locals>.BNr   r   r   r   r   ÚBo  s   rH  c                   @   s   e Zd ZdS )z0InterfaceTests._make_taggedValue_tree.<locals>.ANr   r   r   r   r   ÚAr  s   rI  )rj   r  r'   )r    rN  rC  rE  rF  rG  rH  rI  r   r<  r   Ú_make_taggedValue_tree[  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szt
‚|j	d  dd¡ |  | d¡d¡ d S )Nr   rã   rG  rB  rH  )rj   rä   rJ  rn   r   rB  r   rD   rL   ræ   ÚAssertionErrorrI   )r    rä   Zclass_AZiface_Ar   r   r   Ú"test_getTaggedValue_follows__iro__w  s    

z1InterfaceTests.test_getTaggedValue_follows__iro__c              	   C   sü   ddl m} |  |¡}|  | d¡¡ |  g t| ¡ ƒ¡ |  t	¡� | 
d¡ W 5 Q R X | dd¡ |  | d¡d¡ |  | 
d¡d¡ |  dgt| ¡ ƒ¡ |jd jdks´t‚|jd }|  | d¡d¡ |  | 
d¡d¡ |  dgt| ¡ ƒ¡ d S )Nr   rã   rB  rI  rì   rG  )rj   rä   rJ  rþ   rS   r   r:   rH   rB   rC   rP   rI   ræ   r   rK  )r    rä   rI  rG  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   r  rã   c                       s   e Zd Z” dƒZdS )z<InterfaceTests.test_description_cache_management.<locals>.I1r‹   N)r   r   r   r‹   r   r  r   r   r£  ©  s   r£  c                   @   s   e Zd ZdS )z<InterfaceTests.test_description_cache_management.<locals>.I2Nr   r   r   r   r   ÚI2¬  s   rN  c                   @   s   e Zd ZdS )z<InterfaceTests.test_description_cache_management.<locals>.I3Nr   r   r   r   r   ÚI3¯  s   rO  r‹   )rj   r  rä   r¨   rú   ræ   rþ   )r    rä   r£  rN  rO  r   r  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ã   r  c                   @   s   e Zd ZdS )zAInterfaceTests.test___call___defers_to___conform___.<locals>.IFooNr   r   r   r   r   r÷   »  s   r÷   c                   @   s   e Zd Zdd„ ZdS )z>InterfaceTests.test___call___defers_to___conform___.<locals>.Cc                 S   s   dS )Nr   r   )r    Úprotor   r   r   rÅ   À  s    zJInterfaceTests.test___call___defers_to___conform___.<locals>.C.__conform__NrÆ   r   r   r   r   rG  ¾  s   rG  )rj   rä   r  r   )r    rä   r  r÷   rG  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ã   r  c                   @   s   e Zd ZdS )z<InterfaceTests.test___call___object_implements.<locals>.IFooNr   r   r   r   r   r÷   É  s   r÷   c                   @   s   e Zd ZdS )z9InterfaceTests.test___call___object_implements.<locals>.CNr   r   r   r   r   rG  Ì  s   rG  )rj   rä   r  r¨   )r    rä   r  r÷   rG  Ú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                   @   s   e Zd ZdS )z<InterfaceTests.test___call___miss_wo_alternate.<locals>.IFooNr   r   r   r   r   r÷   Ö  s   r÷   c                   @   s   e Zd ZdS )z9InterfaceTests.test___call___miss_wo_alternate.<locals>.CNr   r   r   r   r   rG  Ù  s   rG  )rj   rä   rB   rª   ©r    rä   r÷   rG  rS  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                   @   s   e Zd ZdS )z;InterfaceTests.test___call___miss_w_alternate.<locals>.IFooNr   r   r   r   r   r÷   â  s   r÷   c                   @   s   e Zd ZdS )z8InterfaceTests.test___call___miss_w_alternate.<locals>.CNr   r   r   r   r   rG  å  s   rG  )rj   rä   r¨   rU  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 5 ||d d …< X d S )Nr   rã   rÜ   c                 S   s   d S r   r   rØ   r   r   r   Ú_missï  s    z:InterfaceTests.test___call___w_adapter_hook.<locals>._missc                    s   ˆ S r   r   rØ   r`   r   r   Ú_hitò  s    z9InterfaceTests.test___call___w_adapter_hook.<locals>._hitc                   @   s   e Zd ZdS )z9InterfaceTests.test___call___w_adapter_hook.<locals>.IFooNr   r   r   r   r   r÷   õ  s   r÷   c                   @   s   e Zd ZdS )z6InterfaceTests.test___call___w_adapter_hook.<locals>.CNr   r   r   r   r   rG  ø  s   rG  )rj   rä   r   rÝ   r¨   )	r    rä   rÝ   rX  rY  r÷   rG  rS  Zold_adapter_hooksr   r`   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ã   r  ©Úinterfacemethodc                       s   e Zd Z” dd„ ƒZdS )z=InterfaceTests.test___call___w_overridden_adapt.<locals>.IFooc                 S   s   dS ©Nr'  r   r½   r   r   r   rÔ   	  s    zGInterfaceTests.test___call___w_overridden_adapt.<locals>.IFoo.__adapt__N©r   r   r   rÔ   r   r[  r   r   r÷   		  s   r÷   c                   @   s   e Zd ZdS )z<InterfaceTests.test___call___w_overridden_adapt.<locals>.ObjNr   r   r   r   r   ÚObj	  s   r_  r'  )rj   rä   r  r\  r   rn   )r    rä   r  r÷   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 5 Q R X |  d||ƒ ƒ¡ d S )Nr   rã   r  r[  c                       s   e Zd Z” dd„ ƒZdS )zKInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.IAdaptc                 S   s   dS r]  r   r½   r   r   r   rÔ    	  s    zUInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.IAdapt.__adapt__Nr^  r   r[  r   r   ÚIAdapt	  s   ra  c                   @   s   e Zd ZdZdS )zLInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.ISimplezNothing special.Nr  r   r   r   r   rÚ  $	  s   rÚ  c                   @   s   e Zd Zdd„ ZdS )zNInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.Conform24c                 S   s   dS ©Né   r   rÂ   r   r   r   rÅ   )	  s    zZInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.Conform24.__conform__NrÆ   r   r   r   r   Ú	Conform24'	  s   rd  c                   @   s   e Zd Zdd„ ZdS )zPInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.ConformNonec                 S   s   d S r   r   rÂ   r   r   r   rÅ   .	  s    z\InterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.ConformNone.__conform__NrÆ   r   r   r   r   ÚConformNone,	  s   re  r'  rc  )rj   rä   r  r\  r   rn   rB   rª   )r    rä   r  ra  rÚ  rd  re  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ã   r  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]  )ri   ÚsuperrÔ   r½   ©rœ  r   r   rÔ   D	  s    
zRInterfaceTests.test___call___w_overridden_adapt_call_super.<locals>.IFoo.__adapt__)r   r   r   rÔ   Ú__classcell__r   r[  rh  r   r÷   B	  s   r÷   c                   @   s   e Zd ZdS )zGInterfaceTests.test___call___w_overridden_adapt_call_super.<locals>.ObjNr   r   r   r   r   r_  J	  s   r_  r'  )Úsysrj   rä   r  r\  r   rn   r¨   )r    rj  rä   r  r÷   r_  rf   r   r[  r   Ú+test___call___w_overridden_adapt_call_super;	  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   s   dS r]  r   r½   r   r   r   rÔ   W	  s    zRInterfaceTests.test___adapt___as_method_and_implementation.<locals>.IFoo.__adapt__c                 S   s   dS )zThis is a protocolNr   )Zto_adaptr   r   r   rÔ   [	  s    Nr^  r   r[  r   r   r÷   V	  s   
r÷   r'  rÔ   z
(to_adapt))rj   rä   r\  r   rn   ÚgetSignatureString©r    rä   r÷   r   r[  r   Ú+test___adapt___as_method_and_implementationR	  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¡ q¤|||fD ]}|  t|ƒt|ƒ¡ qÂ|  t|ƒt|ƒ¡ |  t|ƒt|ƒ¡ |  	|t|ƒ¡ |  d|tƒ ƒ¡ |  t|ƒt|ƒ¡ |  	|t|ƒ¡ d S )Nr   rã   r[  c                   @   s   e Zd ZdZdS )z@InterfaceTests.test___adapt__inheritance_and_type.<locals>.IRootZRootNr  r   r   r   r   ÚIRoote	  s   ro  c                       s   e Zd Z” dd„ ƒZdS )zEInterfaceTests.test___adapt__inheritance_and_type.<locals>.IWithAdaptc                 S   s   dS r]  r   r½   r   r   r   rÔ   i	  s    zOInterfaceTests.test___adapt__inheritance_and_type.<locals>.IWithAdapt.__adapt__Nr^  r   r[  r   r   Ú
IWithAdapth	  s   rp  c                   @   s   e Zd ZdZdS )zAInterfaceTests.test___adapt__inheritance_and_type.<locals>.IOtherzSecond branchNr  r   r   r   r   r  m	  s   r  c                   @   s   e Zd ZdZdS )zEInterfaceTests.test___adapt__inheritance_and_type.<locals>.IUnrelatedZ	UnrelatedNr  r   r   r   r   Ú
IUnrelatedp	  s   rq  c                   @   s   e Zd ZdZdS )zHInterfaceTests.test___adapt__inheritance_and_type.<locals>.IDerivedAdaptzInherits an adaptNr  r   r   r   r   ÚIDerivedAdapts	  s   rr  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   s   dS rb  r   r½   r   r   r   rÔ   y	  s    zSInterfaceTests.test___adapt__inheritance_and_type.<locals>.IDerived2Adapt.__adapt__N)r   r   r   r8   rÔ   r   r[  r   r   ÚIDerived2Adaptw	  s   rs  r'  rc  )
rj   rä   r\  r   rn   r   r   r›  r�  r€  )	r    rä   ro  rp  r  rq  rr  rs  rÃ   r   r[  r   Ú"test___adapt__inheritance_and_typea	  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   s   dS )zReplace an existing methodr'  r   r½   r   r   r   r˜  “	  s    zEInterfaceTests.test_interfacemethod_is_general.<locals>.IFoo.__call__c                 S   s   dS r]  r   r`   r   r   r   Úthis_is_new˜	  s    zHInterfaceTests.test_interfacemethod_is_general.<locals>.IFoo.this_is_newN)r   r   r   r˜  ru  r   r[  r   r   r÷   ‘	  s   
r÷   r'  )rj   rä   r\  r   ru  rm  r   r[  r   Útest_interfacemethod_is_general�	  s
    z.InterfaceTests.test_interfacemethod_is_generalN)7r   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.  r1  r:  rA  rJ  rL  rM  rP  rR  rT  rV  rW  rZ  r`  rf  rk  rn  rt  rv  r   r   r   r   r¡    sh   		"!+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   s   ddl m} |S )Nr   r  )r   r  )r    r  r   r   r   r2   ¤	  s    zAttributeTests._getTargetClassc                 C   sJ   |   ¡ }t| ƒ|_t|ƒ}|  | d¡|¡ |  | dt d ¡|¡ d S )Nú-<zope.interface.interface.Attribute object atú z.AttributeTests.TestAttribute>)r5   r›  rb   Ú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 )Nry  z TestAttribute>)r5   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)r5   r›  rb   rÌ   r   r   r~  r   r   r   Útest__str__w_interface»	  s    
z%AttributeTests.test__str__w_interfacec                 C   s    |   ¡ }t|ƒ}|  |d¡ d S )Nrx  )r5   rÌ   r   r~  r   r   r   Útest__str__wo_interfaceÁ	  s    z&AttributeTests.test__str__wo_interfaceN)	r   r   r   r3   r2   r€  r�  r‚  rƒ  r   r   r   r   rw   	  s   rw  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 )ÚMethodTestsZ
TestMethodc                 C   s   ddl m} |S )Nr   rã  )r   rä  )r    rä  r   r   r   r2   Ë	  s    zMethodTests._getTargetClassc                 C   sH   |   ¡ }|  |ji ¡ ddi|_|  |jddi¡ |`|  |ji ¡ d S rF   )r5   r   r  ©r    r§  r   r   r   Útest_optional_as_propertyÏ	  s    
z%MethodTests.test_optional_as_propertyc              
   C   sn   ddl m} |  ¡ }z
|ƒ  W n@ |k
r^ } z"|  |jd ¡ |  |j| j¡ W 5 d }~X Y nX |  d¡ d S )Nr   )ÚBrokenImplementationz*__call__ should raise BrokenImplementation)r6  r‡  r5   r   rb   r4   r3   r  )r    r‡  r§  r  r   r   r   Ú)test___call___raises_BrokenImplementation×	  s    
"z5MethodTests.test___call___raises_BrokenImplementationc                 C   sl   |   ¡ }| ¡ }|  t|d ƒg ¡ |  t|d ƒg ¡ |  |d i ¡ |  |d d ¡ |  |d d ¡ d S )NÚ
positionalÚrequiredr  ÚvarargsÚkwargs)r5   ÚgetSignatureInfor   r:   )r    r§  Úinfor   r   r   Útest_getSignatureInfo_bareâ	  s    z&MethodTests.test_getSignatureInfo_barec                 C   s   |   ¡ }|  | ¡ d¡ d S )Nz())r5   r   rl  r…  r   r   r   Útest_getSignatureString_bareë	  s    z(MethodTests.test_getSignatureString_barec                 C   s*   |   ¡ }dg |_|_|  | ¡ d¡ d S )NrG   z(foo))r5   r‰  rŠ  r   rl  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 )NrG   r(   z(foo='bar'))r5   r‰  rŠ  r  r   rl  r…  r   r   r   Ú"test_getSignatureString_w_optionalô	  s    
z.MethodTests.test_getSignatureString_w_optionalc                 C   s"   |   ¡ }d|_|  | ¡ d¡ d S )Nr   z(*args))r5   r‹  r   rl  r…  r   r   r   Ú!test_getSignatureString_w_varargsú	  s    z-MethodTests.test_getSignatureString_w_varargsc                 C   s"   |   ¡ }d|_|  | ¡ d¡ d S )Nr   z(**kw))r5   rŒ  r   rl  r…  r   r   r   Ú test_getSignatureString_w_kwargsÿ	  s    z,MethodTests.test_getSignatureString_w_kwargsc                 C   sP   |   ¡ }d|_t| ƒ|_t|ƒ}|  | d¡|¡ |  | dt d ¡|¡ d S )Nr   ú*<zope.interface.interface.Method object atrz  z.MethodTests.TestMethod(**kw)>)	r5   rŒ  r›  rb   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)>)r5   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))r5   rŒ  r›  rb   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))r5   rŒ  rÌ   r   r~  r   r   r   rƒ   
  s    z#MethodTests.test__str__wo_interfaceN)r   r   r   r3   r2   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   s   ddl m} |||ŽS )Nr   r"  )r   r#  )r    r   r   r#  r   r   r   Ú_callFUT)
  s    zTest_fromFunction._callFUTc                 C   s¸   dd„ }|   |¡}|  | ¡ d¡ |  | ¡ d¡ |  |jd ¡ |  t| ¡ ƒg ¡ | ¡ }|  t|d ƒg ¡ |  t|d ƒg ¡ |  |d i ¡ |  |d d ¡ |  |d	 d ¡ d S )
Nc                   S   s   dS r$  r   r   r   r   r   Ú_func/
  s    z*Test_fromFunction.test_bare.<locals>._funcr˜  r%  r‰  rŠ  r  r‹  rŒ  ©r—  r   r7   r9   rb   r:   r;   r�  ©r    r˜  r§  rŽ  r   r   r   Ú	test_bare-
  s    
zTest_fromFunction.test_barec                 C   sD   ddl m} G dd„ d|ƒ}dd„ }| j||d�}|  |j|¡ d S )Nr   r  c                   @   s   e Zd ZdS )z0Test_fromFunction.test_w_interface.<locals>.IFooNr   r   r   r   r   r÷   A
  s   r÷   c                   S   s   dS r$  r   r   r   r   r   r˜  D
  s    z1Test_fromFunction.test_w_interface.<locals>._funcra   )r   r  r—  r   rb   )r    r  r÷   r˜  r§  r   r   r   Útest_w_interface>
  s
    z"Test_fromFunction.test_w_interfacec                 C   s*   dd„ }| j |dd�}|  | ¡ d¡ d S )Nc                   S   s   dS r$  r   r   r   r   r   r˜  L
  s    z,Test_fromFunction.test_w_name.<locals>._funcZanotherName)r4   )r—  r   r7   )r    r˜  r§  r   r   r   Útest_w_nameJ
  s    zTest_fromFunction.test_w_namec                 C   sz   dd„ }|   |¡}| ¡ }|  t|d ƒdg¡ |  t|d ƒdg¡ |  |d i ¡ |  |d d ¡ |  |d d ¡ d S )	Nc                 S   s   dS r$  r   ©rG   r   r   r   r˜  T
  s    z5Test_fromFunction.test_w_only_required.<locals>._funcr‰  rG   rŠ  r  r‹  rŒ  ©r—  r�  r   r:   rš  r   r   r   Útest_w_only_requiredR
  s    
z&Test_fromFunction.test_w_only_requiredc                 C   s~   d
dd„}|   |¡}| ¡ }|  t|d ƒdg¡ |  t|d ƒg ¡ |  |d ddi¡ |  |d d ¡ |  |d	 d ¡ d S )Nr(   c                 S   s   dS r$  r   rž  r   r   r   r˜  a
  s    z0Test_fromFunction.test_w_optional.<locals>._funcr‰  rG   rŠ  r  r‹  rŒ  )r(   rŸ  rš  r   r   r   Útest_w_optional_
  s    

z!Test_fromFunction.test_w_optionalc                 C   s|   ddd„}| j |dd�}| ¡ }|  t|d ƒg ¡ |  t|d ƒg ¡ |  |d i ¡ |  |d	 d ¡ |  |d
 d ¡ d S )Nr(   c                 S   s   dS r$  r   r`   r   r   r   r˜  u
  s    z5Test_fromFunction.test_w_optional_self.<locals>._funcrì   )Zimlevelr‰  rŠ  r  r‹  rŒ  )r(   rŸ  rš  r   r   r   Útest_w_optional_selfl
  s    	
z&Test_fromFunction.test_w_optional_selfc                 C   sv   dd„ }|   |¡}| ¡ }|  t|d ƒg ¡ |  t|d ƒg ¡ |  |d i ¡ |  |d d¡ |  |d d ¡ d S )	Nc                  W   s   dS r$  r   r  r   r   r   r˜  ‚
  s    z/Test_fromFunction.test_w_varargs.<locals>._funcr‰  rŠ  r  r‹  r   rŒ  rŸ  rš  r   r   r   Útest_w_varargs€
  s    
z Test_fromFunction.test_w_varargsc                 C   sv   dd„ }|   |¡}| ¡ }|  t|d ƒg ¡ |  t|d ƒg ¡ |  |d i ¡ |  |d d ¡ |  |d d¡ d S )	Nc                  [   s   dS r$  r   )r   r   r   r   r˜  �
  s    z.Test_fromFunction.test_w_kwargs.<locals>._funcr‰  rŠ  r  r‹  rŒ  r   rŸ  rš  r   r   r   Útest_w_kwargs�
  s    
zTest_fromFunction.test_w_kwargsc                 C   s‚   ddd„}|   |¡}| ¡ }|  t|d ƒddg¡ |  t|d ƒdg¡ |  |d ddi¡ |  |d	 d
¡ |  |d d¡ d S )Nr)   c                 _   s   dS r$  r   )rG   r(   r   r   r   r   r   r˜  œ
  s    z3Test_fromFunction.test_full_spectrum.<locals>._funcr‰  rG   r(   rŠ  r  r‹  r   rŒ  r   )r)   rŸ  rš  r   r   r   Útest_full_spectrumš
  s     ÿ

z$Test_fromFunction.test_full_spectrumN)r   r   r   r—  r›  rœ  r�  r   r¡  r¢  r£  r¤  r¥  r   r   r   r   r–  '
  s   r–  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTest_fromMethodc                 O   s   ddl m} |||ŽS )Nr   )Ú
fromMethod)r   r§  )r    r   r   r§  r   r   r   r—  ¬
  s    zTest_fromMethod._callFUTc                 C   sÀ   G dd„ dƒ}|   |j¡}|  | ¡ d¡ |  | ¡ d¡ |  |jd ¡ |  t| ¡ ƒg ¡ | ¡ }|  t|d ƒg ¡ |  t|d ƒg ¡ |  |d i ¡ |  |d d ¡ |  |d	 d ¡ d S )
Nc                   @   s   e Zd Zdd„ ZdS )z)Test_fromMethod.test_no_args.<locals>.Fooc                 S   s   dS r$  r   r`   r   r   r   r(   ³
  s    z-Test_fromMethod.test_no_args.<locals>.Foo.barNr  r   r   r   r   r   ²
  s   r   r(   r%  r‰  rŠ  r  r‹  rŒ  )	r—  r(   r   r7   r9   rb   r:   r;   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                 _   s   dS r$  r   )r    rG   r(   r   r   r   r   r   r(   Å
  s    z3Test_fromMethod.test_full_spectrum.<locals>.Foo.barN)r)   r  r   r   r   r   r   Ä
  s    ÿr   r‰  rG   r(   rŠ  r  r)   r‹  r   rŒ  r   )r—  r(   r�  r   r:   r¨  r   r   r   r¥  Â
  s    z"Test_fromMethod.test_full_spectrumc                 C   s¸   dd„ }|   |¡}|  | ¡ d¡ |  | ¡ d¡ |  |jd ¡ |  t| ¡ ƒg ¡ | ¡ }|  t|d ƒg ¡ |  t|d ƒg ¡ |  |d i ¡ |  |d d ¡ |  |d	 d ¡ d S )
Nc                   S   s   dS r$  r   r   r   r   r   rG   Ô
  s    z.Test_fromMethod.test_w_non_method.<locals>.foorG   r%  r‰  rŠ  r  r‹  rŒ  r™  )r    rG   r§  rŽ  r   r   r   Útest_w_non_methodÒ
  s    
z!Test_fromMethod.test_w_non_methodN)r   r   r   r—  r©  r¥  rª  r   r   r   r   r¦  ª
  s   r¦  c                   @   s   e Zd Zdd„ Zdd„ ZdS )rí   c                 C   s
   g | _ d S r   )rù   r`   r   r   r   r•   æ
  s    zDummyDependent.__init__c                 C   s   | j  |¡ d S r   )rù   r×   )r    Zoriginally_changedr   r   r   rý   é
  s    zDummyDependent.changedN)r   r   r   r•   rý   r   r   r   r   rí   ä
  s   rí   c                 C   sN   ddl m} t| dd ƒ}t| dd ƒ}|d k	rJt|t|ƒƒrJ||ksJ|dƒ‚d S )Nr   ru  rG   r(   r,  )r6  rv  r   Ú
isinstancer›  )rf   rv  rG   r(   r   r   r   r*  í
  s    r*  c                 C   s0   ddl m} t| dd ƒr,t| dd ƒs,|dƒ‚d S )Nr   ru  rG   r(   r(  )r6  rv  r   )rf   rv  r   r   r   r"  ú
  s    r"  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )rl   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   r¬  rÑ  r   r­  r   r•     s    z_Monkey.__init__c                 C   s   | S r   r   r`   r   r   r   Ú	__enter__  s    z_Monkey.__enter__c                 C   s&   | j  ¡ D ]\}}t| j||ƒ q
d S r   )r¯  r°  r±  rÁ   )r    Úexc_typeÚexc_valÚexc_tbr¬  rÑ  r   r   r   Ú__exit__  s    z_Monkey.__exit__N)r   r   r   r•   r²  r¶  r   r   r   r   rl      s   rl   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                   @   s   e Zd ZdS )z+TestTypeAnnotations.test___or__.<locals>.I1Nr   r   r   r   r   r£    s   r£  c                   @   s   e Zd ZdS )z+TestTypeAnnotations.test___or__.<locals>.I2Nr   r   r   r   r   rN    s   rN  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   r0  r   ©r£  rN  r   r   rH    s   
rH  r«  ©Útypingr¹  r»  rj   rä   r   r0  ©r    r¹  r»  rä   rH  r   r½  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   r¸  rº  rã   c                   @   s   e Zd ZdS )z,TestTypeAnnotations.test___ror__.<locals>.I1Nr   r   r   r   r   r£  ,  s   r£  c                   @   s   e Zd ZdS )z+TestTypeAnnotations.test___ror__.<locals>.ANr   r   r   r   r   rI  /  s   rI  c                       s&   e Zd ZU d”B ed< ” ”B ed< dS )z+TestTypeAnnotations.test___ror__.<locals>.BNr‹   rŒ   r¼  r   ©rI  r£  r   r   rH  2  s   
rH  r«  r¾  rÀ  r   rÂ  r   Útest___ror__&  s     ÿz TestTypeAnnotations.test___ror__N)r   r   r   r8   rÁ  rÃ  r   r   r   r   r·    s   r·  ) r8   ZunittestZzope.interface.testsr   r   r   r   rn   rá   ZTestCaser   r%   r0   r\   ru   rx   rŠ   rº   rÐ   rÒ   rß   r  r¡  rw  r„  r–  r¦  rí   r*  r"  rl   r·  r   r   r   r   Ú<module>   sh   !$J"
ý4k4
ü% *    |         '` :	