U
    j5{i“D ã                   @   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 G dd„ dƒZG d	d
„ d
ej	ƒZ
G dd„ dej	ƒZG dd„ deƒZG dd„ deƒZG dd„ deej	ƒZG dd„ dej	ƒZG dd„ deeƒZG dd„ dƒZG dd„ deej	ƒZG dd„ deej	ƒZG dd„ deƒZG dd „ d ej	ƒZG d!d"„ d"eƒZG d#d$„ d$eƒZG d%d&„ d&ej	ƒ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j	ƒZG d/d0„ d0ej	ƒZG d1d2„ d2ej	ƒZG d3d4„ d4ej	ƒZG d5d6„ d6eeeƒZ G d7d8„ d8ej	ƒZ!G d9d:„ d:e!ƒZ"G d;d<„ d<ej	ƒZ#G d=d>„ d>ej	ƒZ$G d?d@„ d@ej	ƒZ%G dAdB„ dBej	ƒZ&G dCdD„ dDej	ƒZ'G dEdF„ dFe'eƒZ(G dGdH„ dHej	ƒZ)G dIdJ„ dJe)eƒZ*G dKdL„ dLej	ƒZ+G dMdN„ dNe+eeƒZ,G dOdP„ dPƒZ-G dQdR„ dRƒZ.dS )Sz@Test the new API for making and checking interface declarations
é    N)ÚMissingSomeAttrs)ÚOptimizationTestMixin)ÚSubclassableMixin)Ú!NameAndModuleComparisonTestsMixinc                   @   s   e Zd Zddd„ZdS )Ú_Py3ClassAdviceTc              	   C   sv   dd l }|jdd��X}| ¡  zt|||ƒ W n  tk
rN   Y W 5 Q R £ dS X |r^|  d¡ W 5 Q R £ d S Q R X d S )Nr   T)ÚrecordFzDidn't raise TypeError)ÚwarningsÚcatch_warningsÚresetwarningsÚexecÚ	TypeErrorÚfail)ÚselfÚcodeÚglobsÚlocsZfails_under_py3kr   Ú_© r   úJ/tmp/pip-unpacked-wheel-jkvlexts/zope/interface/tests/test_declarations.pyÚ_run_generated_code   s    
z#_Py3ClassAdvice._run_generated_codeN)T)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s    ÿr   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
NamedTestsc                 C   s4   ddl m} |dƒG dd„ dƒƒ}|  |jd¡ d S )Nr   ©ÚnamedÚfooc                   @   s   e Zd ZdS )z"NamedTests.test_class.<locals>.FooN©r   r   r   r   r   r   r   ÚFoo5   s   r   ©Úzope.interface.declarationsr   ÚassertEqualZ__component_name__)r   r   r   r   r   r   Ú
test_class2   s     ÿzNamedTests.test_classc                 C   s.   ddl m} |dƒdd„ ƒ}|  |jd¡ d S )Nr   r   r   c                 S   s
   t ƒ ‚d S ©N©ÚNotImplementedError)Úor   r   r   ÚdoFoo@   s    z'NamedTests.test_function.<locals>.doFoor   )r   r   r'   r   r   r   Útest_function=   s    
zNamedTests.test_functionc                 C   s>   ddl m} G dd„ dƒ}|ƒ }|dƒ|ƒ |  |jd¡ d S )Nr   r   c                   @   s   e Zd ZdS )z%NamedTests.test_instance.<locals>.FooNr   r   r   r   r   r   I   s   r   r   r   )r   r   r   r   r   r   r   Útest_instanceF   s     ÿzNamedTests.test_instanceN)r   r   r   r"   r(   r)   r   r   r   r   r   0   s   	r   c                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚEmptyDeclarationTestsc                 C   s   ddl m} |ƒ S ©Nr   )ÚDeclaration©r    r,   ©r   r,   r   r   r   Ú	_getEmptyW   s    zEmptyDeclarationTests._getEmptyc                 C   s   |   ¡ }|  t|ƒg ¡ d S r#   )r/   r!   Úlist©r   Údeclr   r   r   Útest___iter___empty[   s    z)EmptyDeclarationTests.test___iter___emptyc                 C   s.   ddl m} |  ¡ }|  t| ¡ ƒ|g¡ d S ©Nr   ©Ú	Interface)Úzope.interface.interfacer6   r/   r!   r0   Ú	flattened©r   r6   r2   r   r   r   Útest_flattened_empty_   s    z*EmptyDeclarationTests.test_flattened_emptyc                 C   s$   ddl m} |  ¡ }|  ||¡ d S r4   )r7   r6   r/   ÚassertNotInr9   r   r   r   Útest___contains___emptyd   s    z-EmptyDeclarationTests.test___contains___emptyc                 C   s<   ddl m} |  ¡ }|  | |¡¡ |  |j|dd�¡ d S )Nr   r5   T©Ústrict)r7   r6   r/   Ú
assertTrueÚextendsr9   r   r   r   Útest_extends_emptyi   s    z(EmptyDeclarationTests.test_extends_emptyc                 C   s$   |   ¡ }t| ¡ ƒ}|  |g ¡ d S r#   )r/   r0   Z
interfacesr!   )r   r2   Z
iface_listr   r   r   Útest_interfaces_emptyo   s    z+EmptyDeclarationTests.test_interfaces_emptyc                 C   s*   ddl m} |  ¡ }|  |j||f¡ d S r4   )r7   r6   r/   r!   Ú__sro__r9   r   r   r   Útest___sro___t   s    z#EmptyDeclarationTests.test___sro___c                 C   s(   ddl m} |  ¡ }|  |j|f¡ d S r4   )r7   r6   r/   r!   Ú__iro__r9   r   r   r   Útest___iro___y   s    z#EmptyDeclarationTests.test___iro___c                 C   s<   |   ¡ }|  | d¡¡ |  | dd¡d¡ |  |j¡ d S )NÚattrÚabcÚdef)r/   ÚassertIsNoneÚgetr!   ÚassertFalseÚ_v_attrsr1   r   r   r   Útest_get~   s    zEmptyDeclarationTests.test_getc                 C   s*   |   ¡ }tƒ |_| |¡ |  |j¡ d S r#   )r/   ÚobjectrM   ÚchangedrL   r1   r   r   r   Ú test_changed_w_existing__v_attrs†   s    
z6EmptyDeclarationTests.test_changed_w_existing__v_attrsN)r   r   r   r/   r3   r:   r<   rA   rB   rD   rF   rN   rQ   r   r   r   r   r*   S   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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d1S )2ÚDeclarationTestsc                 C   s   ddl m} |S r+   r-   r.   r   r   r   Ú_getTargetClass�   s    z DeclarationTests._getTargetClassc                 O   s   |   ¡ ||ŽS r#   ©rS   ©r   ÚargsÚkwr   r   r   Ú_makeOne“   s    zDeclarationTests._makeOnec                 C   s   |   ¡ }|  t|jƒg ¡ d S r#   )rX   r!   r0   Ú	__bases__r1   r   r   r   Útest_ctor_no_bases–   s    z#DeclarationTests.test_ctor_no_basesc                 C   s6   ddl m} |dƒ}|  |¡}|  t|jƒ|g¡ d S ©Nr   ©ÚInterfaceClassÚIFoo)r7   r]   rX   r!   r0   rY   ©r   r]   r^   r2   r   r   r   Útest_ctor_w_interface_in_basesš   s    
z/DeclarationTests.test_ctor_w_interface_in_basesc                 C   s4   ddl m} |ƒ }|  |¡}|  t|jƒ|g¡ d S ©Nr   ©Ú
Implements)r    rc   rX   r!   r0   rY   )r   rc   Úimplr2   r   r   r   Útest_ctor_w_implements_in_bases    s    
z0DeclarationTests.test_ctor_w_implements_in_basesc                 C   s"   |   ¡ }| |¡ |  |j¡ d S r#   )rX   rP   rJ   rM   r1   r   r   r   Ú!test_changed_wo_existing__v_attrs¦   s    
z2DeclarationTests.test_changed_wo_existing__v_attrsc                 C   s   |   ¡ }|  ||¡ d S r#   )rX   r;   r1   r   r   r   Útest___contains__w_self«   s    z(DeclarationTests.test___contains__w_selfc                 C   s,   ddl m} |dƒ}|  ¡ }|  ||¡ d S r[   )r7   r]   rX   r;   r_   r   r   r   Ú"test___contains__w_unrelated_iface¯   s    z3DeclarationTests.test___contains__w_unrelated_ifacec                 C   s.   ddl m} |dƒ}|  |¡}|  ||¡ d S r[   )r7   r]   rX   ÚassertInr_   r   r   r   Ú!test___contains__w_base_interfaceµ   s    
z2DeclarationTests.test___contains__w_base_interfacec                 C   s4   ddl m} |dƒ}|  |¡}|  t|ƒ|g¡ d S r[   ©r7   r]   rX   r!   r0   r_   r   r   r   Útest___iter___single_base»   s    
z*DeclarationTests.test___iter___single_basec                 C   s@   ddl m} |dƒ}|dƒ}|  ||¡}|  t|ƒ||g¡ d S ©Nr   r\   r^   ÚIBarrk   ©r   r]   r^   rn   r2   r   r   r   Útest___iter___multiple_basesÁ   s
    z-DeclarationTests.test___iter___multiple_basesc                 C   s@   ddl m} |dƒ}|d|fƒ}|  |¡}|  t|ƒ|g¡ d S rm   rk   ro   r   r   r   Útest___iter___inheritanceÈ   s
    
z*DeclarationTests.test___iter___inheritancec                 C   sD   ddl m} |dƒ}|dƒ}|  |||f¡}|  t|ƒ||g¡ d S rm   rk   ro   r   r   r   Ú'test___iter___w_nested_sequence_overlapÏ   s
    z8DeclarationTests.test___iter___w_nested_sequence_overlapc                 C   sF   ddl m} ddl m} |dƒ}|  |¡}|  t| ¡ ƒ||g¡ d S )Nr   r5   r\   r^   ©r7   r6   r]   rX   r!   r0   r8   )r   r6   r]   r^   r2   r   r   r   Útest_flattened_single_baseÖ   s
    
z+DeclarationTests.test_flattened_single_basec                 C   sR   ddl m} ddl m} |dƒ}|dƒ}|  ||¡}|  t| ¡ ƒ|||g¡ d S ©Nr   r5   r\   r^   rn   rs   ©r   r6   r]   r^   rn   r2   r   r   r   Útest_flattened_multiple_basesÝ   s    z.DeclarationTests.test_flattened_multiple_basesc                 C   sT   ddl m} ddl m} |dƒ}|d|fƒ}|  |¡}|  t| ¡ ƒ|||g¡ d S ru   rs   rv   r   r   r   Útest_flattened_inheritanceå   s    
z+DeclarationTests.test_flattened_inheritancec                 C   sV   ddl m} ddl m} |dƒ}|dƒ}|  |||f¡}|  t| ¡ ƒ|||g¡ d S ru   rs   rv   r   r   r   Ú(test_flattened_w_nested_sequence_overlapí   s    z9DeclarationTests.test_flattened_w_nested_sequence_overlapc                 C   sT   ddl m} |dƒ}|dƒ}|  |¡}|| }|  ||  ¡ ¡ |  t|ƒ|g¡ d S rm   ©r7   r]   rX   ÚassertIsInstancerS   r!   r0   ©r   r]   r^   rn   ÚbeforeÚafterr   r   r   Ú test___sub___unrelated_interfaceú   s    
z1DeclarationTests.test___sub___unrelated_interfacec                 C   s:   ddl m} |dƒ}|  |¡}|| }|  t|ƒg ¡ d S r[   rk   )r   r]   r^   r}   r~   r   r   r   Útest___sub___related_interface  s
    
z/DeclarationTests.test___sub___related_interfacec                 C   sF   ddl m} |dƒ}|d|fƒ}|  |¡}|| }|  t|ƒg ¡ d S rm   rk   r|   r   r   r   Ú-test___sub___related_interface_by_inheritance
  s    
z>DeclarationTests.test___sub___related_interface_by_inheritancec                 C   sV   ddl m} |dƒ}|dƒ}|  |¡}|| }|  ||  ¡ ¡ |  t|ƒ||g¡ d S rm   rz   r|   r   r   r   Ú test___add___unrelated_interface  s    
z1DeclarationTests.test___add___unrelated_interfacec                 C   s^   ddl m} |dƒ}|dƒ}|dƒ}|  ||¡}|  ||¡}|| }|  t|ƒ|||g¡ d S )Nr   r\   r^   rn   ÚIBazrk   )r   r]   r^   rn   rƒ   r}   Úotherr~   r   r   r   Útest___add___related_interface  s    z/DeclarationTests.test___add___related_interfacec           	   	   C   s®   ddl m} ddl m} ddlm} ddlm} |dƒ}|d|fƒ}||jjdƒ� |  	|¡}|| }W 5 Q R X |  
|j|||f¡ |  
|j||f¡ |  
t|ƒ||g¡ d S )	Nr   r5   ©Úror\   ©Ú	C3SettingÚIBaseÚIDerivedT)Úzope.interfacer6   r‡   r7   r]   Úzope.interface.tests.test_ror‰   ÚC3Ú
STRICT_IROrX   r!   rE   rY   r0   )	r   r6   r‡   r]   r‰   rŠ   r‹   Úbaser~   r   r   r   Ú"test___add___overlapping_interface%  s    
z3DeclarationTests.test___add___overlapping_interfacec           
   	   C   sØ   ddl m} ddl m} ddl m} ddl m} ddlm} G dd„ d|ƒ}G d	d
