a
    ®ð£_Ti ã                   @   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ƒ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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*eƒZd+d,„ Zd-d.„ ZG d/d0„ d0eƒZdS )1zTest Interface implementation
é    N)Ú_skip_under_py3k)ÚMissingSomeAttrs)ÚOptimizationTestMixin)ÚCleanUpc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTest_invariantc                    sT   ddl m‰ ddl m} dd„ ‰ G ‡ ‡fdd„dtƒ}|  t||d ƒdˆ gi¡ d S )	Nr   ©Ú	invariant©ÚTAGGED_DATAc                  _   s
   t ƒ ‚d S ©N©ÚNotImplementedError©ÚargsÚkw© r   úE/usr/lib/python3/dist-packages/zope/interface/tests/test_interface.pyÚ_check(   s    z,Test_invariant.test_w_single.<locals>._checkc                       s   e Zd Z”” ƒ dS )z)Test_invariant.test_w_single.<locals>.FooN©Ú__name__Ú
__module__Ú__qualname__r   ©r   r   r   r   ÚFoo+   s   r   Ú
invariants©Úzope.interface.interfacer   r
   ÚobjectÚassertEqualÚgetattr©Úselfr
   r   r   r   r   Útest_w_single$   s    ÿzTest_invariant.test_w_singlec                    s`   ddl m‰ ddl m} dd„ ‰dd„ ‰ G ‡ ‡‡fdd	„d	tƒ}|  t||d ƒd
ˆˆ gi¡ d S )Nr   r   r	   c                  _   s
   t ƒ ‚d S r   r   r   r   r   r   r   5   s    z.Test_invariant.test_w_multiple.<locals>._checkc                  _   s
   t ƒ ‚d S r   r   r   r   r   r   Ú_another_check8   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   ;   s   r   r   r   r    r   r$   r   Útest_w_multiple1   s    
ÿzTest_invariant.test_w_multipleN)r   r   r   r"   r%   r   r   r   r   r   "   s   r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTest_taggedValuec                    sJ   ddl m‰  ddl m} G ‡ fdd„dtƒ}|  t||d ƒddgi¡ d S )Nr   ©ÚtaggedValuer	   c                       s   e Zd Z” ddgƒ dS )z+Test_taggedValue.test_w_single.<locals>.FooÚbarÚbazNr   r   r'   r   r   r   I   s   r   r)   r*   ©r   r(   r
   r   r   r   r    r   r'   r   r"   E   s    ÿzTest_taggedValue.test_w_singlec                    sL   ddl m‰  ddl m} G ‡ fdd„dtƒ}|  t||d ƒdgddœ¡ d S )	Nr   r'   r	   c                       s"   e Zd Z” ddgƒ ” ddƒ dS )z-Test_taggedValue.test_w_multiple.<locals>.Foor)   r*   ÚquxÚspamNr   r   r'   r   r   r   S   s   r   r*   r-   ©r)   r,   r+   r    r   r'   r   r%   O   s    
ÿz Test_taggedValue.test_w_multiplec                    sJ   ddl m‰  ddl m} G ‡ fdd„dtƒ}|  t||d ƒdddœ¡ d S )	Nr   r'   r	   c                       s,   e Zd Z” ddgƒ ” ddƒ ” ddƒ dS )z9Test_taggedValue.test_w_multiple_overwriting.<locals>.Foor)   r*   r,   r-   ÚfrobNr   r   r'   r   r   r   ^   s   
r   r/   r-   r.   r+   r    r   r'   r   Útest_w_multiple_overwritingZ   s    ÿz,Test_taggedValue.test_w_multiple_overwritingN)r   r   r   r"   r%   r0   r   r   r   r   r&   C   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   r2   )r!   r2   r   r   r   Ú_getTargetClassk   s    zElementTests._getTargetClassNc                 C   s   |d u r| j }|  ¡ |ƒS r   )ÚDEFAULT_NAMEr3   )r!   Únamer   r   r   Ú_makeOneo   s    zElementTests._makeOnec                 C   s`   |   ¡ }|  |j| j¡ |  | ¡ | j¡ |  |jd¡ |  | ¡ d¡ |  t| ¡ ƒg ¡ d S )NÚ )	r6   r   r   r4   ÚgetNameÚ__doc__ÚgetDocÚlistÚgetTaggedValueTags©r!   Úelementr   r   r   Útest_ctor_defaultst   s    zElementTests.test_ctor_defaultsc                 C   s*   |   d¡}|  |jd ¡ |  |jd¡ d S )Nz
An Element)r6   r   r   r9   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)r6   Ú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)   )r6   r   r;   ÚgetDirectTaggedValueTagsÚsetTaggedValuer=   r   r   r   Útest_getDirectTaggedValueTags…   s    z*ElementTests.test_getDirectTaggedValueTagsc                 C   s   |   ¡ }|  | d¡d ¡ d S rA   ©r6   r   ÚqueryTaggedValuer=   r   r   r   Útest_queryTaggedValue_missŒ   s    z'ElementTests.test_queryTaggedValue_missc                 C   s    |   ¡ }|  | dd¡d¡ d S ©NrB   r)   rL   r=   r   r   r   Ú$test_queryTaggedValue_miss_w_default   s    z1ElementTests.test_queryTaggedValue_miss_w_defaultc                 C   s   |   ¡ }|  t|jd¡ d S rA   )r6   rC   rD   ÚgetDirectTaggedValuer=   r   r   r   Útest_getDirectTaggedValue_miss”   s    z+ElementTests.test_getDirectTaggedValue_missc                 C   s   |   ¡ }|  | d¡d ¡ d S rA   ©r6   r   ÚqueryDirectTaggedValuer=   r   r   r   Ú test_queryDirectTaggedValue_miss˜   s    z-ElementTests.test_queryDirectTaggedValue_missc                 C   s    |   ¡ }|  | dd¡d¡ d S rO   rS   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 rG   )r6   rJ   r   r;   r<   rE   rM   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.interfacesrX   Úzope.interface.verifyrZ   r6   )r!   rX   rZ   r>   r   r   r   Útest_verifies§   s    zElementTests.test_verifies)N)r   r   r   r4   r3   r6   r?   r@   rF   rK   rN   rP   rR   rU   rV   rW   r\   r   r   r   r   r1   g   s   
r1   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   ©r3   ©r!   r   r   r   r6   ·   s    z&GenericSpecificationBaseTests._makeOnec                    sn   ddl m} ddlm‰  |  ¡ }‡ fdd„}t||d" |  | tƒ ¡¡ W d   ƒ n1 s`0    Y  d S )Nr   ©Ú	interface©Ú_emptyc                    s   ˆ S r   r   ©Úobjrd   r   r   Ú_providedBy¾   s    zGGenericSpecificationBaseTests.test_providedBy_miss.<locals>._providedBy©Ú
providedBy)	Úzope.interfacerc   Úzope.interface.declarationsre   r6   Ú_MonkeyÚassertFalserj   r   )r!   rc   Úsbrh   r   rd   r   Útest_providedBy_missº   s    z2GenericSpecificationBaseTests.test_providedBy_missc                    sn   ddl m} ddlm‰  |  ¡ }‡ fdd„}t||d" |  | tƒ ¡¡ W d   ƒ n1 s`0    Y  d S )Nr   rb   rd   c                    s   ˆ S r   r   rf   rd   r   r   Ú_implementedByÇ   s    zMGenericSpecificationBaseTests.test_implementedBy_miss.<locals>._implementedBy©ÚimplementedBy)	rk   rc   rl   re   r6   rm   rn   rs   r   )r!   rc   ro   rq   r   rd   r   Útest_implementedBy_missÃ   s    z5GenericSpecificationBaseTests.test_implementedBy_missN)r   r   r   r_   r3   r6   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   r3   Ñ   s    z&SpecificationBaseTests._getTargetClassN©r   r   r   r3   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   ©r6   Ú_impliedrn   ZisOrExtendsr   ©r!   ro   r   r   r   Útest___call___missØ   s    z+SpecificationBasePyTests.test___call___missc                 C   s*   |   ¡ }tƒ }|i i|_|  ||ƒ¡ d S r   ©r6   r   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                    sv   ddl m} |  ¡ ‰G ‡fdd„dtƒ‰ ‡ fdd„}t||d" |  ˆ tƒ ¡¡ W d   ƒ n1 sh0    Y  d S )Nr   rb   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   rf   ©r…   r   r   rq   ó   s    zGSpecificationBasePyTests.test_implementedBy_hit.<locals>._implementedByrr   )rk   rc   r6   r   rm   r~   rs   )r!   rc   rq   r   ©r…   ro   r   Útest_implementedBy_hitî   s    z/SpecificationBasePyTests.test_implementedBy_hitc                    sv   ddl m} |  ¡ ‰G ‡fdd„dtƒ‰ ‡ fdd„}t||d" |  ˆ tƒ ¡¡ W d   ƒ n1 sh0    Y  d S )Nr   rb   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   rf   r†   r   r   rh   ý   s    zASpecificationBasePyTests.test_providedBy_hit.<locals>._providedByri   )rk   rc   r6   r   rm   r~   rj   )r!   rc   rh   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)r6   ra   r   r   r   Ú_makeOneToCompare  s    z3NameAndModuleComparisonTestsMixin._makeOneToComparec              	      sž  dd l }|  ¡ }t||ƒ}t|d| ƒ}G ‡ fdd„dtƒ‰ G dd„ dˆ ƒ}G dd„ dˆ ƒ}|  |ƒ jd	¡ |  |ƒ jd	¡ |  t¡ t|ƒ d
ƒ W d   ƒ n1 s¨0    Y  |  t¡ t|ƒ dƒ W d   ƒ n1 sÞ0    Y  ||fD ]}|  	||ƒ ƒt
¡ qðG dd„ dˆ ƒ}	|  |||	ƒ ƒ¡ |  	||	ƒ ƒt
¡ G dd„ dtƒ}
|  	||
ƒ ƒt
¡ |  t¡ |||
ƒ ƒ W d   ƒ n1 sŒ0    Y  G dd„ dtƒ}|ˆ _|  |¡ t|ƒ d
ƒ W d   ƒ n1 sÚ0    Y  |  |¡ t|ƒ dƒ W d   ƒ n1 s0    Y  ||fD ]t}|  |¡ |||ƒ ƒ W d   ƒ n1 sV0    Y  |  |¡ ||ƒ ƒ W d   ƒ n1 sŒ0    Y  q$d S )Nr   z__%s__c                       s   e Zd ZeZ‡ fdd„ZdS )zaNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnMissingc                    s4   zt  | |¡W S  ty.   ˆ j}||ƒ‚Y n0 d S r   )r   Ú__getattribute__ÚAttributeErrorÚExc)r!   r5   Úexc©ÚRaisesErrorOnMissingr   r   rŽ     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 ©NrH   )r   ra   r   r   r   Ú__init__  s    ziNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnModule.__init__c                 S   s   t ‚d S r   )r   ra   r   r   r   r      s    zkNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnModule.__module__N)r   r   r   r•   Úpropertyr   r   r   r   ÚRaisesErrorOnModule  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   ra   r   r   r   r•   %  s    zgNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.RaisesErrorOnName.__init__N©r   r   r   r•   r   r   r   r   ÚRaisesErrorOnName$  s   rš   rH   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__6  s    zgNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.AllowsAnyComparison.__eq__N©	r   r   r   r   Ú__lt__Ú__le__Ú__gt__Ú__ge__Ú__ne__r   r   r   r   ÚAllowsAnyComparison5  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   ÚAllowsNoComparisonB  s   r¥   c                   @   s   e Zd ZdS )zXNameAndModuleComparisonTestsMixin.__check_NotImplemented_comparison.<locals>.MyExceptionNr   r   r   r   r   ÚMyExceptionO  s   r¦   )Úoperatorr   r   r   r   r   r   rC   r   ÚassertIsÚNotImplementedr~   Ú	TypeErrorÚ	Exceptionr   )r!   r5   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_comparisonra   r   r   r   Útest__lt__NotImplemented_  s    z:NameAndModuleComparisonTestsMixin.test__lt__NotImplementedc                 C   s   |   d¡ d S )NÚler±   ra   r   r   r   Útest__le__NotImplementedb  s    z:NameAndModuleComparisonTestsMixin.test__le__NotImplementedc                 C   s   |   d¡ d S )NÚgtr±   ra   r   r   r   Útest__gt__NotImplementede  s    z:NameAndModuleComparisonTestsMixin.test__gt__NotImplementedc                 C   s   |   d¡ d S )NÚger±   ra   r   r   r   Útest__ge__NotImplementedh  s    z:NameAndModuleComparisonTestsMixin.test__ge__NotImplementedN)	r   r   r   r   r²   r³   rµ   r·   r¹   r   r   r   r   rŠ     s   W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   ra   r   r   r   r3   o  s    z'InterfaceBaseTestsMixin._getTargetClassc                 C   s   ddl m} |S )Nr   )ÚInterfaceBasePy)r   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_conformy  s    z:InterfaceBaseTestsMixin._makeOne.<locals>.IB._call_conformc                    s   ˆ S r   r   ©r!   rg   ©Úobject_should_provider   r   rj   {  s    z7InterfaceBaseTestsMixin._makeOne.<locals>.IB.providedByN)r   r   r   r¼   rj   r   r¾   r   r   ÚIBx  s   rÀ   r`   )r!   r¿   r5   ÚmodulerÀ   r   r¾   r   r6   w  s    z InterfaceBaseTestsMixin._makeOnec                    s:   |   d¡}tƒ ‰ G ‡ fdd„dtƒ}|  ||ƒ ƒˆ ¡ 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Ç   ©r6   r   r¨   )r!   r¬   rÇ   r   rÄ   r   Ú+test___call___w___conform___returning_value  s    
zCInterfaceBaseTestsMixin.test___call___w___conform___returning_valuec                 C   s8   |   d¡}||  ¡ f}tƒ }tƒ }|  |||ƒ|¡ d S )NF)r6   r3   r   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   sT   |   d¡}|  t¡}|tƒ ƒ W d   ƒ n1 s40    Y  |  dt|jƒ¡ d S )NFzCould not adapt)r6   rC   rª   r   ZassertInÚstrZ	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_raisesr6   ra   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   r3   r_   r6   rÉ   rË   rÍ   rÎ   r   r   r   r   rº   l  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   r3     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   s4   |   d¡}G dd„ dtƒ}|ƒ }|  ||ƒ|¡ d S )NTc                   @   s   e Zd Zdd„ ZdS )zSInterfaceBasePyTests.test___call___w___conform___miss_ob_provides.<locals>._Adaptedc                 S   s   d S r   r   rÂ   r   r   r   rÅ   ª  s    z_InterfaceBasePyTests.test___call___w___conform___miss_ob_provides.<locals>._Adapted.__conform__NrÆ   r   r   r   r   rÇ   ©  s   rÇ   rÈ   )r!   r¬   rÇ   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›   )r6   r   r¨   Ú	__adapt__)r!   r¬   rÊ   r   r   r   Útest___adapt___ob_provides¯  s    
z/InterfaceBasePyTests.test___adapt___ob_providesc                    sŒ   ddl m} |  d¡}tƒ }g ‰ ‡ fdd„}dd„ }t|||gd4 |  | |¡|¡ |  ˆ ||fg¡ W d   ƒ n1 s~0    Y  d S )	Nr   rb   Fc                    s   ˆ   | |f¡ d S r   ©Úappend©rÃ   rg   ©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)rk   rc   r6   r   rm   r¨   rÓ   r   )r!   rc   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_   r3   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   r3   Ã  s    z"SpecificationTests._getTargetClassc                 C   s   |t u r|  ¡ ƒ S |  ¡ |ƒS r   )Ú_markerr3   )r!   Úbasesr   r   r   r6   Ç  s    
zSpecificationTests._makeOnec                 C   sj   ddl m} |  ¡ }|  |jd¡ |  t|jƒd¡ |  ||jv ¡ |  ||jv ¡ |  t|jƒd¡ d S )Nr   ©Ú	Interfacer   é   )	r   rã   r6   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é   )r6   Ú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ä   )r6   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   )r6   rì   rC   rD   Úunsubscriberî   r   r   r   Útest_unsubscribe_missã  s    z(SpecificationTests.test_unsubscribe_missc                 C   s\   |   ¡ }tƒ }| |¡ | |¡ | |¡ |  |j| d¡ | |¡ |  ||jv ¡ d S rê   )r6   rì   rí   rò   r   rç   rn   rî   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 )zVSpecificationTests.test___setBases_subscribes_bases_and_notifies_dependents.<locals>.INr   r   r   r   r   ÚI÷  s   rõ   c                   @   s   e Zd ZdS )zVSpecificationTests.test___setBases_subscribes_bases_and_notifies_dependents.<locals>.JNr   r   r   r   r   ÚJù  s   rö   rë   )
r   rã   r6   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v ¡ d S )Nr   râ   c                   @   s   e Zd ZdS )zGSpecificationTests.test_changed_clears_volatiles_and_implied.<locals>.INr   r   r   r   r   rõ     s   rõ   r   r   )r   rã   r6   Ú_v_attrsrz   ÚchangedÚassertIsNonern   )r!   rã   rõ   rè   r   r   r   Ú)test_changed_clears_volatiles_and_implied  s    

