U
    ˆj|: ã                   @   s"  d Z ddlZddlmZ dd„ ZG dd„ dƒZG dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZ	G dd„ dej
ƒZG dd„ deƒZG dd„ dej
ƒZG dd„ deeƒZG dd„ dej
ƒZG dd„ deeƒ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j
ƒZdS )$zAdapter registry tests
é    N)ÚOptimizationTestMixinc            
   	   C   s¶   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|ƒ}	|||||||||	f	S )Nr   ©Ú	Interfacec                   @   s   e Zd ZdS )z_makeInterfaces.<locals>.IB0N©Ú__name__Ú
__module__Ú__qualname__© r	   r	   úE/tmp/pip-unpacked-wheel-1_n45v_5/zope/interface/tests/test_adapter.pyÚIB0   s   r   c                   @   s   e Zd ZdS )z_makeInterfaces.<locals>.IB1Nr   r	   r	   r	   r
   ÚIB1   s   r   c                   @   s   e Zd ZdS )z_makeInterfaces.<locals>.IB2Nr   r	   r	   r	   r
   ÚIB2!   s   r   c                   @   s   e Zd ZdS )z_makeInterfaces.<locals>.IB3Nr   r	   r	   r	   r
   ÚIB3$   s   r   c                   @   s   e Zd ZdS )z_makeInterfaces.<locals>.IB4Nr   r	   r	   r	   r
   ÚIB4'   s   r   c                   @   s   e Zd ZdS )z_makeInterfaces.<locals>.IF0Nr   r	   r	   r	   r
   ÚIF0*   s   r   c                   @   s   e Zd ZdS )z_makeInterfaces.<locals>.IF1Nr   r	   r	   r	   r
   ÚIF1-   s   r   c                   @   s   e Zd ZdS )z_makeInterfaces.<locals>.IR0Nr   r	   r	   r	   r
   ÚIR00   s   r   c                   @   s   e Zd ZdS )z_makeInterfaces.<locals>.IR1Nr   r	   r	   r	   r
   ÚIR13   s   r   )Úzope.interfacer   )
r   r   r   r   r   r   r   r   r   r   r	   r	   r
   Ú_makeInterfaces   s    r   c                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )ÚCustomDataTypeBaseNc                 C   s
   | j | S ©N©Ú_data©ÚselfÚnamer	   r	   r
   Ú__getitem__?   s    zCustomDataTypeBase.__getitem__c                 C   s   || j |< d S r   r   )r   r   Úvaluer	   r	   r
   Ú__setitem__B   s    zCustomDataTypeBase.__setitem__c                 C   s   | j |= d S r   r   r   r	   r	   r
   Ú__delitem__E   s    zCustomDataTypeBase.__delitem__c                 C   s
   t | jƒS r   )Úlenr   ©r   r	   r	   r
   Ú__len__H   s    zCustomDataTypeBase.__len__c                 C   s
   || j kS r   r   r   r	   r	   r
   Ú__contains__K   s    zCustomDataTypeBase.__contains__c                 C   s,   || krdS t |ƒt | ƒk	r dS |j| jkS )NTF)Útyper   ©r   Úotherr	   r	   r
   Ú__eq__N   s
    zCustomDataTypeBase.__eq__c                 C   s
   t | jƒS r   )Úreprr   r"   r	   r	   r
   Ú__repr__V   s    zCustomDataTypeBase.__repr__)r   r   r   r   r   r   r    r#   r$   r(   r*   r	   r	   r	   r
   r   <   s   r   c                   @   s   e Zd Zddd„ZdS )ÚCustomMappingNc                 C   s.   i | _ |r| j  |¡ | j j| _| j j| _d S r   )r   ÚupdateÚgetÚitemsr&   r	   r	   r
   Ú__init__[   s
    
zCustomMapping.__init__)N©r   r   r   r/   r	   r	   r	   r
   r+   Z   s   r+   c                   @   s   e Zd Zddd„ZdS )ÚCustomSequenceNc                 C   s$   g | _ |r| j  |¡ | j j| _d S r   )r   ÚextendÚappendr&   r	   r	   r
   r/   d   s    zCustomSequence.__init__)Nr0   r	   r	   r	   r
   r1   c   s   r1   c                   @   s   e Zd ZdS )ÚCustomLeafSequenceNr   r	   r	   r	   r
   r4   k   s   r4   c                   @   s   e Zd ZdS )ÚCustomProvidedNr   r	   r	   r	   r
   r5   o   s   r5   c                   @   sd  e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdWdd„ZdXdd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dS )YÚBaseAdapterRegistryTestsNc                 C   s   ddl m} |S )Nr   ©ÚBaseAdapterRegistry©Úzope.interface.adapterr8   )r   r8   r	   r	   r
   Ú_getBaseAdapterRegistryw   s    z0BaseAdapterRegistryTests._getBaseAdapterRegistryc                 C   s8   |   ¡ }G dd„ d|ƒ}|jD ]}t|j|tƒ ƒ q|S )Nc                   @   s   e Zd ZG dd„ dƒZdS )z6BaseAdapterRegistryTests._getTargetClass.<locals>._CUTc                   @   s4   e Zd Zd ZZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )zBBaseAdapterRegistryTests._getTargetClass.<locals>._CUT.LookupClassr	   c                 S   s   d S r   r	   )r   Úregr	   r	   r
   r/   ƒ   s    zKBaseAdapterRegistryTests._getTargetClass.<locals>._CUT.LookupClass.__init__c                 S   s   |  j |f7  _ d S r   ©Ú_changed)r   Úorigr	   r	   r
   Úchanged†   s    zJBaseAdapterRegistryTests._getTargetClass.<locals>._CUT.LookupClass.changedc                 S   s   |  j |f7  _ d S r   )Ú
_extendors©r   Úprovidedr	   r	   r
   Úadd_extendor‰   s    zOBaseAdapterRegistryTests._getTargetClass.<locals>._CUT.LookupClass.add_extendorc                    s   t ‡ fdd„| jD ƒƒ| _d S )Nc                    s   g | ]}|ˆ kr|‘qS r	   r	   )Ú.0Úx©rC   r	   r
   Ú
<listcomp>�   s    ÿzfBaseAdapterRegistryTests._getTargetClass.<locals>._CUT.LookupClass.remove_extendor.<locals>.<listcomp>)ÚtuplerA   rB   r	   rG   r
   Úremove_extendorŒ   s    zRBaseAdapterRegistryTests._getTargetClass.<locals>._CUT.LookupClass.remove_extendorN)	r   r   r   r>   rA   r/   r@   rD   rJ   r	   r	   r	   r
   ÚLookupClass€   s
   rK   N)r   r   r   rK   r	   r	   r	   r
   Ú_CUT~   s   rL   )r;   Ú
_delegatedÚsetattrrK   Úobject)r   r8   rL   r   r	   r	   r
   Ú_getTargetClass{   s
    
z(BaseAdapterRegistryTests._getTargetClassc                 C   s
   |   ¡ ƒ S r   ©rP   r"   r	   r	   r
   Ú_makeOne”   s    z!BaseAdapterRegistryTests._makeOnec                 C   s   t S r   ©Údictr"   r	   r	   r
   Ú_getMappingType—   s    z(BaseAdapterRegistryTests._getMappingTypec                 C   s   t S r   rS   r"   r	   r	   r
   Ú_getProvidedTypeš   s    z)BaseAdapterRegistryTests._getProvidedTypec                 C   s   t S r   )Úlistr"   r	   r	   r
   Ú_getMutableListType�   s    z,BaseAdapterRegistryTests._getMutableListTypec                 C   s   t S r   )rI   r"   r	   r	   r
   Ú_getLeafSequenceType    s    z-BaseAdapterRegistryTests._getLeafSequenceTypec                 C   s8   |   ¡ }|ƒ }|jD ]}|  t||ƒt|j|ƒ¡ qd S r   )rP   rM   ÚassertIsÚgetattrÚ	_v_lookup)r   ZCUTÚregistryr   r	   r	   r
   Útest_lookup_delegation£   s    
 
ÿz/BaseAdapterRegistryTests.test_lookup_delegationc                 C   s   |   ¡ }|  |jd¡ d S ©Né   )rR   ÚassertEqualÚ_generation©r   r]   r	   r	   r
   Ú"test__generation_on_first_creation«   s    z;BaseAdapterRegistryTests.test__generation_on_first_creationc                 C   s>   |   ¡ }tƒ }| |¡ |  |jd¡ |  |jj||f¡ d S ©Né   )rR   rO   r@   ra   rb   r\   r>   )r   r]   r?   r	   r	   r
   Ú&test__generation_after_calling_changed°   s
    
z?BaseAdapterRegistryTests.test__generation_after_calling_changedc                 C   s0   G dd„ dƒ}|   ¡ }|f|_|  |jd¡ d S )Nc                   @   s   e Zd ZdS )zQBaseAdapterRegistryTests.test__generation_after_changing___bases__.<locals>._BaseNr   r	   r	   r	   r
   Ú_Base¹   s   rh   rf   )rR   Ú	__bases__ra   rb   )r   rh   r]   r	   r	   r
   Ú)test__generation_after_changing___bases__¸   s    zBBaseAdapterRegistryTests.test__generation_after_changing___bases__rf   c                 C   sˆ   |   t|jƒ|¡ |  |j|  ¡ ¡ |  ¡ }|jD ]}|  ||¡ q2|   |jd |ƒ ¡ |  |jd |¡ |   t|j|d  ƒd¡ d S ©Nr   r`   )ra   r!   Ú	_adaptersÚassertIsInstancerX   rU   ©r   r]   Úexpected_orderÚMTÚmappingr	   r	   r
   Ú_check_basic_types_of_adapters¿   s     ÿ
z7BaseAdapterRegistryTests._check_basic_types_of_adaptersc                 C   sŒ   |   t|jƒ|¡ |  |j|  ¡ ¡ |  ¡ }|jD ]}|  ||¡ q2|rˆ|   |jd |ƒ ¡ |  |jd |¡ |   t|j|d  ƒd¡ d S rk   )ra   r!   Ú_subscribersrm   rX   rU   rn   r	   r	   r
   Ú!_check_basic_types_of_subscribersË   s     ÿ ÿ
z:BaseAdapterRegistryTests._check_basic_types_of_subscribersc              
   C   sÚ   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |g|dd¡ |  |
 |g|d¡d¡ |  |
jd¡ |  |
¡ |  ¡ }|  |
jd |||||ddiƒiƒiƒ¡ |  	¡ }|  |
j
||diƒ¡ t|
 ¡ ƒ}|  ||f|ddfg¡ d S )NÚ ÚA1rf   r`   )r   rR   Úregisterra   Ú
registeredrb   rr   rU   rl   rV   Ú	_providedrW   ÚallRegistrations)r   r   r   r   r   r   r   r   r   r   r]   rp   ÚPTrx   r	   r	   r
   Útest_registerÚ   sH    þ        
  
ÿÿ
 ÿüz&BaseAdapterRegistryTests.test_registerc           
         s&  t ƒ \	‰ ‰‰‰}}}‰‰|  ¡ }| g ˆdd¡ | g ˆdd¡ | ˆ gˆdd¡ | ˆ gˆdd¡ | ˆ gˆdd¡ | ˆ gˆdd¡ | ˆ ˆgˆdd¡ | ˆ ˆgˆdd¡ | ˆ ˆgˆd	d¡ | ˆ ˆgˆdd¡ ‡ ‡‡‡‡‡fd