„ d
|ƒ}||ƒG dd„ dƒƒ}||jjdƒ� ||ƒ| }	W 5 Q R X |  	|	j
|	|||f¡ |  	|	j||f¡ |  	t|	ƒ||g¡ d S )Nr   r5   ©ÚimplementedBy©Úimplementerr†   rˆ   c                   @   s   e Zd ZdS )zPDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IBaseNr   r   r   r   r   rŠ   F  s   rŠ   c                   @   s   e Zd ZdS )zSDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IDerivedNr   r   r   r   r   r‹   I  s   r‹   c                   @   s   e Zd ZdS )zODeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.BaseNr   r   r   r   r   ÚBaseL  s   r–   T)rŒ   r6   r“   r•   r‡   r�   r‰   rŽ   r�   r!   rC   rY   r0   )
r   r6   r“   r•   r‡   r‰   rŠ   r‹   r–   r~   r   r   r   Ú0test___add___overlapping_interface_implementedBy;  s    zADeclarationTests.test___add___overlapping_interface_implementedByN)r   r   r   rS   rX   rZ   r`   re   rf   rg   rh   rj   rl   rp   rq   rr   rt   rw   rx   ry   r   r€   r�   r‚   r…   r‘   r—   r   r   r   r   rR   �   s0   		
rR   c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestImmutableDeclarationc                 C   s   ddl m} |S )Nr   )Ú_ImmutableDeclaration)r    r™   )r   r™   r   r   r   rS   Z  s    z(TestImmutableDeclaration._getTargetClassc                 C   s   ddl m} |S )Nr   )Ú_empty)r    rš   )r   rš   r   r   r   r/   ^  s    z"TestImmutableDeclaration._getEmptyc                 C   s0   dd l }| | |  ¡ ¡¡}|  ||  ¡ ¡ d S )Nr   )ÚpickleÚloadsÚdumpsr/   ÚassertIs)r   r›   Úcopiedr   r   r   Útest_pickleb  s    z$TestImmutableDeclaration.test_picklec                 C   s   |   |  ¡ ƒ |  ¡ ¡ d S r#   )rž   rS   r/   ©r   r   r   r   Útest_singletong  s    þz'TestImmutableDeclaration.test_singletonc                 C   s   |   |  ¡ jd¡ d S )Nr   )r!   r/   rY   r¡   r   r   r   Útest__bases__m  s    z&TestImmutableDeclaration.test__bases__c              	   C   s@   |   ¡ }d|_|  |   ¡ jd¡ |  t¡� d|_W 5 Q R X d S )Nr   )é   )r/   rY   r!   ÚassertRaisesr   )r   Úemptyr   r   r   Útest_change__bases__p  s
    z-TestImmutableDeclaration.test_change__bases__c                 C   s4   |   ¡ }|j}|  i |¡ d|d< |  i |j¡ d S )Né   r¤   )r/   Z
dependentsr!   )r   r¦   Údepsr   r   r   Útest_dependentsx  s
    z(TestImmutableDeclaration.test_dependentsc                 C   s   |   ¡  d ¡ d S r#   )r/   rP   r¡   r   r   r   Útest_changed€  s    z%TestImmutableDeclaration.test_changedc                 C   sH   |   |  ¡  | ¡¡ |   |  ¡ j| dd�¡ |   |  ¡ j| dd�¡ d S )NTr=   F)rL   r/   r@   r¡   r   r   r   Útest_extends_always_false„  s    z2TestImmutableDeclaration.test_extends_always_falsec                 C   s0   |   |  ¡  d¡¡ |  |  ¡  dd¡d¡ d S )NÚnameé*   )rJ   r/   rK   r!   r¡   r   r   r   Útest_get_always_default‰  s    z0TestImmutableDeclaration.test_get_always_defaultc                 C   sr   |   ¡ }|  |ji ¡ d|jd< |  |ji ¡ |  | d¡¡ i  }|_d|d< |  |ji ¡ |  | d¡¡ d S )Nr®   rG   )r/   r!   rM   rJ   rK   )r   r2   Úattrsr   r   r   Útest_v_attrs�  s    

z%TestImmutableDeclaration.test_v_attrsN)r   r   r   rS   r/   r    r¢   r£   r§   rª   r«   r¬   r¯   r±   r   r   r   r   r˜   X  s   r˜   c                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTestImplementsc                 C   s   ddl m} |S ra   )r    rc   )r   rc   r   r   r   rS   ž  s    zTestImplements._getTargetClassc                 O   s   |   ¡ ||ŽS r#   rT   rU   r   r   r   rX   ¢  s    zTestImplements._makeOnec                 C   s"   ddl m} G dd„ dƒ}||ƒS )Nr   r’   c                   @   s   e Zd ZdS )z+TestImplements._makeOneToCompare.<locals>.ANr   r   r   r   r   ÚA¨  s   r³   ©r    r“   )r   r“   r³   r   r   r   Ú_makeOneToCompare¥  s    z TestImplements._makeOneToComparec                 C   sH   |   ¡ }|  |jd ¡ |  |jd¡ |  |jd¡ |  t|jƒg ¡ d S )Nr   ú?)rX   r!   ÚinheritÚdeclaredr   r0   rY   ©r   rd   r   r   r   rZ   ­  s
    z!TestImplements.test_ctor_no_basesc                 C   s"   |   ¡ }d|_|  t|ƒd¡ d S )NZTestingzclassImplements(Testing))rX   r   r!   Úreprr¹   r   r   r   Útest___repr__´  s    zTestImplements.test___repr__c                 C   s,   ddl m} |  ¡ }|  | ¡ |df¡ d S )Nr   r’   r#   )r    r“   rX   r!   Ú
__reduce__)r   r“   rd   r   r   r   Útest___reduce__¹  s    zTestImplements.test___reduce__c                 C   sè   ddl m} ddlm} G dd„ dƒ}G dd„ dƒ}|dƒ}|  ||ƒ||ƒ¡ |  t||ƒƒt||ƒƒ¡ |  ||ƒd ¡ |  d ||ƒ¡ |  ||ƒ||ƒ¡ |  ||ƒ|¡ |  ||ƒ||ƒ¡ |  	||ƒ|¡ |  
||ƒ|¡ d S )	Nr   r’   r\   c                   @   s   e Zd ZdS )z#TestImplements.test_sort.<locals>.ANr   r   r   r   r   r³   Â  s   r³   c                   @   s   e Zd ZdS )z#TestImplements.test_sort.<locals>.BNr   r   r   r   r   ÚBÅ  s   r¾   r^   )r    r“   r7   r]   r!   ÚhashZ
assertLessZassertGreaterÚassertLessEqualZassertGreaterEqualÚassertNotEqual)r   r“   r]   r³   r¾   r^   r   r   r   Ú	test_sort¾  s"    þzTestImplements.test_sortc                 C   s¾   ddl m} G dd„ dƒ}G dd„ dƒ}G dd„ dƒ}||ƒ}||ƒ}||ƒ}|  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ d S )	Nr   r’   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z1TestImplements.test_proxy_equality.<locals>.Proxyc                 S   s
   || _ d S r#   ©Z_wrapped)r   Úwrappedr   r   r   Ú__init__Ü  s    z:TestImplements.test_proxy_equality.<locals>.Proxy.__init__c                 S   s
   t ƒ ‚d S r#   r$   ©r   r­   r   r   r   Ú__getattr__ß  s    z=TestImplements.test_proxy_equality.<locals>.Proxy.__getattr__c                 S   s
   | j |kS r#   rÃ   ©r   r„   r   r   r   Ú__eq__â  s    z8TestImplements.test_proxy_equality.<locals>.Proxy.__eq__c                 S   s
   | j |kS r#   rÃ   rÈ   r   r   r   Ú__ne__å  s    z8TestImplements.test_proxy_equality.<locals>.Proxy.__ne__N)r   r   r   rÅ   rÇ   rÉ   rÊ   r   r   r   r   ÚProxyÛ  s   rË   c                   @   s   e Zd ZdS )z-TestImplements.test_proxy_equality.<locals>.ANr   r   r   r   r   r³   è  s   r³   c                   @   s   e Zd ZdS )z-TestImplements.test_proxy_equality.<locals>.BNr   r   r   r   r   r¾   ë  s   r¾   )r    r“   r!   rÁ   )r   r“   rË   r³   r¾   ZimplementedByAZimplementedByBÚproxyr   r   r   Útest_proxy_equality×  s&    þz"TestImplements.test_proxy_equalityc                 C   s^   |   ¡ }|  |j¡ |  d|j¡ d|_|  d|j¡ | d ¡ |  |j¡ |  d|j¡ d S )NÚ_super_cacher®   )rX   rJ   rÎ   r;   Ú__dict__ri   rP   r¹   r   r   r   Ú test_changed_deletes_super_cache  s    
z/TestImplements.test_changed_deletes_super_cachec                 C   sJ   |   ¡ }|  |j¡ |  d|j¡ | d ¡ |  |j¡ |  d|j¡ d S )NrÎ   )rX   rJ   rÎ   r;   rÏ   rP   r¹   r   r   r   Ú%test_changed_does_not_add_super_cache  s    
z4TestImplements.test_changed_does_not_add_super_cacheN)r   r   r   rS   rX   rµ   rZ   r»   r½   rÂ   rÍ   rÐ   rÑ   r   r   r   r   r²   ›  s   ,r²   c                       sÜ   e Zd Zdd„ ZeZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Z‡ fd!d"„Z‡ fd#d$„Z‡ fd%d&„Z‡ fd'd(„Z‡ fd)d*„Z‡ fd+d,„Z‡  ZS )-ÚTest_implementedByFallbackc                 C   s   ddl m} |S )Nr   )ÚimplementedByFallback)r    rÓ   )r   rÓ   r   r   r   rS     s    z*Test_implementedByFallback._getTargetClassc                 O   s   |   ¡ ||ŽS r#   rT   rU   r   r   r   Ú_callFUT"  s    z#Test_implementedByFallback._callFUTc                 C   s4   G dd„ dƒ}|ƒ }d |_ |  t|  |¡ƒg ¡ d S )Nc                   @   s   e Zd ZdZdS )z]Test_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrations.<locals>.Foo©Ú__implemented__N©r   r   r   Ú	__slots__r   r   r   r   r   &  s   r   )rÖ   r!   r0   rÔ   ©r   r   r   r   r   r   Ú5test_dictless_wo_existing_Implements_wo_registrations%  s    zPTest_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrationsc                 C   s(   G dd„ dƒ}|ƒ }|   t| j|¡ d S )Nc                   @   s.   e Zd Zdd„ Zdd„ ZeeeƒZdd„ ZdS )zhTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Fooc                 S   s
   t ƒ ‚d S r#   r$   r¡   r   r   r   Ú	_get_impl/  s    zrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._get_implc                 S   s   t ‚d S r#   )r   )r   Úvalr   r   r   Ú	_set_impl2  s    zrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._set_implc                 S   s
   t ƒ ‚d S r#   r$   r¡   r   r   r   Ú__call__7  s    zqTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo.__call__N)r   r   r   rÛ   rÝ   ÚpropertyrÖ   rÞ   r   r   r   r   r   .  s   
r   ©r¥   r   rÔ   rÙ   r   r   r   Ú@test_dictless_wo_existing_Implements_cant_assign___implemented__,  s    z[Test_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__c              	   C   s`   ddl m} G dd„ dƒ}|ƒ }d |_tƒ }t|dƒ� }|||< |  |  |¡|¡ W 5 Q R X d S )Nr   ©Údeclarationsc                   @   s   e Zd ZdZdS )z\Test_implementedByFallback.test_dictless_wo_existing_Implements_w_registrations.<locals>.FoorÕ   Nr×   r   r   r   r   r   A  s   r   Ú#BuiltinImplementationSpecifications)rŒ   rã   rÖ   rO   Ú_MonkeyDictrž   rÔ   )r   rã   r   r   ÚregÚspecsr   r   r   Ú4test_dictless_wo_existing_Implements_w_registrations>  s    ÿzOTest_implementedByFallback.test_dictless_wo_existing_Implements_w_registrationsc                 C   sB   ddl m} |ƒ }G dd„ dƒ}|ƒ }||_|  |  |¡|¡ d S )Nr   rb   c                   @   s   e Zd ZdZdS )zKTest_implementedByFallback.test_dictless_w_existing_Implements.<locals>.FoorÕ   Nr×   r   r   r   r   r   P  s   r   )r    rc   rÖ   rž   rÔ   )r   rc   rd   r   r   r   r   r   Ú#test_dictless_w_existing_ImplementsL  s    z>Test_implementedByFallback.test_dictless_w_existing_Implementsc                 C   sL   ddl m} G dd„ dƒ}|ƒ }|dƒ}|f|_|  t|  |¡ƒ|g¡ d S )Nr   r\   c                   @   s   e Zd ZdZdS )zOTest_implementedByFallback.test_dictless_w_existing_not_Implements.<locals>.FoorÕ   Nr×   r   r   r   r   r   Z  s   r   r^   )r7   r]   rÖ   r!   r0   rÔ   )r   r]   r   r   r^   r   r   r   Ú'test_dictless_w_existing_not_ImplementsW  s    zBTest_implementedByFallback.test_dictless_w_existing_not_Implementsc                    s:   ddl m} |ƒ ‰ G ‡ fdd„dƒ}|  |  |¡ˆ ¡ d S )Nr   rb   c                       s   e Zd Z” ZdS )zJTest_implementedByFallback.test_w_existing_attr_as_Implements.<locals>.FooN©r   r   r   rÖ   r   ©rd   r   r   r   f  s   r   ©r    rc   rž   rÔ   ©r   rc   r   r   rì   r   Ú"test_w_existing_attr_as_Implementsb  s    z=Test_implementedByFallback.test_w_existing_attr_as_Implementsc              	   C   s°   ddl m} ddlm} t|dƒ�„}|  t|  t¡ƒg ¡ |  t|  t¡ƒg ¡ |  t|  t	¡ƒg ¡ ttt	fD ]0}|| }|  
||¡ |  t|ƒd|jf ¡ qpW 5 Q R X d S )Nr   râ   rb   rä   zclassImplements(%s))rŒ   rã   r    rc   rå   r!   r0   rÔ   ÚtupleÚdictr{   rº   r   )r   rã   rc   rç   ÚtypÚspecr   r   r   Útest_builtins_added_to_cachek  s"    ÿ
ÿÿz7Test_implementedByFallback.test_builtins_added_to_cachec              	   C   sŠ   ddl m} tƒ tƒ tƒ   }}}t|dƒ�T}||t< ||t< ||t< |  |  t¡|¡ |  |  t¡|¡ |  |  t¡|¡ W 5 Q R X d S )Nr   râ   rä   )	rŒ   rã   rO   rå   rð   r0   rñ   rž   rÔ   )r   rã   Zt_specZl_specZd_specrç   r   r   r   Útest_builtins_w_existing_cachez  s    ÿz9Test_implementedByFallback.test_builtins_w_existing_cachec                 C   s(   G dd„ dƒ}|   t|  |¡ƒg ¡ d S )Nc                   @   s   e Zd ZdS )zITest_implementedByFallback.test_oldstyle_class_no_assertions.<locals>.FooNr   r   r   r   r   r   ‰  s   r   ©r!   r0   rÔ   ©r   r   r   r   r   Ú!test_oldstyle_class_no_assertions†  s    z<Test_implementedByFallback.test_oldstyle_class_no_assertionsc                 C   s(   G dd„ dƒ}|   t|  |¡ƒg ¡ d S )Nc                   @   s   e Zd ZdS )z:Test_implementedByFallback.test_no_assertions.<locals>.FooNr   r   r   r   r   r   ‘  s   r   rö   r÷   r   r   r   Útest_no_assertionsŽ  s    z-Test_implementedByFallback.test_no_assertionsc                 C   s(   G dd„ dƒ}|ƒ }|   t| j|¡ d S )Nc                   @   s   e Zd ZdZdS )zHTest_implementedByFallback.test_w_None_no_bases_not_factory.<locals>.FooNrë   r   r   r   r   r   ˜  s   r   rà   rÙ   r   r   r   Ú test_w_None_no_bases_not_factory–  s    z;Test_implementedByFallback.test_w_None_no_bases_not_factoryc                 C   sz   ddl m} G dd„ dƒ}|ƒ }d|_|  |¡}|  |jd¡ |  |j|¡ |  |j|¡ |  |j|¡ |  	d|j
¡ d S )Nr   )ÚobjectSpecificationDescriptorc                   @   s   e Zd ZdZdd„ ZdS )zFTest_implementedByFallback.test_w_None_no_bases_w_factory.<locals>.FooNc                 S   s
   t ƒ ‚d S r#   r$   r¡   r   r   r   rÞ   ¤  s    zOTest_implementedByFallback.test_w_None_no_bases_w_factory.<locals>.Foo.__call__)r   r   r   rÖ   rÞ   r   r   r   r   r   ¡  s   r   r   z*zope.interface.tests.test_declarations.fooÚ__provides__)r    rû   r   rÔ   r!   rž   r·   rÖ   Ú__providedBy__r;   rÏ   )r   rû   r   r   ró   r   r   r   Útest_w_None_no_bases_w_factoryž  s    