z<SpecificationTests.test_changed_clears_volatiles_and_impliedc                 C   sD   ddl m} G dd„ d|ƒ}|  ||g¡}|  t| ¡ ƒ|g¡ d S )Nr   râ   c                   @   s   e Zd ZdS )zCSpecificationTests.test_interfaces_skips_already_seen.<locals>.IFooNr   r   r   r   r   ÚIFoo  s   rþ   )r   rã   r6   r   r;   Ú
interfaces©r!   rã   rþ   rè   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þ     s   rþ   T©Ústrict)r   rã   r6   rn   Úextendsr   r   r   r   Útest_extends_strict_wo_self  s    
z.SpecificationTests.test_extends_strict_wo_selfc                 C   s    |   ¡ }|  |j|dd¡ d S )NTr  )r6   rn   r  ©r!   rè   r   r   r   Útest_extends_strict_w_self  s    z-SpecificationTests.test_extends_strict_w_selfc                 C   s    |   ¡ }|  |j|dd¡ d S )NFr  )r6   r~   r  r  r   r   r   Útest_extends_non_strict_w_self  s    z1SpecificationTests.test_extends_non_strict_w_selfc                 C   s0   |   ¡ }tƒ }d|i|_|  | d¡|u ¡ d S r”   )r6   r   rú   r~   rø   )r!   rè   rH   r   r   r   Útest_get_hit_w__v_attrs#  s    
z*SpecificationTests.test_get_hit_w__v_attrsc                    s†   ddl m‰  ddl m} G ‡ fdd„d|ƒ}G ‡ fdd„d|ƒ}|  ||g¡}|  | d¡| d¡u ¡ |  | d	¡| d	¡u ¡ d S )
Nr   ©Ú	Attributerâ   c                       s   e Zd Z” dƒZdS )zCSpecificationTests.test_get_hit_from_base_wo__v_attrs.<locals>.IFoorH   N)r   r   r   rH   r   r
  r   r   rþ   ,  s   rþ   c                       s   e Zd Z” dƒZdS )zCSpecificationTests.test_get_hit_from_base_wo__v_attrs.<locals>.IBarr)   N©r   r   r   r)   r   r
  r   r   ÚIBar.  s   r  rH   r)   )r   r  rã   r6   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tƒ}G d	d