d„}|  |j||  ¡ |  ¡ d�¡ t| ¡ ƒ}|  |dˆddfdˆddfˆ fˆddfˆ fˆddfˆ fˆddfˆ fˆddfˆ ˆfˆddfˆ ˆfˆddfˆ ˆfˆd	dfˆ ˆfˆddfg
¡ |  ¡ }|D ]}|j|Ž  �q¬|  |j|j¡ |  |j	|j	¡ t
|_t|_t|_t|_dd„ }	|	|_| ¡  |  |j|tt
d�¡ d S )Nru   rv   Úname1ÚA2Úname2ÚA3Úname3ÚA4Úname4c                    sœ   | |ˆ|dddœƒiƒ|ˆ |ˆ|dddœƒˆ|dddœƒiƒiƒ|ˆ |ˆ|ˆ|ddiƒiƒˆ|ˆ|d	diƒˆ|d
diƒiƒˆ|ˆ|ddiƒiƒiƒiƒgƒS )Nrv   r~   )ru   r}   )ru   r   r€   r‚   )ru   r�   ru   r   rƒ   r	   ©ÚLrp   ©r   r   r   r   r   r   r	   r
   Úbuild_adapters	  s\     þÿ  þ þûÿ   
ÿ  
 
þ  
ÿøÿêzXBaseAdapterRegistryTests.test_register_multiple_allRegistrations.<locals>.build_adaptersr„   r	   c                 S   s    | d k	r| nt ƒ } |  |¡ | S r   ©r4   r3   ©ÚexistingÚnewr	   r	   r
   ÚaddValueP  s    ÿ
zRBaseAdapterRegistryTests.test_register_multiple_allRegistrations.<locals>.addValue)r   rR   rw   ra   rl   rX   rU   Úsortedrz   ry   r+   Ú_mappingTyper4   Ú_leafSequenceTyper1   Ú_sequenceTyper5   Ú_providedTypeÚ_addValueToLeafÚrebuild)
r   r   r   r   r]   r‡   rx   Ú	registry2ÚargsrŒ   r	   r†   r
   Ú'test_register_multiple_allRegistrationsö   sv    þ        'ÿÿ

öþÿz@BaseAdapterRegistryTests.test_register_multiple_allRegistrationsc              	   C   sN   t ƒ \	}}}}}}}}}	|  ¡ }
|  t¡� |
 |g|tƒ d¡ W 5 Q R X d S ©Nrv   )r   rR   ÚassertRaisesÚ
ValueErrorrw   rO   ©r   r   r   r   r   r   r   r   r   r   r]   r	   r	   r
   Útest_register_with_invalid_namea  s    þ        z8BaseAdapterRegistryTests.test_register_with_invalid_namec              	   C   s„   t ƒ \	}}}}}}}}}	|  ¡ }
|
 d g|dd¡ |
 d g|dd ¡ |  t|
jƒd¡ |  |
j|  ¡ ¡ t|
 	¡ ƒ}|  |g ¡ d S )Nru   rv   r   )
r   rR   rw   ra   r!   rl   rm   rX   rW   rz   )r   r   r   r   r   r   r   r   r   r   r]   rx   r	   r	   r
   Ú)test_register_with_value_None_unregistersi  s$    þ        zBBaseAdapterRegistryTests.test_register_with_value_None_unregistersc              
   C   sÎ   ddl m} tƒ \	}}}}}}}}	}
|  ¡ }tƒ }| d g|	d|¡ |j}| d g|	d|¡ |  |j|¡ |  |¡ |  	¡ }|  |j
d ||||	|d|iƒiƒiƒ¡ t| ¡ ƒ}|  ||f|	d|fg¡ d S )Nr   r   ru   r`   )r   r   r   rR   rO   rw   rb   ra   rr   rU   rl   rW   rz   )r   r   r   r   r   r   r   r   r   r   r   r]   Ú_valueZ_beforerp   rx   r	   r	   r
   Útest_register_with_same_valueu  sH    þ        
  
ÿÿÿÿ	üz6BaseAdapterRegistryTests.test_register_with_same_valuec                 C   s<   |   ¡ }|  | d gd d¡d ¡ t| ¡ ƒ}|  |g ¡ d S ©Nru   )rR   ra   rx   rW   rz   )r   r]   rx   r	   r	   r
   Útest_registered_empty“  s    z.BaseAdapterRegistryTests.test_registered_emptyc              	   C   sN   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |gd dd¡ |  |
 |gd d¡d ¡ d S ©Nru   rv   )r   rR   rw   ra   rx   rš   r	   r	   r
   Útest_registered_non_empty_miss™  s    þ        z7BaseAdapterRegistryTests.test_registered_non_empty_missc                 C   s6   |   ¡ }| d gd dd¡ |  | d gd d¡d¡ d S r¡   )rR   rw   ra   rx   rc   r	   r	   r
   Útest_registered_non_empty_hit¡  s    z6BaseAdapterRegistryTests.test_registered_non_empty_hitc                 C   sF   |   ¡ }| d gd d¡ |  | d gd d¡d ¡ |  t|jƒd¡ d S )Nru   r   )rR   Ú
unregisterra   rx   r!   ry   rc   r	   r	   r
   Útest_unregister_empty¦  s    z.BaseAdapterRegistryTests.test_unregister_emptyc              
   C   s¸   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |gd dd¡ |
 |gd d¡ |  |
 |gd d¡d¡ |  |
¡ |  ¡ }|  |
jd |||d |ddiƒiƒiƒ¡ |  	¡ }|  |
j
|d diƒ¡ d S )Nru   rv   r`   ©r   rR   rw   r¤   ra   rx   rr   rU   rl   rV   ry   ©r   r   r   r   r   r   r   r   r   r   r]   rp   r{   r	   r	   r
   Ú*test_unregister_non_empty_miss_on_required¬  s>    þ        
  
ÿÿÿÿ	
 ÿzCBaseAdapterRegistryTests.test_unregister_non_empty_miss_on_requiredc              
   C   s¸   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |gd dd¡ |
 |gd d¡ |  |
 |gd d¡d¡ |  |
¡ |  ¡ }|  |
jd |||d |ddiƒiƒiƒ¡ |  	¡ }|  |
j
|d diƒ¡ d S )Nru   rv   Znonesuchr`   r¦   r§   r	   r	   r
   Ú&test_unregister_non_empty_miss_on_nameÄ  s>    þ        
  
ÿÿÿÿ	
 ÿz?BaseAdapterRegistryTests.test_unregister_non_empty_miss_on_namec              	   C   sl   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }tƒ }|
 |gd d|¡ |
 |gd d|¡ |  |
 |gd d¡|¡ d S rŸ   )r   rR   rO   rw   r¤   rZ   rx   ©r   r   r   r   r   r   r   r   r   r   r]   r?   Znomatchr	   r	   r
   Ú(test_unregister_with_value_not_None_missÜ  s"    þ        zABaseAdapterRegistryTests.test_unregister_with_value_not_None_missc                 C   s†  t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }tƒ }|
 ||gd d|¡ |
 ||gd d|¡ | j|
dd� |  ||
jd | ¡ |  ||
jd | ¡ |  ¡ }|  |
jd |||||d |d|iƒiƒ||d |d|iƒiƒiƒiƒ¡ |  	¡ }|  |
j
|d diƒ¡ |
 ||gd d|¡ |  ||
jd | ¡ |  ||
jd | ¡ |  |
jd |||||d |d|iƒiƒiƒiƒ¡ |  |
j
|d diƒ¡ d S )Nru   é   ©ro   rf   r`   )r   rR   rO   rw   rr   ÚassertInrl   rU   ra   rV   ry   r¤   ZassertNotIn)r   r   r   r   r   r   r   r   r   r   r]   ZoneZanotherrp   r{   r	   r	   r
   Ú.test_unregister_hit_clears_empty_subcomponentsç  sh    þ           þÿÿÿ

 ÿ  ÿÿÿÿ	
 ÿzGBaseAdapterRegistryTests.test_unregister_hit_clears_empty_subcomponentsc                 C   sB   |   ¡ }| d gd d¡ |  | d gd d¡d ¡ | j|dd� d S )Nru   r   r­   )rR   Úunsubscribera   rx   rt   rc   r	   r	   r
   Útest_unsubscribe_empty  s    z/BaseAdapterRegistryTests.test_unsubscribe_emptyc                 C   sÒ   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }|
 |gd |¡ |  ¡ }|  ¡ }|  ¡ }|  |
¡ |  |
j	d |||d |d||fƒiƒiƒiƒ¡ |  |
j
|i ƒ¡ |
 |gd |¡ |  t|
j	ƒd¡ |  |
j
|i ƒ¡ d S )Nr`   ru   r   )r   rR   rO   Ú	subscriberU   rY   rV   rt   ra   rs   ry   r°   r!   )r   r   r   r   r   r   r   r   r   r   r]   r?   rp   r…   r{   r	   r	   r
   Útest_unsubscribe_hit  s@    þ        
   ÿÿÿz-BaseAdapterRegistryTests.test_unsubscribe_hitc                 C   s   |   ||¡ dS )a¦  
        Implementations may choose to use new, immutable objects
        instead of mutating existing subscriber leaf objects, or vice versa.

        The default implementation uses immutable tuples, so they are never
        the same. Other implementations may use persistent lists so they
        should be the same and mutated in place. Subclasses testing this
        behaviour need to override this method.
        N)ZassertIsNot©r   Zleaf1Zleaf2r	   r	   r
   ÚassertLeafIdentity0  s    
z+BaseAdapterRegistryTests.assertLeafIdentityc                 C   s*  t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }tƒ }tƒ }tƒ }|
 |gd |¡ |
 |gd |¡ |
 |g||¡ |
 |g||¡ | j|
dd� |  ¡ }|  ¡ }|  ¡ }|  |
j	d |||d |d|||fƒiƒ||d|||fƒiƒiƒiƒ¡ |  |
j
||diƒ¡ |
j	d | | d }|
j	d | d  d }|
 |gd |¡ |
 |g||¡ |  |
j	d |||d |d||fƒiƒ||d||fƒiƒiƒiƒ¡ |  |
j
||diƒ¡ |
j	d | | d }|
j	d | d  d }|  ||¡ |  ||¡ |
 |gd |¡ |
 |g||¡ |  t|
j	ƒd¡ |  t|
j
ƒd¡ d S )Nrf   r­   r`   ru   r   )r   rR   rO   r²   rt   rU   rY   rV   ra   rs   ry   r°   rµ   r!   )r   r   r   r   r   r   r   r   r   r   r]   ÚfirstÚsecondÚthirdZfourthrp   r…   r{   ZIR0_leaf_origZNon_leaf_origZIR0_leaf_newZNon_leaf_newr	   r	   r
   Útest_unsubscribe_after_multiple<  s|    þ           þÿ
 ÿ   þÿ
 ÿz8BaseAdapterRegistryTests.test_unsubscribe_after_multiplec                 C   sì   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }|
 |g||¡ |
 |g||¡ |  ¡ }|  ¡ }|  ¡ }|  |
jd |||||d|||fƒiƒiƒiƒ¡ |  |
j	||diƒ¡ |
 
|g||¡ |
 