ÿ ÿz9Test_implementedByFallback.test_w_None_no_bases_w_factoryc                 C   s~   ddl m} G dd„ dƒ}|  |¡}|  |jd¡ |  |j|¡ |  |j|¡ |  |j	|¡ |  |j
|¡ |  |j
|j	¡ d S )Nr   ©ÚClassProvidesc                   @   s   e Zd ZdZdS )zDTest_implementedByFallback.test_w_None_no_bases_w_class.<locals>.FooNrë   r   r   r   r   r   ¶  s   r   z*zope.interface.tests.test_declarations.Foo)r    r   rÔ   r!   r   rž   r·   rÖ   r{   rý   rü   )r   r   r   ró   r   r   r   Útest_w_None_no_bases_w_class³  s(    
ÿ ÿ ÿ ÿz7Test_implementedByFallback.test_w_None_no_bases_w_classc                    s:   ddl m} |ƒ ‰ G ‡ fdd„dƒ}|  |  |¡ˆ ¡ d S )Nr   rb   c                       s   e Zd Z” ZdS )zBTest_implementedByFallback.test_w_existing_Implements.<locals>.FooNrë   r   rì   r   r   r   Ì  s   r   rí   rî   r   rì   r   Útest_w_existing_ImplementsÈ  s    z5Test_implementedByFallback.test_w_existing_Implementsc                    s¦   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}||ƒG dd	„ d	ƒƒ}||ƒG d
d„ d|ƒƒ}|  t|  |¡ƒ||g¡ t||ƒ}|  t|  |¡ƒ|g¡ d S )Nr   r5   r”   c                   @   s   e Zd ZdS )zSTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr   r   r   r   r   rŠ   Õ  s   rŠ   c                   @   s   e Zd ZdS )zVTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr   r   r   r   r   r‹   Ø  s   r‹   c                   @   s   e Zd ZdS )zRTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr   r   r   r   r   r–   Û  s   r–   c                   @   s   e Zd ZdS )zUTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr   r   r   r   r   ÚDerivedß  s   r  ©rŒ   r6   r    r•   r!   r0   rÔ   Úsuper©r   r6   r•   rŠ   r‹   r–   r  Úsup©Ú	__class__r   r   Ú)test_super_when_base_implements_interfaceÑ  s    
zDTest_implementedByFallback.test_super_when_base_implements_interfacec           
         sÈ   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}||ƒG dd	„ d	ƒƒ}G d
d„ d|ƒ}G dd„ d|ƒ}||ƒG dd„ d||ƒƒ}|  t|  |¡ƒ||g¡ t||ƒ}	|  t|  |	¡ƒ|g¡ d S )Nr   r5   r”   c                   @   s   e Zd ZdS )z[Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IBaseNr   r   r   r   r   rŠ   ë  s   rŠ   c                   @   s   e Zd ZdS )z^Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IDerivedNr   r   r   r   r   r‹   î  s   r‹   c                   @   s   e Zd ZdS )zZTest_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.BaseNr   r   r   r   r   r–   ñ  s   r–   c                   @   s   e Zd ZdS )z\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child1Nr   r   r   r   r   ÚChild1õ  s   r  c                   @   s   e Zd ZdS )z\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child2Nr   r   r   r   r   ÚChild2ø  s   r  c                   @   s   e Zd ZdS )z]Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.DerivedNr   r   r   r   r   r  û  s   r  r  )
r   r6   r•   rŠ   r‹   r–   r  r  r  r  r  r   r   Ú1test_super_when_base_implements_interface_diamondç  s    
zLTest_implementedByFallback.test_super_when_base_implements_interface_diamondc                    sð   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	ƒ}G d
d„ d|ƒ}||ƒG dd„ d|ƒƒ}||ƒG dd„ d||ƒƒ}|  |j||||tf¡ |  t|  |¡ƒ||g¡ t	||ƒ}	|  |	¡}
|  t|
ƒ|g¡ |  
|
j¡ d S )Nr   r5   r”   c                   @   s   e Zd ZdS )z]Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IBaseNr   r   r   r   r   rŠ     s   rŠ   c                   @   s   e Zd ZdS )z`Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IDerivedNr   r   r   r   r   r‹   
  s   r‹   c                   @   s   e Zd ZdS )z\Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.BaseNr   r   r   r   r   r–     s   r–   c                   @   s   e Zd ZdS )z^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child1Nr   r   r   r   r   r    s   r  c                   @   s   e Zd ZdS )z^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child2Nr   r   r   r   r   r    s   r  c                   @   s   e Zd ZdS )z_Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.DerivedNr   r   r   r   r   r    s   r  )rŒ   r6   r    r•   r!   Ú__mro__rO   r0   rÔ   r  rJ   Ú_dependents)r   r6   r•   rŠ   r‹   r–   r  r  r  r  Úfutr  r   r   Ú3test_super_when_parent_implements_interface_diamond  s&     ÿ

zNTest_implementedByFallback.test_super_when_parent_implements_interface_diamondc                    sš   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	ƒ}||ƒG d
d„ d|ƒƒ}|  t|  |¡ƒ|g¡ t||ƒ}|  t|  |¡ƒg ¡ d S )Nr   r5   r”   c                   @   s   e Zd ZdS )zYTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr   r   r   r   r   rŠ   (  s   rŠ   c                   @   s   e Zd ZdS )z\Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr   r   r   r   r   r‹   +  s   r‹   c                   @   s   e Zd ZdS )zXTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr   r   r   r   r   r–   .  s   r–   c                   @   s   e Zd ZdS )z[Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr   r   r   r   r   r  1  s   r  r  r  r  r   r   Ú/test_super_when_base_doesnt_implement_interface$  s    
zJTest_implementedByFallback.test_super_when_base_doesnt_implement_interfacec                    sŠ   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}||ƒG dd	„ d	ƒƒ}|  t|  |¡ƒ|g¡ t||ƒ}|  t|  |¡ƒg ¡ d S )
Nr   r5   r”   c                   @   s   e Zd ZdS )zHTest_implementedByFallback.test_super_when_base_is_object.<locals>.IBaseNr   r   r   r   r   rŠ   >  s   rŠ   c                   @   s   e Zd ZdS )zKTest_implementedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr   r   r   r   r   r‹   A  s   r‹   c                   @   s   e Zd ZdS )zJTest_implementedByFallback.test_super_when_base_is_object.<locals>.DerivedNr   r   r   r   r   r  D  s   r  r  )r   r6   r•   rŠ   r‹   r  r  r  r   r   Útest_super_when_base_is_object:  s    
z9Test_implementedByFallback.test_super_when_base_is_objectc                    s^  ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	|ƒ}G d
d„ d|ƒ}G dd„ d|ƒ}||ƒG dd„ dƒƒ}||ƒG dd„ d|ƒƒ}	||ƒG dd„ d|ƒƒ}
|||ƒG dd„ d|	|
ƒƒ}|}t||ƒ}t|	|ƒ}t|
|ƒ}|  t|  |¡ƒ|||||g¡ |  t|  |¡ƒ|||g¡ |  t|  |¡ƒ||g¡ |  t|  |¡ƒ|g¡ d S )Nr   r5   r”   c                   @   s   e Zd ZdS )zRTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr   r   r   r   r   rŠ   Q  s   rŠ   c                   @   s   e Zd ZdS )zPTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr   r   r   r   r   ÚIM1T  s   r  c                   @   s   e Zd ZdS )zPTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr   r   r   r   r   ÚIM2W  s   r  c                   @   s   e Zd ZdS )zUTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr   r   r   r   r   r‹   Z  s   r‹   c                   @   s   e Zd ZdS )zWTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr   r   r   r   r   Ú
IUnrelated]  s   r  c                   @   s   e Zd ZdS )zQTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr   r   r   r   r   r–   `  s   r–   c                   @   s   e Zd ZdS )zOTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr   r   r   r   r   ÚM1d  s   r  c                   @   s   e Zd ZdS )zOTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr   r   r   r   r   ÚM2h  s   r  c                   @   s   e Zd ZdS )zTTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr   r   r   r   r   r  l  s   r  ©rŒ   r6   r    r•   r  r!   r0   rÔ   ©r   r6   r•   rŠ   r  r  r‹   r  r–   r  r  r  ÚdÚsdZsm1Zsm2r  r   r   Ú(test_super_multi_level_multi_inheritanceM  s>    


ÿÿÿÿzCTest_implementedByFallback.test_super_multi_level_multi_inheritance)r   r   r   rS   Ú_getFallbackClassrÔ   rÚ   rá   rè   ré   rê   rï   rô   rõ   rø   rù   rú   rþ   r  r  r
  r  r  r  r  r  Ú__classcell__r   r   r  r   rÒ     s.   		!rÒ   c                   @   s   e Zd Zdd„ ZdS )ÚTest_implementedByc                 C   s   ddl m} |S )Nr   r’   r´   )r   r“   r   r   r   rS   ƒ  s    z"Test_implementedBy._getTargetClassN©r   r   r   rS   r   r   r   r   r     s   r   c                   @   s4   e Zd ZdZdd„ Zde d dfdd„Zd	d
„ ZdS )Ú_ImplementsTestMixinTc                 C   s   t ‚d S r#   r$   )r   ÚclsÚifacer   r   r   rÔ   ‹  s    z_ImplementsTestMixin._callFUTNz.Fooú	not givenc           
      C   sÆ   ddl m} ddlm} |dƒ}|  ||¡}|  ||¡ |j}	|d k	rR|  |	|¡ |  |	j|¡ |dkrl|n|}|  |	j	|¡ |  |j|	¡ | j
r¾|  |j|¡ |  |j|¡ |  |j|j¡ ||fS )Nr   rÿ   r\   r^   r%  )r    r   r7   r]   rÔ   rž   rÖ   r!   r   r·   ÚFUT_SETS_PROVIDED_BYr{   rý   rü   )
r   r   Z	orig_specZ	spec_namer·   r   r]   r^   Úreturnedró   r   r   r   Ú_check_implementer�  s&    ÿz'_ImplementsTestMixin._check_implementerc                 C   s   G dd„ dƒ}|   |¡ d S )Nc                   @   s   e Zd ZdS )z,_ImplementsTestMixin.test_class.<locals>.FooNr   r   r   r   r   r   ¬  s   r   )r(  r÷   r   r   r   r"   ª  s    z_ImplementsTestMixin.test_class)r   r   r   r&  rÔ   r(  r"   r   r   r   r   r"  ˆ  s   ý
r"  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTest_classImplementsOnlyFc                 C   s   ddl m} |||ƒ |S )Nr   )ÚclassImplementsOnly)r    r*  )r   r#  r$  r*  r   r   r   rÔ   µ  s    
z!Test_classImplementsOnly._callFUTc                    sŒ   ddl m} ddlm} |dƒ}|dƒ}||ƒ‰ |fˆ _G ‡ fdd„dƒ}|ˆ _|  ||¡ |  |jˆ ¡ |  	ˆ jd ¡ |  	ˆ j|f¡ d S )Nr   rb   r\   r^   rn   c                       s   e Zd Z” ZdS )z@Test_classImplementsOnly.test_w_existing_Implements.<locals>.FooNrë   r   rì   r   r   r   Â  s   r   )
r    rc   r7   r]   r¸   r·   rÔ   rž   rÖ   r!   ©r   rc   r]   r^   rn   r   r   rì   r   r  º  s    z3Test_classImplementsOnly.test_w_existing_Implementsc                    sP   ddl m} ddlm} |dƒ}||ƒ‰ G ‡ fdd„dƒ}| j|ˆ dd d� d S )	Nr   rb   r\   rn   c                       s   e Zd Z” ZdS )z0Test_classImplementsOnly.test_class.<locals>.FooNrë   r   ©Zold_specr   r   r   Ò  s   r   r¶   ©r·   )r    rc   r7   r]   r(  )r   rc   r]   rn   r   r   r,  r   r"   Ì  s    z#Test_classImplementsOnly.test_classc                 C   sL   | j tdtfi ƒd d�\}}G dd„ d|ƒ}|  ||¡ |  | |¡¡ d S )Nr   r-  c                   @   s   e Zd ZdS )zRTest_classImplementsOnly.test_redundant_with_super_still_implements.<locals>.ChildNr   r   r   r   r   ÚChildÝ  s   r.  )r(  ÚtyperO   rÔ   r?   r“   )r   r–   rŠ   r.  r   r   r   Ú*test_redundant_with_super_still_implements×  s    þ
zCTest_classImplementsOnly.test_redundant_with_super_still_implementsN)r   r   r   r&  rÔ   r  r"   r0  r   r   r   r   r)  ²  s
   r)  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTest_classImplementsc                 C   s$   ddl m} |||ƒ}|  |¡ |S )Nr   ©ÚclassImplements)r    r3  rJ   )r   r#  r$  r3  Úresultr   r   r   rÔ   æ  s     ÿ