„ d
|ƒ}G dd„ d|ƒ}||ƒG dd„ dtƒƒ}G dd„ d||ƒ}	|  ||	ƒj||	ƒ||ƒ|||ƒ|tƒ|f¡ d S )Nr   râ   ©Úimplementerrr   c                   @   s   e Zd ZdS )zTSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.IDefaultViewNameNr   r   r   r   r   ÚIDefaultViewName>  s   r  c                   @   s   e Zd ZdS )zKSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.ContextNr   r   r   r   r   ÚContextA  s   r  c                   @   s   e Zd ZdS )zLSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.RDBModelNr   r   r   r   r   ÚRDBModelD  s   r  c                   @   s   e Zd ZdS )zJSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.IOtherNr   r   r   r   r   ÚIOtherG  s   r  c                   @   s   e Zd ZdS )zMSpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.OtherBaseNr   r   r   r   r   Ú	OtherBaseJ  s   r  c                   @   s   e Zd ZdS )zISpecificationTests.test_multiple_inheritance_no_interfaces.<locals>.ModelNr   r   r   r   r   ÚModelN  s   r  )r   rã   rl   r  rs   r   r   Z__sro__)
r!   rã   r  rs   r  r  r  r  r  r  r   r   r   Ú'test_multiple_inheritance_no_interfaces4  s(    úþz:SpecificationTests.test_multiple_inheritance_no_interfacesN)r   r   r   r3   rà   r6   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   r3   `  s    z#InterfaceClassTests._getTargetClassÚITestr   Nc                 C   s   |   ¡ |||||ƒS r   r`   )r!   r5   rá   Úattrsr9   r   r   r   r   r6   d  s    zInterfaceClassTests._makeOnec                 C   sN   |   ¡ }|dƒ}|  |jd¡ |  |jd¡ |  |jd¡ |  | ¡ d¡ d S )NÚITestingr7   r   )r3   r   r   r9   rå   ÚgetBases)r!   ÚklassÚinstr   r   r   r?   h  s    z&InterfaceClassTests.test_ctor_defaultsc                 C   s    |   ¡ }|  t|dtƒ f¡ d S )Nr  )r3   rC   rª   r   )r!   r  r   r   r   Útest_ctor_bad_basesp  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   Ú_barw  s    zBInterfaceClassTests.test_ctor_w_attrs_attrib_methods.<locals>._barr   r7   ©rH   r)   r  ©r  r   )
r   r  r#  r3   r   r   r9   rå   ÚnamesÚkeys)r!   r  r#  r&  ÚATTRSr  r   r   r   r   Ú test_ctor_w_attrs_attrib_methodst  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(  r7   r   ©r3   r   r   r9   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(  r7   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(  r7   r   )	r   r2  r3   r   r   r9   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   )ÚInvalidInterfaceZinvalidr  r(  )Úzope.interface.exceptionsr4  r   r3   rC   )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 )Nr9   ZATTRr  ZEXPLICIT)r  r9   )r3   r   r9   r.  r   r   r   Útest_ctor_w_explicit___doc__¥  s    z0InterfaceClassTests.test_ctor_w_explicit___doc__c                 C   s"   |   ¡ }|  t| ¡ ƒ|g¡ d S r   )r6   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á   )r6   r   r  ©r!   rÃ   Úsubr   r   r   Útest_getBases¯  s    z!InterfaceClassTests.test_getBasesc                 C   s   |   ¡ }|  | |¡¡ d S r   )r6   r~   ÚisEqualOrExtendedByrÂ   r   r   r   Ú!test_isEqualOrExtendedBy_identity´  s    z5InterfaceClassTests.test_isEqualOrExtendedBy_identityc                 C   s<   |   ¡ }| j d|fd}|  | |¡¡ |  | |¡¡ d S r9  )r6   r~   r=  rn   r:  r   r   r   Ú!test_isEqualOrExtendedBy_subiface¸  s    z5InterfaceClassTests.test_isEqualOrExtendedBy_subifacec                 C   s8   |   d¡}|   d¡}|  | |¡¡ |  | |¡¡ d S )NZOneZAnother)r6   rn   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   r7   r'  r*   ÚBazÚIBaser(  ÚIDerived©rá   r  F©Úall©r   r  r#  r6   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   r7   r'  r(  TrF  r)   rH   rH  ©r!   r  r#  r&  r+  r@  r   r   r   Útest_names_w_all_True_no_basesÒ  s    ÿz2InterfaceClassTests.test_names_w_all_True_no_basesc                 C   s‚   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}d	|d
dƒi}| jd|d}| jd|f|d}|  t|jddƒg d¢¡ 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   r7   r'  r*   rB  rC  r(  rD  rE  TrF  ©r)   r*   rH   rH  rJ  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ƒg d¢¡ d S )Nr   r
  r"  c                   S   s   dS r$  r   r   r   r   r   r&  î  s    zJInterfaceClassTests.test_names_w_all_True_bases_w_same_names.<locals>._barc                   S   s   dS r$  r   r   r   r   r   Ú_fooð  s    zJInterfaceClassTests.test_names_w_all_True_bases_w_same_names.<locals>._foor   r7   r'  rB  ©rH   r*   rC  r(  rD  rE  TrF  rR  rH  ©	r!   r  r#  r&  rT  rK  rL  rM  rN  r   r   r   Ú(test_names_w_all_True_bases_w_same_namesë  s    ÿÿz<InterfaceClassTests.test_names_w_all_True_bases_w_same_namesc           	      C   sˆ   ddl m} ddl m} dd„ }dd„ }|dd	ƒ||ƒd
œ}||ƒ|dd	ƒdœ}| jd|d}| jd|f|d}|  t|ƒg d¢¡ d S )Nr   r
  r"  c                   S   s   dS r$  r   r   r   r   r   r&  ÿ  s    z/InterfaceClassTests.test___iter__.<locals>._barc                   S   s   dS r$  r   r   r   r   r   rT    s    z/InterfaceClassTests.test___iter__.<locals>._foor   r7   r'  rB  rU  rC  r(  rD  rE  rR  )r   r  r#  r6   r   rI  rV  r   r   r   Útest___iter__ü  s    ÿÿz!InterfaceClassTests.test___iter__c                 C   sˆ   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}d	|d
dƒi}| jd|d}| jd|f|d}|  t|jddƒd	|d	 fg¡ d S )Nr   r
  r"  c                   S   s   dS r$  r   r   r   r   r   r&    s    zUInterfaceClassTests.test_namesAndDescriptions_w_all_False_ignores_bases.<locals>._barr   r7   r'  r*   rB  rC  r(  rD  rE  FrF  ©r   r  r#  r6   r   rI  ÚnamesAndDescriptionsrJ  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&     s    zOInterfaceClassTests.test_namesAndDescriptions_w_all_True_no_bases.<locals>._barr   r7   r'  r(  FrF  r)   rH   rY  rP  r   r   r   Ú-test_namesAndDescriptions_w_all_True_no_bases  s    ÿ

ÿÿzAInterfaceClassTests.test_namesAndDescriptions_w_all_True_no_basesc                 C   sœ   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}d	|d
dƒi}| jd|d}| jd|f|d}|  t|jddƒd|d fd	|d	 fd|d fg¡ d S )Nr   r
  r"  c                   S   s   dS r$  r   r   r   r   r   r&  .  s    zMInterfaceClassTests.test_namesAndDescriptions_w_all_True_simple.<locals>._barr   r7   r'  r*   rB  rC  r(  rD  rE  TrF  r)   rH   rY  rJ  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  B  s    zYInterfaceClassTests.test_namesAndDescriptions_w_all_True_bases_w_same_names.<locals>._foor   r7   r'  rB  rU  rC  r(  rD  rE  TrF  r)   r*   rH   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 rA   )r6   rC   rD   ÚgetDescriptionFor©r!   r@  r   r   r   Útest_getDescriptionFor_missR  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&  Y  s    z<InterfaceClassTests.test_getDescriptionFor_hit.<locals>._barr   r7   r'  r(  rH   r)   )r   r  r#  r6   r   r_  rP  r   r   r   Útest_getDescriptionFor_hitV  s    ÿz.InterfaceClassTests.test_getDescriptionFor_hitc                    s$   |   ¡ ‰ ‡ fdd„}|  t|¡ d S )Nc                      s   ˆ d S rA   r   r   ©r@  r   r   Ú_testd  s    z8InterfaceClassTests.test___getitem___miss.<locals>._test)r6   rC   rD   )r!   rd  r   rc  r   Útest___getitem___missb  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&  k  s    z6InterfaceClassTests.test___getitem___hit.<locals>._barr   r7   r'  r(  rH   r)   )r   r  r#  r6   r   rP  r   r   r   Útest___getitem___hith  s    ÿz(InterfaceClassTests.test___getitem___hitc                 C   s   |   ¡ }|  d|v ¡ d S rA   )r6   rn   r`  r   r   r   Útest___contains___misst  s    z*InterfaceClassTests.test___contains___missc                 C   s`   ddl m} ddl m} dd„ }|ddƒ||ƒdœ}| j|d	}|  d
|v ¡ |  d|v ¡ d S )Nr   r
  r"  c                   S   s   dS r$  r   r   r   r   r   r&  {  s    z7InterfaceClassTests.test___contains___hit.<locals>._barr   r7   r'  r(  rH   r)   )r   r  r#  r6   r~   rP  r   r   r   Útest___contains___hitx  s    ÿz)InterfaceClassTests.test___contains___hitc                 C   s   |   ¡ }|  | d¡d ¡ d S rA   )r6   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   r7   r'  rB  rU  rC  r(  rD  rE  rH   r*   r)   )r   r  r#  r6   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 rA   )r6   r   ÚqueryDescriptionForrÂ   r   r   r   Útest_queryDescriptionFor_miss›  s    z1InterfaceClassTests.test_queryDescriptionFor_missc                 C   s@   ddl m} d|ddƒi}| j|d}|  | d¡|d ¡ d S )Nr   r
  ÚattrZTitleZDescriptionr(  )rk   r  r6   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   )r6   r   rJ   r   ÚvalidateInvariants)r!   rq  rÃ   rg   r   rp  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   rq  ³  s    zTInterfaceClassTests.test_validateInvariants_fail_wo_errors_passed.<locals>._passablec                     s   ˆ  | |f¡ ˆ ‚d S r   rÕ   r   ©ru  Ú_fail_called_withr   r   Ú_fail·  s    zPInterfaceClassTests.test_validateInvariants_fail_wo_errors_passed.<locals>._failr   ©r5  ru  r6   r   rJ   rC   rr  r   )r!   rq  rz  rÃ   rg   r   ©ru  ry  rw  r   Ú-test_validateInvariants_fail_wo_errors_passed°  s    zAInterfaceClassTests.test_validateInvariants_fail_wo_errors_passedc                    sŒ   ddl m‰  g }g ‰‡ ‡fdd„}|  ¡ }tƒ }| d|g¡ |  ˆ |j||¡ |  ˆ|fi fg¡ |  t|ƒd¡ |  	t
|d ˆ ƒ¡ d S )Nr   rt  c                     s   ˆ  | |f¡ ˆ ‚d S r   rÕ   r   rx  r   r   rz  Å  s    zOInterfaceClassTests.test_validateInvariants_fail_w_errors_passed.<locals>._failr   rë   ©r5  ru  r6   r   rJ   rC   rr  r   ræ   r~   Ú
isinstance)r!   Ú_errorsrz  rÃ   rg   r   rx  r   Ú,test_validateInvariants_fail_w_errors_passedÁ  s    z@InterfaceClassTests.test_validateInvariants_fail_w_errors_passedc                    s¤   ddl m‰  g ‰‡fdd„}g ‰‡ ‡fdd„}|  d¡}|  d|f¡}tƒ }| d	|g¡ | d	|g¡ |  ˆ |j|¡ |  ˆ|fi fg¡ |  ˆ|fi fg¡ d S )
Nr   rt  c                     s   ˆ   | |f¡ dS r›   rÕ   r   rv  r   r   rq  Ó  s    z\InterfaceClassTests.test_validateInvariants_fail_in_base_wo_errors_passed.<locals>._passablec                     s   ˆ  | |f¡ ˆ ‚d S r   rÕ   r   rx  r   r   rz  ×  s    zXInterfaceClassTests.test_validateInvariants_fail_in_base_wo_errors_passed.<locals>._failrC  rD  r   r{  )r!   rq  rz  rM  rN  rg   r   r|  r   Ú5test_validateInvariants_fail_in_base_wo_errors_passedÐ  s    
zIInterfaceClassTests.test_validateInvariants_fail_in_base_wo_errors_passedc                    sÎ   ddl m‰  g }g ‰‡fdd„}g ‰‡ ‡fdd„}|  d¡}|  d|f¡}tƒ }| d	|g¡ | d	|g¡ |  ˆ |j||¡ |  ˆ|fi fg¡ |  ˆ|fi fg¡ |  t|ƒd
¡ |  	t
|d ˆ ƒ¡ d S )Nr   rt  c                     s   ˆ   | |f¡ dS r›   rÕ   r   rv  r   r   rq  ç  s    z[InterfaceClassTests.test_validateInvariants_fail_in_base_w_errors_passed.<locals>._passablec                     s   ˆ  | |f¡ ˆ ‚d S r   rÕ   r   rx  r   r   rz  ë  s    zWInterfaceClassTests.test_validateInvariants_fail_in_base_w_errors_passed.<locals>._failrC  rD  r   rë   r~  )r!   r€  rq  rz  rM  rN  rg   r   r|  r   Ú4test_validateInvariants_fail_in_base_w_errors_passedã  s     
zHInterfaceClassTests.test_validateInvariants_fail_in_base_w_errors_passedc                    sZ   g ‰ ‡ fdd„}t ƒ }|  d¡}| d|g¡ |  d|f¡}| |¡ |  dtˆ ƒ¡ d S )Nc                     s   ˆ   | |f¡ dS r›   rÕ   r   rv  r   r   rq  ü  s    zbInterfaceClassTests.test_validateInvariants_inherited_not_called_multiple_times.<locals>._passablerC  r   rD  rë   )r   r6   rJ   rr  r   ræ   )r!   rq  rg   rM  rN  r   rv  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)r6   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)r6   r   ÚhashrÂ   r   r   r   Útest___hash___normal  s    