|g||¡ |  t|
jƒd¡ |  |
j	|ƒ ¡ d S ©Nr`   ru   rf   r   ©r   rR   rO   r²   rU   rY   rV   ra   rs   ry   r°   r!   )r   r   r   r   r   r   r   r   r   r   r]   r¶   rp   r…   r{   r	   r	   r
   Ú5test_subscribe_unsubscribe_identical_objects_providedr  sB    þ          ÿÿ
 ÿzNBaseAdapterRegistryTests.test_subscribe_unsubscribe_identical_objects_providedc                 C   sò   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }tƒ }|
 |g||¡ |
 |g||¡ |  ¡ }|  ¡ }|  ¡ }|  |
jd |||||d|||fƒiƒiƒiƒ¡ |  |
j	||diƒ¡ |
 
|g||¡ |
 
|g||¡ |  t|
jƒd¡ |  |
j	|ƒ ¡ d S rº   r»   )r   r   r   r   r   r   r   r   r   r   r]   r¶   r·   rp   r…   r{   r	   r	   r
   Ú4test_subscribe_unsubscribe_nonequal_objects_provided�  sD    þ          ÿÿ
 ÿzMBaseAdapterRegistryTests.test_subscribe_unsubscribe_nonequal_objects_providedc                 C   s:   |   ¡ }|  | d gd d¡¡ t| ¡ ƒ}|  |g ¡ d S rŸ   )rR   ÚassertIsNoneÚ
subscribedrW   ÚallSubscriptionsra   )r   r]   r¿   r	   r	   r
   Útest_subscribed_empty©  s    z.BaseAdapterRegistryTests.test_subscribed_emptyc              	   C   sv   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |g|d¡ |  |
 |g|d¡¡ |  |
 |g|d¡¡ |  |
 |g|d¡¡ d S )Nrv   ru   )r   rR   r²   r¾   r¿   rš   r	   r	   r
   Útest_subscribed_non_empty_miss¯  s     þ        z7BaseAdapterRegistryTests.test_subscribed_non_empty_missc              	   C   sL   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |g|d¡ |  |
 |g|d¡d¡ d S r—   )r   rR   r²   ra   r¿   rš   r	   r	   r
   Útest_subscribed_non_empty_hit¼  s    þ        z6BaseAdapterRegistryTests.test_subscribed_non_empty_hitc              	   C   s~   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }tƒ }|
 |gd |¡ |
 |gd |¡ | j|
dd� |
 |gd ¡ |  t|
jƒd¡ d S )Nrf   r­   r   )	r   rR   rO   r²   rt   r°   ra   r!   rs   )r   r   r   r   r   r   r   r   r   r   r]   r¶   r·   r	   r	   r
   Ú&test_unsubscribe_w_None_after_multipleÄ  s&    þ        z?BaseAdapterRegistryTests.test_unsubscribe_w_None_after_multiplec                 C   s¢   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |gd d¡ | j|
dd� |
 |gd d¡ |  t|
jƒd¡ |  ¡ }|  	¡ }|  |
jd |||d |d|dƒiƒiƒiƒ¡ d S )Nrv   rf   r­   ru   r`   ©rv   ©
r   rR   r²   rt   r°   ra   r!   rs   rU   rY   ©r   r   r   r   r   r   r   r   r   r   r]   rp   r…   r	   r	   r
   Ú+test_unsubscribe_non_empty_miss_on_requiredÒ  s2    þ          ÿÿzDBaseAdapterRegistryTests.test_unsubscribe_non_empty_miss_on_requiredc                 C   s¢   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |gd d¡ | j|
dd� |
 |gd d¡ |  t|