zTest_classImplements._callFUTc                 C   sŒ   |   |¡\}}G dd„ d|ƒ}|  ||¡}|  d|j¡ |  d|j¡ |  d|j¡ |j}|  |jd¡ |  |j|¡ |  	| 
|ƒ ¡¡ d S )Nc                   @   s   e Zd ZdS )zATest_classImplements.__check_implementer_redundant.<locals>.ChildNr   r   r   r   r   r.  ó  s   r.  rÖ   rý   rü   r   )r(  rÔ   ri   rÏ   r;   rÖ   r!   r¸   r·   r?   Ú
providedBy)r   r–   rŠ   r.  r'  ró   r   r   r   Z__check_implementer_redundantî  s    z2Test_classImplements.__check_implementer_redundantc                 C   s   G dd„ dƒ}|   |¡ d S )Nc                   @   s   e Zd ZdS )zUTest_classImplements.test_redundant_implementer_empty_class_declarations.<locals>.FooNr   r   r   r   r   r     s   r   )Ú2_Test_classImplements__check_implementer_redundantr÷   r   r   r   Ú3test_redundant_implementer_empty_class_declarations  s    zHTest_classImplements.test_redundant_implementer_empty_class_declarationsc              	   C   s°   ddl m} ddl m} ddl m} ddlm} G dd„ dƒ}||jjdƒ�Z |  ||¡ |  	t
||ƒƒ|g¡ G d	d
„ d
|ƒ}|  ||¡ |  	t
||ƒƒ|g¡ W 5 Q R X d S )Nr   r5   r’   r†   rˆ   c                   @   s   e Zd ZdS )zFTest_classImplements.test_redundant_implementer_Interface.<locals>.FooNr   r   r   r   r   r     s   r   Fc                   @   s   e Zd ZdS )zFTest_classImplements.test_redundant_implementer_Interface.<locals>.BazNr   r   r   r   r   ÚBaz  s   r8  )rŒ   r6   r“   r‡   r�   r‰   rŽ   r�   rÔ   r!   r0   )r   r6   r“   r‡   r‰   r   r8  r   r   r   Ú$test_redundant_implementer_Interface  s    z9Test_classImplements.test_redundant_implementer_Interfacec                 C   s   ||fS r#   r   ©r   Zapplied_firstZapplied_secondr   r   r   Ú_order_for_two  s    z#Test_classImplements._order_for_twoc                    s’   ddl m} ddlm} |dƒ}|dƒ}||ƒ‰ |fˆ _G ‡ fdd„dƒ}|ˆ _|  ||¡ |  |jˆ ¡ |  	ˆ j|¡ |  	ˆ j|  
||¡¡ d S )Nr   rb   r\   r^   rn   c                       s   e Zd Z” ZdS )z<Test_classImplements.test_w_existing_Implements.<locals>.FooNrë   r   rì   r   r   r   &  s   r   )r    rc   r7   r]   r¸   r·   rÔ   rž   rÖ   r!   r;  r+  r   rì   r   r    s    
ÿz/Test_classImplements.test_w_existing_Implementsc           	         sú   ddl m} ddlm} |dƒ}|dƒ}|d|fƒ}| d|¡‰|fˆ_G ‡fdd	„d	ƒ}G ‡fd
d„dƒ}| d|¡‰ |fˆ _G ‡ fdd„d||ƒ}|ˆ _|  ||¡ |  |j	ˆ ¡ |  
ˆ j|¡ |  
ˆ j|  ||¡¡ |  
ˆ j|  ||¡ˆf ¡ d S )Nr   rb   r\   ÚIRootÚISecondRootÚIExtendsRootZRootc                       s   e Zd Z” ZdS )zFTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root1Nrë   r   ©Ú	impl_rootr   r   ÚRoot1;  s   rA  c                       s   e Zd Z” ZdS )zFTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root2Nrë   r   r?  r   r   ÚRoot2>  s   rB  ZExtendsRoot1c                       s   e Zd Z” ZdS )zLTest_classImplements.test_w_existing_Implements_w_bases.<locals>.ExtendsRootNrë   r   )Úimpl_extends_rootr   r   ÚExtendsRootD  s   rD  )r    rc   r7   r]   r   r¸   r·   rÔ   rž   rÖ   r!   r;  rY   )	r   rc   r]   r<  r=  r>  rA  rB  rD  r   )rC  r@  r   Ú"test_w_existing_Implements_w_bases1  s.    
ÿþz7Test_classImplements.test_w_existing_Implements_w_basesN)
r   r   r   rÔ   r6  r7  r9  r;  r  rE  r   r   r   r   r1  ä  s   r1  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTest_classImplementsFirstc                 C   s$   ddl m} |||ƒ}|  |¡ |S )Nr   )ÚclassImplementsFirst)r    rG  rJ   )r   r#  r$  rG  r4  r   r   r   rÔ   W  s     ÿ
z"Test_classImplementsFirst._callFUTc                 C   s   ||fS r#   r   r:  r   r   r   r;  _  s    z(Test_classImplementsFirst._order_for_twoN)r   r   r   rÔ   r;  r   r   r   r   rF  U  s   rF  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTest__implements_advicec                 O   s   ddl m} |||ŽS )Nr   )Ú_implements_advice)r    rI  )r   rV   rW   rI  r   r   r   rÔ   e  s    z Test__implements_advice._callFUTc                    s~   ddl m} ddl m‰ ddlm} |dƒ‰ G ‡ ‡fdd„dƒ}|  |¡ |  d|j¡ |  |j	|¡ |  
t|j	ƒˆ g¡ d S )	Nr   rb   r2  r\   r^   c                       s   e Zd Z” f”fZdS )z@Test__implements_advice.test_no_existing_implements.<locals>.FooN)r   r   r   Ú__implements_advice_data__r   ©r^   r3  r   r   r   o  s   r   rJ  )r    rc   r3  r7   r]   rÔ   r;   rÏ   r{   rÖ   r!   r0   )r   rc   r]   r   r   rK  r   Útest_no_existing_implementsi  s    
 ÿ ÿz3Test__implements_advice.test_no_existing_implementsN)r   r   r   rÔ   rL  r   r   r   r   rH  c  s   rH  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTest_implementerc                 C   s   ddl m} |S )Nr   r”   )r    r•   )r   r•   r   r   r   rS   ~  s    z Test_implementer._getTargetClassc                 O   s   |   ¡ ||ŽS r#   rT   rU   r   r   r   rX   ‚  s    zTest_implementer._makeOnec                 G   s   | j |Ž }||ƒS r#   ©rX   )r   r#  ZifacesÚ	decoratorr   r   r   rÔ   …  s    
zTest_implementer._callFUTc                 C   s2   ddl m} |dƒ}|  |¡}|  t|tƒ ¡ d S r[   )r7   r]   rX   r¥   r   rO   )r   r]   r^   rO  r   r   r   Ú test_nonclass_cannot_assign_attr‰  s    
z1Test_implementer.test_nonclass_cannot_assign_attrc                 C   sx   ddl m} |dƒ}G dd„ dƒ}|ƒ }|  |¡}||ƒ}|  ||¡ |j}|  |jd¡ |  |j¡ |  |j|¡ d S )Nr   r\   r^   c                   @   s   e Zd ZdS )z;Test_implementer.test_nonclass_can_assign_attr.<locals>.FooNr   r   r   r   r   r   “  s   r   z(zope.interface.tests.test_declarations.?)	r7   r]   rX   rž   rÖ   r!   r   rJ   r·   )r   r]   r^   r   r   rO  r'  ró   r   r   r   Útest_nonclass_can_assign_attr�  s    
 ÿz.Test_implementer.test_nonclass_can_assign_attrc           	      C   s|   dd l }ddlm} |dƒ}t| ¡ ƒ}tdƒD ]}G dd„ dƒ}|  ||¡ q0| ¡  t| ¡ ƒ}d}|  ||| ¡ d S )Nr   r\   r^   il  c                   @   s   e Zd ZdS )zHTest_implementer.test_does_not_leak_on_unique_classes.<locals>.TestClassNr   r   r   r   r   Ú	TestClass¯  s   rR  )	Úgcr7   r]   ÚlenZget_objectsÚrangerÔ   ZcollectrÀ   )	r   rS  r]   r^   Zbegin_countr   rR  Z	end_countZfudge_factorr   r   r   Ú$test_does_not_leak_on_unique_classes¡  s    z5Test_implementer.test_does_not_leak_on_unique_classesN)	r   r   r   rS   rX   rÔ   rP  rQ  rV  r   r   r   r   rM  |  s   rM  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTest_implementer_onlyc                 C   s   ddl m} |S )Nr   )Úimplementer_only)r    rX  )r   rX  r   r   r   rS   Â  s    z%Test_implementer_only._getTargetClassc                 O   s   |   ¡ ||ŽS r#   rT   rU   r   r   r   rX   Æ  s    zTest_implementer_only._makeOnec                 C   s   |   |¡}||ƒS r#   rN  )r   r#  r$  rO  r   r   r   rÔ   É  s    
zTest_implementer_only._callFUTc                 C   s8   ddl m} |dƒ}|  |¡}dd„ }|  t||¡ d S )Nr   r\   r^   c                   S   s
   t ƒ ‚d S r#   r$   r   r   r   r   Ú	_functionÒ  s    z6Test_implementer_only.test_function.<locals>._function)r7   r]   rX   r¥   Ú
ValueError)r   r]   r^   rO  rY  r   r   r   r(   Í  s
    
z#Test_implementer_only.test_functionc                 C   s@   ddl m} |dƒ}|  |¡}G dd„ dƒ}|  t||j¡ d S )Nr   r\   r^   c                   @   s   e Zd Zdd„ ZdS )z.Test_implementer_only.test_method.<locals>.Barc                 S   s
   t ƒ ‚d S r#   r$   r¡   r   r   r   Ú_methodÝ  s    z6Test_implementer_only.test_method.<locals>.Bar._methodN)r   r   r   r[  r   r   r   r   ÚBarÜ  s   r\  )r7   r]   rX   r¥   rZ  r[  )r   r]   r^   rO  r\  r   r   r   Útest_method×  s
    
z!Test_implementer_only.test_methodN)r   r   r   rS   rX   rÔ   r(   r]  r   r   r   r   rW  À  s
   
rW  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 )ÚProvidesClassTestsc                 C   s   ddl m} |S ©Nr   ©ÚProvidesClass©r    ra  ©r   ra  r   r   r   rS   å  s    z"ProvidesClassTests._getTargetClassc                 O   s   |   ¡ ||ŽS r#   rT   rU   r   r   r   rX   é  s    zProvidesClassTests._makeOnec                 C   sD   ddl m} |dƒ}G dd„ dƒ}|  ||¡}|  t|ƒ|g¡ d S )Nr   r\   r^   c                   @   s   e Zd ZdS )z?ProvidesClassTests.test_simple_class_one_interface.<locals>.FooNr   r   r   r   r   r   ð  s   r   rk   ©r   r]   r^   r   ró   r   r   r   Útest_simple_class_one_interfaceì  s
    z2ProvidesClassTests.test_simple_class_one_interfacec                 C   sf   ddl m} ddlm} |dƒ}G dd„ dƒ}|  ||¡}| ¡ \}}|  ||¡ |  |||f¡ d S )Nr   ©ÚProvidesr\   r^   c                   @   s   e Zd ZdS )z/ProvidesClassTests.test___reduce__.<locals>.FooNr   r   r   r   r   r   û  s   r   )r    rg  r7   r]   rX   r¼   rž   r!   )r   rg  r]   r^   r   ró   ÚklassrV   r   r   r   r½   ö  s    z"ProvidesClassTests.test___reduce__c                 C   sF   ddl m} |dƒ}G dd„ dƒ}|  ||¡}||_|  |j|¡ d S )Nr   r\   r^   c                   @   s   e Zd ZdS )z2ProvidesClassTests.test___get___class.<locals>.FooNr   r   r   r   r   r     s   r   ©r7   r]   rX   rü   rž   rd  r   r   r   Útest___get___class  s    z%ProvidesClassTests.test___get___classc                    sP   ddl m} |dƒ}G dd„ dƒ‰ |  ˆ |¡}|ˆ _‡ fdd„}|  t|¡ d S )Nr   r\   r^   c                   @   s   e Zd ZdS )z5ProvidesClassTests.test___get___instance.<locals>.FooNr   r   r   r   r   r     s   r   c                     s   ˆ ƒ } | j S r#   )rü   )r   ©r   r   r   Ú_test  s    z7ProvidesClassTests.test___get___instance.<locals>._test)r7   r]   rX   rü   r¥   ÚAttributeError)r   r]   r^   ró   rl  r   rk  r   Útest___get___instance  s    z(ProvidesClassTests.test___get___instanceN)	r   r   r   rS   rX   re  r½   rj  rn  r   r   r   r   r^  ã  s   