ÿz(InterfaceClassTests.test___hash___normalc                 C   sP   G dd„ d|   ¡ ƒ}|ƒ }|  t¡ t|ƒ W d   ƒ n1 sB0    Y  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   ra   r   r   r   r•     s    zRInterfaceClassTests.test___hash___missing_required_attrs.<locals>.Derived.__init__Nr™   r   r   r   r   ÚDerived  s   rŠ  )r3   rC   r   rˆ  )r!   rŠ  rN  r   r   r   Ú$test___hash___missing_required_attrs  s    z8InterfaceClassTests.test___hash___missing_required_attrsc                 C   s´   |   ¡ }|  |d k ¡ |  |d k¡ |  |d k¡ |  |d k¡ |  |d k¡ |  |d k¡ |  d |k ¡ |  d |k¡ |  d |k¡ |  d |k¡ |  d |k¡ |  d |k¡ d S r   ©r6   r~   rn   rÂ   r   r   r   Útest_comparison_with_None  s    z-InterfaceClassTests.test_comparison_with_Nonec                 C   s`   |   ¡ }|  ||k ¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ d S r   )r6   rn   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¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ d S )NÚINamezzope.interface.tests.oner˜   zzope.interface.tests.otherrŒ  )r!   r@  rœ   r   r   r   Ú8test_comparison_with_same_named_instance_in_other_module5  s    zLInterfaceClassTests.test_comparison_with_same_named_instance_in_other_modulec                    sà   G dd„ dt ƒ‰ G ‡ fdd„d|  ¡ ƒ}|  d¡}|  ||  ¡ ¡ |  t|ƒ|  ¡ ¡ |  t¡ |dƒ W d   ƒ n1 s~0    Y  ||_|  ||¡ |  t|ƒ|¡ |  ˆ ¡ |dƒ W d   ƒ n1 sÒ0    Y  d S )Nc                   @   s   e Zd ZdS )zDInterfaceClassTests.test_assignment_to__class__.<locals>.MyExceptionNr   r   r   r   r   r¦   I  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__M  s    zRInterfaceClassTests.test_assignment_to__class__.<locals>.MyInterfaceClass.__call__N©r   r   r   r“  r   r’  r   r   ÚMyInterfaceClassL  s   r•  r  rë   )	r«   r3   r6   ÚassertIsInstancer¨   ÚtyperC   rª   Ú	__class__)r!   r•  rþ   r   r’  r   Útest_assignment_to__class__G  s    
&z/InterfaceClassTests.test_assignment_to__class__c                 C   s¶   ddl m} G dd„ d|  ¡ ƒ}|d|fƒ}|  |dƒd¡ G dd	„ d	|ƒ}|  |dƒd¡ G d
d„ d|ƒ}|  t¡ |ƒ  W d   ƒ n1 s’0    Y  ||_|  |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“  d  s    zSInterfaceClassTests.test_assignment_to__class__2.<locals>.MyInterfaceClass.__call__Nr”  r   r   r   r   r•  c  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  j  s   r  c                   @   s   e Zd ZdS )z?InterfaceClassTests.test_assignment_to__class__2.<locals>.ISpamNr   r   r   r   r   ÚISpamo  s   rš  )rk   rã   r3   r   rC   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tf¡ d|_W d   ƒ n1 s20    Y  d S )Nzdifferent.module)r6   rC   r   rª   r   )r!   r   r   r   r   Útest__module__is_readonlyx  s    z-InterfaceClassTests.test__module__is_readonly)r  r   NNN)4r   r   r   r3   r6   r?   r!  r,  r/  r1  r3  r6  r7  r8  r<  r>  r?  rA  rO  rQ  rS  rW  rX  r[  r\  r]  r^  ra  rb  re  rf  rg  rh  rj  rk  rm  ro  rs  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%e&dGdH„ ƒZ'dIdJ„ Z(dKdL„ Z)dMdN„ Z*dOdP„ Z+dQdR„ Z,dSdT„ Z-dUdV„ Z.dWdX„ Z/dYdZ„ Z0d[d\„ Z1d]d^„ Z2d_d`„ Z3dadb„ Z4dcdd„ Z5dedf„ Z6dgdh„ Z7didj„ Z8dkS )lÚInterfaceTestsc                    sD   ddl m} ddl m‰  G ‡ fdd„d|ƒ}|  |d j|u ¡ 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  )rk   rã   r  r~   rc   ©r!   rã   rŸ  r   r
  r   Ú!test_attributes_link_to_interface‚  s    z0InterfaceTests.test_attributes_link_to_interfacec                 C   s4   ddl m} G dd„ d|ƒ}|  |d j|u ¡ 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   )rH   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£  )rk   rã   r~   rc   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
tƒ}|ƒ }|  ˆ  |¡¡ |  | |¡¡ |  ˆ ˆ ¡ |  ˆ ||ƒv ¡ |  |||ƒv ¡ |  ˆ ||ƒv ¡ |  |||ƒv ¡ d S )Nr   râ   rr   ri   c                   @   s   e Zd Zdd„ Zdd„ ZdS )z<InterfaceTests.test_classImplements_simple.<locals>.ICurrentc                 S   s   d S r   r   ©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§  ¥  s    zCInterfaceTests.test_classImplements_simple.<locals>.Current.method1c                 S   s
   t ƒ ‚d S r   r   rª  r   r   r   r¨  §  s    zCInterfaceTests.test_classImplements_simple.<locals>.Current.method2N)r   r   r   Ú__implemented__r§  r¨  r   ©r©  r   r   ÚCurrent£  s   r­  )rk   rã   rs   rj   r   r~   rn   r   )r!   rã   rs   rj   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