jƒd¡ |  ¡ }|  	¡ }|  |
jd |||d |d|dƒiƒiƒiƒ¡ d S )Nrv   rf   r­   r~   r`   ru   rÅ   rÆ   rÇ   r	   r	   r
   Ú(test_unsubscribe_non_empty_miss_on_valueã  s2    þ          ÿÿzABaseAdapterRegistryTests.test_unsubscribe_non_empty_miss_on_valuec              	   C   sb   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }tƒ }|
 |gd |¡ |
 |gd |¡ |  t|
jƒd¡ d S re   )r   rR   rO   r²   r°   ra   r!   rs   rª   r	   r	   r
   Ú)test_unsubscribe_with_value_not_None_missô  s"    þ        zBBaseAdapterRegistryTests.test_unsubscribe_with_value_not_None_missc                 C   s   |   d¡ d S )Nz*Example method, not intended to be called.©Zfailr"   r	   r	   r
   Ú_instance_method_notify_targetÿ  s    z7BaseAdapterRegistryTests._instance_method_notify_targetc              	   C   sl   t ƒ \	}}}}}}}}}	|  ¡ }
|  t|
jƒd¡ |
 |gd | j¡ |
 |gd | j¡ |  t|
jƒd¡ d S ©Nr   )r   rR   ra   r!   rs   r²   rÌ   r°   rš   r	   r	   r
   Ú test_unsubscribe_instance_method  s     þ        z9BaseAdapterRegistryTests.test_unsubscribe_instance_methodc                    s,  t ƒ \	‰ ‰‰‰}}}‰‰|  ¡ }| g ˆd¡ | g ˆd¡ | ˆ gˆd¡ | ˆ gˆd¡ | ˆ gˆd¡ | ˆ gˆd¡ | ˆ ˆgˆd¡ | ˆ ˆgˆd¡ | ˆ ˆgˆd¡ | ˆ ˆgˆd¡ ‡ ‡‡‡‡‡fdd„}|  |j||  ¡ |  ¡ |  ¡ d�¡ ‡‡fdd	„}|  |j||  	¡ d
�¡ t
| ¡ ƒ}|  |dˆdfdˆdfˆ fˆdfˆ fˆdfˆ fˆdfˆ fˆdfˆ ˆfˆdfˆ ˆfˆdfˆ ˆfˆdfˆ ˆfˆdfg
¡ |  ¡ }|D ]}	|j|	Ž  �q°|  |j|j¡ |  |j|j¡ t|_t|_t|_t|_dd„ }
|
|_| ¡  |  |j|tttd�¡ d S )Nrv   r~   r€   r‚   c                    sÆ   | |ˆ|d|ddgƒiƒiƒ|ˆ |ˆ|d|ddgƒiƒˆ|d|ddgƒiƒiƒiƒ|ˆ |ˆ|ˆ|d|dgƒiƒiƒˆ|ˆ|d|dgƒiƒˆ|d|dgƒiƒiƒˆ|ˆ|d|dgƒiƒiƒiƒiƒgƒS )Nru   rv   r~   r€   r‚   r	   ©r…   ÚFrp   r†   r	   r
   Úbuild_subscribers   s\      
ÿÿ   
ÿ  
ÿüÿ   ÿ   þ  ÿøÿíz\BaseAdapterRegistryTests.test_subscribe_multiple_allRegistrations.<locals>.build_subscribersrÏ   c                    s   | ˆ dˆdiƒS )Né   é   r	   ©ÚP)r   r   r	   r
   Úbuild_providedK  s      þzYBaseAdapterRegistryTests.test_subscribe_multiple_allRegistrations.<locals>.build_providedrÔ   r	   c                 S   s    | d k	r| nt ƒ } |  |¡ | S r   rˆ   r‰   r	   r	   r
   rŒ   p  s    ÿ
zSBaseAdapterRegistryTests.test_subscribe_multiple_allRegistrations.<locals>.addValue)r   rR   r²   ra   rs   rX   rY   rU   ry   rV   r�   rÀ   r+   rŽ   r4   r�   r1   r�   r5   r‘   r’   r“   )r   r   r   r   r]   rÑ   rÖ   rx   r”   r•   rŒ   r	   r†   r
   Ú(test_subscribe_multiple_allRegistrations  s„    þ        $ýÿÿ



öýÿzABaseAdapterRegistryTests.test_subscribe_multiple_allRegistrations)rf   )rf   ).r   r   r   ZmaxDiffr;   rP   rR   rU   rV   rX   rY   r^   rd   rg   rj   rr   rt   r|   r–   r›   rœ   rž   r    r¢   r£   r¥   r¨   r©   r«   r¯   r±   r³   rµ   r¹   r¼   r½   rÁ   rÂ   rÃ   rÄ   rÈ   rÉ   rÊ   rÌ   rÎ   r×   r	   r	   r	   r
   r6   s   sV   

k,6r6   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )Ú#CustomTypesBaseAdapterRegistryTestszá
    This class may be extended by other packages to test their own
    adapter registries that use custom types. (So be cautious about
    breaking changes.)

    One known user is ``zope.component.persistentregistry``.
    c                 C   s   t S r   )r+   r"   r	   r	   r
   rU   Œ  s    z3CustomTypesBaseAdapterRegistryTests._getMappingTypec                 C   s   t S r   )r5   r"   r	   r	   r
   rV   �  s    z4CustomTypesBaseAdapterRegistryTests._getProvidedTypec                 C   s   t S r   )r1   r"   r	   r	   r
   rX   ’  s    z7CustomTypesBaseAdapterRegistryTests._getMutableListTypec                 C   s   t S r   )r4   r"   r	   r	   r
   rY   •  s    z8CustomTypesBaseAdapterRegistryTests._getLeafSequenceTypec                    s&   ddl m‰  G ‡ ‡fdd„dˆ ƒ}|S )Nr   r7   c                       s@   e Zd Z” ¡ Z” ¡ Z” ¡ Z” 	¡ Z
dd„ Z‡ fdd„ZdS )zZCustomTypesBaseAdapterRegistryTests._getBaseAdapterRegistry.<locals>.CustomAdapterRegistryc                 S   s   |s|   ¡ }| |¡ |S r   )r�   r3   )r   Úexisting_leaf_sequenceZnew_itemr	   r	   r
   r’   ¡  s    
zjCustomTypesBaseAdapterRegistryTests._getBaseAdapterRegistry.<locals>.CustomAdapterRegistry._addValueToLeafc                    s*   ˆ   | ||¡}||d d …< ||ks&t‚|S r   )Ú_removeValueFromLeafÚAssertionError)r   rÙ   Z	to_removeZwithout_removedr7   r	   r
   rÚ   §  s    ýzoCustomTypesBaseAdapterRegistryTests._getBaseAdapterRegistry.<locals>.CustomAdapterRegistry._removeValueFromLeafN)r   r   r   rU   rŽ   rX   r�   rY   r�   rV   r‘   r’   rÚ   r	   ©r8   r   r	   r
   ÚCustomAdapterRegistry›  s   rÝ   r9   )r   rÝ   r	   rÜ   r
   r;   ˜  s    z;CustomTypesBaseAdapterRegistryTests._getBaseAdapterRegistryc                 C   s   |   ||¡ d S r   )rZ   r´   r	   r	   r
   rµ   ²  s    z6CustomTypesBaseAdapterRegistryTests.assertLeafIdentityN)
r   r   r   Ú__doc__rU   rV   rX   rY   r;   rµ   r	   r	   r	   r
   rØ   ƒ  s   rØ   c                       sú   e Zd Zdd„ ZeZd:dd„Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Z‡ fd.d/„Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Z‡  Z S );ÚLookupBaseFallbackTestsc                 C   s   ddl m} |S )Nr   )ÚLookupBaseFallback)r:   rà   )r   rà   r	   r	   r
   Ú_getFallbackClass¸  s    z)LookupBaseFallbackTests._getFallbackClassNc                    sR   ˆ d krdd„ ‰ ˆd kr dd„ ‰ˆd kr0dd„ ‰G ‡ ‡‡fdd„d|   ¡ ƒ}|ƒ S )	Nc                 S   s   d S r   r	   ©r   ÚrequiredrC   r   r	   r	   r
   Ú	uc_lookupÄ  s    z3LookupBaseFallbackTests._makeOne.<locals>.uc_lookupc                 S   s
   t ƒ ‚d S r   ©ÚNotImplementedError©r   rã   rC   r	   r	   r
   Úuc_lookupAllÉ  s    z6LookupBaseFallbackTests._makeOne.<locals>.uc_lookupAllc                 S   s
   t ƒ ‚d S r   rå   rç   r	   r	   r
   Úuc_subscriptionsÎ  s    z:LookupBaseFallbackTests._makeOne.<locals>.uc_subscriptionsc                       s   e Zd Z” Z”Z”ZdS )z1LookupBaseFallbackTests._makeOne.<locals>.DerivedN)r   r   r   Ú_uncached_lookupÚ_uncached_lookupAllÚ_uncached_subscriptionsr	   ©rä   rè   ré   r	   r
   ÚDerivedÑ  s   rî   rQ   )r   rä   rè   ré   rî   r	   rí   r
   rR   ¾  s    z LookupBaseFallbackTests._makeOnec              	   C   s>   dd„ }| j |d�}|  t¡� | ddtƒ ¡ W 5 Q R X d S )Nc                 S   s   |   d¡ d S ©NzThis should never be calledrË   râ   r	   r	   r
   Ú_lookupÚ  s    zCLookupBaseFallbackTests.test_lookup_w_invalid_name.<locals>._lookup©rä   ©ÚAÚB)rR   r˜   r™   ÚlookuprO   ©r   rð   Úlbr	   r	   r
   Útest_lookup_w_invalid_nameØ  s    z2LookupBaseFallbackTests.test_lookup_w_invalid_namec                    sF   g ‰ ‡ fdd„}| j |d�}| ddd¡}|  |¡ |  ˆ dg¡ d S )Nc                    s   ˆ   |||f¡ d S r   ©r3   râ   ©Ú_called_withr	   r
   rð   ä  s    zDLookupBaseFallbackTests.test_lookup_miss_no_default.<locals>._lookuprñ   rò   rô   ÚC©rò   rô   rü   )rR   rõ   r¾   ra   ©r   rð   r÷   Úfoundr	   rú   r
   Útest_lookup_miss_no_defaultá  s    
z3LookupBaseFallbackTests.test_lookup_miss_no_defaultc                    sP   g ‰ t ƒ }‡ fdd„}| j|d�}| ddd|¡}|  ||¡ |  ˆ dg¡ d S )Nc                    s   ˆ   |||f¡ d S r   rù   râ   rú   r	   r
   rð   ð  s    zCLookupBaseFallbackTests.test_lookup_miss_w_default.<locals>._lookuprñ   rò   rô   rü   rý   ©rO   rR   rõ   rZ   ra   ©r   Ú_defaultrð   r÷   rÿ   r	   rú   r
   Útest_lookup_miss_w_defaultì  s    z2LookupBaseFallbackTests.test_lookup_miss_w_defaultc                    sz   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}|  ||¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rÍ   ©r3   Úpoprâ   ©rû   Ú_resultsr	   r
   rð   ý  s    z?LookupBaseFallbackTests.test_lookup_not_cached.<locals>._lookuprñ   rò   rô   rü   rý   r  ©r   ÚaÚbÚcrð   r÷   rÿ   r	   r  r
   Útest_lookup_not_cachedø  s    
z.LookupBaseFallbackTests.test_lookup_not_cachedc                    sˆ   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}| ddd¡}|  ||¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rÍ   r  râ   r  r	   r
   rð     s    z;LookupBaseFallbackTests.test_lookup_cached.<locals>._lookuprñ   rò   rô   rü   rý   r  r	  r	   r  r
   Útest_lookup_cached  s    
z*LookupBaseFallbackTests.test_lookup_cachedc                    sz   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}|  ||¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rÍ   r  râ   r  r	   r
   rð     s    zNLookupBaseFallbackTests.test_lookup_not_cached_multi_required.<locals>._lookuprñ   ©ró   ÚDrô   rü   ©r  rô   rü   r  r	  r	   r  r
   Ú%test_lookup_not_cached_multi_required  s    
z=LookupBaseFallbackTests.test_lookup_not_cached_multi_requiredc                    sˆ   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}| ddd¡}|  ||¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rÍ   r  râ   r  r	   r
   rð   +  s    zJLookupBaseFallbackTests.test_lookup_cached_multi_required.<locals>._lookuprñ   r  rô   rü   r  r  r	  r	   r  r
   Ú!test_lookup_cached_multi_required&  s    
z9LookupBaseFallbackTests.test_lookup_cached_multi_requiredc                    s’   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}| |¡ | ddd¡}|  ||¡ |  ˆ ddg¡ |  ˆ|g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rÍ   r  râ   r  r	   r
   rð   ;  s    zMLookupBaseFallbackTests.test_lookup_not_cached_after_changed.<locals>._lookuprñ   rò   rô   rü   rý   )rO   rR   rõ   r@   rZ   ra   r	  r	   r  r
   Ú$test_lookup_not_cached_after_changed6  s    

ÿz<LookupBaseFallbackTests.test_lookup_not_cached_after_changedc              	   C   s>   dd„ }| j |d�}|  t¡� | ddtƒ ¡ W 5 Q R X d S )Nc                 S   s   |   d¡ d S rï   rË   râ   r	   r	   r
   rð   J  s    zDLookupBaseFallbackTests.test_lookup1_w_invalid_name.<locals>._lookuprñ   ró   rô   )rR   r˜   r™   Úlookup1rO   rö   r	   r	   r
   Útest_lookup1_w_invalid_nameH  s    z3LookupBaseFallbackTests.test_lookup1_w_invalid_namec                    sF   g ‰ ‡ fdd„}| j |d�}| ddd¡}|  |¡ |  ˆ dg¡ d S )Nc                    s   ˆ   |||f¡ d S r   rù   râ   rú   r	   r
   rð   T  s    zELookupBaseFallbackTests.test_lookup1_miss_no_default.<locals>._lookuprñ   ró   rô   rü   rý   )rR   r  r¾   ra   rþ   r	   rú   r
   Útest_lookup1_miss_no_defaultQ  s    
z4LookupBaseFallbackTests.test_lookup1_miss_no_defaultc                    sP   g ‰ t ƒ }‡ fdd„}| j|d�}| ddd|¡}|  ||¡ |  ˆ dg¡ d S )Nc                    s   ˆ   |||f¡ d S r   rù   râ   rú   r	   r
   rð   `  s    zDLookupBaseFallbackTests.test_lookup1_miss_w_default.<locals>._lookuprñ   ró   rô   rü   rý   ©rO   rR   r  rZ   ra   r  r	   rú   r
   Útest_lookup1_miss_w_default\  s    z3LookupBaseFallbackTests.test_lookup1_miss_w_defaultc                    sl   g ‰ t ƒ }‡ fdd„}| j|d�}| ddd|¡}|  ||¡ | ddd|¡}|  ||¡ |  ˆ dg¡ d S )Nc                    s   ˆ   |||f¡ d S r   rù   râ   rú   r	   r
   rð   l  s    zSLookupBaseFallbackTests.test_lookup1_miss_w_default_negative_cache.<locals>._lookuprñ   ró   rô   rü   rý   r  r  r	   rú   r
   Ú*test_lookup1_miss_w_default_negative_cacheh  s    zBLookupBaseFallbackTests.test_lookup1_miss_w_default_negative_cachec                    sz   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}|  ||¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rÍ   r  râ   r  r	   r
   rð   {  s    z@LookupBaseFallbackTests.test_lookup1_not_cached.<locals>._lookuprñ   ró   rô   rü   rý   r  r	  r	   r  r
   Útest_lookup1_not_cachedv  s    
z/LookupBaseFallbackTests.test_lookup1_not_cachedc                    sˆ   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}| ddd¡}|  ||¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rÍ   r  râ   r  r	   r
   rð   Š  s    z<LookupBaseFallbackTests.test_lookup1_cached.<locals>._lookuprñ   ró   rô   rü   rý   r  r	  r	   r  r
   Útest_lookup1_cached…  s    
z+LookupBaseFallbackTests.test_lookup1_cachedc                    s’   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}| |¡ | ddd¡}|  ||¡ |  ˆ ddg¡ |  ˆ|g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rÍ   r  râ   r  r	   r
   rð   š  s    zNLookupBaseFallbackTests.test_lookup1_not_cached_after_changed.<locals>._lookuprñ   ró   rô   rü   rý   )rO   rR   r  r@   rZ   ra   r	  r	   r  r
   Ú%test_lookup1_not_cached_after_changed•  s    