r^  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚProvidesClassStrictTestsc                    s"   t ƒ  ¡ ‰ G ‡ fdd„dˆ ƒ}|S )Nc                       s   e Zd Z‡ fdd„ZdS )z@ProvidesClassStrictTests._getTargetClass.<locals>.StrictProvidesc                    s   ˆ j | |dd�S ©NT)Ú	base_mrosr>   ©Ú_do_calculate_ro©r   rq  r`  r   r   rs  &  s
      ÿzQProvidesClassStrictTests._getTargetClass.<locals>.StrictProvides._do_calculate_roN©r   r   r   rs  r   r`  r   r   ÚStrictProvides%  s   rv  ©r  rS   )r   rv  r  r`  r   rS   "  s    
z(ProvidesClassStrictTests._getTargetClassc                 C   sz   ddl m} ddl m} ddl m} G dd„ d|ƒ}||ƒG dd„ dƒƒ}|  ||¡}|  |j|||ƒ||tƒ|f¡ d S )	Nr   r5   r’   r”   c                   @   s   e Zd ZdS )zMProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr   r   r   r   r   rŠ   4  s   rŠ   c                   @   s   e Zd ZdS )zLProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.BaseNr   r   r   r   r   r–   7  s   r–   )rŒ   r6   r“   r•   rX   r!   rC   rO   )r   r6   r“   r•   rŠ   r–   ró   r   r   r   Ú%test_overlapping_interfaces_corrected-  s    ûz>ProvidesClassStrictTests.test_overlapping_interfaces_corrected©r   r   r   rS   rx  r  r   r   r  r   ro    s   ro  c                   @   st   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S )ÚTestProvidesClassReprc                 C   s   ddl m} |S r_  rb  rc  r   r   r   rS   G  s    z%TestProvidesClassRepr._getTargetClassc                 O   s   |   ¡ ||ŽS r#   rT   rU   r   r   r   rX   K  s    zTestProvidesClassRepr._makeOnec                 C   sv   ddl m} |dƒ}|jdks"t‚|jtks0t‚t|ƒdt› d�ksHt‚|dƒ}|  t| ƒ||¡}|  t|ƒd¡ d S )Nr   r\   r^   z<InterfaceClass z.IFoo>rn   z3directlyProvides(TestProvidesClassRepr, IFoo, IBar))	r7   r]   r   ÚAssertionErrorr   rº   rX   r/  r!   )r   r]   r^   rn   Úinstr   r   r   Útest__repr__N  s    þz"TestProvidesClassRepr.test__repr__c                 C   s&   ddl m} |j}|  t|ƒd¡ d S )Nr   ©ÚdummyzIdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IDummyModule))Úzope.interface.testsr  rü   r!   rº   )r   r  Úprovidesr   r   r   Ú'test__repr__module_provides_typical_use]  s    þz=TestProvidesClassRepr.test__repr__module_provides_typical_usec              
   C   sV   dd l }ddlm} |j}t|jd ƒD ](}|  |j¡� | ||¡ W 5 Q R X q(d S )Nr   r~  r¤   )	r›   r€  r  rü   rU  ÚHIGHEST_PROTOCOLr¥   ÚPicklingErrorr�   )r   r›   r  r�  Úprotor   r   r   Útest__repr__module_after_picklei  s    z5TestProvidesClassRepr.test__repr__module_after_picklec                 C   sö   dd l }ddlm} ddlm} ddlm} ddlm} |dƒ}|dƒ}|j}|`|  	t
|d|¡ |||ƒ |j}	|  t|	ƒd	¡ |||ƒ |j}	|  t|	ƒd
¡ |jt }
t|
dƒrºt‚||
||ƒ |  	t|
d¡ |  |
j|	¡ |  t|	ƒd¡ d S )Nr   ©ÚalsoProvides©ÚdirectlyProvidesr\   r~  r^   rn   rü   zAdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IFoo)zGdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IFoo, IBar)zfdirectlyProvides(('zope.interface.tests.dummy', 'zope.interface.tests.test_declarations'), IFoo, IBar))Úsysr    rˆ  rŠ  r7   r]   r€  r  rü   Z
addCleanupÚsetattrr!   rº   Úmodulesr   Úhasattrr{  Údelattrrž   )r   r‹  rˆ  rŠ  r]   r  r^   rn   Zorig_providesr�  Z	my_moduler   r   r   Ú#test__repr__directlyProvides_modules  s>    
þ
þ	
þz9TestProvidesClassRepr.test__repr__directlyProvides_modulec                 C   s\   ddl m} ddlm} |dƒ}|  ||¡}| jd7  _| jd7  _|  t|ƒd¡ d S )Nr   )Ú
ModuleTyper\   r^   )zsome.module)zanother.modulez9directlyProvides(('some.module', 'another.module'), IFoo))r    r‘  r7   r]   rX   Z_v_module_namesr!   rº   )r   r‘  r]   r^   r|  r   r   r   Ú)test__repr__module_provides_cached_shared£  s    þz?TestProvidesClassRepr.test__repr__module_provides_cached_sharedc                 C   sT   ddl m} |ddd�}|ddd�}|dƒ}|  t| ƒ|||¡}|  t|ƒd¡ d S )	Nr   r\   r^   Úmod1©r   Úmod2rƒ   z>directlyProvides(TestProvidesClassRepr, IFoo, IBaz, mod2.IFoo)©r7   r]   rX   r/  r!   rº   ©r   r]   r^   ZIFoo2rƒ   r|  r   r   r   Útest__repr__duplicate_names°  s    þz1TestProvidesClassRepr.test__repr__duplicate_namesc                 C   sd   ddl m} ddl m} G dd„ d|ƒ}G dd„ dƒ}|t| ƒƒ}|  |||¡}|  t|ƒd¡ d S )	Nr   r5   r’   c                   @   s   e Zd ZdZdS )zKTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.IFooúDoes nothingN©r   r   r   Ú__doc__r   r   r   r   r^   À  s   r^   c                   @   s   e Zd ZdZdS )zJTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.Barr™  Nrš  r   r   r   r   r\  Ã  s   r\  zCdirectlyProvides(Bar, IFoo, classImplements(TestProvidesClassRepr)))rŒ   r6   r“   r/  rX   r!   rº   )r   r6   r“   r^   r\  rd   r|  r   r   r   Ú'test__repr__implementedBy_in_interfaces¼  s    þz=TestProvidesClassRepr.test__repr__implementedBy_in_interfacesc                 C   s"   |   t| ƒ¡}|  t|ƒd¡ d S )Nz'directlyProvides(TestProvidesClassRepr)©rX   r/  r!   rº   ©r   r|  r   r   r   Útest__repr__empty_interfacesÐ  s
    þz2TestProvidesClassRepr.test__repr__empty_interfacesc                    s>   ‡ fdd„‰G ‡fdd„dƒ}ˆ   |ƒ ¡}ˆ  t|ƒd¡ d S )Nc                      s   ˆ   d¡ d S )NzShould not call str)r   r   r¡   r   r   Ústr___dont_call_meÙ  s    zGTestProvidesClassRepr.test__repr__non_class.<locals>.str___dont_call_mec                       s   e Zd ZdZ” Zdd„ ZdS )z;TestProvidesClassRepr.test__repr__non_class.<locals>.Objectr   c                 S   s   dS )Nz<Object>r   r¡   r   r   r   Ú__repr__à  s    zDTestProvidesClassRepr.test__repr__non_class.<locals>.Object.__repr__N)r   r   r   rY   Ú__str__r¡  r   )r   r   r   ÚObjectÜ  s   r£  zdirectlyProvides(<Object>))rX   r!   rº   )r   r£  r|  r   )r   r   r   Útest__repr__non_class×  s    þz+TestProvidesClassRepr.test__repr__non_classc                 C   s`   ddl m} ddl m} ddlm} |dƒ}||ƒG dd„ dƒƒ}||ƒ ƒ}|  t|ƒd¡ d S )	Nr   r”   ©r5  r\   r^   c                   @   s   e Zd ZdS )zDTestProvidesClassRepr.test__repr__providedBy_from_class.<locals>.FooNr   r   r   r   r   r   ï  s   r   úclassImplements(Foo, IFoo))r    r•   r5  r7   r]   r!   rº   )r   r•   r5  r]   r^   r   r|  r   r   r   Ú!test__repr__providedBy_from_classé  s    
þz7TestProvidesClassRepr.test__repr__providedBy_from_classc           
      C   s‚   ddl m} ddl m} ddl m} ddlm} |dƒ}|dƒ}||ƒG dd	„ d	ƒƒ}|ƒ }|||ƒ ||ƒ}	|  t|	ƒd