ƒ}|ƒ }|  ˆ  |¡¡ |  | |¡¡ |  ˆ ||ƒv ¡ |  |||ƒv ¡ |  ˆ ||ƒv ¡ |  |||ƒv ¡ d S )Nr   râ   rr   ri   c                   @   s   e Zd Zdd„ ZdS )zCInterfaceTests.test_classImplements_base_not_derived.<locals>.IBasec                   S   s   d S r   r   r   r   r   r   r£  ¹  s    zJInterfaceTests.test_classImplements_base_not_derived.<locals>.IBase.methodNr¤  r   r   r   r   rC  ¸  s   rC  c                   @   s   e Zd ZdS )zFInterfaceTests.test_classImplements_base_not_derived.<locals>.IDerivedNr   r   r   r   r   rD  »  s   rD  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   ra   r   r   r   r£  ¿  s    zLInterfaceTests.test_classImplements_base_not_derived.<locals>.Current.methodN©r   r   r   r«  r£  r   ©rC  r   r   r­  ½  s   r­  )rk   rã   rs   rj   r~   rn   )r!   rã   rs   rj   rD  r­  r®  r   r±  r   Ú%test_classImplements_base_not_derived´  s    z4InterfaceTests.test_classImplements_base_not_derivedc                    sö   ddl m} ddl m} ddl m} G dd„ d|ƒ}G dd„ d|ƒ‰ G ‡ fd	d
„d
tƒ}|ƒ }|  | |¡¡ |  ˆ  |¡¡ |  |||ƒv ¡ |  |||ƒ ¡ v ¡ |  ˆ ||ƒv ¡ |  |||ƒv ¡ |  |||ƒ ¡ v ¡ |  ˆ ||ƒv ¡ d S )Nr   râ   rr   ri   c                   @   s   e Zd Zdd„ ZdS )zCInterfaceTests.test_classImplements_base_and_derived.<locals>.IBasec                   S   s   d S r   r   r   r   r   r   r£  Ð  s    zJInterfaceTests.test_classImplements_base_and_derived.<locals>.IBase.methodNr¤  r   r   r   r   rC  Ï  s   rC  c                   @   s   e Zd ZdS )zFInterfaceTests.test_classImplements_base_and_derived.<locals>.IDerivedNr   r   r   r   r   rD  Ó  s   rD  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   ra   r   r   r   r£  Ø  s    zLInterfaceTests.test_classImplements_base_and_derived.<locals>.Current.methodNr°  r   ©rD  r   r   r­  Ö  s   r­  )rk   rã   rs   rj   r   r~   rn   Z	flattened)r!   rã   rs   rj   rC  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
tƒ}G ‡fdd„dtƒ}G dd„ d||ƒ}|ƒ }|  ˆ  |¡¡ |  ˆ |¡¡ |  ˆ ||ƒv ¡ |  ˆ||ƒv ¡ |  ˆ ||ƒv ¡ |  ˆ||ƒv ¡ d S )Nr   râ   rr   ri   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   ra   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¼  )rk   rã   rs   rj   r   r~   )r!   rã   rs   rj   r¸  r»  r¼  Zambir   )rµ  r¶  r   Útest_classImplements_multipleæ  s    z,InterfaceTests.test_classImplements_multiplec                    sL  ddl m} ddl m} ddl m} G dd„ d|ƒ‰ G dd„ dˆ ƒ‰G d	d
„ d
|ƒ‰G ‡ fdd„dƒ‰G ‡fdd„dtƒ}G ‡fdd„dtƒ‰G ‡‡fdd„dˆ|ƒ}|ƒ }|  ˆ  |¡¡ |  ˆ |¡¡ |  ˆ |¡¡ |  ˆ ||ƒv ¡ |  ˆ||ƒv ¡ |  ˆ||ƒv ¡ |  ˆ ||ƒv ¡ |  ˆ||ƒv ¡ |  ˆ||ƒv ¡ d S )Nr   râ   rr   ri   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   ra   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¿  )rk   rã   rs   rj   r   r~   rn   )r!   rã   rs   rj   r»  r¿  Z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)rk   rã   r˜  r~   r  rn   )r!   rã   ÚnewrÁ  rÂ  rÃ  rÄ  r   r   r   ÚtestInterfaceExtendsInterface2  s    z,InterfaceTests.testInterfaceExtendsInterfacec                    s`   ddl m‰  ddl m} ddlm} G ‡ fdd„d|ƒ‰G ‡fdd„dtƒ}|  |ˆ|ƒ¡ d S )	Nr   r
  râ   )ÚverifyClassc                       s   e Zd Z” dƒZdd„ ZdS )z1InterfaceTests.test_verifyClass.<locals>.ICheckMerž  c                   S   s   dS r¢  r   r   r   r   r   r£  L  s    z8InterfaceTests.test_verifyClass.<locals>.ICheckMe.methodN©r   r   r   rn  r£  r   r
  r   r   ÚICheckMeI  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   ra   r   r   r   r£  S  s    z7InterfaceTests.test_verifyClass.<locals>.CheckMe.methodN©r   r   r   r«  rn  r£  r   ©rÉ  r   r   ÚCheckMeO  s   rÍ  )rk   r  rã   r[   rÇ  r   r~   )r!   rã   rÇ  rÍ  r   ©r  rÉ  r   Útest_verifyClassC  s    zInterfaceTests.test_verifyClassc                    sf   ddl m‰  ddl m} ddlm} G ‡ fdd„d|ƒ‰G ‡fdd„dtƒ}|ƒ }|  |ˆ|ƒ¡ d S )	Nr   r
  râ   rY   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£  a  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   ra   r   r   r   r£  h  s    z8InterfaceTests.test_verifyObject.<locals>.CheckMe.methodNrË  r   rÌ  r   r   rÍ  d  s   rÍ  )rk   r  rã   r[   rZ   r   r~   )r!   rã   rZ   rÍ  Zcheck_mer   rÎ  r   Útest_verifyObjectX  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   ÚAnInterfacer  s   rÑ  )rk   rã   r~   rj   )r!   rã   rÑ  r   r   r   Ú(test_interface_object_provides_Interfaceo  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£  ©rk   r  rã   r   rI  r)  ©r!   rã   rÓ  r   r
  r   Útest_names_simplew  s    z InterfaceTests.test_names_simplec                    sx   ddl m‰  ddl m} G ‡ fdd„d|ƒ}G ‡ fdd„d|ƒ}|  t| ¡ ƒg d¢¡ |  t|jd	d
ƒg d¢¡ d S )Nr   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   rC  ‰  s   rC  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   rD    s   rD  )rÙ  r£  r¨  TrF  ©rn  rÙ  r£  r¨  rÔ  ©r!   rã   rC  rD  r   r
  r   Útest_names_derived„  s    	ÿÿz!InterfaceTests.test_names_derivedc                    s  ddl m‰  ddlm} ddl m} G ‡ fdd„d|ƒ}t| ¡ ƒ}|  t|ƒd¡ |  |d d d¡ |  	t
|d d	 ˆ ƒ¡ |  |d d	 jd¡ |  |d d	 jd
¡ |  |d	 d d¡ |  	t
|d	 d	 |ƒ¡ |  |d	 d	 jd¡ |  |d	 d	 jd¡ d S )Nr   r
  ©ÚMethodrâ   c                       s   e Zd Z” dƒZdd„ ZdS )z@InterfaceTests.test_namesAndDescriptions_simple.<locals>.ISimplerž  c                   S   s   dS ©ú	My methodNr   r   r   r   r   r£  ¦  s    zGInterfaceTests.test_namesAndDescriptions_simple.<locals>.ISimple.methodNrÈ  r   r
  r   r   rÓ  £  s   rÓ  rä   rn  rë   rž  r£  rà  )rk   r  r   rÞ  rã   rI  rZ  r   ræ   r~   r  r   r9   )r!   rÞ  rã   rÓ  Úname_valuesr   r
  r   Ú test_namesAndDescriptions_simple  s    z/InterfaceTests.test_namesAndDescriptions_simplec                    sô  ddl m‰  ddl m} ddlm} G ‡ fdd„d|ƒ}G ‡ fdd„d|ƒ}t| ¡ ƒ}|  t|ƒd	¡ |  |d d d
¡ |  	t
|d d ˆ ƒ¡ |  |d d jd
¡ |  |d d jd¡ |  |d d d¡ |  	t
|d d |ƒ¡ |  |d d jd¡ |  |d d jd¡ |  |d d d¡ |  	t
|d d |ƒ¡ |  |d d jd¡ |  |d d jd¡ t|jddƒ}|  t|ƒd¡ |  |d d d¡ |  	t
|d d ˆ ƒ¡ |  |d d jd¡ |  |d d jd¡ |  |d d d
¡ |  	t
|d d ˆ ƒ¡ |  |d d jd
¡ |  |d d jd¡ |  |d d d¡ |  	t
|d d |ƒ¡ |  |d d jd¡ |  |d d jd¡ |  |d	 d d¡ |  	t
|d	 d |ƒ¡ |  |d	 d jd¡ |  |d	 d jd¡ d S )Nr   r
  râ   rÝ  c                       s   e Zd Z” dƒZdd„ ZdS )z?InterfaceTests.test_namesAndDescriptions_derived.<locals>.IBaserž  c                   S   s   dS rß  r   r   r   r   r   r£  ¾  s    zFInterfaceTests.test_namesAndDescriptions_derived.<locals>.IBase.methodNrÈ  r   r
  r   r   rC  »  s   rC  c                       s$   e Zd Z” dƒZdd„ Zdd„ ZdS )zBInterfaceTests.test_namesAndDescriptions_derived.<locals>.IDerivedr×  c                   S   s   dS ©úMy method, overriddenNr   r   r   r   r   r£  Ä  s    zIInterfaceTests.test_namesAndDescriptions_derived.<locals>.IDerived.methodc                   S   s   dS ©ú
My method2Nr   r   r   r   r   r¨  Ç  s    zJInterfaceTests.test_namesAndDescriptions_derived.<locals>.IDerived.method2NrØ  r   r
  r   r   rD  Á  s   rD  é   rÙ  rë   r×  r£  rä  rä   r¨  ræ  TrF  é   rn  rž  )rk   r  rã   r   rÞ  rI  rZ  r   ræ   r~   r  r   r9   )r!   rã   rÞ  rC  rD  rá  r   r
  r   Ú!test_namesAndDescriptions_derivedµ  sJ    	z0InterfaceTests.test_namesAndDescriptions_derivedc                 C   s0   ddl m} G dd„ d|ƒ}|  t|jd¡ d S )Nr   râ   c                   @   s   e Zd ZdS )zIInterfaceTests.test_getDescriptionFor_nonesuch_no_default.<locals>.IEmptyNr   r   r   r   r   ÚIEmptyñ  s   rê  rB   )rk   rã   rC   rD   r_  ©r!   rã   rê  r   r   r   Ú*test_getDescriptionFor_nonesuch_no_defaultî  s    z9InterfaceTests.test_getDescriptionFor_nonesuch_no_defaultc                    s¨   ddl m‰  ddlm} ddl m} G ‡ fdd„d|ƒ}| d¡}|  t|ˆ ƒ¡ |  |j	d¡ |  |j
d¡ | d	¡}|  t||ƒ¡ |  |j	d	¡ |  |j
d
¡ d S )Nr   r
  rÝ  râ   c                       s   e Zd Z” dƒZdd„ ZdS )z=InterfaceTests.test_getDescriptionFor_simple.<locals>.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à  ©rk   r  r   rÞ  rã   r_  r~   r  r   r   r9   ©r!   rÞ  rã   rÓ  Úa_descÚm_descr   r
  r   Útest_getDescriptionFor_simpleö  s    

z,InterfaceTests.test_getDescriptionFor_simplec           	         s(  ddl m‰  ddlm} ddl m} G ‡ fdd„d|ƒ}G ‡ fdd„d|ƒ}| d	¡}|  t|ˆ ƒ¡ |  |j	d	¡ |  |j
d
¡ | d¡}|  t||ƒ¡ |  |j	d¡ |  |j
d¡ | d¡}|  t|ˆ ƒ¡ |  |j	d¡ |  |j
d¡ | d¡}|  t||ƒ¡ |  |j	d¡ |  |j
d¡ d S )Nr   r
  rÝ  râ   c                       s   e Zd Z” dƒZdd„ ZdS )z<InterfaceTests.test_getDescriptionFor_derived.<locals>.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   rC    s   rC  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   rD    s   rD  rn  rž  r£  rä  rÙ  r×  r¨  ræ  rí  ©	r!   rÞ  rã   rC  rD  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ê  8  s   rê  rB   )rk   rã   rC   rD   Ú__getitem__rë  r   r   r   Útest___getitem__nonesuch5  s    z'InterfaceTests.test___getitem__nonesuchc                    s¤   ddl m‰  ddlm} ddl m} G ‡ fdd„d|ƒ}|d }|  t|ˆ ƒ¡ |  |jd¡ |  |j	d¡ |d	 }|  t||ƒ¡ |  |jd	¡ |  |j	d
¡ d S )Nr   r
  rÝ  râ   c                       s   e Zd Z” dƒZdd„ ZdS )z6InterfaceTests.test___getitem__simple.<locals>.ISimplerž  c                   S   s   dS rß  r   r   r   r   r   r£  F  s    z=InterfaceTests.test___getitem__simple.<locals>.ISimple.methodNrÈ  r   r
  r   r   rÓ  C  s   rÓ  rn  rž  r£  rà  ©
rk   r  r   rÞ  rã   r~   r  r   r   r9   rî  r   r
  r   Útest___getitem__simple=  s    z%InterfaceTests.test___getitem__simplec           	         s   ddl m‰  ddlm} ddl m} G ‡ fdd„d|ƒ}G ‡ fdd„d|ƒ}|d	 }|  t|ˆ ƒ¡ |  |jd	¡ |  |j	d
¡ |d }|  t||ƒ¡ |  |jd¡ |  |j	d¡ |d }|  t|ˆ ƒ¡ |  |jd¡ |  |j	d¡ |d }|  t||ƒ¡ |  |jd¡ |  |j	d¡ d S )Nr   r
  rÝ  râ   c                       s   e Zd Z” dƒZdd„ ZdS )z6InterfaceTests.test___getitem___derived.<locals>.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   rC  Y  s   rC  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£  b  s    z@InterfaceTests.test___getitem___derived.<locals>.IDerived.methodc                   S   s   dS rå  r   r   r   r   r   r¨  e  s    zAInterfaceTests.test___getitem___derived.<locals>.IDerived.method2NrØ  r   r
  r   r   rD  _  s   rD  rn  rž  r£  rä  rÙ  r×  r¨  ræ  rö  rò  r   r
  r   Útest___getitem___derivedS  s*    	z'InterfaceTests.test___getitem___derivedc                 C   s.   ddl m} G dd„ d|ƒ}|  d|v ¡ 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ê  rB   )rk   rã   rn   rë  r   r   r   Útest___contains__nonesuch|  s    z(InterfaceTests.test___contains__nonesuchc                    sL   ddl m‰  ddl m} G ‡ fdd„d|ƒ}|  d|v ¡ |  d|v ¡ 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£  ©rk   r  rã   r~   rÕ  r   r
  r   Útest___contains__simple„  s
    z&InterfaceTests.test___contains__simplec                    s|   ddl m‰  ddl m} G ‡ fdd„d|ƒ}G ‡ fdd„d|ƒ}|  d|v ¡ |  d	|v ¡ |  d
|v ¡ |  d|v ¡ 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   rC  —  s   rC  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   rD    s   rD  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ê  ®  s   rê  )rk   rã   r   r;   rë  r   r   r   Útest___iter__empty«  s    z!InterfaceTests.test___iter__emptyc                    sH   ddl m‰  ddl m} G ‡ fdd„d|ƒ}|  tt|ƒƒddg¡ d S )Nr   r
  râ   c                       s   e Zd Z” dƒZdd„ ZdS )z3InterfaceTests.test___iter__simple.<locals>.ISimplerž  c                   S   s   dS rß  r   r   r   r   r   r£  »  s    z:InterfaceTests.test___iter__simple.<locals>.ISimple.methodNrÈ  r   r
  r   r   rÓ  ¸  s   rÓ  rn  r£  ©rk   r  rã   r   rI  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|ƒƒg d¢¡ 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£  È  s    z9InterfaceTests.test___iter__derived.<locals>.IBase.methodNrÈ  r   r
  r   r   rC  Å  s   rC  c                       s$   e Zd Z” dƒZdd„ Zdd„ ZdS )z5InterfaceTests.test___iter__derived.<locals>.IDerivedr×  c                   S   s   dS rã  r   r   r   r   r   r£  Î  s    z<InterfaceTests.test___iter__derived.<locals>.IDerived.methodc                   S   s   dS rå  r   r   r   r   r   r¨  Ñ  s    z=InterfaceTests.test___iter__derived.<locals>.IDerived.method2NrØ  r   r
  r   r   rD  Ë  s   rD  rÚ  rþ  rÛ  r   r
  r   Útest___iter__derivedÀ  s    	ÿz#InterfaceTests.test___iter__derivedc                 C   s:   ddl m} G dd„ d|ƒ}|d }|  | d¡d¡ d S )Nr   râ   c                   @   s   e Zd Zdd„ Zde_dS )zLInterfaceTests.test_function_attributes_become_tagged_values.<locals>.ITagMec                   S   s   d S r   r   r   r   r   r   r£  Û  s    zSInterfaceTests.test_function_attributes_become_tagged_values.<locals>.ITagMe.methodrë   N)r   r   r   r£  Úoptionalr   r   r   r   ÚITagMeÚ  s   r  r£  r  rë   )rk   rã   r   rE   )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   r9   r   r   r   r   ÚIHaveADocStringå  s   r  r  )rk   rã   r   r9   r;   ©r!   rã   r  r   r   r   Útest___doc___non_elementâ  s    z'InterfaceTests.test___doc___non_elementc                    sP   ddl m‰  ddl m} G ‡ fdd„d|ƒ}|  |jd¡ |  t|ƒdg¡ d S )Nr   r
  râ   c                       s   e Zd ZdZ” dƒZdS )z?InterfaceTests.test___doc___as_element.<locals>.IHaveADocStringr  úthe docNr  r   r
  r   r   r  ï  s   r  r7   r9   )rk   r  rã   r   r9   r;   r  r   r
  r   Útest___doc___as_elementë  s
    z&InterfaceTests.test___doc___as_elementc           
   
   C   s¸   ddl m} |  ||j|¡ g }z| ||¡ |  d¡ W n6 |yp } z|  |jd |¡ W Y d }~n
d }~0 0 |  t|ƒ|¡ dd„ |D ƒ}| ¡  |D ]}	|  |	| 	d¡¡ qœd S )Nr   rt  z&validateInvariants should always raisec                 S   s   g | ]}|j d  ‘qS )r   ©r   )Ú.0Úerrorr   r   r   Ú
<listcomp>  ó    z/InterfaceTests._errorsEqual.<locals>.<listcomp>)
r5  ru  rC   rr  Úfailr   r   ræ   ÚsortÚpop)
r!   Úhas_invariantZ	error_lenZ
error_msgsrÃ   ru  Úer  ZmsgsÚmsgr   r   r   Ú_errorsEqualö  s    (zInterfaceTests._errorsEqualc                    sÖ   ddl m‰  ddl m} ddl m} ddl m‰ G ‡ ‡fdd„d|ƒ}G dd	„ d	tƒ}|ƒ }|||ƒ |  | d
¡tg¡ |  | 	|¡d ¡ d|_
|  | 	|¡d ¡ d|_|  | 	|¡d ¡ |`
|  |ddg|¡ d S )Nr   r
  râ   ©ÚdirectlyProvidesr   c                       s$   e Zd Z” dƒZ” dƒZ”eƒ dS )z8InterfaceTests.test_invariant_simple.<locals>.IInvariantrH   ú*bar; must eval to Boolean True if foo doesN©r   r   r   rH   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!)rk   r  rã   r  r   r   r   rE   r  rr  r)   rH   r  )r!   rã   r  r  r  r  r   r  r   Útest_invariant_simple  s(    
ÿÿz$InterfaceTests.test_invariant_simplec                    s  ddl m‰  ddl m} ddl m} ddl m‰ G ‡ ‡fdd„d|ƒ}G ‡fdd	„d	|ƒ}G d
d„ dtƒ}|  | d¡tg¡ |ƒ }|||ƒ d|_	|  
|ddg|¡ d|_	d|_|  
|ddg|¡ d|_	d|_|  
|dddg|¡ d|_	d|_|  | |¡d ¡ d S )Nr   r
  râ   r  r   c                       s$   e Zd Z” dƒZ” dƒZ”eƒ dS )z8InterfaceTests.test_invariant_nested.<locals>.IInvariantrH   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  2  s   r  r   r   rë   r!  rä   ú%Please, Boo MUST be greater than Foo!)rk   r  rã   r  r   r   r   rE   r#  rH   r  r)   rr  )r!   rã   r  r  r$  r  r  r   r  r   Útest_invariant_nested$  sB    ÿ