ÿz=LookupBaseFallbackTests.test_lookup1_not_cached_after_changedc              	   C   s@   t ƒ t ƒ  }}|  ¡ }|  t¡� | ||t ƒ ¡ W 5 Q R X d S r   )rO   rR   r˜   r™   Úadapter_hook)r   ÚreqÚprvr÷   r	   r	   r
   Ú test_adapter_hook_w_invalid_name§  s    z8LookupBaseFallbackTests.test_adapter_hook_w_invalid_namec                 C   s2   t ƒ t ƒ  }}|  ¡ }| ||d¡}|  |¡ d S rŸ   )rO   rR   r  r¾   )r   r  r   r÷   rÿ   r	   r	   r
   Ú!test_adapter_hook_miss_no_default­  s    z9LookupBaseFallbackTests.test_adapter_hook_miss_no_defaultc                 C   s>   t ƒ t ƒ t ƒ   }}}|  ¡ }| ||d|¡}|  ||¡ d S rŸ   )rO   rR   r  rZ   )r   r  r   r  r÷   rÿ   r	   r	   r
   Ú test_adapter_hook_miss_w_default³  s    z8LookupBaseFallbackTests.test_adapter_hook_miss_w_defaultc                    sl   g ‰ ‡ fdd„‰‡fdd„}t ƒ t ƒ t ƒ   }}}| j|d�}| ||d|¡}|  ||¡ |  ˆ |g¡ d S )Nc                    s   ˆ   | ¡ d S r   rù   ©Úcontext©Ú_f_called_withr	   r
   Ú_factory¼  s    zTLookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_None.<locals>._factoryc                    s   ˆ S r   r	   râ   ©r(  r	   r
   rð   ¿  s    zSLookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_None.<locals>._lookuprñ   rü   ©rO   rR   r  rZ   ra   ©r   rð   r  r   r  r÷   Úadaptedr	   ©r'  r(  r
   Ú*test_adapter_hook_hit_factory_returns_None¹  s    zBLookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_Nonec                    st   g ‰t ƒ ‰ ‡ ‡fdd„‰‡fdd„}t ƒ t ƒ t ƒ   }}}| j|d�}| ||d|¡}|  |ˆ ¡ |  ˆ|g¡ d S )Nc                    s   ˆ  | ¡ ˆ S r   rù   r$  ©Ú_adapterr'  r	   r
   r(  Ì  s    
zWLookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_adapter.<locals>._factoryc                    s   ˆ S r   r	   râ   r)  r	   r
   rð   Ð  s    zVLookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_adapter.<locals>._lookuprñ   rü   r*  r+  r	   ©r0  r'  r(  r
   Ú-test_adapter_hook_hit_factory_returns_adapterÈ  s    zELookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_adapterc                    s`   g ‰ ‡ fdd„‰d‡fdd„	}t ƒ }tƒ }| j|d�}| ||¡}|  || ¡ |  ˆ | g¡ d S )Nc                    s   ˆ   | ¡ | S r   rù   r$  r&  r	   r
   r(  Ü  s    
zILookupBaseFallbackTests.test_adapter_hook_super_unwraps.<locals>._factoryru   c                    s   ˆ S r   r	   râ   r)  r	   r
   rð   à  s    zHLookupBaseFallbackTests.test_adapter_hook_super_unwraps.<locals>._lookuprñ   )ru   )ÚsuperrO   rR   r  rZ   ra   )r   rð   rã   rC   r÷   r,  ©Ú	__class__r-  r
   Útest_adapter_hook_super_unwrapsÙ  s    z7LookupBaseFallbackTests.test_adapter_hook_super_unwrapsc                    st   g ‰t ƒ ‰ ‡ ‡fdd„‰‡fdd„}t ƒ t ƒ t ƒ   }}}| j|d�}| ||d|¡}|  |ˆ ¡ |  ˆ|g¡ d S )Nc                    s   ˆ  | ¡ ˆ S r   rù   r$  r/  r	   r
   r(  î  s    
z;LookupBaseFallbackTests.test_queryAdapter.<locals>._factoryc                    s   ˆ S r   r	   râ   r)  r	   r
   rð   ò  s    z:LookupBaseFallbackTests.test_queryAdapter.<locals>._lookuprñ   rü   )rO   rR   ÚqueryAdapterrZ   ra   r+  r	   r1  r
   Útest_queryAdapterê  s    z)LookupBaseFallbackTests.test_queryAdapterc                    s\   g ‰ t ƒ t ƒ t ƒ g‰‡ ‡fdd„}| j|d�}| dd¡}|  |tˆƒ¡ |  ˆ dg¡ d S )Nc                    s   ˆ   ||f¡ tˆƒS r   ©r3   rI   rç   r  r	   r
   Ú
_lookupAllÿ  s    zCLookupBaseFallbackTests.test_lookupAll_uncached.<locals>._lookupAll©rè   ró   rô   ©rò   rô   ©rO   rR   Ú	lookupAllra   rI   ©r   r:  r÷   rÿ   r	   r  r
   Útest_lookupAll_uncachedû  s    z/LookupBaseFallbackTests.test_lookupAll_uncachedc                    sh   g ‰ t ƒ t ƒ t ƒ g‰‡ ‡fdd„}| j|d�}| dd¡}| dd¡}|  |tˆƒ¡ |  ˆ dg¡ d S )Nc                    s   ˆ   ||f¡ tˆƒS r   r9  rç   r  r	   r
   r:    s    zALookupBaseFallbackTests.test_lookupAll_cached.<locals>._lookupAllr;  ró   rô   r<  r=  r?  r	   r  r
   Útest_lookupAll_cached  s    z-LookupBaseFallbackTests.test_lookupAll_cachedc                    s\   g ‰ t ƒ t ƒ t ƒ g‰‡ ‡fdd„}| j|d�}| dd¡}|  |tˆƒ¡ |  ˆ dg¡ d S )Nc                    s   ˆ   ||f¡ tˆƒS r   r9  rç   r  r	   r
   Ú_subscriptions  s    zKLookupBaseFallbackTests.test_subscriptions_uncached.<locals>._subscriptions©ré   ró   rô   r<  ©rO   rR   Úsubscriptionsra   rI   ©r   rB  r÷   rÿ   r	   r  r
   Útest_subscriptions_uncached  s    z3LookupBaseFallbackTests.test_subscriptions_uncachedc                    sh   g ‰ t ƒ t ƒ t ƒ g‰‡ ‡fdd„}| j|d�}| dd¡}| dd¡}|  |tˆƒ¡ |  ˆ dg¡ d S )Nc                    s   ˆ   ||f¡ tˆƒS r   r9  rç   r  r	   r
   rB  '  s    zILookupBaseFallbackTests.test_subscriptions_cached.<locals>._subscriptionsrC  ró   rô   r<  rD  rF  r	   r  r
   Útest_subscriptions_cached#  s    z1LookupBaseFallbackTests.test_subscriptions_cached)NNN)!r   r   r   rá   rP   rR   rø   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r"  r#  r.  r2  r6  r8  r@  rA  rG  rH  Ú__classcell__r	   r	   r4  r
   rß   ¶  s@        ÿ
		rß   c                   @   s   e Zd Zdd„ ZdS )ÚLookupBaseTestsc                 C   s   ddl m} |S )Nr   )Ú
LookupBase)r:   rK  )r   rK  r	   r	   r
   rP   5  s    zLookupBaseTests._getTargetClassN©r   r   r   rP   r	   r	   r	   r
   rJ  2  s   rJ  c                   @   sZ   e Zd Zdd„ ZeZddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚVerifyingBaseFallbackTestsc                 C   s   ddl m} |S )Nr   )ÚVerifyingBaseFallback)r:   rN  )r   rN  r	   r	   r
   rá   <  s    z,VerifyingBaseFallbackTests._getFallbackClassNc                    sb   ˆ d krdd„ ‰ ˆd kr dd„ ‰ˆd kr0dd„ ‰G ‡ ‡‡fdd„d|   ¡ ƒ}||ƒ}| |¡ |S )	Nc                 S   s
   t ƒ ‚d S r   rå   râ   r	   r	   r
   rä   G  s    z6VerifyingBaseFallbackTests._makeOne.<locals>.uc_lookupc                 S   s
   t ƒ ‚d S r   rå   rç   r	   r	   r
   rè   L  s    z9VerifyingBaseFallbackTests._makeOne.<locals>.uc_lookupAllc                 S   s
   t ƒ ‚d S r   rå   rç   r	   r	   r
   ré   Q  s    z=VerifyingBaseFallbackTests._makeOne.<locals>.uc_subscriptionsc                       s(   e Zd Z”Z”Z”Z‡ fdd„Z‡  ZS )z4VerifyingBaseFallbackTests._makeOne.<locals>.Derivedc                    s   t ƒ  ¡  || _d S r   )r3  r/   Ú	_registryrc   r4  r	   r
   r/   Y  s    
z=VerifyingBaseFallbackTests._makeOne.<locals>.Derived.__init__)r   r   r   rê   rë   rì   r/   rI  r	   rí   r4  r
   rî   T  s   rî   )rP   r@   )r   r]   rä   rè   ré   rî   Zderivedr	   rí   r
   rR   B  s    	
z#VerifyingBaseFallbackTests._makeOnec                    s(   G dd„ dƒ‰ G ‡ fdd„dƒ}||ƒS )Nc                   @   s   e Zd ZdZdS )z@VerifyingBaseFallbackTests._makeRegistry.<locals>.WithGenerationr`   N)r   r   r   rb   r	   r	   r	   r
   ÚWithGenerationc  s   rP  c                       s   e Zd Z‡ fdd„ZdS )z:VerifyingBaseFallbackTests._makeRegistry.<locals>.Registryc                    s   ‡ fdd„t |ƒD ƒ| _d S )Nc                    s   g | ]
}ˆ ƒ ‘qS r	   r	   )rE   Úi©rP  r	   r
   rH   h  s     zWVerifyingBaseFallbackTests._makeRegistry.<locals>.Registry.__init__.<locals>.<listcomp>)ÚrangeÚro)r   ÚdepthrR  r	   r
   r/   g  s    zCVerifyingBaseFallbackTests._makeRegistry.<locals>.Registry.__init__Nr0   r	   rR  r	   r
   ÚRegistryf  s   rV  r	   )r   rU  rV  r	   rR  r
   Ú_makeRegistrya  s    z(VerifyingBaseFallbackTests._makeRegistryc                    sà   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}|  d¡}| j||d�}| ddd¡}| ddd¡}|  ||¡ |  ˆ dg¡ |  ˆ||g¡ |jd	  jd	7  _| ddd¡}|  ||¡ |  ˆ ddg¡ |  ˆ|g¡ d S )
Nc                    s   ˆ   |||f¡ ˆ d¡S rÍ   r  râ   r  r	   r
   rð   q  s    z7VerifyingBaseFallbackTests.test_lookup.<locals>._lookupr¬   rñ   rò   rô   rü   rý   r`   )rO   rW  rR   rõ   rZ   ra   rT  rb   ©r   r
  r  r  rð   r<   r÷   rÿ   r	   r  r
   Útest_lookupl  s$    

ÿz&VerifyingBaseFallbackTests.test_lookupc                    sà   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}|  d¡}| j||d�}| ddd¡}| ddd¡}|  ||¡ |  ˆ dg¡ |  ˆ||g¡ |jd	  jd	7  _| ddd¡}|  ||¡ |  ˆ ddg¡ |  ˆ|g¡ d S )
Nc                    s   ˆ   |||f¡ ˆ d¡S rÍ   r  râ   r  r	   r
   rð   ˆ  s    z8VerifyingBaseFallbackTests.test_lookup1.<locals>._lookupr¬   rñ   ró   rô   rü   rý   r`   )rO   rW  rR   r  rZ   ra   rT  rb   rX  r	   r  r
   Útest_lookup1ƒ  s$    

ÿz'VerifyingBaseFallbackTests.test_lookup1c                    sê   t ƒ t ƒ t ƒ g\‰‰}‡fdd„}‡fdd„}‡fdd„}|||g‰ ‡ fdd„}t ƒ t ƒ t ƒ   }}}ˆ d	¡}	ˆj|	|d
�}
|
 ||d|¡}ˆ |ˆ¡ |
 ||d|¡}ˆ |ˆ¡ |	jd  jd7  _|
 ||d|¡}ˆ |ˆ¡ d S )Nc                    s   ˆ S r   r	   r$  ©r
  r	   r
   Ú	_factory1�  s    z?VerifyingBaseFallbackTests.test_adapter_hook.<locals>._factory1c                    s   ˆ S r   r	   r$  ©r  r	   r
   Ú	_factory2   s    z?VerifyingBaseFallbackTests.test_adapter_hook.<locals>._factory2c                    s   ˆ   d¡ d S rï   rË   r$  r"   r	   r
   Ú	_factory3£  s    z?VerifyingBaseFallbackTests.test_adapter_hook.<locals>._factory3c                    s
   ˆ   d¡S rÍ   ©r  râ   ©Ú