¡ d S )Nr   r‡  r”   r¥  r\   r^   rn   c                   @   s   e Zd ZdS )zFTestProvidesClassRepr.test__repr__providedBy_alsoProvides.<locals>.FooNr   r   r   r   r   r     s   r   z7directlyProvides(Foo, IBar, classImplements(Foo, IFoo)))r    rˆ  r•   r5  r7   r]   r!   rº   )
r   rˆ  r•   r5  r]   r^   rn   r   r   r|  r   r   r   Ú#test__repr__providedBy_alsoProvidesù  s    
þz9TestProvidesClassRepr.test__repr__providedBy_alsoProvidesN)r   r   r   rS   rX   r}  r‚  r†  r�  r’  r˜  rœ  rŸ  r¤  r§  r¨  r   r   r   r   rz  E  s   
0rz  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTest_Providesc                 O   s   ddl m} |||ŽS )Nr   rf  )r    rg  )r   rV   rW   rg  r   r   r   rÔ     s    zTest_Provides._callFUTc              	   C   s€   ddl m} ddlm} |dƒ}i }G dd„ dƒ}t||d�� |  ||¡}W 5 Q R X |  t|ƒ|g¡ |  |||f |¡ d S )Nr   râ   r\   r^   c                   @   s   e Zd ZdS )z.Test_Provides.test_no_cached_spec.<locals>.FooNr   r   r   r   r   r     s   r   ©ZInstanceDeclarations)	rŒ   rã   r7   r]   Ú_MonkeyrÔ   r!   r0   rž   )r   rã   r]   r^   Úcacher   ró   r   r   r   Útest_no_cached_spec  s    z!Test_Provides.test_no_cached_specc              	   C   st   ddl m} ddlm} |dƒ}tƒ }G dd„ dƒ}||f|i}t||d�� |  ||¡}W 5 Q R X |  ||¡ d S )Nr   râ   r\   r^   c                   @   s   e Zd ZdS )z-Test_Provides.test_w_cached_spec.<locals>.FooNr   r   r   r   r   r   )  s   r   rª  )rŒ   rã   r7   r]   rO   r«  rÔ   rž   )r   rã   r]   r^   Zpriorr   r¬  ró   r   r   r   Útest_w_cached_spec#  s    z Test_Provides.test_w_cached_specN)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_directlyProvidesc                 O   s   ddl m} |||ŽS )Nr   r‰  )r    rŠ  )r   rV   rW   rŠ  r   r   r   rÔ   4  s    zTest_directlyProvides._callFUTc                 C   sf   ddl m} ddlm} |dƒ}G dd„ dƒ}|ƒ }|  ||¡ |  |j|¡ |  t|jƒ|g¡ d S )Nr   r`  r\   r^   c                   @   s   e Zd ZdS )z7Test_directlyProvides.test_w_normal_object.<locals>.FooNr   r   r   r   r   r   =  s   r   ©	r    ra  r7   r]   rÔ   r{   rü   r!   r0   ©r   ra  r]   r^   r   Úobjr   r   r   Útest_w_normal_object8  s     ÿ ÿz*Test_directlyProvides.test_w_normal_objectc                 C   s`   ddl m} ddlm} |dƒ}G dd„ dƒ}|  ||¡ |  |j|¡ |  t|jƒ|g¡ d S )Nr   rÿ   r\   r^   c                   @   s   e Zd ZdS )z/Test_directlyProvides.test_w_class.<locals>.FooNr   r   r   r   r   r   N  s   r   )	r    r   r7   r]   rÔ   r{   rü   r!   r0   ©r   r   r]   r^   r   r   r   r   Útest_w_classI  s     ÿ ÿz"Test_directlyProvides.test_w_classc                    sr   ddl m} ddlm} |dƒ}i ‰ G ‡ fdd„dƒ}|ƒ }|  ||¡ |  ˆ d |¡ |  tˆ d ƒ|g¡ d S )Nr   r`  r\   r^   c                       s    e Zd Zdd„ Z‡ fdd„ZdS )z:Test_directlyProvides.test_w_classless_object.<locals>.Fooc                 S   s   |dkrd S t |ƒ‚d S ©Nr	  r$   rÆ   r   r   r   Ú__getattribute__`  s    zKTest_directlyProvides.test_w_classless_object.<locals>.Foo.__getattribute__c                    s   |ˆ |< d S r#   r   ©r   r­   Úvalue©Zthe_dictr   r   Ú__setattr__f  s    zFTest_directlyProvides.test_w_classless_object.<locals>.Foo.__setattr__N©r   r   r   r·  r»  r   rº  r   r   r   _  s   r   rü   )r    ra  r7   r]   rÔ   r{   r!   r0   r±  r   rº  r   Útest_w_classless_objectY  s    
z-Test_directlyProvides.test_w_classless_objectN)r   r   r   rÔ   r³  rµ  r½  r   r   r   r   r¯  2  s   r¯  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTest_alsoProvidesc                 O   s   ddl m} |||ŽS )Nr   r‡  )r    rˆ  )r   rV   rW   rˆ  r   r   r   rÔ   q  s    zTest_alsoProvides._callFUTc                 C   sf   ddl m} ddlm} |dƒ}G dd„ dƒ}|ƒ }|  ||¡ |  |j|¡ |  t|jƒ|g¡ d S )Nr   r`  r\   r^   c                   @   s   e Zd ZdS )z8Test_alsoProvides.test_wo_existing_provides.<locals>.FooNr   r   r   r   r   r   z  s   r   r°  r±  r   r   r   Útest_wo_existing_providesu  s     ÿ ÿz+Test_alsoProvides.test_wo_existing_providesc                 C   s†   ddl m} ddl m} ddlm} |dƒ}|dƒ}G dd„ dƒ}|ƒ }|||ƒ |  ||¡ |  |j|¡ |  t	|jƒ||g¡ d S )	Nr   r`  r‰  r\   r^   rn   c                   @   s   e Zd ZdS )z7Test_alsoProvides.test_w_existing_provides.<locals>.FooNr   r   r   r   r   r   �  s   r   )
r    ra  rŠ  r7   r]   rÔ   r{   rü   r!   r0   )r   ra  rŠ  r]   r^   rn   r   r²  r   r   r   Útest_w_existing_provides†  s"    
 ÿ ÿz*Test_alsoProvides.test_w_existing_providesN)r   r   r   rÔ   r¿  rÀ  r   r   r   r   r¾  o  s   r¾  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTest_noLongerProvidesc                 O   s   ddl m} |||ŽS )Nr   )ÚnoLongerProvides)r    rÂ  )r   rV   rW   rÂ  r   r   r   rÔ   �  s    zTest_noLongerProvides._callFUTc                 C   sJ   ddl m} |dƒ}G dd„ dƒ}|ƒ }|  ||¡ |  t|jƒg ¡ d S )Nr   r\   r^   c                   @   s   e Zd ZdS )z<Test_noLongerProvides.test_wo_existing_provides.<locals>.FooNr   r   r   r   r   r   ¥  s   r   )r7   r]   rÔ   r!   r0   rü   )r   r]   r^   r   r²  r   r   r   r¿  ¡  s     ÿz/Test_noLongerProvides.test_wo_existing_providesc                 C   s`   ddl m} ddlm} |dƒ}G dd„ dƒ}|ƒ }|||ƒ |  ||¡ |  t|jƒg ¡ d S )Nr   r‰  r\   r^   c                   @   s   e Zd ZdS )z?Test_noLongerProvides.test_w_existing_provides_hit.<locals>.FooNr   r   r   r   r   r   ³  s   r   ©r    rŠ  r7   r]   rÔ   r!   r0   rü   )r   rŠ  r]   r^   r   r²  r   r   r   Útest_w_existing_provides_hit®  s    
 ÿz2Test_noLongerProvides.test_w_existing_provides_hitc                 C   sj   ddl m} ddlm} |dƒ}|dƒ}G dd„ dƒ}|ƒ }|||ƒ |  ||¡ |  t|jƒ|g¡ d S )Nr   r‰  r\   r^   rn   c                   @   s   e Zd ZdS )z@Test_noLongerProvides.test_w_existing_provides_miss.<locals>.FooNr   r   r   r   r   r   Ã  s   r   rÃ  )r   rŠ  r]   r^   rn   r   r²  r   r   r   Útest_w_existing_provides_miss½  s    
 ÿz3Test_noLongerProvides.test_w_existing_provides_missc                 C   sR   ddl m} ddlm} |dƒ}||ƒG dd„ dƒƒ}|ƒ }|  t| j||¡ d S )Nr   r”   r\   r^   c                   @   s   e Zd ZdS )zDTest_noLongerProvides.test_w_iface_implemented_by_class.<locals>.FooNr   r   r   r   r   r   Ò  s   r   )r    r•   r7   r]   r¥   rZ  rÔ   )r   r•   r]   r^   r   r²  r   r   r   Ú!test_w_iface_implemented_by_classÍ  s    z7Test_noLongerProvides.test_w_iface_implemented_by_classN)r   r   r   rÔ   r¿  rÄ  rÅ  rÆ  r   r   r   r   rÁ  ›  s
   rÁ  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚClassProvidesBaseFallbackTestsc                 C   s   ddl m} |S ©Nr   )ÚClassProvidesBaseFallback©r    rÉ  ©r   rÉ  r   r   r   rS   Ü  s    z.ClassProvidesBaseFallbackTests._getTargetClassc                 C   s   G dd„ d|   ¡ ƒ}|||ƒS )Nc                   @   s   e Zd Zdd„ ZdS )z8ClassProvidesBaseFallbackTests._makeOne.<locals>.Derivedc                 S   s   || _ || _d S r#   )Ú_clsZ_implements)r   ÚkÚir   r   r   rÅ   æ  s    zAClassProvidesBaseFallbackTests._makeOne.<locals>.Derived.__init__N)r   r   r   rÅ   r   r   r   r   r  å  s   r  rT   )r   rh  Z
implementsr  r   r   r   rX   á  s    z'ClassProvidesBaseFallbackTests._makeOnec                 C   sF   ddl m} |dƒ}G dd„ dƒ}|  ||¡ }|_|  |j|¡ d S )Nr   r\   r^   c                   @   s   e Zd ZdS )zGClassProvidesBaseFallbackTests.test_w_same_class_via_class.<locals>.FooNr   r   r   r   r   r   ð  s   r   ri  )r   r]   r^   r   Zcpbpr   r   r   Útest_w_same_class_via_classì  s
    z:ClassProvidesBaseFallbackTests.test_w_same_class_via_classc                 C   sH   ddl m} |dƒ}G dd„ dƒ}|ƒ }|  ||¡|_|  |j|¡ d S )Nr   r\   r^   c                   @   s   e Zd ZdS )zJClassProvidesBaseFallbackTests.test_w_same_class_via_instance.<locals>.FooNr   r   r   r   r   r   ú  s   r   ri  )r   r]   r^   r   r   r   r   r   Útest_w_same_class_via_instanceö  s    z=ClassProvidesBaseFallbackTests.test_w_same_class_via_instancec                 C   sj   ddl m} |dƒ}G dd„ dƒ}G dd„ d|ƒ}|ƒ }|  ||¡|_|  tt|d¡ |  tt|d¡ d S )	Nr   r\   r^   c                   @   s   e Zd ZdS )zBClassProvidesBaseFallbackTests.test_w_different_class.<locals>.FooNr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )zBClassProvidesBaseFallbackTests.test_w_different_class.<locals>.BarNr   r   r   r   r   r\    s   r\  rü   )r7   r]   rX   rü   r¥   rm  Úgetattr)r   r]   r^   r   r\  Úbarr   r   r   Útest_w_different_class  s    z5ClassProvidesBaseFallbackTests.test_w_different_classN)r   r   r   rS   rX   rÏ  rÐ  rÓ  r   r   r   r   rÇ  Ú  s
   
rÇ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚClassProvidesBaseTestsc                 C   s   ddl m} |S )Nr   )ÚClassProvidesBase)r    rÕ  )r   rÕ  r   r   r   rS     s    z&ClassProvidesBaseTests._getTargetClassc                 C   s   ddl m} |S rÈ  rÊ  rË  r   r   r   r    s    z(ClassProvidesBaseTests._getFallbackClassN)r   r   r   rS   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 )
ÚClassProvidesTestsc                 C   s   ddl m} |S ©Nr   rÿ   ©r    r   ©r   r   r   r   r   rS   $  s    z"ClassProvidesTests._getTargetClassc                 O   s   |   ¡ ||ŽS r#   rT   rU   r   r   r   rX   (  s    zClassProvidesTests._makeOnec                 C   s~   ddl m} ddlm} |dƒ}|dƒ}||ƒG dd„ dƒƒ}|  |t|ƒ|¡ }|_|  |j|¡ |  t	|ƒ jƒ|g¡ d S )Nr   r”   r\   r^   rn   c                   @   s   e Zd ZdS )z7ClassProvidesTests.test_w_simple_metaclass.<locals>.FooNr   r   r   r   r   r   1  s   r   )
r    r•   r7   r]   rX   r/  rü   rž   r!   r0   ©r   r•   r]   r^   rn   r   Úcpr   r   r   Útest_w_simple_metaclass+  s    z*ClassProvidesTests.test_w_simple_metaclassc                 C   s|   ddl m} ddlm} |dƒ}|dƒ}||ƒG dd„ dƒƒ}|  |t|ƒ|¡ }|_|  | ¡ t|ƒ|t|ƒ|ff¡ d S )Nr   r”   r\   r^   rn   c                   @   s   e Zd ZdS )z/ClassProvidesTests.test___reduce__.<locals>.FooNr   r   r   r   r   r   ?  s   r   )	r    r•   r7   r]   rX   r/  rü   r!   r¼   rÚ  r   r   r   r½   9  s    
ÿz"ClassProvidesTests.test___reduce__N)r   r   r   rS   rX   rÜ  r½   r   r   r   r   rÖ  "  s   rÖ  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚClassProvidesStrictTestsc                    s"   t ƒ  ¡ ‰ G ‡ fdd„dˆ ƒ}|S )Nc                       s   e Zd Z‡ fdd„ZdS )zEClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvidesc                    s   ˆ j | |dd�S rp  rr  rt  rÿ   r   r   rs  O  s
      ÿzVClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvides._do_calculate_roNru  r   rÿ   r   r   ÚStrictClassProvidesN  s   rÞ  rw  )r   rÞ  r  rÿ   r   rS   K  s    
z(ClassProvidesStrictTests._getTargetClassc              	   C   s’   ddl m} ddl m} ddl m} G dd„ d|ƒ}||ƒG dd„ dtƒƒ}|d	tfi ƒ}|  |||¡}|  |j|||ƒ||tƒ|tƒ|f¡ d S )
Nr   r5   r’   r”   c                   @   s   e Zd ZdS )zMClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr   r   r   r   r   rŠ   ]  s   rŠ   c                   @   s   e Zd ZdS )zQClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.metaclassNr   r   r   r   r   Ú	metaclass`  s   rß  r#  )	rŒ   r6   r“   r•   r/  rO   rX   r!   rC   )r   r6   r“   r•   rŠ   rß  r#  ró   r   r   r   rx  V  s(    ýúz>ClassProvidesStrictTests.test_overlapping_interfaces_correctedry  r   r   r  r   rÝ  H  s   rÝ  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestClassProvidesReprc                 C   s   ddl m} |S r×  rØ  rÙ  r   r   r   rS   w  s    z%TestClassProvidesRepr._getTargetClassc                 O   s   |   ¡ ||ŽS r#   rT   rU   r   r   r   rX   {  s    zTestClassProvidesRepr._makeOnec                 C   s$   |   t| ƒt¡}|  t|ƒd¡ d S )Nz'directlyProvides(TestClassProvidesRepr)r�  rž  r   r   r   Útest__repr__empty~  s
    þz'TestClassProvidesRepr.test__repr__emptyc                 C   sB   ddl m} G dd„ d|ƒ}|  t| ƒt|¡}|  t|ƒd¡ d S )Nr   r5   c                   @   s   e Zd ZdZdS )z=TestClassProvidesRepr.test__repr__providing_one.<locals>.IFoor™  Nrš  r   r   r   r   r^   ˆ  s   r^   z-directlyProvides(TestClassProvidesRepr, IFoo))rŒ   r6   rX   r/  r!   rº   )r   r6   r^   r|  r   r   r   Útest__repr__providing_one…  s    þz/TestClassProvidesRepr.test__repr__providing_onec                 C   sV   ddl m} |ddd�}|ddd�}|dƒ}|  t| ƒt|||¡}|  t|ƒd¡ d S )	Nr   r\   r^   r“  r”  r•  rƒ   z>directlyProvides(TestClassProvidesRepr, IFoo, IBaz, mod2.IFoo)r–  r—  r   r   r   r˜  ‘  s    þz1TestClassProvidesRepr.test__repr__duplicate_namesc                 C   s^   ddl m} ddl m} ddlm} |dƒ}||ƒG dd„ dƒƒ}||ƒ}|  t|ƒd¡ d S )	Nr   r’   r”   r\   r^   c                   @   s   e Zd ZdS )z<TestClassProvidesRepr.test__repr__implementedBy.<locals>.FooNr   r   r   r   r   r   £  s   r   r¦  )r    r“   r•   r7   r]   r!   rº   )r   r“   r•   r]   r^   r   r|  r   r   r   Útest__repr__implementedBy�  s    þz/TestClassProvidesRepr.test__repr__implementedByc                 C   sd   ddl m} G dd„ dƒ}||ƒ ƒ}|  t|ƒdt› d�¡ |ƒ }d|_||ƒ}|  t|ƒd¡ d S )Nr   r’   c                   @   s   e Zd Zdd„ ZdS )zRTestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callablec                 S   s   | S r#   r   r¡   r   r   r   rÞ   ³  s    z[TestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callable.__call__N)r   r   r   rÞ   r   r   r   r   ÚCallable²  s   rä  zclassImplements(z.?)zclassImplements(Callable))r    r“   r!   rº   r   )r   r“   rä  r|  Úcr   r   r   Ú*test__repr__implementedBy_generic_callable­  s    