ÿþÿýz$InterfaceTests.test_invariant_nestedc                    s  ddl m‰  ddl m} ddl m} ddl m‰ G ‡ ‡fdd„d|ƒ}G dd	„ d	tƒ}|ƒ }|||ƒ d
|_| d¡}|d d … }| t	¡ | 
d|¡ |  |ddg|¡ d|_d|_|  |ddg|¡ d|_d|_|  |dddg|¡ d|_d|_|  | |¡d ¡ | 
d|¡ d S )Nr   r
  râ   r  r   c                       s$   e Zd Z” dƒZ” dƒZ”eƒ dS )z:InterfaceTests.test_invariant_mutandis.<locals>.IInvariantrH   r  Nr  r   r  r   r   r  Y  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%  )rk   r  rã   r  r   r   rH   rE   rÖ   r#  rJ   r  r)   r   rr  )r!   rã   r  r  r  r  Zold_invariantsr   r   r  r   Útest_invariant_mutandisS  sB    


ÿÿÿý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   r)  r7   r9   )rk   rã   r  r   r9   r;   )r!   rã   r(  r)  r   r
  r   Útest___doc___elementˆ  s    z#InterfaceTests.test___doc___elementc                 C   s>   ddl m} G dd„ d|ƒ}G dd„ dƒ}|  t|j|¡ d S )Nr   râ   c                   @   s   e Zd ZdZdS )z&InterfaceTests.testIssue228.<locals>.Ir  Nr  r   r   r   r   rõ      s   rõ   c                   @   s   e Zd ZdZdS )z-InterfaceTests.testIssue228.<locals>.OldStyleN)r   r   r   Z__providedBy__r   r   r   r   ÚOldStyle£  s   r+  )rk   rã   rC   r   rj   )r!   rã   rõ   r+  r   r   r   ÚtestIssue228™  s    zInterfaceTests.testIssue228c              
      sÚ   ddl m} ddl m‰  ddl m} ddl m‰ ddlm‰ G ‡ ‡‡fdd„d|ƒ}||ƒG d	d
„ d
tƒƒ}| |ddƒ¡ | |ddƒ¡ z| |ddƒ¡ W n4 ˆyÔ } z|  	t
|ƒd¡ W Y d }~n
d }~0 0 d S )Nr   râ   r
  r  r   rt  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)Úobrt  r   r   Úrange_invariant³  s    zJInterfaceTests.test_invariant_as_decorator.<locals>.IRange.range_invariantN)r   r   r   r/  r.  r1  r   ©r  ru  r   r   r   ÚIRange¯  s   r3  c                   @   s   e Zd Zdd„ ZdS )z9InterfaceTests.test_invariant_as_decorator.<locals>.Rangec                 S   s   || | _ | _d S r   )r/  r.  )r!   r/  r.  r   r   r   r•   »  s    zBInterfaceTests.test_invariant_as_decorator.<locals>.Range.__init__Nr™   r   r   r   r   ÚRange¸  s   r4  rë   rä   r-  )rk   rã   r  r  r   r5  ru  r   rr  r   rÌ   )r!   rã   r  r3  r4  r  r   r2  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
| 	¡ ƒt
ddgƒ¡ d S )Nr   r
  râ   r'   c                       s&   e Zd Z” dƒZ” dƒZ”ddƒ dS )z0InterfaceTests.test_taggedValue.<locals>.ITaggedrH   r  r,   ÚSpamN)r   r   r   rH   r)   r   ©r  r(   r   r   ÚITaggedÊ  s   r8  c                       s    e Zd Z” ddƒ ” ddƒ dS )z1InterfaceTests.test_taggedValue.<locals>.IDerivedr,   ú	Spam SpamrH   r)   Nr   r   r'   r   r   rD  Ï  s   
rD  c                   @   s   e Zd ZdS )z2InterfaceTests.test_taggedValue.<locals>.IDerived2Nr   r   r   r   r   Ú	IDerived2Ó  s   r:  r,   r6  rH   r9  r)   )rk   r  rã   r(   r   rE   rC   rD   r;   r<   Úset)r!   rã   r8  rD  r:  r   r7  r   Útest_taggedValueÅ  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   r=  r   r7  r   r   r>  â  s   
r>  c                       s   e Zd Z”ddƒ ” dƒZdS )z0InterfaceTests._make_taggedValue_tree.<locals>.Er=  ÚENr?  r   r7  r   r   r@  å  s   
r@  c                       s   e Zd Z”ddƒ ” dƒZdS )z0InterfaceTests._make_taggedValue_tree.<locals>.Dr=  ÚDNr?  r   r7  r   r   rA  è  s   
rA  c                       s   e Zd Z”ddƒ ” dƒZdS )z0InterfaceTests._make_taggedValue_tree.<locals>.Cr=  ÚCNr?  r   r7  r   r   rB  ë  s   
rB  c                   @   s   e Zd ZdS )z0InterfaceTests._make_taggedValue_tree.<locals>.BNr   r   r   r   r   ÚBî  s   rC  c                   @   s   e Zd ZdS )z0InterfaceTests._make_taggedValue_tree.<locals>.ANr   r   r   r   r   ÚAð  s   rD  )rk   r(   r  )	r!   rM  ÚOr>  r@  rA  rB  rC  rD  r   r7  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szJ ‚|j	d  
dd¡ |  | d¡d¡ d S )Nr   râ   rB  r=  rC  )rk   rã   rF  r   r   r=  r   rE   rM   rå   rJ   )r!   rã   Zclass_AZiface_Ar   r   r   Ú"test_getTaggedValue_follows__iro__õ  s    