_factoriesr	   r
   rð   ¨  s    z=VerifyingBaseFallbackTests.test_adapter_hook.<locals>._lookupr¬   rñ   rü   r`   )rO   rW  rR   r  rZ   rT  rb   ©r   Z_cr\  r^  r_  rð   r  r   r  r<   r÷   r,  r	   ©rb  r
  r  r   r
   Útest_adapter_hookš  s     

z,VerifyingBaseFallbackTests.test_adapter_hookc                    sê   t ƒ t ƒ t ƒ g\‰‰}‡fdd„}‡fdd„}‡fdd„}|||g‰ ‡ fdd„}t ƒ t ƒ t ƒ   }}}ˆ d	¡}	ˆj|	|d
�}
|
 ||d|¡}ˆ |ˆ¡ |
 ||d|¡}ˆ |ˆ¡ |	jd  jd7  _|
 ||d|¡}ˆ |ˆ¡ d S )Nc                    s   ˆ S r   r	   r$  r[  r	   r
   r\  ¹  s    z?VerifyingBaseFallbackTests.test_queryAdapter.<locals>._factory1c                    s   ˆ S r   r	   r$  r]  r	   r
   r^  ¼  s    z?VerifyingBaseFallbackTests.test_queryAdapter.<locals>._factory2c                    s   ˆ   d¡ d S rï   rË   r$  r"   r	   r
   r_  ¿  s    z?VerifyingBaseFallbackTests.test_queryAdapter.<locals>._factory3c                    s
   ˆ   d¡S rÍ   r`  râ   ra  r	   r
   rð   Ä  s    z=VerifyingBaseFallbackTests.test_queryAdapter.<locals>._lookupr¬   rñ   rü   r`   )rO   rW  rR   r7  rZ   rT  rb   r  rc  r	   rd  r
   r8  ¶  s     

z,VerifyingBaseFallbackTests.test_queryAdapterc                    s¸   t ƒ t ƒ t ƒ g}t ƒ t ƒ t ƒ g}||g‰ ‡ fdd„}|  d¡}| j||d�}| dd¡}|  |t|ƒ¡ | dd¡}|  |t|ƒ¡ |jd  jd7  _| dd¡}|  |t|ƒ¡ d S )Nc                    s   t ˆ  d¡ƒS rÍ   ©rI   r  rç   ©r  r	   r
   r:  ×  s    z=VerifyingBaseFallbackTests.test_lookupAll.<locals>._lookupAllr¬   r;  ró   rô   r`   )rO   rW  rR   r>  ra   rI   rT  rb   )r   Ú
_results_1Ú
_results_2r:  r<   r÷   rÿ   r	   rg  r
   Útest_lookupAllÒ  s    
z)VerifyingBaseFallbackTests.test_lookupAllc                    s¸   t ƒ t ƒ t ƒ g}t ƒ t ƒ t ƒ g}||g‰ ‡ fdd„}|  d¡}| j||d�}| dd¡}|  |t|ƒ¡ | dd¡}|  |t|ƒ¡ |jd  jd7  _| dd¡}|  |t|ƒ¡ d S )Nc                    s   t ˆ  d¡ƒS rÍ   rf  rç   rg  r	   r
   rB  é  s    zEVerifyingBaseFallbackTests.test_subscriptions.<locals>._subscriptionsr¬   rC  ró   rô   r`   )rO   rW  rR   rE  ra   rI   rT  rb   )r   rh  ri  rB  r<   r÷   rÿ   r	   rg  r
   Útest_subscriptionsä  s    
z-VerifyingBaseFallbackTests.test_subscriptions)NNN)r   r   r   rá   rP   rR   rW  rY  rZ  re  r8  rj  rk  r	   r	   r	   r
   rM  :  s     ÿ
rM  c                   @   s   e Zd Zdd„ ZdS )ÚVerifyingBaseTestsc                 C   s   ddl m} |S )Nr   )ÚVerifyingBase)r:   rm  )r   rm  r	   r	   r
   rP   ú  s    z"VerifyingBaseTests._getTargetClassNrL  r	   r	   r	   r
   rl  ÷  s   rl  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‡ fd-d.„Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'‡  Z(S )KÚAdapterLookupBaseTestsc                 C   s   ddl m} |S )Nr   )ÚAdapterLookupBase)r:   ro  )r   ro  r	   r	   r
   rP     s    z&AdapterLookupBaseTests._getTargetClassc                 C   s   |   ¡ |ƒS r   rQ   rc   r	   r	   r
   rR     s    zAdapterLookupBaseTests._makeOnec                 G   s   G dd„ dƒ}|ƒ S )Nc                   @   s   e Zd Zdd„ ZdS )z<AdapterLookupBaseTests._makeSubregistry.<locals>.Subregistryc                 S   s   g | _ g | _d S r   )rl   rs   r"   r	   r	   r
   r/     s    zEAdapterLookupBaseTests._makeSubregistry.<locals>.Subregistry.__init__Nr0   r	   r	   r	   r
   ÚSubregistry
  s   rp  r	   )r   rC   rp  r	   r	   r
   Ú_makeSubregistry  s    z'AdapterLookupBaseTests._makeSubregistryc                 G   s   G dd„ dƒ}||ƒS )Nc                   @   s   e Zd Zdd„ ZdS )z6AdapterLookupBaseTests._makeRegistry.<locals>.Registryc                 S   s   || _ g | _d S r   )ry   rT  rB   r	   r	   r
   r/     s    z?AdapterLookupBaseTests._makeRegistry.<locals>.Registry.__init__Nr0   r	   r	   r	   r
   rV    s   rV  r	   )r   rC   rV  r	   r	   r
   rW    s    z$AdapterLookupBaseTests._makeRegistryc                 C   s$   |   ¡ }|  |¡}|  |ji ¡ d S r   )rW  rR   ra   rA   )r   r]   Úalbr	   r	   r
   Útest_ctor_empty_registry  s    
z/AdapterLookupBaseTests.test_ctor_empty_registryc                 C   s®   ddl m} ddlm} |dƒ}|d|fƒ}|  ||¡}|  |¡}|  t|j 	¡ ƒt|||gƒ¡ |  |j| ||g¡ |  |j| |g¡ |  t|j| ƒt||gƒ¡ d S ©Nr   r   ©ÚInterfaceClassÚIFooÚIBar)
r   r   Úzope.interface.interfacerv  rW  rR   ra   r�   rA   Úkeys©r   r   rv  rw  rx  r]   rr  r	   r	   r
   Útest_ctor_w_registry_provided  s    
ÿ
ÿz4AdapterLookupBaseTests.test_ctor_w_registry_providedc                 C   sB   G dd„ dƒ}G dd„ d|   ¡ |ƒ}|  ¡ }||ƒ}| |¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )zAAdapterLookupBaseTests.test_changed_empty_required.<locals>.Mixinc                 W   s   d S r   r	   r&   r	   r	   r
   r@   1  s    zIAdapterLookupBaseTests.test_changed_empty_required.<locals>.Mixin.changedN©r   r   r   r@   r	   r	   r	   r
   ÚMixin0  s   r~  c                   @   s   e Zd ZdS )zCAdapterLookupBaseTests.test_changed_empty_required.<locals>.DerivedNr   r	   r	   r	   r
   rî   4  s   rî   )rP   rW  r@   )r   r~  rî   r]   rr  r	   r	   r
   Útest_changed_empty_required-  s
    z2AdapterLookupBaseTests.test_changed_empty_requiredc                 C   s¢   G dd„ dƒ}G dd„ d|   ¡ |ƒ}G dd„ dƒ}|dƒ}|dƒ}|  ¡ }||ƒ}d	|j|< d	|j|< | |¡ |  t|jƒd
¡ |  |jd ¡ |  |j|¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z=AdapterLookupBaseTests.test_changed_w_required.<locals>.Mixinc                 W   s   d S r   r	   r&   r	   r	   r
   r@   ?  s    zEAdapterLookupBaseTests.test_changed_w_required.<locals>.Mixin.changedNr}  r	   r	   r	   r
   r~  >  s   r~  c                   @   s   e Zd ZdS )z?AdapterLookupBaseTests.test_changed_w_required.<locals>.DerivedNr   r	   r	   r	   r
   rî   B  s   rî   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )zCAdapterLookupBaseTests.test_changed_w_required.<locals>.FauxWeakrefNc                 S   s
   || _ d S r   ©Z_here)r   Úherer	   r	   r
   r/   H  s    zLAdapterLookupBaseTests.test_changed_w_required.<locals>.FauxWeakref.__init__c                 S   s   | j r
| S d S r   r€  r"   r	   r	   r
   Ú__call__K  s    zLAdapterLookupBaseTests.test_changed_w_required.<locals>.FauxWeakref.__call__c                 S   s
   || _ d S r   )Ú_unsub)r   Útargetr	   r	   r
   r°   N  s    zOAdapterLookupBaseTests.test_changed_w_required.<locals>.FauxWeakref.unsubscribe)r   r   r   rƒ  r/   r‚  r°   r	   r	   r	   r
   ÚFauxWeakrefE  s   r…  FTr`   r   )rP   rW  Ú	_requiredr@   ra   r!   rƒ  )r   r~  rî   r…  Úgoner�  r]   rr  r	   r	   r
   Útest_changed_w_required;  s    


z.AdapterLookupBaseTests.test_changed_w_requiredc                 C   s¼   ddl m} ddlm} |dƒ}|d|fƒ}|  ¡ }|  |¡}||g|_| ¡  |  t	|j
 ¡ ƒt	|||gƒ¡ |  |j
| ||g¡ |  |j
| |g¡ |  t	|j
| ƒt	||gƒ¡ d S rt  )r   r   ry  rv  rW  rR   ry   Zinit_extendorsra   r�   rA   rz  r{  r	   r	   r
   Ú)test_init_extendors_after_registry_update\  s     