þþz@TestClassProvidesRepr.test__repr__implementedBy_generic_callableN)
r   r   r   rS   rX   rá  râ  r˜  rã  ræ  r   r   r   r   rà  u  s   rà  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTest_directlyProvidedByc                 O   s   ddl m} |||ŽS )Nr   )ÚdirectlyProvidedBy)r    rè  )r   rV   rW   rè  r   r   r   rÔ   Ç  s    z Test_directlyProvidedBy._callFUTc                 C   s.   G dd„ dƒ}|ƒ }|   t|  |¡ƒg ¡ d S )Nc                   @   s   e Zd ZdS )zNTest_directlyProvidedBy.test_wo_declarations_in_class_or_instance.<locals>.FooNr   r   r   r   r   r   Í  s   r   rö   rÙ   r   r   r   Ú)test_wo_declarations_in_class_or_instanceË  s    zATest_directlyProvidedBy.test_wo_declarations_in_class_or_instancec                 C   sV   ddl m} ddlm} |dƒ}||ƒG dd„ dƒƒ}|ƒ }|  t|  |¡ƒg ¡ d S )Nr   r”   r\   r^   c                   @   s   e Zd ZdS )zRTest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance.<locals>.FooNr   r   r   r   r   r   Ø  s   r   )r    r•   r7   r]   r!   r0   rÔ   )r   r•   r]   r^   r   r   r   r   r   Ú-test_w_declarations_in_class_but_not_instanceÓ  s    zETest_directlyProvidedBy.test_w_declarations_in_class_but_not_instancec                 C   sZ   ddl m} ddlm} |dƒ}G dd„ dƒ}|ƒ }|||ƒ |  t|  |¡ƒ|g¡ d S )Nr   r‰  r\   r^   c                   @   s   e Zd ZdS )zRTest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class.<locals>.FooNr   r   r   r   r   r   ä  s   r   )r    rŠ  r7   r]   r!   r0   rÔ   )r   rŠ  r]   r^   r   r   r   r   r   Ú-test_w_declarations_in_instance_but_not_classß  s    
zETest_directlyProvidedBy.test_w_declarations_in_instance_but_not_classc                 C   sv   ddl m} ddl m} ddlm} |dƒ}|dƒ}||ƒG dd„ dƒƒ}|ƒ }|||ƒ |  t|  |¡ƒ|g¡ d S )	Nr   r‰  r”   r\   r^   rn   c                   @   s   e Zd ZdS )zNTest_directlyProvidedBy.test_w_declarations_in_instance_and_class.<locals>.FooNr   r   r   r   r   r   ò  s   r   )r    rŠ  r•   r7   r]   r!   r0   rÔ   )r   rŠ  r•   r]   r^   rn   r   r   r   r   r   Ú)test_w_declarations_in_instance_and_classë  s    
zATest_directlyProvidedBy.test_w_declarations_in_instance_and_classN)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S )ÚTest_providerc                 C   s   ddl m} |S )Nr   )Úprovider)r    rî  )r   rî  r   r   r   rS   ý  s    zTest_provider._getTargetClassc                 O   s   |   ¡ ||ŽS r#   rT   rU   r   r   r   rX     s    zTest_provider._makeOnec                 C   s^   ddl m} ddlm} |dƒ}|  |¡G dd„ dƒƒ}|  |j|¡ |  t|jƒ|g¡ d S )Nr   rÿ   r\   r^   c                   @   s   e Zd ZdS )z'Test_provider.test_w_class.<locals>.FooNr   r   r   r   r   r   	  s   r   )	r    r   r7   r]   rX   r{   rü   r!   r0   r´  r   r   r   rµ    s     ÿ ÿzTest_provider.test_w_classN)r   r   r   rS   rX   rµ  r   r   r   r   rí  û  s   rí  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTest_moduleProvidesc                 C   sb   ddl m} ddlm} |dƒ}d||dœ}i }d dd	g¡}t|||ƒ |d
 }|  t|¡ d S )Nr   ©ÚmoduleProvidesr\   r^   úzope.interface.tests.foo©r   rñ  r^   Ú
z
def foo():ú    moduleProvides(IFoo)r   )r    rñ  r7   r]   Újoinr   r¥   r   )r   rñ  r]   r^   r   r   ÚCODEr   r   r   r   Útest_called_from_function  s     ÿþz-Test_moduleProvides.test_called_from_functionc              	   C   sd   ddl m} ddlm} |dƒ}d||dœ}i }d dd	g¡}|  t¡� t|||ƒ W 5 Q R X d S )
Nr   rð  r\   r^   rò  ró  rô  zclass Foo(object):rõ  ©r    rñ  r7   r]   rö  r¥   r   r   )r   rñ  r]   r^   r   r   r÷  r   r   r   Útest_called_from_class'  s     ÿþz*Test_moduleProvides.test_called_from_classc                 C   s`   ddl m} ddlm} |dƒ}d||dœ}d dg¡}t||ƒ |d	 }|  t|ƒ|g¡ d S )
Nr   rð  r\   r^   rò  ró  rô  úmoduleProvides(IFoo)rü   )r    rñ  r7   r]   rö  r   r!   r0   )r   rñ  r]   r^   r   r÷  ró   r   r   r   Ú"test_called_once_from_module_scope5  s     ÿÿ
z6Test_moduleProvides.test_called_once_from_module_scopec              	   C   s^   ddl m} ddlm} |dƒ}d||dœ}d ddg¡}|  t¡� t||ƒ W 5 Q R X d S )	Nr   rð  r\   r^   rò  ró  rô  rû  rù  )r   rñ  r]   r^   r   r÷  r   r   r   Ú#test_called_twice_from_module_scopeB  s     ÿþz7Test_moduleProvides.test_called_twice_from_module_scopeN)r   r   r   rø  rú  rü  rý  r   r   r   r   rï    s   rï  c                   @   sp   e Zd Zdd„ ZeZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú#Test_getObjectSpecificationFallbackc                 C   s   ddl m} |S )Nr   )ÚgetObjectSpecificationFallback)r    rÿ  )r   rÿ  r   r   r   r  S  s    z5Test_getObjectSpecificationFallback._getFallbackClassc                 O   s   |   ¡ ||ŽS r#   rT   rU   r   r   r   rÔ   Z  s    z,Test_getObjectSpecificationFallback._callFUTc                    s:   i ‰ G ‡ fdd„dƒ}|ƒ }|   |¡}|  t|ƒg ¡ d S )Nc                       s    e Zd Z‡ fdd„Zdd„ ZdS )zTTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Fooc                    s<   |dkrt |ƒ‚z
ˆ | W S  tk
r6   t |ƒ‚Y nX d S r¶  )rm  ÚKeyErrorrÆ   rº  r   r   r·  a  s    
zeTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__getattribute__c                 S   s
   t ƒ ‚d S r#   r$   r¸  r   r   r   r»  j  s    z`Test_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__setattr__Nr¼  r   rº  r   r   r   `  s   	r   ©rÔ   r!   r0   ©r   r   r   ró   r   rº  r   Ú#test_wo_existing_provides_classless]  s
    
zGTest_getObjectSpecificationFallback.test_wo_existing_provides_classlessc                 C   sN   ddl m} ddlm} |dƒ}dd„ }|||ƒ |  |¡}|  ||j¡ d S )Nr   r‰  r\   r^   c                   S   s
   t ƒ ‚d S r#   r$   r   r   r   r   r   v  s    zOTest_getObjectSpecificationFallback.test_existing_provides_is_spec.<locals>.foo)r    rŠ  r7   r]   rÔ   rž   rü   )r   rŠ  r]   r^   r   ró   r   r   r   Útest_existing_provides_is_specq  s    

zBTest_getObjectSpecificationFallback.test_existing_provides_is_specc                 C   s.   dd„ }t ƒ |_|  |¡}|  t|ƒg ¡ d S )Nc                   S   s
   t ƒ ‚d S r#   r$   r   r   r   r   r     s    zSTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec.<locals>.foo)rO   rü   rÔ   r!   r0   )r   r   ró   r   r   r   Ú"test_existing_provides_is_not_spec}  s    
zFTest_getObjectSpecificationFallback.test_existing_provides_is_not_specc                 C   s^   ddl m} ddlm} |dƒ}G dd„ dƒ}|ƒ }|||ƒ |  |¡}|  t|ƒ|g¡ d S )Nr   r‰  r\   r^   c                   @   s   e Zd ZdS )zGTest_getObjectSpecificationFallback.test_existing_provides.<locals>.FooNr   r   r   r   r   r   ‹  s   r   )r    rŠ  r7   r]   rÔ   r!   r0   )r   rŠ  r]   r^   r   r   ró   r   r   r   Útest_existing_provides†  s    

z:Test_getObjectSpecificationFallback.test_existing_providesc                 C   s\   ddl m} ddlm} |dƒ}||ƒG dd„ dƒƒ}|ƒ }|  |¡}|  t|ƒ|g¡ d S )Nr   r”   r\   r^   c                   @   s   e Zd ZdS )zWTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implements.<locals>.FooNr   r   r   r   r   r   ˜  s   r   )r    r•   r7   r]   rÔ   r!   r0   ©r   r•   r]   r^   r   r   ró   r   r   r   Ú&test_wo_provides_on_class_w_implements“  s    
zJTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implementsc                 C   s2   G dd„ dƒ}|ƒ }|   |¡}|  t|ƒg ¡ d S )Nc                   @   s   e Zd ZdS )zXTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements.<locals>.FooNr   r   r   r   r   r   ¢  s   r   r  r  r   r   r   Ú'test_wo_provides_on_class_wo_implements   s    
zKTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implementsc                 C   s   t j| | jdd� d S )Nrü   ©Úexpected_missing©r   Útest_raisesrÔ   r¡   r   r   r   Ú,test_catches_only_AttributeError_on_provides©  s
      ÿzPTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_providesc                 C   s   t j| | jdd d� d S )Nr	  )r  rü   r  r¡   r   r   r   Ú)test_catches_only_AttributeError_on_class®  s    üzMTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_classc                 C   s   G dd„ dƒ}|   |ƒ ¡ d S )Nc                   @   s   e Zd ZeeƒZdS )zlTest_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_AttrError.<locals>.FooN)r   r   r   r   rm  rü   r   r   r   r   r   º  s   r   )rÔ   r÷   r   r   r   Ú;test_raises_AttrError_w_provides_fails_type_check_AttrError¶  s    z_Test_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_AttrErrorc              	   C   sH   G dd„ dƒ}|   t¡�}|  |ƒ ¡ W 5 Q R X |  d|jjd ¡ d S )Nc                   @   s   e Zd ZeeƒZdS )zoTest_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_RuntimeError.<locals>.FooN)r   r   r   r   ÚRuntimeErrorrü   r   r   r   r   r   Ã  s   r   r	  r   )r¥   r  rÔ   r!   Ú	exceptionrV   )r   r   Úexcr   r   r   Ú>test_raises_AttrError_w_provides_fails_type_check_RuntimeErrorÀ  s    zbTest_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_RuntimeErrorN)r   r   r   r  rS   rÔ   r  r  r  r  r  r	  r  r  r  r  r   r   r   r   rþ  Q  s   		