z1InterfaceTests.test_getTaggedValue_follows__iro__c                 C   s  ddl m} |  |¡}|  | d¡¡ |  g t| ¡ ƒ¡ |  t	¡ | 
d¡ W d   ƒ n1 sd0    Y  | dd¡ |  | d¡d¡ |  | 
d¡d¡ |  dgt| ¡ ƒ¡ |jd jdksÈJ ‚|jd }|  | d¡d¡ |  | 
d¡d¡ |  dgt| ¡ ƒ¡ d S )Nr   râ   r=  rD  rë   rB  )rk   rã   rF  rü   rT   r   r;   rI   rC   rD   rQ   rJ   rå   r   )r!   rã   rD  rB  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
¡u ¡ |f|_|  | d
¡d u ¡ 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   rI  c                   @   s   e Zd ZdS )z<InterfaceTests.test_description_cache_management.<locals>.I3Nr   r   r   r   r   ÚI3-  s   rJ  r‹   )rk   rã   r  r~   rø   rå   )r!   rã   rŸ  rI  rJ  r   r
  r   Ú!test_description_cache_management   s    z0InterfaceTests.test_description_cache_managementc                 C   sV   ddl m} ddl m} G dd„ d|ƒ}||ƒG dd„ dtƒƒ}|  ||ƒ ƒd¡ d S )Nr   râ   r  c                   @   s   e Zd ZdS )z>InterfaceTests.test___call___defers_to___conform___.<locals>.INr   r   r   r   r   rõ   9  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   rB  <  s   rB  )rk   rã   r  r   r   )r!   rã   r  rõ   rB  r   r   r   Ú$test___call___defers_to___conform___5  s    z3InterfaceTests.test___call___defers_to___conform___c                 C   s\   ddl m} ddl m} G dd„ d|ƒ}||ƒG dd„ dtƒƒ}|ƒ }|  ||ƒ|u ¡ d S )Nr   râ   r  c                   @   s   e Zd ZdS )z9InterfaceTests.test___call___object_implements.<locals>.INr   r   r   r   r   rõ   G  s   rõ   c                   @   s   e Zd ZdS )z9InterfaceTests.test___call___object_implements.<locals>.CNr   r   r   r   r   rB  J  s   rB  )rk   rã   r  r   r~   )r!   rã   r  rõ   rB  Úcr   r   r   Útest___call___object_implementsC  s    z.InterfaceTests.test___call___object_implementsc                 C   sD   ddl m} G dd„ d|ƒ}G dd„ dtƒ}|ƒ }|  t||¡ d S )Nr   râ   c                   @   s   e Zd ZdS )z9InterfaceTests.test___call___miss_wo_alternate.<locals>.INr   r   r   r   r   rõ   T  s   rõ   c                   @   s   e Zd ZdS )z9InterfaceTests.test___call___miss_wo_alternate.<locals>.CNr   r   r   r   r   rB  W  s   rB  )rk   rã   r   rC   rª   ©r!   rã   rõ   rB  rN  r   r   r   Útest___call___miss_wo_alternateQ  s
    z.InterfaceTests.test___call___miss_wo_alternatec                 C   sJ   ddl m} G dd„ d|ƒ}G dd„ dtƒ}|ƒ }|  ||| ƒ| u ¡ d S )Nr   râ   c                   @   s   e Zd ZdS )z8InterfaceTests.test___call___miss_w_alternate.<locals>.INr   r   r   r   r   rõ   `  s   rõ   c                   @   s   e Zd ZdS )z8InterfaceTests.test___call___miss_w_alternate.<locals>.CNr   r   r   r   r   rB  c  s   rB  )rk   rã   r   r~   rP  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tƒ}|ƒ }|d d … }||g|d d …< z"ˆ  ||ƒˆ u ¡ W ||d d …< n||d d …< 0 d S )Nr   râ   rÛ   c                 S   s   d S r   r   r×   r   r   r   Ú_missm  s    z:InterfaceTests.test___call___w_adapter_hook.<locals>._missc                    s   ˆ S r   r   r×   ra   r   r   Ú_hitp  s    z9InterfaceTests.test___call___w_adapter_hook.<locals>._hitc                   @   s   e Zd ZdS )z6InterfaceTests.test___call___w_adapter_hook.<locals>.INr   r   r   r   r   rõ   s  s   rõ   c                   @   s   e Zd ZdS )z6InterfaceTests.test___call___w_adapter_hook.<locals>.CNr   r   r   r   r   rB  v  s   rB  )rk   rã   r   rÜ   r   r~   )	r!   rã   rÜ   rS  rT  rõ   rB  rN  Zold_adapter_hooksr   ra   r   Útest___call___w_adapter_hooki  s    z+InterfaceTests.test___call___w_adapter_hookc                    sx   ddl m} ddl m‰  ddl m} G ‡ fdd„d|ƒ}||ƒG dd„ dtƒƒ}|  d	|tƒ ƒ¡ |  d	||ƒ ƒ¡ d S )
Nr   râ   ©Úinterfacemethodr  c                       s   e Zd Z” dd„ ƒZdS )z:InterfaceTests.test___call___w_overridden_adapt.<locals>.Ic                 S   s   dS ©Nr   r   r½   r   r   r   rÓ   ‰  s    zDInterfaceTests.test___call___w_overridden_adapt.<locals>.I.__adapt__N©r   r   r   rÓ   r   rV  r   r   rõ   ‡  s   rõ   c                   @   s   e Zd ZdS )z:InterfaceTests.test___call___w_overridden_adapt.<locals>.ONr   r   r   r   r   rE    s   rE  r   )rk   rã   rW  r  r   r   )r!   rã   r  rõ   rE  r   rV  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
tƒƒ}||ƒG dd„ dtƒƒ}|  d|tƒ ƒ¡ |  d||ƒ ƒ¡ |  d||ƒ ƒ¡ |  t¡ ||ƒ ƒ W d   ƒ n1 sØ0    Y  |  d||ƒ ƒ¡ d S )Nr   râ   rV  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 rX  r   r½   r   r   r   rÓ   ž  s    zUInterfaceTests.test___call___w_overridden_adapt_and_conform.<locals>.IAdapt.__adapt__NrY  r   rV  r   r   ÚIAdapt  s   r[  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   r^  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   r_  r   r]  )rk   rã   rW  r  r   r   rC   rª   )r!   rã   r  r[  rÓ  r^  r_  r   rV  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tƒƒ}|  d	ˆ tƒ ƒ¡ |ƒ }|  |ˆ |ƒ¡ d S )
Nr   râ   rV  r  c                       s$   e Zd Z”‡‡ ‡fdd„ƒZ‡  ZS )zEInterfaceTests.test___call___w_overridden_adapt_call_super.<locals>.Ic                    s@   |   |¡sdS ˆjd d… dkr,tƒ  |¡S ttˆ ƒ| ƒ |¡S )Nr   rä   )rç  é   )rj   Úversion_infoÚsuperrÓ   r—  r½   )rõ   r˜  Úsysr   r   rÓ   Â  s
    
zOInterfaceTests.test___call___w_overridden_adapt_call_super.<locals>.I.__adapt__)r   r   r   rÓ   Ú__classcell__r   ©rõ   rW  rd  )r˜  r   rõ   À  s   rõ   c                   @   s   e Zd ZdS )zEInterfaceTests.test___call___w_overridden_adapt_call_super.<locals>.ONr   r   r   r   r   rE  Ì  s   rE  r   )rd  rk   rã   rW  r  r   r   r¨   )r!   rã   r  rE  Úor   rf  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â   rV  c                       s    e Zd Z” dd„ ƒZdd„ ZdS )zEInterfaceTests.test___adapt___as_method_and_implementation.<locals>.Ic                 S   s   dS rX  r   r½   r   r   r   rÓ   Ù  s    zOInterfaceTests.test___adapt___as_method_and_implementation.<locals>.I.__adapt__c                 S   s   dS )zThis is a protocolNr   )Zto_adaptr   r   r   rÓ   Ý  s    NrY  r   rV  r   r   rõ   Ø  s   
rõ   r   rÓ   z
(to_adapt))rk   rã   rW  r   r   ÚgetSignatureString©r!   rã   rõ   r   rV  r   Ú+test___adapt___as_method_and_implementationÔ  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â   rV  c                   @   s   e Zd ZdZdS )z@InterfaceTests.test___adapt__inheritance_and_type.<locals>.IRootZRootNr  r   r   r   r   ÚIRootç  s   rl  c                       s   e Zd Z” dd„ ƒZdS )zEInterfaceTests.test___adapt__inheritance_and_type.<locals>.IWithAdaptc                 S   s   dS rX  r   r½   r   r   r   rÓ   ë  s    zOInterfaceTests.test___adapt__inheritance_and_type.<locals>.IWithAdapt.__adapt__NrY  r   rV  r   r   Ú
IWithAdaptê  s   rm  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  ï  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   Ú
IUnrelatedò  s   rn  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   ÚIDerivedAdaptõ  s   ro  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 r\  r   r½   r   r   r   rÓ   û  s    zSInterfaceTests.test___adapt__inheritance_and_type.<locals>.IDerived2Adapt.__adapt__N)r   r   r   r9   rÓ   r   rV  r   r   ÚIDerived2Adaptù  s   rp  r   r]  )
rk   rã   rW  r   r   r   r   r—  ZassertNotEqualr–  )	r!   rã   rl  rm  r  rn  ro  rp  rÃ   r   rV  r   Ú"test___adapt__inheritance_and_typeã  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â   rV  c                       s$   e Zd Z” dd„ ƒZ” dd„ ƒZdS )z9InterfaceTests.test_interfacemethod_is_general.<locals>.Ic                 S   s   dS )zReplace an existing methodr   r   r½   r   r   r   r“  	  s    zBInterfaceTests.test_interfacemethod_is_general.<locals>.I.__call__c                 S   s   dS rX  r   ra   r   r   r   Úthis_is_new	  s    zEInterfaceTests.test_interfacemethod_is_general.<locals>.I.this_is_newN)r   r   r   r“  rr  r   rV  r   r   rõ   	  s   
rõ   r   )rk   rã   rW  r   rr  rj  r   rV  r   Útest_interfacemethod_is_general	  s
    z.InterfaceTests.test_interfacemethod_is_generalN)9r   r   r   r¡  r¥  r¯  r²  r´  r½  rÀ  rÆ  rÏ  rÐ  rÒ  rÖ  rÜ  râ  ré  rì  rñ  ró  rõ  r÷  rø  rù  rû  rü  rý  rÿ  r   r  r  r
  r  r"  r&  r'  r*  r   r,  r5  r<  rF  rG  rH  rK  rM  rO  rQ  rR  rU  rZ  r`  rh  rk  rq  rs  r   r   r   r   r  €  sl   	