ÿ
ÿz@AdapterLookupBaseTests.test_init_extendors_after_registry_updatec                 C   s¾   ddl m} ddlm} |dƒ}|d|fƒ}|  ¡ }|  |¡}| |¡ | |¡ |  t|j	 
¡ ƒt|||gƒ¡ |  |j	| ||g¡ |  |j	| |g¡ |  t|j	| ƒt||gƒ¡ d S rt  )r   r   ry  rv  rW  rR   rD   ra   r�   rA   rz  r{  r	   r	   r
   Útest_add_extendorl  s     


ÿ
ÿz(AdapterLookupBaseTests.test_add_extendorc                 C   s´   ddl m} ddlm} |dƒ}|d|fƒ}|  ||¡}|  |¡}| |¡ |  t|j	 
¡ ƒt|||gƒ¡ |  |j	| |g¡ |  |j	| |g¡ |  t|j	| ƒt|gƒ¡ d S rt  )r   r   ry  rv  rW  rR   rJ   ra   r�   rA   rz  r{  r	   r	   r
   Útest_remove_extendor|  s    

ÿÿz+AdapterLookupBaseTests.test_remove_extendorc                 C   st   ddl m} |dƒ}|d|fƒ}|  ¡ }|  |¡}| |f|¡}|  |d ¡ |  t|jƒd¡ |  | 	¡ |j¡ d S ©Nr   ru  rw  rx  r`   )
ry  rv  rW  rR   rê   ra   r!   r†  r®   Úweakref©r   rv  rw  rx  r]   rr  Úresultr	   r	   r
   Útest__uncached_lookup_empty_ro�  s    
z5AdapterLookupBaseTests.test__uncached_lookup_empty_roc                 C   sh   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }|j |¡ |  |¡}| |f|¡}|  |d ¡ d S ©Nr   ru  rw  rx  )	ry  rv  rW  rq  rT  r3   rR   rê   ra   ©r   rv  rw  rx  r]   Úsubrrr  r�  r	   r	   r
   Ú test__uncached_lookup_order_miss˜  s    
z7AdapterLookupBaseTests.test__uncached_lookup_order_missc                 C   st   ddl m} |dƒ}|d|fƒ}|  ¡ }|  ¡ }i i g|_|j |¡ |  |¡}||_| 	|f|¡}|  
|d ¡ d S r‘  )ry  rv  rW  rq  rl   rT  r3   rR   r\   rê   ra   r’  r	   r	   r
   Ú$test__uncached_lookup_extendors_miss£  s    

z;AdapterLookupBaseTests.test__uncached_lookup_extendors_missc           
      C   s’   ddl m} |dƒ}|d|fƒ}|dƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}	|  |	d ¡ d S ©Nr   ru  rw  rx  ÚIQuxru   ©ry  rv  rW  rq  rO   rl   rT  r3   rR   r\   rê   ra   ©
r   rv  rw  rx  r—  r]   r“  Ú
irrelevantrr  r�  r	   r	   r
   Ú1test__uncached_lookup_components_miss_wrong_iface°  s&     ÿÿþ
zHAdapterLookupBaseTests.test__uncached_lookup_components_miss_wrong_ifacec           	      C   sŠ   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}|  |d ¡ d S ©Nr   ru  rw  rx  Ú	wrongnamer˜  ©	r   rv  rw  rx  r]   r“  r�  rr  r�  r	   r	   r
   Ú0test__uncached_lookup_components_miss_wrong_nameÆ  s$     ÿÿþ
zGAdapterLookupBaseTests.test__uncached_lookup_components_miss_wrong_namec           	      C   sŠ   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}|  ||¡ d S ©Nr   ru  rw  rx  ru   ©ry  rv  rW  rq  rO   rl   rT  r3   rR   r\   rê   rZ   )	r   rv  rw  rx  r]   r“  Ú	_expectedrr  r�  r	   r	   r
   Ú test__uncached_lookup_simple_hitÜ  s    þ
z7AdapterLookupBaseTests.test__uncached_lookup_simple_hitc           
      C   s¤   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}| 
|f|¡}	|  ||¡ |  |	|¡ d S r   r¡  )
r   rv  rw  rx  r]   r“  r¢  rr  r�  Zresult2r	   r	   r
   Ú"test__uncached_lookup_repeated_hití  s     þ
z9AdapterLookupBaseTests.test__uncached_lookup_repeated_hitc                 C   s®   ddl m} ddlm} |dƒ}|d|fƒ}||ƒG dd„ dƒƒ}|ƒ }|  ¡ }|  ¡ }i i g|_|j |¡ |  	|¡}	|	j
|	_|	|_tƒ }
|	j|f||
d�}|  ||
¡ d S )	Nr   ©Úimplementerru  rw  rx  c                   @   s   e Zd ZdS )zFAdapterLookupBaseTests.test_queryMultiAdaptor_lookup_miss.<locals>.FooNr   r	   r	   r	   r
   ÚFoo  s   r§  ©Údefault)Úzope.interface.declarationsr¦  ry  rv  rW  rq  rl   rT  r3   rR   rê   rõ   r\   rO   ÚqueryMultiAdapterrZ   )r   r¦  rv  rw  rx  r§  Úfoor]   r“  rr  r  r�  r	   r	   r
   Ú"test_queryMultiAdaptor_lookup_miss   s&    þ
z9AdapterLookupBaseTests.test_queryMultiAdaptor_lookup_missc                    s\   ddl m} ddlm} |dƒ‰ |  ¡ }|  |¡‰ˆjˆ_‡ ‡fdd„}|j| |dd� d S )	Nr   ru  )ÚMissingSomeAttrsrw  c                    s   ˆ  | fˆ ¡S r   )r«  )Úob©rw  rr  r	   r
   Útest'  s    þzVAdapterLookupBaseTests.test_queryMultiAdapter_errors_on_attribute_access.<locals>.testr5  )Zexpected_missing)	ry  rv  Úzope.interface.testsr®  rW  rR   rê   rõ   Ztest_raises)r   rv  r®  r]   r±  r	   r°  r
   Ú1test_queryMultiAdapter_errors_on_attribute_access  s    
zHAdapterLookupBaseTests.test_queryMultiAdapter_errors_on_attribute_accessc                    sÜ   ddl m} ddlm} |dƒ}|d|fƒ}||ƒG dd„ dƒƒ}|ƒ }|  ||¡}|  ¡ }g ‰ ‡ fdd	„}	i ||d
|	iiig|_|j |¡ |  	|¡}
|
j
|
_|
|_tƒ }|
j|f||d�}|  ||¡ |  ˆ |g¡ d S )Nr   r¥  ru  rw  rx  c                   @   s   e Zd ZdS )zGAdapterLookupBaseTests.test_queryMultiAdaptor_factory_miss.<locals>.FooNr   r	   r	   r	   r
   r§  5  s   r§  c                    s   ˆ   | ¡ d S r   rù   r$  rú   r	   r
   r(  >  s    zLAdapterLookupBaseTests.test_queryMultiAdaptor_factory_miss.<locals>._factoryru   r¨  )rª  r¦  ry  rv  rW  rq  rl   rT  r3   rR   rê   rõ   r\   rO   r«  rZ   ra   ©r   r¦  rv  rw  rx  r§  r¬  r]   r“  r(  rr  r  r�  r	   rú   r
   Ú#test_queryMultiAdaptor_factory_miss/  s,    þ
z:AdapterLookupBaseTests.test_queryMultiAdaptor_factory_missc                    sä   ddl m} ddlm} |dƒ}|d|fƒ}||ƒG dd„ dƒƒ}|ƒ }|  ||¡}|  ¡ }tƒ ‰g ‰ ‡ ‡fdd	„}	i ||d
|	iiig|_|j 	|¡ |  
|¡}
|
j|
_|
|_tƒ }|
j|f||d�}|  |ˆ¡ |  ˆ |g¡ d S )Nr   r¥  ru  rw  rx  c                   @   s   e Zd ZdS )zFAdapterLookupBaseTests.test_queryMultiAdaptor_factory_hit.<locals>.FooNr   r	   r	   r	   r
   r§  T  s   r§  c                    s   ˆ   | ¡ ˆS r   rù   r$  ©rû   r¢  r	   r
   r(  ^  s    
zKAdapterLookupBaseTests.test_queryMultiAdaptor_factory_hit.<locals>._factoryru   r¨  )rª  r¦  ry  rv  rW  rq  rO   rl   rT  r3   rR   rê   rõ   r\   r«  rZ   ra   r´  r	   r¶  r
   Ú"test_queryMultiAdaptor_factory_hitN  s.    þ
z9AdapterLookupBaseTests.test_queryMultiAdaptor_factory_hitc                    s\   |   |  ¡ ¡}‡ fdd„}dd„ ‰ ||_tƒ ddtƒ g}| |d ¡}|  || dd| f¡ d S )Nc                     s   ˆ S r   r	   ©r•   ©Úfactoryr	   r
   rõ   r  s    zKAdapterLookupBaseTests.test_queryMultiAdapter_super_unwraps.<locals>.lookupc                  W   s   | S r   r	   r¸  r	   r	   r
   rº  u  s    zLAdapterLookupBaseTests.test_queryMultiAdapter_super_unwraps.<locals>.factoryé*   Úabc)rR   rW  rõ   r3  r«  ra   )r   rr  rõ   Zobjectsr�  r4  r¹  r
   Ú$test_queryMultiAdapter_super_unwrapso  s     üüz;AdapterLookupBaseTests.test_queryMultiAdapter_super_unwrapsc                 C   st   ddl m} |dƒ}|d|fƒ}|  ¡ }|  |¡}| |f|¡}|  |d¡ |  t|jƒd¡ |  | 	¡ |j¡ d S )Nr   ru  rw  rx  r	   r`   )
ry  rv  rW  rR   rë   ra   r!   r†  r®   r�  rŽ  r	   r	   r
   Ú!test__uncached_lookupAll_empty_ro‰  s    
z8AdapterLookupBaseTests.test__uncached_lookupAll_empty_roc                 C   sn   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }|j |¡ |  |¡}||_| |f|¡}|  	|d¡ d S ©Nr   ru  rw  rx  r	   )
ry  rv  rW  rq  rT  r3   rR   r\   rë   ra   r’  r	   r	   r
   Ú#test__uncached_lookupAll_order_miss”  s    
z:AdapterLookupBaseTests.test__uncached_lookupAll_order_missc                 C   st   ddl m} |dƒ}|d|fƒ}|  ¡ }|  ¡ }i i g|_|j |¡ |  |¡}||_| 	|f|¡}|  
|d¡ d S r¿  )ry  rv  rW  rq  rl   rT  r3   rR   r\   rë   ra   r’  r	   r	   r
   Ú'test__uncached_lookupAll_extendors_miss   s    

z>AdapterLookupBaseTests.test__uncached_lookupAll_extendors_missc           
      C   s’   ddl m} |dƒ}|d|fƒ}|dƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}	|  |	d¡ d S )Nr   ru  rw  rx  r—  ru   r	   )ry  rv  rW  rq  rO   rl   rT  r3   rR   r\   rë   ra   r™  r	   r	   r
   Ú(test__uncached_lookupAll_components_miss­  s    þ
z?AdapterLookupBaseTests.test__uncached_lookupAll_components_missc           
      C   s¢   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }tƒ }tƒ }i ||||dœiig|_|j |¡ |  |¡}||_	| 
|f|¡}	|  t|	ƒd|fd|fg¡ d S ©Nr   ru  rw  rx  )ru   Únamedru   rÄ  )ry  rv  rW  rq  rO   rl   rT  r3   rR   r\   rë   ra   r�   ©
r   rv  rw  rx  r]   r“  r¢  Z_namedrr  r�  r	   r	   r
   Ú#test__uncached_lookupAll_simple_hit¿  s    þ
z:AdapterLookupBaseTests.test__uncached_lookupAll_simple_hitc           
      C   s¢   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }tƒ }tƒ }i ||||dœiig|_|j |¡ |  |¡}|j	|_
||_| |f|¡}	|  t|	ƒddg¡ d S rÃ  )ry  rv  rW  rq  rO   rl   rT  r3   rR   rë   r>  r\   Únamesra   r�   rÅ  r	   r	   r
   Ú
test_namesÑ  s     þ
z!AdapterLookupBaseTests.test_namesc                 C   st   ddl m} |dƒ}|d|fƒ}|  ¡ }|  |¡}| |f|¡}|  |g ¡ |  t|jƒd¡ |  | 	¡ |j¡ d S rŒ  )
ry  rv  rW  rR   rì   ra   r!   r†  r®   r�  rŽ  r	   r	   r
   Ú%test__uncached_subscriptions_empty_roä  s    
z<AdapterLookupBaseTests.test__uncached_subscriptions_empty_roc                 C   sn   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }|j |¡ |  |¡}||_| |f|¡}|  	|g ¡ d S r‘  )
ry  rv  rW  rq  rT  r3   rR   r\   rì   ra   r’  r	   r	   r
   Ú'test__uncached_subscriptions_order_missï  s    
z>AdapterLookupBaseTests.test__uncached_subscriptions_order_missc                 C   st   ddl m} |dƒ}|d|fƒ}|  ¡ }|  ¡ }i i g|_|j |¡ |  |¡}||_| 	|f|¡}|  
|g ¡ d S r‘  )ry  rv  rW  rq  rs   rT  r3   rR   r\   rì   ra   r’  r	   r	   r
   Ú+test__uncached_subscriptions_extendors_missû  s    

zBAdapterLookupBaseTests.test__uncached_subscriptions_extendors_missc           
      C   s’   ddl m} |dƒ}|d|fƒ}|dƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}	|  |	g ¡ d S r–  ©ry  rv  rW  rq  rO   rs   rT  r3   rR   r\   rì   ra   r™  r	   r	   r
   Ú8test__uncached_subscriptions_components_miss_wrong_iface  s    þ