rþ  c                   @   s   e Zd Zdd„ ZdS )ÚTest_getObjectSpecificationc                 C   s   ddl m} |S )Nr   )ÚgetObjectSpecification)r    r  )r   r  r   r   r   rS   Ð  s    z+Test_getObjectSpecification._getTargetClassNr!  r   r   r   r   r  Ì  s   r  c                       s¨   e Zd Zdd„ ZeZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Zdd„ Zdd „ Z‡  ZS )!ÚTest_providedByFallbackc                 C   s   ddl m} |S )Nr   )ÚprovidedByFallback)r    r  )r   r  r   r   r   r  ×  s    z)Test_providedByFallback._getFallbackClassc                 O   s   |   ¡ ||ŽS r#   rT   rU   r   r   r   rÔ   Þ  s    z Test_providedByFallback._callFUTc                 C   s2   G dd„ dƒ}|ƒ }|   |¡}|  t|ƒg ¡ d S )Nc                   @   s   e Zd ZdS )zNTest_providedByFallback.test_wo_providedBy_on_class_wo_implements.<locals>.FooNr   r   r   r   r   r   ã  s   r   r  r  r   r   r   Ú)test_wo_providedBy_on_class_wo_implementsá  s    
zATest_providedByFallback.test_wo_providedBy_on_class_wo_implementsc                 C   s`   ddl m} ddlm} |dƒ}G dd„ dƒ}|ƒ }|||ƒ|_|  |¡}|  t|ƒ|g¡ d S )Nr   rf  r\   r^   c                   @   s   e Zd ZdS )zATest_providedByFallback.test_w_providedBy_valid_spec.<locals>.FooNr   r   r   r   r   r   ï  s   r   )r    rg  r7   r]   rý   rÔ   r!   r0   )r   rg  r]   r^   r   r   ró   r   r   r   Útest_w_providedBy_valid_specê  s    
z4Test_providedByFallback.test_w_providedBy_valid_specc                 C   s:   G dd„ dƒ}|ƒ }t ƒ |_|  |¡}|  t|ƒg ¡ d S )Nc                   @   s   e Zd ZdS )zCTest_providedByFallback.test_w_providedBy_invalid_spec.<locals>.FooNr   r   r   r   r   r   ù  s   r   )rO   rý   rÔ   r!   r0   r  r   r   r   Útest_w_providedBy_invalid_spec÷  s
    
z6Test_providedByFallback.test_w_providedBy_invalid_specc                 C   sd   ddl m} ddlm} |dƒ}||ƒG dd„ dƒƒ}|ƒ }tƒ |_|  |¡}|  t|ƒ|g¡ d S )Nr   r”   r\   r^   c                   @   s   e Zd ZdS )zVTest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements.<locals>.FooNr   r   r   r   r   r   	  s   r   )	r    r•   r7   r]   rO   rý   rÔ   r!   r0   r  r   r   r   Ú1test_w_providedBy_invalid_spec_class_w_implements	  s    
zITest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implementsc                 C   sB   G dd„ dƒ}|ƒ }t ƒ |_t ƒ  }|_|  |¡}|  ||¡ d S )Nc                   @   s   e Zd ZdS )zcTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_class.<locals>.FooNr   r   r   r   r   r   	  s   r   ©rO   rý   rü   rÔ   rž   ©r   r   r   Úexpectedró   r   r   r   Ú>test_w_providedBy_invalid_spec_w_provides_no_provides_on_class	  s    
zVTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_classc                 C   sJ   G dd„ dƒ}|ƒ }t ƒ |_t ƒ  }|_t ƒ |_|  |¡}|  ||¡ d S )Nc                   @   s   e Zd ZdS )zeTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class.<locals>.FooNr   r   r   r   r   r   	  s   r   r  r  r   r   r   Ú@test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class	  s    
zXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_classc                 C   sr   ddl m} ddlm} |dƒ}||ƒG dd„ dƒƒ}|ƒ }tƒ |_tƒ  |_|_|  |¡}|  t	|ƒ|g¡ d S )Nr   r”   r\   r^   c                   @   s   e Zd ZdS )zeTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_class.<locals>.FooNr   r   r   r   r   r   +	  s   r   )
r    r•   r7   r]   rO   rý   rü   rÔ   r!   r0   r  r   r   r   Ú@test_w_providedBy_invalid_spec_w_provides_same_provides_on_class&	  s    
zXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_classc           
         s¼   ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}||ƒG dd	„ d	ƒƒ}||ƒG d
d„ d|ƒƒ}|ƒ }|  t|  |¡ƒ||g¡ t||ƒ}|  |¡}	|  |	j	¡ |  t|	ƒ|g¡ d S )Nr   r5   r”   c                   @   s   e Zd ZdS )zPTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr   r   r   r   r   rŠ   9	  s   rŠ   c                   @   s   e Zd ZdS )zSTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr   r   r   r   r   r‹   <	  s   r‹   c                   @   s   e Zd ZdS )zOTest_providedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr   r   r   r   r   r–   ?	  s   r–   c                   @   s   e Zd ZdS )zRTest_providedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr   r   r   r   r   r  C	  s   r  ©
rŒ   r6   r    r•   r!   r0   rÔ   r  rJ   r  )
r   r6   r•   rŠ   r‹   r–   r  Úderivedr  r  r  r   r   r
  5	  s    

zATest_providedByFallback.test_super_when_base_implements_interfacec           	         s    ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	ƒ}||ƒG d
d„ d|ƒƒ}|ƒ }|  t|  |¡ƒ|g¡ t||ƒ}|  t|  |¡ƒg ¡ d S )Nr   r5   r”   c                   @   s   e Zd ZdS )zVTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr   r   r   r   r   rŠ   S	  s   rŠ   c                   @   s   e Zd ZdS )zYTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr   r   r   r   r   r‹   V	  s   r‹   c                   @   s   e Zd ZdS )zUTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr   r   r   r   r   r–   Y	  s   r–   c                   @   s   e Zd ZdS )zXTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr   r   r   r   r   r  \	  s   r  r  )	r   r6   r•   rŠ   r‹   r–   r  r$  r  r  r   r   r  O	  s    
zGTest_providedByFallback.test_super_when_base_doesnt_implement_interfacec           	         s    ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}||ƒG dd	„ d	ƒƒ}|ƒ }|  t|  |¡ƒ|g¡ t||ƒ}|  |¡}|  |j	¡ |  t|ƒg ¡ d S )
Nr   r5   r”   c                   @   s   e Zd ZdS )zETest_providedByFallback.test_super_when_base_is_object.<locals>.IBaseNr   r   r   r   r   rŠ   j	  s   rŠ   c                   @   s   e Zd ZdS )zHTest_providedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr   r   r   r   r   r‹   m	  s   r‹   c                   @   s   e Zd ZdS )zGTest_providedByFallback.test_super_when_base_is_object.<locals>.DerivedNr   r   r   r   r   r  p	  s   r  r#  )	r   r6   r•   rŠ   r‹   r  r$  r  r  r  r   r   r  f	  s    

z6Test_providedByFallback.test_super_when_base_is_objectc                    sâ   ddl m} ddlm} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}||ƒG d	d
„ d
ƒƒ}G dd„ d|ƒ}|ƒ }|  t|  |¡ƒ|g¡ |||ƒ |  t|  |¡ƒ||g¡ t||ƒ}	|  |	¡}
|  	|
j
¡ |  t|
ƒ|g¡ d S )Nr   r5   r‰  r”   c                   @   s   e Zd ZdS )zOTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IBaseNr   r   r   r   r   rŠ   �	  s   rŠ   c                   @   s   e Zd ZdS )zRTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IDerivedNr   r   r   r   r   r‹   „	  s   r‹   c                   @   s   e Zd ZdS )zNTest_providedByFallback.test_super_when_object_directly_provides.<locals>.BaseNr   r   r   r   r   r–   ‡	  s   r–   c                   @   s   e Zd ZdS )zQTest_providedByFallback.test_super_when_object_directly_provides.<locals>.DerivedNr   r   r   r   r   r  ‹	  s   r  )rŒ   r6   r    rŠ  r•   r!   r0   rÔ   r  rJ   r  )r   r6   rŠ  r•   rŠ   r‹   r–   r  r$  r  r  r  r   r   Ú(test_super_when_object_directly_provides|	  s     


z@Test_providedByFallback.test_super_when_object_directly_providesc                    s`  ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	|ƒ}G d
d„ d|ƒ}G dd„ d|ƒ}||ƒG dd„ dƒƒ}||ƒG dd„ d|ƒƒ}	||ƒG dd„ d|ƒƒ}
|||ƒG dd„ d|	|
ƒƒ}|ƒ }t||ƒ}t|	|ƒ}t|
|ƒ}|  t|  |¡ƒ|||||g¡ |  t|  |¡ƒ|||g¡ |  t|  |¡ƒ||g¡ |  t|  |¡ƒ|g¡ d S )Nr   r5   r”   c                   @   s   e Zd ZdS )zOTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr   r   r   r   r   rŠ   �	  s   rŠ   c                   @   s   e Zd ZdS )zMTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr   r   r   r   r   r   	  s   r  c                   @   s   e Zd ZdS )zMTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr   r   r   r   r   r  £	  s   r  c                   @   s   e Zd ZdS )zRTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr   r   r   r   r   r‹   ¦	  s   r‹   c                   @   s   e Zd ZdS )zTTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr   r   r   r   r   r  ©	  s   r  c                   @   s   e Zd ZdS )zNTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr   r   r   r   r   r–   ¬	  s   r–   c                   @   s   e Zd ZdS )zLTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr   r   r   r   r   r  °	  s   r  c                   @   s   e Zd ZdS )zLTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr   r   r   r   r   r  ´	  s   r  c                   @   s   e Zd ZdS )zQTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr   r   r   r   r   r  ¸	  s   r  r  r  r  r   r   r  ™	  s>    


ÿÿÿÿz@Test_providedByFallback.test_super_multi_level_multi_inheritancec                 C   s   t j| | jdtd� d S )Nrý   )r  r	  )r   r  rÔ   rO   r¡   r   r   r   Ú.test_catches_only_AttributeError_on_providedByÊ	  s    
þzFTest_providedByFallback.test_catches_only_AttributeError_on_providedByc                 C   s   t j| | jdd� d S )Nr	  r
  r  r¡   r   r   r   r  Ï	  s
      ÿzATest_providedByFallback.test_catches_only_AttributeError_on_class)r   r   r   r  rS   rÔ   r  r  r  r  r   r!  r"  r
  r  r  r%  r  r&  r  r  r   r   r  r   r  Õ  s"   	
1r  c                   @   s   e Zd Zdd„ ZdS )ÚTest_providedByc                 C   s   ddl m} |S )Nr   r¥  )r    r5  )r   r5  r   r   r   rS   Ú	  s    zTest_providedBy._getTargetClassNr!  r   r   r   r   r'  Ö	  s   r'  c                   @   sP   e Zd Zdd„ ZeZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdS )Ú*ObjectSpecificationDescriptorFallbackTestsc                 C   s   ddl m} |S )Nr   )Ú%ObjectSpecificationDescriptorFallback)r    r)  )r   r)  r   r   r   r  á	  s    z<ObjectSpecificationDescriptorFallbackTests._getFallbackClassc                 O   s   |   ¡ ||ŽS r#   rT   rU   r   r   r   rX   é	  s    z3ObjectSpecificationDescriptorFallbackTests._makeOnec                 C   s\   ddl m} ddlm} |dƒ}G dd„ dƒ}|||ƒ|_|  ¡ |_|  t|jƒ|g¡ d S )Nr   rf  r\   r^   c                   @   s   e Zd ZdS )zOObjectSpecificationDescriptorFallbackTests.test_accessed_via_class.<locals>.FooNr   r   r   r   r   r   ñ	  s   r   )	r    rg  r7   r]   rü   rX   rý   r!   r0   )r   rg  r]   r^   r   r   r   r   Útest_accessed_via_classì	  s    
zBObjectSpecificationDescriptorFallbackTests.test_accessed_via_classc                 C   s~   ddl m} ddl m} ddlm} |dƒ}|dƒ}||ƒG dd„ dƒƒ}|||ƒ|_|  ¡ |_|ƒ }|  t	|jƒ|g¡ d S )	Nr   rf  r”   r\   r^   rn   c                   @   s   e Zd ZdS )zZObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_provides.<locals>.FooNr   r   r   r   r   r   ÿ	  s   r   )
r    rg  r•   r7   r]   rü   rX   rý   r!   r0   )r   rg  r•   r]   r^   rn   r   r   r   r   r   Ú"test_accessed_via_inst_wo_providesø	  s    
zMObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_providesc           
      C   sž   ddl m} ddl m} ddl m} ddlm} |dƒ}|dƒ}|dƒ}||ƒG d	d
„ d
ƒƒ}|||ƒ|_|  ¡ |_|ƒ }	||	|ƒ |  	t
|	jƒ||g¡ d S )Nr   rf  r‰  r”   r\   r^   rn   rƒ   c                   @   s   e Zd ZdS )zYObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides.<locals>.FooNr   r   r   r   r   r   
  s   r   )r    rg  rŠ  r•   r7   r]   rü   rX   rý   r!   r0   )
r   rg  rŠ  r•   r]   r^   rn   rƒ   r   r   r   r   r   Ú!test_accessed_via_inst_w_provides
  s    

zLObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_providesc              	      sN   G dd„ dt ƒ‰ G ‡ ‡fdd„dƒ}|ƒ }ˆ ˆ ¡� t|dƒ W 5 Q R X d S )Nc                   @   s   e Zd ZdS )zvObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.MyExceptionNr   r   r   r   r   ÚMyException
  s   r-  c                       s$   e Zd Z” ¡ Ze‡ fdd„ƒZdS )znObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Fooc                    s   ˆ ‚d S r#   r   r¡   )r-  r   r   rü   #
  s    z{ObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Foo.__provides__N©r   r   r   rX   rý   rß   rü   r   ©r-  r   r   r   r    
  s   r   rý   )Ú	Exceptionr¥   rÑ  rÙ   r   r/  r   Ú6test_arbitrary_exception_accessing_provides_not_caught
  s
    zaObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caughtc                    s@   G dd„ dt ƒ}G ‡ fdd„dƒ}|ƒ }t|dƒ}ˆ  |¡ d S )Nc                   @   s   e Zd ZdS )zmObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.MyExceptionNr   r   r   r   r   r-  -
  s   r-  c                       s    e Zd Z”  ¡ Zedd„ ƒZdS )zeObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Fooc                 S   s   t ‚d S r#   )rm  r¡   r   r   r   rü   3
  s    zrObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Foo.__provides__Nr.  r   r¡   r   r   r   0
  s   r   rý   )r0  rÑ  ZassertIsNotNone)r   r-  r   r   Úprovidedr   r¡   r   Ú-test_AttributeError_accessing_provides_caught+
  s
    
zXObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caughtc                 C   sb   ddl m} ddl m} G dd„ d|ƒ}||ƒG dd„ dƒƒ}|  ¡ |_t|ƒ dƒ}|  |¡ d S )	Nr   r5   r”   c                   @   s   e Zd ZdS )zZObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.IFooNr   r   r   r   r   r^   ?
  s   r^   c                   @   s   e Zd Zedd„ ƒZdS )zYObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Fooc                 S   s   d S r#   r   r¡   r   r   r   rü   E
  s    zfObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Foo.__provides__N)r   r   r   rß   rü   r   r   r   r   r   B
  s   r   rý   )rŒ   r6   r•   rX   rý   rÑ  rJ   )r   r6   r•   r^   r   r2  r   r   r   Ú!test_None_in__provides__overrides;
  s    
zLObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overridesN)r   r   r   r  rS   rX   r*  r+  r,  r1  r3  r4  r   r   r   r   r(  ß	  s   r(  c                   @   s   e Zd Zdd„ ZdS )Ú"ObjectSpecificationDescriptorTestsc                 C   s   ddl m} |S )Nr   )ÚObjectSpecificationDescriptor)r    r6  )r   r6  r   r   r   rS   V
  s    z2ObjectSpecificationDescriptorTests._getTargetClassNr!  r   r   r   r   r5  O
  s   r5  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r«  c                    s<   ˆ | _ ‡ fdd„|D ƒ| _| ¡ D ]\}}tˆ ||ƒ q"d S )Nc                    s   i | ]}|t ˆ |ƒ“qS r   )rÑ  )Ú.0Úkey©Úmoduler   r   Ú
<dictcomp>b
  s      z$_Monkey.__init__.<locals>.<dictcomp>)r:  Ú
to_restoreÚitemsrŒ  )r   r:  rW   r8  r¹  r   r9  r   rÅ   `
  s    z_Monkey.__init__c                 C   s   | S r#   r   r¡   r   r   r   Ú	__enter__f
  s    z_Monkey.__enter__c                 C   s&   | j  ¡ D ]\}}t| j||ƒ q
d S r#   )r<  r=  rŒ  r:  )r   Úexc_typeÚexc_valÚexc_tbr8  r¹  r   r   r   Ú__exit__i
  s    z_Monkey.__exit__N©r   r   r   rÅ   r>  rB  r   r   r   r   r«  ^
  s   r«  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )rå   c                 K   s8   || _ t||ƒ| _| j ¡ | _| j ¡  | j |¡ d S r#   )r:  rÑ  ÚtargetÚcopyr<  ÚclearÚupdate)r   r:  ÚattrnamerW   r   r   r   rÅ   q
  s
    
z_MonkeyDict.__init__c                 C   s   | j S r#   )rD  r¡   r   r   r   r>  x
  s    z_MonkeyDict.__enter__c                 C   s   | j  ¡  | j  | j¡ d S r#   )rD  rF  rG  r<  )r   r?  r@  rA  r   r   r   rB  {
  s    
z_MonkeyDict.__exit__NrC  r   r   r   r   rå   n
  s   rå   )/r›  Zunittestr€  r   r   r   Z#zope.interface.tests.test_interfacer   r   ZTestCaser   r*   rR   r˜   r²   rÒ   r   r"  r)  r1  rF  rH  rM  rW  r^  ro  rz  r©  r¯  r¾  rÁ  rÇ  rÔ  rÖ  rÝ  rà  rç  rí  rï  rþ  r  r  r'  r(  r5  r«  rå   r   r   r   r   Ú<module>   s‚   #: LCÿ~  hÿ	*2qD#<& K#=,?7
ý&-P6<{ÿ	  ÿ	p
ý