!+9))	/5
$,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   r3   &	  s    zAttributeTests._getTargetClassc                 C   sJ   |   ¡ }t| ƒ|_t|ƒ}|  | d¡|¡ |  | dt d ¡|¡ d S )Nú-<zope.interface.interface.Attribute object atú z.AttributeTests.TestAttribute>)r6   r—  rc   Ú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 )Nrv  z TestAttribute>)r6   rx  r~   ry  rz  r{  r   r   r   Útest__repr__wo_interface1	  s    z'AttributeTests.test__repr__wo_interfacec                 C   s.   |   ¡ }t| ƒ|_t|ƒ}|  |td ¡ d S )Nz.AttributeTests.TestAttribute)r6   r—  rc   rÌ   r   r   r{  r   r   r   Útest__str__w_interface7	  s    
z%AttributeTests.test__str__w_interfacec                 C   s    |   ¡ }t|ƒ}|  |d¡ d S )Nru  )r6   rÌ   r   r{  r   r   r   Útest__str__wo_interface=	  s    z&AttributeTests.test__str__wo_interfaceN)	r   r   r   r4   r3   r}  r~  r  r€  r   r   r   r   rt  "	  s   rt  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   r3   G	  s    zMethodTests._getTargetClassc                 C   sH   |   ¡ }|  |ji ¡ ddi|_|  |jddi¡ |`|  |ji ¡ d S rG   )r6   r   r  ©r!   r£  r   r   r   Útest_optional_as_propertyK	  s    
z%MethodTests.test_optional_as_propertyc              
   C   sp   ddl m} |  ¡ }z
|ƒ  W nB |y` } z*|  |jd ¡ |  |j| j¡ W Y d }~nd }~0 0 |  d¡ d S )Nr   )ÚBrokenImplementationz*__call__ should raise BrokenImplementation)r5  r„  r6   r   rc   r5   r4   r  )r!   r„  r£  r  r   r   r   Ú)test___call___raises_BrokenImplementationS	  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)r6   ÚgetSignatureInfor   r;   )r!   r£  Úinfor   r   r   Útest_getSignatureInfo_bare^	  s    z&MethodTests.test_getSignatureInfo_barec                 C   s   |   ¡ }|  | ¡ d¡ d S )Nz())r6   r   ri  r‚  r   r   r   Útest_getSignatureString_bareg	  s    z(MethodTests.test_getSignatureString_barec                 C   s*   |   ¡ }dg |_|_|  | ¡ d¡ d S )NrH   z(foo))r6   r†  r‡  r   ri  r‚  r   r   r   Ú'test_getSignatureString_w_only_requiredk	  s    z3MethodTests.test_getSignatureString_w_only_requiredc                 C   s4   |   ¡ }dg |_|_ddi|_|  | ¡ d¡ d S )NrH   r)   z(foo='bar'))r6   r†  r‡  r  r   ri  r‚  r   r   r   Ú"test_getSignatureString_w_optionalp	  s    
z.MethodTests.test_getSignatureString_w_optionalc                 C   s"   |   ¡ }d|_|  | ¡ d¡ d S )Nr   z(*args))r6   rˆ  r   ri  r‚  r   r   r   Ú!test_getSignatureString_w_varargsv	  s    z-MethodTests.test_getSignatureString_w_varargsc                 C   s"   |   ¡ }d|_|  | ¡ d¡ d S )Nr   z(**kw))r6   r‰  r   ri  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 atrw  z.MethodTests.TestMethod(**kw)>)	r6   r‰  r—  rc   rx  r~   ry  rz  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)>)r6   r‰  rx  r~   ry  rz  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))r6   r‰  r—  rc   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))r6   r‰  rÌ   r   r{  r   r   r   r€  –	  s    z#MethodTests.test__str__wo_interfaceN)r   r   r   r4   r3   rƒ  r…  rŒ  r  rŽ  r  r  r‘  r}  r~  r  r€  r   r   r   r   r  C	  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} ||i |¤Ž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   r8   r:   rc   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þ   ´	  s   rþ   c                   S   s   dS r$  r   r   r   r   r   r•  ¶	  s    z1Test_fromFunction.test_w_interface.<locals>._funcrb   )r   r  r”  r   rc   )r!   r  rþ   r•  r£  r   r   r   Útest_w_interface²	  s
    z"Test_fromFunction.test_w_interfacec                 C   s*   dd„ }| j |dd}|  | ¡ d¡ d S )Nc                   S   s   dS r$  r   r   r   r   r   r•  ¼	  s    z,Test_fromFunction.test_w_name.<locals>._funcZanotherName)r5   )r”  r   r8   )r!   r•  r£  r   r   r   Útest_w_name»	  s    zTest_fromFunction.test_w_namec                 C   sz   dd„ }|   |¡}| ¡ }|  t|d ƒdg¡ |  t|d ƒdg¡ |  |d i ¡ |  |d d ¡ |  |d d ¡ d S )	Nc                 S   s   dS r$  r   ©rH   r   r   r   r•  Â	  s    z5Test_fromFunction.test_w_only_required.<locals>._funcr†  rH   r‡  r  rˆ  r‰  ©r”  rŠ  r   r;   r—  r   r   r   Útest_w_only_requiredÁ	  s    
z&Test_fromFunction.test_w_only_requiredc                 C   s~   d
dd„}|   |¡}| ¡ }|  t|d ƒdg¡ |  t|d ƒg ¡ |  |d ddi¡ |  |d d ¡ |  |d	 d ¡ d S )Nr)   c                 S   s   dS r$  r   r›  r   r   r   r•  Í	  s    z0Test_fromFunction.test_w_optional.<locals>._funcr†  rH   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   ra   r   r   r   r•  ß	  s    z5Test_fromFunction.test_w_optional_self.<locals>._funcrë   )Zimlevelr†  r‡  r  rˆ  r‰  )r)   rœ  r—  r   r   r   Útest_w_optional_self×	  s    
z&Test_fromFunction.test_w_optional_selfc                 C   sv   dd„ }|   |¡}| ¡ }|  t|d ƒg ¡ |  t|d ƒg ¡ |  |d i ¡ |  |d d¡ |  |d d ¡ d S )	Nc                  W   s   dS r$  r   r  r   r   r   r•  ê	  s    z/Test_fromFunction.test_w_varargs.<locals>._funcr†  r‡  r  rˆ  r   r‰  rœ  r—  r   r   r   Útest_w_varargsé	  s    
z Test_fromFunction.test_w_varargsc                 C   sv   dd„ }|   |¡}| ¡ }|  t|d ƒg ¡ |  t|d ƒg ¡ |  |d i ¡ |  |d d ¡ |  |d d¡ d S )	Nc                  [   s   dS r$  r   )r   r   r   r   r•  õ	  s    z.Test_fromFunction.test_w_kwargs.<locals>._funcr†  r‡  r  rˆ  r‰  r   rœ  r—  r   r   r   Útest_w_kwargsô	  s    
zTest_fromFunction.test_w_kwargsc                 C   s‚   ddd„}|   |¡}| ¡ }|  t|d ƒddg¡ |  t|d ƒdg¡ |  |d ddi¡ |  |d	 d
¡ |  |d d¡ d S )Nr*   c                 _   s   dS r$  r   )rH   r)   r   r   r   r   r   r•   
  s    z3Test_fromFunction.test_full_spectrum.<locals>._funcr†  rH   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} ||i |¤ŽS )Nr   )Ú
fromMethod)r   r¤  )r!   r   r   r¤  r   r   r   r”  
  s    zTest_fromMethod._callFUTc                 C   sÂ   G dd„ dt ƒ}|  |j¡}|  | ¡ d¡ |  | ¡ d¡ |  |jd ¡ |  t| ¡ ƒg ¡ | 	¡ }|  t|d ƒg ¡ |  t|d ƒg ¡ |  |d i ¡ |  |d d ¡ |  |d	 d ¡ d S )
Nc                   @   s   e Zd Zdd„ ZdS )z)Test_fromMethod.test_no_args.<locals>.Fooc                 S   s   dS r$  r   ra   r   r   r   r)   
  s    z-Test_fromMethod.test_no_args.<locals>.Foo.barNr  r   r   r   r   r   
  s   r   r)   r%  r†  r‡  r  rˆ  r‰  )
r   r”  r)   r   r8   r:   rc   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t ƒ}|  |j¡}| ¡ }|  t|d ƒddg¡ |  t|d ƒdg¡ |  |d ddi¡ |  |d	 d
¡ |  |d d¡ d S )Nc                   @   s   e Zd Zddd„ZdS )z/Test_fromMethod.test_full_spectrum.<locals>.Foor*   c                 _   s   dS r$  r   )r!   rH   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†  rH   r)   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   rH   .
  s    z.Test_fromMethod.test_w_non_method.<locals>.foorH   r%  r†  r‡  r  rˆ  r‰  r–  )r!   rH   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÷   ra   r   r   r   r•   >
  s    zDummyDependent.__init__c                 C   s   | j  |¡ d S r   )r÷   rÖ   )r!   Zoriginally_changedr   r   r   rû   A
  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 urJt|t|ƒƒrJ||ksJ|dƒ‚d S )Nr   rt  rH   r)   r%  )r5  ru  r   r  r—  )rg   ru  rH   r)   r   r   r   r#  E
  s    r#  c                 C   s0   ddl m} t| dd ƒr,t| dd ƒs,|dƒ‚d S )Nr   rt  rH   r)   r!  )r5  ru  r   )rg   ru  r   r   r   r  Q
  s    r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )rm   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>[
  r  z$_Monkey.__init__.<locals>.<dictcomp>)rÁ   Ú
to_restoreÚitemsÚsetattr)r!   rÁ   r   r¨  rÊ  r   r©  r   r•   Y
  s    z_Monkey.__init__c                 C   s   | S r   r   ra   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_typeZexc_valZexc_tbr¨  rÊ  r   r   r   Ú__exit__b
  s    z_Monkey.__exit__N)r   r   r   r•   r®  r°  r   r   r   r   rm   W
  s   rm   ) r9   ZunittestZzope.interface._compatr   Zzope.interface.testsr   r   r   r   rà   ZTestCaser   r&   r1   r]   ru   rx   rŠ   rº   rÏ   rÑ   rÞ   r  r  rt  r  r“  r£  rì   r#  r  rm   r   r   r   r   Ú<module>   s\   
!$Hÿ.i-þ	     &         +!Zn1	