zOAdapterLookupBaseTests.test__uncached_subscriptions_components_miss_wrong_ifacec           	      C   sŠ   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}|  |g ¡ d S rœ  rÌ  rž  r	   r	   r
   Ú7test__uncached_subscriptions_components_miss_wrong_name  s    þ
zNAdapterLookupBaseTests.test__uncached_subscriptions_components_miss_wrong_namec                 C   s°   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }G dd„ dƒ}|ƒ |ƒ  }}i ||d||fiiig|_|j |¡ |  |¡}	|	|_|	 	|f|¡}
|  
t|
ƒt||gƒ¡ d S )Nr   ru  rw  rx  c                   @   s   e Zd Zdd„ ZdS )zKAdapterLookupBaseTests.test__uncached_subscriptions_simple_hit.<locals>.Fooc                 S   s   dS )NTr	   r&   r	   r	   r
   Ú__lt__4  s    zRAdapterLookupBaseTests.test__uncached_subscriptions_simple_hit.<locals>.Foo.__lt__N)r   r   r   rÏ  r	   r	   r	   r
   r§  2  s   r§  ru   )ry  rv  rW  rq  rs   rT  r3   rR   r\   rì   ra   r�   )r   rv  rw  rx  r]   r“  r§  Ú_exp1Ú_exp2rr  r�  r	   r	   r
   Ú'test__uncached_subscriptions_simple_hit+  s    þ
z>AdapterLookupBaseTests.test__uncached_subscriptions_simple_hitc                    sö   ddl m} ddlm} |dƒ}|d|fƒ}||ƒG dd„ dƒƒ}|ƒ }|  ||¡}|  ||¡}|  ¡ }i ‰ ‡ fdd	„}	‡ fd
d„}
i |d d|	|
fiiig|_|j |¡ |  	|¡}|j
|_||_| |fd ¡}|  |d¡ |  ˆ |g|gdœ¡ d S )Nr   r¥  ru  rw  rx  c                   @   s   e Zd ZdS )z@AdapterLookupBaseTests.test_subscribers_wo_provided.<locals>.FooNr   r	   r	   r	   r
   r§  H  s   r§  c                    s   ˆ   dg ¡ | ¡ d S ©Nr\  ©Ú
setdefaultr3   r$  ©Ú_calledr	   r
   r\  R  s    zFAdapterLookupBaseTests.test_subscribers_wo_provided.<locals>._factory1c                    s   ˆ   dg ¡ | ¡ d S ©Nr^  rÔ  r$  rÖ  r	   r
   r^  U  s    zFAdapterLookupBaseTests.test_subscribers_wo_provided.<locals>._factory2ru   r	   )r\  r^  )rª  r¦  ry  rv  rW  rq  rs   rT  r3   rR   rì   rE  r\   Úsubscribersra   )r   r¦  rv  rw  rx  r§  r¬  r]   r“  r\  r^  rr  r�  r	   rÖ  r
   Útest_subscribers_wo_providedB  s.    þ
z3AdapterLookupBaseTests.test_subscribers_wo_providedc                    s  ddl m} ddlm} |dƒ}|d|fƒ}||ƒG dd„ dƒƒ}|ƒ }|  ||¡}|  ||¡}|  ¡ }i ‰ tƒ tƒ  ‰‰‡ ‡fdd	„}	‡ ‡fd
d„}
‡ fdd„}i ||d|	|
|fiiig|_|j 	|¡ |  
|¡}|j|_||_| |f|¡}|  |ˆˆg¡ |  ˆ |g|g|gdœ¡ d S )Nr   r¥  ru  rw  rx  c                   @   s   e Zd ZdS )z?AdapterLookupBaseTests.test_subscribers_w_provided.<locals>.FooNr   r	   r	   r	   r
   r§  j  s   r§  c                    s   ˆ   dg ¡ | ¡ ˆS rÓ  rÔ  r$  )r×  rÐ  r	   r
   r\  u  s    zEAdapterLookupBaseTests.test_subscribers_w_provided.<locals>._factory1c                    s   ˆ   dg ¡ | ¡ ˆS rØ  rÔ  r$  )r×  rÑ  r	   r
   r^  y  s    zEAdapterLookupBaseTests.test_subscribers_w_provided.<locals>._factory2c                    s   ˆ   dg ¡ | ¡ d S )NÚ_side_effect_onlyrÔ  r$  rÖ  r	   r
   rÛ  }  s    zMAdapterLookupBaseTests.test_subscribers_w_provided.<locals>._side_effect_onlyru   )r\  r^  rÛ  )rª  r¦  ry  rv  rW  rq  rO   rs   rT  r3   rR   rì   rE  r\   rÙ  ra   )r   r¦  rv  rw  rx  r§  r¬  r]   r“  r\  r^  rÛ  rr  r�  r	   )r×  rÐ  rÑ  r
   Útest_subscribers_w_providedd  s>    þ
ýÿz2AdapterLookupBaseTests.test_subscribers_w_provided))r   r   r   rP   rR   rq  rW  rs  r|  r  rˆ  r‰  rŠ  r‹  r�  r”  r•  r›  rŸ  r£  r¤  r­  r³  rµ  r·  r½  r¾  rÀ  rÁ  rÂ  rÆ  rÈ  rÉ  rÊ  rË  rÍ  rÎ  rÒ  rÚ  rÜ  rI  r	   r	   r4  r
   rn  ÿ  sJ   		!!"rn  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚVerifyingAdapterRegistryTestsc                 C   s   ddl m} |S )Nr   )ÚVerifyingAdapterRegistry)r:   rÞ  )r   rÞ  r	   r	   r
   rP   š  s    z-VerifyingAdapterRegistryTests._getTargetClassc                 O   s   |   ¡ ||ŽS r   rQ   )r   r•   Úkwr	   r	   r
   rR   ž  s    z&VerifyingAdapterRegistryTests._makeOnec                 C   s.   ddl m} ddlm} |  ¡ }|||ƒ d S )Nr   )ÚIAdapterRegistry)ÚverifyObject)Zzope.interface.interfacesrà  Zzope.interface.verifyrá  rR   )r   rà  rá  r]   r	   r	   r
   Ú,test_verify_object_provides_IAdapterRegistry¡  s    zJVerifyingAdapterRegistryTests.test_verify_object_provides_IAdapterRegistryN)r   r   r   rP   rR   râ  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 )ÚAdapterRegistryTestsc                 C   s   ddl m} |S )Nr   )ÚAdapterRegistry)r:   rä  )r   rä  r	   r	   r
   rP   ª  s    z$AdapterRegistryTests._getTargetClassc                 C   s   |   ¡ }|  t|jƒd¡ d S rÍ   )rR   ra   r!   Ú_v_subregistries)r   Úarr	   r	   r
   Útest_ctor_no_bases®  s    z'AdapterRegistryTests.test_ctor_no_basesc                 C   sJ   |   ¡ }|   |g¡}|  t|jƒd¡ |  t|jƒd¡ |  ||j¡ d S rk   )rR   ra   r!   rå  r®   )r   ÚbaseÚsubr	   r	   r
   Útest_ctor_w_bases²  s
    z&AdapterRegistryTests.test_ctor_w_basesc                 C   sZ   |   ¡ }|   ¡ }|   |g¡}|g|_|  t|jƒd¡ |  t|jƒd¡ |  ||j¡ d S rk   ©rR   ri   ra   r!   rå  r®   ©r   ÚbeforeÚafterré  r	   r	   r
   Ú,test__setBases_removing_existing_subregistry»  s    zAAdapterRegistryTests.test__setBases_removing_existing_subregistryc                 C   sr   |   ¡ }|   ¡ }|   ¡ }|   |g¡}|jd  |¡ |g|_|  t|jƒd¡ |  t|jƒd¡ |  ||j¡ d S )Nri   r   r`   )rR   Ú__dict__r3   ri   ra   r!   rå  r®   )r   rí  Zstrayrî  ré  r	   r	   r
   Útest__setBases_wo_stray_entryÄ  s    z2AdapterRegistryTests.test__setBases_wo_stray_entryc                 C   sj   |   ¡ }|   ¡ }|   |g¡}||g|_|  t|jƒd¡ |  t|jƒd¡ |  ||j¡ |  ||j¡ d S r_   rë  rì  r	   r	   r
   Ú*test__setBases_w_existing_entry_continuingÏ  s    
z?AdapterRegistryTests.test__setBases_w_existing_entry_continuingc                 C   sh   |   ¡ }G dd„ dƒ}|ƒ |ƒ  }}| |¡ | |¡ tƒ }| |¡ |  |j|¡ |  |j|¡ d S )Nc                   @   s   e Zd ZdZdd„ ZdS )zBAdapterRegistryTests.test_changed_w_subregistries.<locals>.DerivedNc                 S   s
   || _ d S r   r=   )r   Zoriginally_changedr	   r	   r
   r@   ß  s    zJAdapterRegistryTests.test_changed_w_subregistries.<locals>.Derived.changed)r   r   r   r>   r@   r	   r	   r	   r
   rî   Ü  s   rî   )rR   Z_addSubregistryrO   r@   rZ   r>   )r   rè  rî   Zderived1Zderived2r?   r	   r	   r
   Útest_changed_w_subregistriesÙ  s    


z1AdapterRegistryTests.test_changed_w_subregistriesN)
r   r   r   rP   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 )Ú
Test_utilsc                 C   s,   ddl m} ddlm} |  |d ƒ|¡ d S )Nr   ©Ú_convert_None_to_Interfacer   )r:   rö  ry  r   rZ   )r   rö  r   r	   r	   r
   Ú&test__convert_None_to_Interface_w_Noneí  s    z1Test_utils.test__convert_None_to_Interface_w_Nonec                 C   s&   ddl m} tƒ }|  ||ƒ|¡ d S )Nr   rõ  )r:   rö  rO   rZ   )r   rö  r'   r	   r	   r
   Ú'test__convert_None_to_Interface_w_otherò  s    z2Test_utils.test__convert_None_to_Interface_w_otherc                 C   s<   ddl m} d}d}||ƒ}|  ||¡ |  |t|ƒ¡ d S )Nr   ©Ú_normalize_names   strÚstr)r:   rú  ra   rm   r%   )r   rú  ZSTRÚUNICODEZnormr	   r	   r
   Útest__normalize_name_str÷  s    z#Test_utils.test__normalize_name_strc                 C   s$   ddl m} d}|  ||ƒ|¡ d S )Nr   rù  Zustr)r:   rú  ra   )r   rú  ZUSTRr	   r	   r
   Útest__normalize_name_unicodeÿ  s    z'Test_utils.test__normalize_name_unicodec                 C   s6   ddl m} dddg i tƒ fD ]}|  t||¡ qd S )Nr   rù  r`   g      ð?r	   )r:   rú  rO   r˜   Ú	TypeError)r   rú  r'   r	   r	   r
   Útest__normalize_name_other	  s    z%Test_utils.test__normalize_name_otherN)r   r   r   r÷  rø  rý  rþ  r   r	   r	   r	   r
   rô  ë  s
   rô  )rÞ   Zunittestr²  r   r   r   r+   r1   r4   r5   ZTestCaser6   rØ   rß   rJ  rM  rl  rn  rÝ  rã  rô  r	   r	   r	   r
   Ú<module>   sH   $	      3  ~ÿ >ÿ     C