o
    $x`ñ7 ã                   @   s$  d Z ddlZddlmZ 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ƒ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                   @   ó   e Zd ZdS )z_makeInterfaces.<locals>.IB0N©Ú__name__Ú
__module__Ú__qualname__© r
   r
   úC/usr/lib/python3/dist-packages/zope/interface/tests/test_adapter.pyÚIB0   ó    r   c                   @   r   )z_makeInterfaces.<locals>.IB1Nr   r
   r
   r
   r   ÚIB1   r   r   c                   @   r   )z_makeInterfaces.<locals>.IB2Nr   r
   r
   r
   r   ÚIB2   r   r   c                   @   r   )z_makeInterfaces.<locals>.IB3Nr   r
   r
   r
   r   ÚIB3    r   r   c                   @   r   )z_makeInterfaces.<locals>.IB4Nr   r
   r
   r
   r   ÚIB4"   r   r   c                   @   r   )z_makeInterfaces.<locals>.IF0Nr   r
   r
   r
   r   ÚIF0%   r   r   c                   @   r   )z_makeInterfaces.<locals>.IF1Nr   r
   r
   r
   r   ÚIF1'   r   r   c                   @   r   )z_makeInterfaces.<locals>.IR0Nr   r
   r
   r
   r   ÚIR0*   r   r   c                   @   r   )z_makeInterfaces.<locals>.IR1Nr   r
   r
   r
   r   ÚIR1,   r   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__7   ó   
zCustomDataTypeBase.__getitem__c                 C   s   || j |< d S r   r   )r   r   Úvaluer
   r
   r   Ú__setitem__:   ó   zCustomDataTypeBase.__setitem__c                 C   s   | j |= d S r   r   r   r
   r
   r   Ú__delitem__=   ó   zCustomDataTypeBase.__delitem__c                 C   ó
   t | jƒS r   )Úlenr   ©r   r
   r
   r   Ú__len__@   r    zCustomDataTypeBase.__len__c                 C   s
   || j v S r   r   r   r
   r
   r   Ú__contains__C   r    zCustomDataTypeBase.__contains__c                 C   s,   || u rdS t |ƒt | ƒkrdS |j| jkS )NTF)Útyper   ©r   Úotherr
   r
   r   Ú__eq__F   s
   zCustomDataTypeBase.__eq__c                 C   r&   r   )Úreprr   r(   r
   r
   r   Ú__repr__N   r    zCustomDataTypeBase.__repr__)r   r   r	   r   r   r"   r$   r)   r*   r.   r0   r
   r
   r
   r   r   5   s    r   c                   @   ó   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__R   s
   
zCustomMapping.__init__r   ©r   r   r	   r6   r
   r
   r
   r   r2   Q   ó    r2   c                   @   r1   )ÚCustomSequenceNc                 C   s$   g | _ |r| j  |¡ | j j| _d S r   )r   ÚextendÚappendr,   r
   r
   r   r6   [   s   zCustomSequence.__init__r   r7   r
   r
   r
   r   r9   Z   r8   r9   c                   @   r   )ÚCustomLeafSequenceNr   r
   r
   r
   r   r<   a   r   r<   c                   @   r   )ÚCustomProvidedNr   r
   r
   r
   r   r=   d   r   r=   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dWd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 )XÚBaseAdapterRegistryTestsNc                 C   ó   ddl m} |S )Nr   ©ÚBaseAdapterRegistry©Úzope.interface.adapterrA   )r   rA   r
   r
   r   Ú_getBaseAdapterRegistryl   ó   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eƒ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   ó   d S r   r
   )r   Úregr
   r
   r   r6   u   ó   zKBaseAdapterRegistryTests._getTargetClass.<locals>._CUT.LookupClass.__init__c                 S   ó   |  j |f7  _ d S r   ©Ú_changed)r   Úorigr
   r
   r   Úchangedw   ó   zJBaseAdapterRegistryTests._getTargetClass.<locals>._CUT.LookupClass.changedc                 S   rI   r   )Ú
_extendors©r   Úprovidedr
   r
   r   Úadd_extendory   rN   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©rQ   r
   r   Ú
<listcomp>|   s    ÿzfBaseAdapterRegistryTests._getTargetClass.<locals>._CUT.LookupClass.remove_extendor.<locals>.<listcomp>)ÚtuplerO   rP   r
   rU   r   Úremove_extendor{   s   zRBaseAdapterRegistryTests._getTargetClass.<locals>._CUT.LookupClass.remove_extendorN)	r   r   r	   rK   rO   r6   rM   rR   rX   r
   r
   r
   r   ÚLookupClasss   s    rY   N)r   r   r	   ÚobjectrY   r
   r
   r
   r   Ú_CUTr   s    r[   )rD   Ú
_delegatedÚsetattrrY   rZ   )r   rA   r[   r   r
   r
   r   Ú_getTargetClassp   s
   
z(BaseAdapterRegistryTests._getTargetClassc                 C   s
   |   ¡ ƒ S r   ©r^   r(   r
   r
   r   Ú_makeOne‚   r    z!BaseAdapterRegistryTests._makeOnec                 C   ó   t S r   ©Údictr(   r
   r
   r   Ú_getMappingType…   rH   z(BaseAdapterRegistryTests._getMappingTypec                 C   ra   r   rb   r(   r
   r
   r   Ú_getProvidedTypeˆ   rH   z)BaseAdapterRegistryTests._getProvidedTypec                 C   ra   r   )Úlistr(   r
   r
   r   Ú_getMutableListType‹   rH   z,BaseAdapterRegistryTests._getMutableListTypec                 C   ra   r   )rW   r(   r
   r
   r   Ú_getLeafSequenceTypeŽ   rH   z-BaseAdapterRegistryTests._getLeafSequenceTypec                 C   s8   |   ¡ }|ƒ }|jD ]}|  t||ƒt|j|ƒ¡ q
d S r   )r^   r\   ÚassertIsÚgetattrÚ	_v_lookup)r   ÚCUTÚregistryr   r
   r
   r   Útest_lookup_delegation‘   s
   
ÿz/BaseAdapterRegistryTests.test_lookup_delegationc                 C   s   |   ¡ }|  |jd¡ d S ©Né   )r`   ÚassertEqualÚ_generation©r   rm   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é   )r`   rZ   rM   rq   rr   rk   rK   )r   rm   rL   r
   r
   r   Ú&test__generation_after_calling_changedœ   s
   
z?BaseAdapterRegistryTests.test__generation_after_calling_changedc                 C   s2   G dd„ dt ƒ}|  ¡ }|f|_|  |jd¡ d S )Nc                   @   r   )zQBaseAdapterRegistryTests.test__generation_after_changing___bases__.<locals>._BaseNr   r
   r
   r
   r   Ú_Base¥   r   rx   rv   )rZ   r`   Ú	__bases__rq   rr   )r   rx   rm   r
   r
   r   Ú)test__generation_after_changing___bases__¤   s   zBBaseAdapterRegistryTests.test__generation_after_changing___bases__rv   c                 C   sˆ   |   t|jƒ|¡ |  |j|  ¡ ¡ |  ¡ }|jD ]}|  ||¡ q|   |jd |ƒ ¡ |  |jd |¡ |   t|j|d  ƒd¡ d S ©Nr   rp   )rq   r'   Ú	_adaptersÚassertIsInstancerg   rd   ©r   rm   Ú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 ]}|  ||¡ q|rF|   |jd |ƒ ¡ |  |jd |¡ |   t|j|d  ƒd¡ d S d S r{   )rq   r'   Ú_subscribersr}   rg   rd   r~   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Ú ÚA1rv   rp   )r   r`   Úregisterrq   Ú
registeredrr   r‚   rd   r|   re   Ú	_providedrf   ÚallRegistrations)r   r   r   r   r   r   r   r   r   r   rm   r€   ÚPTrˆ   r
   r
   r   Útest_registerÀ   s.   
ÿÿ
ÿü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 )Nr…   r†   Ú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 )Nr†   rŽ   )r…   r�   )r…   r�   r�   r’   )r…   r‘   r…   r�   r“   r
   ©ÚLr€   ©r   r   r   r   r   r   r
   r   Úbuild_adaptersë   sD   þÿþþûÿÿþÿøÿêzXBaseAdapterRegistryTests.test_register_multiple_allRegistrations.<locals>.build_adaptersr”   r
   c                 S   ó    | d ur| nt ƒ } |  |¡ | S r   ©r<   r;   ©ÚexistingÚnewr
   r
   r   ÚaddValue1  ó   
zRBaseAdapterRegistryTests.test_register_multiple_allRegistrations.<locals>.addValue)r   r`   r‡   rq   r|   rg   rd   ÚsortedrŠ   r‰   r2   Ú_mappingTyper<   Ú_leafSequenceTyper9   Ú_sequenceTyper=   Ú_providedTypeÚ_addValueToLeafÚrebuild)
r   r   r   r   rm   r—   rˆ   Ú	registry2Úargsr�   r
   r–   r   Ú'test_register_multiple_allRegistrationsÚ   sb   'ÿÿ

öþÿz@BaseAdapterRegistryTests.test_register_multiple_allRegistrationsc              	   C   sd   t ƒ \	}}}}}}}}}	|  ¡ }
|  t¡� |
 |g|tƒ d¡ W d   ƒ d S 1 s+w   Y  d S ©Nr†   )r   r`   ÚassertRaisesÚ
ValueErrorr‡   rZ   ©r   r   r   r   r   r   r   r   r   r   rm   r
   r
   r   Útest_register_with_invalid_name?  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 )Nr…   r†   r   )
r   r`   r‡   rq   r'   r|   r}   rg   rf   rŠ   )r   r   r   r   r   r   r   r   r   r   rm   rˆ   r
   r
   r   Ú)test_register_with_value_None_unregistersE  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   r…   rp   )r   r   r   r`   rZ   r‡   rr   rq   r‚   rd   r|   rf   rŠ   )r   r   r   r   r   r   r   r   r   r   r   rm   Ú_valueÚ_beforer€   rˆ   r
   r
   r   Útest_register_with_same_valueO  s0   
ÿÿÿÿ	üz6BaseAdapterRegistryTests.test_register_with_same_valuec                 C   s<   |   ¡ }|  | d gd d¡d ¡ t| ¡ ƒ}|  |g ¡ d S ©Nr…   )r`   rq   rˆ   rf   rŠ   )r   rm   rˆ   r
   r
   r   Útest_registered_emptyl  s   z.BaseAdapterRegistryTests.test_registered_emptyc              	   C   sN   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |gd dd¡ |  |
 |gd d¡d ¡ d S ©Nr…   r†   )r   r`   r‡   rq   rˆ   r¬   r
   r
   r   Útest_registered_non_empty_missr  s   z7BaseAdapterRegistryTests.test_registered_non_empty_missc                 C   s6   |   ¡ }| d gd dd¡ |  | d gd d¡d¡ d S r´   )r`   r‡   rq   rˆ   rs   r
   r
   r   Útest_registered_non_empty_hitx  s   z6BaseAdapterRegistryTests.test_registered_non_empty_hitc                 C   sF   |   ¡ }| d gd d¡ |  | d gd d¡d ¡ |  t|jƒd¡ d S )Nr…   r   )r`   Ú
unregisterrq   rˆ   r'   r‰   rs   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 )Nr…   r†   rp   ©r   r`   r‡   r·   rq   rˆ   r‚   rd   r|   re   r‰   ©r   r   r   r   r   r   r   r   r   r   rm   r€   r‹   r
   r
   r   Ú*test_unregister_non_empty_miss_on_requiredƒ  ó$   
ÿÿÿÿ	
ÿ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 )Nr…   r†   Únonesuchrp   r¹   rº   r
   r
   r   Ú&test_unregister_non_empty_miss_on_name™  r¼   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   r`   rZ   r‡   r·   ri   rˆ   ©r   r   r   r   r   r   r   r   r   r   rm   rL   Ú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 )Nr…   é   ©r   rv   rp   )r   r`   rZ   r‡   r‚   ÚassertInr|   rd   rq   re   r‰   r·   ÚassertNotIn)r   r   r   r   r   r   r   r   r   r   rm   ÚoneÚanotherr€   r‹   r
   r
   r   Ú.test_unregister_hit_clears_empty_subcomponents¸  sF   þÿÿÿ

ÿÿÿÿÿ
	ÿzGBaseAdapterRegistryTests.test_unregister_hit_clears_empty_subcomponentsc                 C   sB   |   ¡ }| d gd d¡ |  | d gd d¡d ¡ | j|dd� d S )Nr…   r   rÃ   )r`   Úunsubscriberq   rˆ   r„   rs   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 )Nrp   r…   r   )r   r`   rZ   Ú	subscriberd   rh   re   r„   rq   rƒ   r‰   rÉ   r'   )r   r   r   r   r   r   r   r   r   r   rm   rL   r€   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)ÚassertIsNot©r   Úleaf1Úleaf2r
   r
   r   ÚassertLeafIdentityý  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 )Nrv   rÃ   rp   r…   r   )r   r`   rZ   rË   r„   rd   rh   re   rq   rƒ   r‰   rÉ   rÑ   r'   )r   r   r   r   r   r   r   r   r   r   rm   ÚfirstÚsecondÚthirdÚfourthr€   r•   r‹   ÚIR0_leaf_origÚNon_leaf_origÚIR0_leaf_newÚNon_leaf_newr
   r
   r   Útest_unsubscribe_after_multiple	  sX   þÿ
ÿþÿ
ÿ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 ©Nrp   r…   rv   r   ©r   r`   rZ   rË   rd   rh   re   rq   rƒ   r‰   rÉ   r'   )r   r   r   r   r   r   r   r   r   r   rm   rÒ   r€   r•   r‹   r
   r
   r   Ú5test_subscribe_unsubscribe_identical_objects_provided=  s(   ÿÿ
ÿ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   rm   rÒ   rÓ   r€   r•   r‹   r
   r
   r   Ú4test_subscribe_unsubscribe_nonequal_objects_providedV  s*   ÿÿ
ÿzMBaseAdapterRegistryTests.test_subscribe_unsubscribe_nonequal_objects_providedc                 C   s:   |   ¡ }|  | d gd d¡¡ t| ¡ ƒ}|  |g ¡ d S r²   )r`   ÚassertIsNoneÚ
subscribedrf   ÚallSubscriptionsrq   )r   rm   rà   r
   r
   r   Útest_subscribed_emptyp  s   z.BaseAdapterRegistryTests.test_subscribed_emptyc              	   C   sv   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |g|d¡ |  |
 |g|d¡¡ |  |
 |g|d¡¡ |  |
 |g|d¡¡ d S )Nr†   r…   )r   r`   rË   rß   rà   r¬   r
   r
   r   Útest_subscribed_non_empty_missv  s   z7BaseAdapterRegistryTests.test_subscribed_non_empty_missc              	   C   sL   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |g|d¡ |  |
 |g|d¡d¡ d S r©   )r   r`   rË   rq   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 )Nrv   rÃ   r   )	r   r`   rZ   rË   r„   rÉ   rq   r'   rƒ   )r   r   r   r   r   r   r   r   r   r   rm   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 )Nr†   rv   rÃ   r…   rp   ©r†   ©
r   r`   rË   r„   rÉ   rq   r'   rƒ   rd   rh   ©r   r   r   r   r   r   r   r   r   r   rm   r€   r•   r
   r
   r   Ú+test_unsubscribe_non_empty_miss_on_required“  ó   ÿÿ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 )Nr†   rv   rÃ   rŽ   rp   r…   ræ   rç   rè   r
   r
   r   Ú(test_unsubscribe_non_empty_miss_on_value¢  rê   zABaseAdapterRegistryTests.test_unsubscribe_non_empty_miss_on_valuec              	   C   sb   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }tƒ }|
 |gd |¡ |
 |gd |¡ |  t|
jƒd¡ d S ru   )r   r`   rZ   rË   rÉ   rq   r'   rƒ   r¿   r
   r
   r   Ú)test_unsubscribe_with_value_not_None_miss±  s   zBBaseAdapterRegistryTests.test_unsubscribe_with_value_not_None_missc                 C   ó   |   d¡ d S )Nz*Example method, not intended to be called.©Úfailr(   r
   r
   r   Ú_instance_method_notify_targetº  r#   z7BaseAdapterRegistryTests._instance_method_notify_targetc              	   C   sl   t ƒ \	}}}}}}}}}	|  ¡ }
|  t|
jƒd¡ |
 |gd | j¡ |
 |gd | j¡ |  t|
jƒd¡ d S ©Nr   )r   r`   rq   r'   rƒ   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 )Nr†   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 )Nr…   r†   rŽ   r�   r’   r
   ©r•   ÚFr€   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_provided  s   þzYBaseAdapterRegistryTests.test_subscribe_multiple_allRegistrations.<locals>.build_providedrø   r
   c                 S   r˜   r   r™   rš   r
   r
   r   r�   (  rž   zSBaseAdapterRegistryTests.test_subscribe_multiple_allRegistrations.<locals>.addValue)r   r`   rË   rq   rƒ   rg   rh   rd   r‰   re   rŸ   rá   r2   r    r<   r¡   r9   r¢   r=   r£   r¤   r¥   )r   r   r   r   rm   rõ   rú   rˆ   r¦   r§   r�   r
   r–   r   Ú(test_subscribe_multiple_allRegistrationsÆ  sp   $ýÿÿ



öýÿzABaseAdapterRegistryTests.test_subscribe_multiple_allRegistrations)rv   ).r   r   r	   ÚmaxDiffrD   r^   r`   rd   re   rg   rh   rn   rt   rw   rz   r‚   r„   rŒ   r¨   r­   r®   r±   r³   rµ   r¶   r¸   r»   r¾   rÁ   rÈ   rÊ   rÌ   rÑ   rÚ   rÝ   rÞ   râ   rã   rä   rå   ré   rë   rì   rð   rò   rû   r
   r
   r
   r   r>   h   sX    


e
	*4		r>   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   ra   r   )r2   r(   r
   r
   r   rd   A  rH   z3CustomTypesBaseAdapterRegistryTests._getMappingTypec                 C   ra   r   )r=   r(   r
   r
   r   re   D  rH   z4CustomTypesBaseAdapterRegistryTests._getProvidedTypec                 C   ra   r   )r9   r(   r
   r
   r   rg   G  rH   z7CustomTypesBaseAdapterRegistryTests._getMutableListTypec                 C   ra   r   )r<   r(   r
   r
   r   rh   J  rH   z8CustomTypesBaseAdapterRegistryTests._getLeafSequenceTypec                    s&   ddl m‰  G ‡ ‡fdd„dˆ ƒ}|S )Nr   r@   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¡   r;   )r   Úexisting_leaf_sequenceÚnew_itemr
   r
   r   r¤   U  s   
zjCustomTypesBaseAdapterRegistryTests._getBaseAdapterRegistry.<locals>.CustomAdapterRegistry._addValueToLeafc                    s*   ˆ   | ||¡}||d d …< ||vsJ ‚|S r   )Ú_removeValueFromLeaf)r   rþ   Ú	to_removeÚwithout_removedr@   r
   r   r   [  s   ýzoCustomTypesBaseAdapterRegistryTests._getBaseAdapterRegistry.<locals>.CustomAdapterRegistry._removeValueFromLeafN)r   r   r	   rd   r    rg   r¢   rh   r¡   re   r£   r¤   r   r
   ©rA   r   r
   r   ÚCustomAdapterRegistryO  s    r  rB   )r   r  r
   r  r   rD   M  s   z;CustomTypesBaseAdapterRegistryTests._getBaseAdapterRegistryc                 C   s   |   ||¡ d S r   )ri   rÎ   r
   r
   r   rÑ   f  s   z6CustomTypesBaseAdapterRegistryTests.assertLeafIdentityN)
r   r   r	   Ú__doc__rd   re   rg   rh   rD   rÑ   r
   r
   r
   r   rý   8  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   r?   )Nr   )ÚLookupBaseFallback)rC   r  )r   r  r
   r
   r   Ú_getFallbackClassl  rE   z)LookupBaseFallbackTests._getFallbackClassNc                    sR   ˆ d u rdd„ ‰ ˆd u rdd„ ‰ˆd u rdd„ ‰G ‡ ‡‡fdd„d|   ¡ ƒ}|ƒ S )	Nc                 S   rF   r   r
   ©r   ÚrequiredrQ   r   r
   r
   r   Ú	uc_lookupv  rH   z3LookupBaseFallbackTests._makeOne.<locals>.uc_lookupc                 S   ó   t ƒ ‚r   ©ÚNotImplementedError©r   r
  rQ   r
   r
   r   Úuc_lookupAlly  ó   z6LookupBaseFallbackTests._makeOne.<locals>.uc_lookupAllc                 S   r  r   r  r  r
   r
   r   Úuc_subscriptions|  r  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  r_   )r   r  r  r  r  r
   r  r   r`   r  s   z LookupBaseFallbackTests._makeOnec                 C   óT   dd„ }| j |d�}|  t¡� | ddtƒ ¡ W d   ƒ d S 1 s#w   Y  d S )Nc                 S   rí   ©NzThis should never be calledrî   r	  r
   r
   r   Ú_lookup…  r#   zCLookupBaseFallbackTests.test_lookup_w_invalid_name.<locals>._lookup©r  ©ÚAÚB)r`   rª   r«   ÚlookuprZ   ©r   r  Úlbr
   r
   r   Útest_lookup_w_invalid_name„  s
   "ÿz2LookupBaseFallbackTests.test_lookup_w_invalid_namec                    óF   g ‰ ‡ fdd„}| j |d�}| ddd¡}|  |¡ |  ˆ dg¡ d S )Nc                    ó   ˆ   |||f¡ d S r   ©r;   r	  ©Ú_called_withr
   r   r  �  rN   zDLookupBaseFallbackTests.test_lookup_miss_no_default.<locals>._lookupr  r  r  ÚC©r  r  r(  )r`   r  rß   rq   ©r   r  r!  Úfoundr
   r&  r   Útest_lookup_miss_no_default‹  ó   
z3LookupBaseFallbackTests.test_lookup_miss_no_defaultc                    óP   g ‰ t ƒ }‡ fdd„}| j|d�}| ddd|¡}|  ||¡ |  ˆ dg¡ d S )Nc                    r$  r   r%  r	  r&  r
   r   r  ˜  rN   zCLookupBaseFallbackTests.test_lookup_miss_w_default.<locals>._lookupr  r  r  r(  r)  ©rZ   r`   r  ri   rq   ©r   Ú_defaultr  r!  r+  r
   r&  r   Útest_lookup_miss_w_default•  ó   z2LookupBaseFallbackTests.test_lookup_miss_w_defaultc                    óz   g ‰ t ƒ t ƒ t ƒ }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}|  ||¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    ó   ˆ   |||f¡ ˆ d¡S rñ   ©r;   Úpopr	  ©r'  Ú_resultsr
   r   r  ¤  ó   
z?LookupBaseFallbackTests.test_lookup_not_cached.<locals>._lookupr  r  r  r(  r)  r/  ©r   ÚaÚbÚcr  r!  r+  r
   r8  r   Útest_lookup_not_cached   ó   
z.LookupBaseFallbackTests.test_lookup_not_cachedc                    óˆ   g ‰ t ƒ t ƒ t ƒ }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}| ddd¡}|  ||¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    r5  rñ   r6  r	  r8  r
   r   r  ±  r:  z;LookupBaseFallbackTests.test_lookup_cached.<locals>._lookupr  r  r  r(  r)  r/  r;  r
   r8  r   Útest_lookup_cached­  ó   
z*LookupBaseFallbackTests.test_lookup_cachedc                    r4  )Nc                    r5  rñ   r6  r	  r8  r
   r   r  ¿  r:  zNLookupBaseFallbackTests.test_lookup_not_cached_multi_required.<locals>._lookupr  ©r  ÚDr  r(  ©rD  r  r(  r/  r;  r
   r8  r   Ú%test_lookup_not_cached_multi_required»  r@  z=LookupBaseFallbackTests.test_lookup_not_cached_multi_requiredc                    rA  )Nc                    r5  rñ   r6  r	  r8  r
   r   r  Ì  r:  zJLookupBaseFallbackTests.test_lookup_cached_multi_required.<locals>._lookupr  rD  r  r(  rF  r/  r;  r
   r8  r   Ú!test_lookup_cached_multi_requiredÈ  rC  z9LookupBaseFallbackTests.test_lookup_cached_multi_requiredc                    ó’   g ‰ t ƒ t ƒ t ƒ }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}| |¡ | ddd¡}|  ||¡ |  ˆ ddg¡ |  ˆ|g¡ d S )Nc                    r5  rñ   r6  r	  r8  r
   r   r  Ú  r:  zMLookupBaseFallbackTests.test_lookup_not_cached_after_changed.<locals>._lookupr  r  r  r(  r)  )rZ   r`   r  rM   ri   rq   r;  r
   r8  r   Ú$test_lookup_not_cached_after_changedÖ  ó   

ÿz<LookupBaseFallbackTests.test_lookup_not_cached_after_changedc                 C   r  )Nc                 S   rí   r  rî   r	  r
   r
   r   r  ç  r#   zDLookupBaseFallbackTests.test_lookup1_w_invalid_name.<locals>._lookupr  r  r  )r`   rª   r«   Úlookup1rZ   r   r
   r
   r   Útest_lookup1_w_invalid_nameæ  s
   "ÿz3LookupBaseFallbackTests.test_lookup1_w_invalid_namec                    r#  )Nc                    r$  r   r%  r	  r&  r
   r   r  ð  rN   zELookupBaseFallbackTests.test_lookup1_miss_no_default.<locals>._lookupr  r  r  r(  r)  )r`   rL  rß   rq   r*  r
   r&  r   Útest_lookup1_miss_no_defaultî  r-  z4LookupBaseFallbackTests.test_lookup1_miss_no_defaultc                    r.  )Nc                    r$  r   r%  r	  r&  r
   r   r  û  rN   zDLookupBaseFallbackTests.test_lookup1_miss_w_default.<locals>._lookupr  r  r  r(  r)  ©rZ   r`   rL  ri   rq   r0  r
   r&  r   Útest_lookup1_miss_w_defaultø  r3  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                    r$  r   r%  r	  r&  r
   r   r    rN   zSLookupBaseFallbackTests.test_lookup1_miss_w_default_negative_cache.<locals>._lookupr  r  r  r(  r)  rO  r0  r
   r&  r   Ú*test_lookup1_miss_w_default_negative_cache  s   zBLookupBaseFallbackTests.test_lookup1_miss_w_default_negative_cachec                    r4  )Nc                    r5  rñ   r6  r	  r8  r
   r   r    r:  z@LookupBaseFallbackTests.test_lookup1_not_cached.<locals>._lookupr  r  r  r(  r)  rO  r;  r
   r8  r   Útest_lookup1_not_cached  r@  z/LookupBaseFallbackTests.test_lookup1_not_cachedc                    rA  )Nc                    r5  rñ   r6  r	  r8  r
   r   r  !  r:  z<LookupBaseFallbackTests.test_lookup1_cached.<locals>._lookupr  r  r  r(  r)  rO  r;  r
   r8  r   Útest_lookup1_cached  rC  z+LookupBaseFallbackTests.test_lookup1_cachedc                    rI  )Nc                    r5  rñ   r6  r	  r8  r
   r   r  /  r:  zNLookupBaseFallbackTests.test_lookup1_not_cached_after_changed.<locals>._lookupr  r  r  r(  r)  )rZ   r`   rL  rM   ri   rq   r;  r
   r8  r   Ú%test_lookup1_not_cached_after_changed+  rK  z=LookupBaseFallbackTests.test_lookup1_not_cached_after_changedc                 C   sV   t ƒ t ƒ }}|  ¡ }|  t¡� | ||t ƒ ¡ W d   ƒ d S 1 s$w   Y  d S r   )rZ   r`   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²   )rZ   r`   rU  rß   )r   rV  rW  r!  r+  r
   r
   r   Ú!test_adapter_hook_miss_no_defaultA  s   z9LookupBaseFallbackTests.test_adapter_hook_miss_no_defaultc                 C   s>   t ƒ t ƒ t ƒ }}}|  ¡ }| ||d|¡}|  ||¡ d S r²   )rZ   r`   rU  ri   )r   rV  rW  r1  r!  r+  r
   r
   r   Ú test_adapter_hook_miss_w_defaultG  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                    ó   ˆ   | ¡ d S r   r%  ©Úcontext©Ú_f_called_withr
   r   Ú_factoryO  r#   zTLookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_None.<locals>._factoryc                    ó   ˆ S r   r
   r	  ©r`  r
   r   r  R  rH   zSLookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_None.<locals>._lookupr  r(  ©rZ   r`   rU  ri   rq   ©r   r  rV  rW  r1  r!  Úadaptedr
   ©r_  r`  r   Ú*test_adapter_hook_hit_factory_returns_NoneM  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 r   r%  r\  ©Ú_adapterr_  r
   r   r`  ]  ó   
zWLookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_adapter.<locals>._factoryc                    ra  r   r
   r	  rb  r
   r   r  `  rH   zVLookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_adapter.<locals>._lookupr  r(  rc  rd  r
   ©rj  r_  r`  r   Ú-test_adapter_hook_hit_factory_returns_adapterZ  ó   zELookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_adapterc                    sd   g ‰ ‡ fdd„‰d‡fdd„	}t t| ƒ}tƒ }| j|d�}| ||¡}|  || ¡ |  ˆ | g¡ d S )Nc                    s   ˆ   | ¡ | S r   r%  r\  r^  r
   r   r`  j  rk  zILookupBaseFallbackTests.test_adapter_hook_super_unwraps.<locals>._factoryr…   c                    ra  r   r
   r	  rb  r
   r   r  m  rH   zHLookupBaseFallbackTests.test_adapter_hook_super_unwraps.<locals>._lookupr  )r…   )Úsuperr  rZ   r`   rU  ri   rq   )r   r  r
  rQ   r!  re  ©Ú	__class__rf  r   Útest_adapter_hook_super_unwrapsh  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                    rh  r   r%  r\  ri  r
   r   r`  y  rk  z;LookupBaseFallbackTests.test_queryAdapter.<locals>._factoryc                    ra  r   r
   r	  rb  r
   r   r  |  rH   z:LookupBaseFallbackTests.test_queryAdapter.<locals>._lookupr  r(  )rZ   r`   ÚqueryAdapterri   rq   rd  r
   rl  r   Útest_queryAdapterv  rn  z)LookupBaseFallbackTests.test_queryAdapterc                    ó\   g ‰ t ƒ t ƒ t ƒ g‰‡ ‡fdd„}| j|d�}| dd¡}|  |tˆƒ¡ |  ˆ dg¡ d S )Nc                    ó   ˆ   ||f¡ tˆƒS r   ©r;   rW   r  r8  r
   r   Ú
_lookupAll‡  ó   zCLookupBaseFallbackTests.test_lookupAll_uncached.<locals>._lookupAll©r  r  r  ©r  r  ©rZ   r`   Ú	lookupAllrq   rW   ©r   rx  r!  r+  r
   r8  r   Útest_lookupAll_uncached„  ó   z/LookupBaseFallbackTests.test_lookupAll_uncachedc                    óh   g ‰ t ƒ t ƒ t ƒ g‰‡ ‡fdd„}| j|d�}| dd¡}| dd¡}|  |tˆƒ¡ |  ˆ dg¡ d S )Nc                    rv  r   rw  r  r8  r
   r   rx  ’  ry  zALookupBaseFallbackTests.test_lookupAll_cached.<locals>._lookupAllrz  r  r  r{  r|  r~  r
   r8  r   Útest_lookupAll_cached�  ó   z-LookupBaseFallbackTests.test_lookupAll_cachedc                    ru  )Nc                    rv  r   rw  r  r8  r
   r   Ú_subscriptionsž  ry  zKLookupBaseFallbackTests.test_subscriptions_uncached.<locals>._subscriptions©r  r  r  r{  ©rZ   r`   Úsubscriptionsrq   rW   ©r   r„  r!  r+  r
   r8  r   Útest_subscriptions_uncached›  r€  z3LookupBaseFallbackTests.test_subscriptions_uncachedc                    r�  )Nc                    rv  r   rw  r  r8  r
   r   r„  ©  ry  zILookupBaseFallbackTests.test_subscriptions_cached.<locals>._subscriptionsr…  r  r  r{  r†  rˆ  r
   r8  r   Útest_subscriptions_cached¦  rƒ  z1LookupBaseFallbackTests.test_subscriptions_cached©NNN)!r   r   r	   r  r^   r`   r"  r,  r2  r?  rB  rG  rH  rJ  rM  rN  rP  rQ  rR  rS  rT  rX  rY  rZ  rg  rm  rr  rt  r  r‚  r‰  rŠ  Ú__classcell__r
   r
   rp  r   r  j  s@    
ÿ

r  c                   @   ó   e Zd Zdd„ ZdS )ÚLookupBaseTestsc                 C   r?   )Nr   )Ú
LookupBase)rC   r�  )r   r�  r
   r
   r   r^   ¶  rE   zLookupBaseTests._getTargetClassN©r   r   r	   r^   r
   r
   r
   r   rŽ  ³  ó    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S )ÚVerifyingBaseFallbackTestsc                 C   r?   )Nr   )ÚVerifyingBaseFallback)rC   r“  )r   r“  r
   r
   r   r  ½  rE   z,VerifyingBaseFallbackTests._getFallbackClassNc                    sd   ˆd u rdd„ ‰ˆd u rdd„ ‰ˆd u rdd„ ‰G ‡ ‡‡‡fdd„d|   ¡ ƒ‰ ˆ |ƒ}| |¡ |S )	Nc                 S   r  r   r  r	  r
   r
   r   r  Ç  r  z6VerifyingBaseFallbackTests._makeOne.<locals>.uc_lookupc                 S   r  r   r  r  r
   r
   r   r  Ê  r  z9VerifyingBaseFallbackTests._makeOne.<locals>.uc_lookupAllc                 S   r  r   r  r  r
   r
   r   r  Í  r  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   )ro  r6   Ú	_registryrs   )r  rq  r
   r   r6   Ó  s   
z=VerifyingBaseFallbackTests._makeOne.<locals>.Derived.__init__)r   r   r	   r  r  r  r6   rŒ  r
   ©r  r  r  r  rp  r   r  Ï  s
    r  )r^   rM   )r   rm   r  r  r  Úderivedr
   r•  r   r`   Ã  s   
z#VerifyingBaseFallbackTests._makeOnec                    s*   G dd„ dt ƒ‰ G ‡ fdd„dƒ}||ƒS )Nc                   @   s   e Zd ZdZdS )z@VerifyingBaseFallbackTests._makeRegistry.<locals>.WithGenerationrp   N)r   r   r	   rr   r
   r
   r
   r   ÚWithGenerationÛ  s    r—  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
   )rS   Úi©r—  r
   r   rV   ß  s    zWVerifyingBaseFallbackTests._makeRegistry.<locals>.Registry.__init__.<locals>.<listcomp>)ÚrangeÚro)r   Údepthr™  r
   r   r6   Þ  s   zCVerifyingBaseFallbackTests._makeRegistry.<locals>.Registry.__init__Nr7   r
   r™  r
   r   ÚRegistryÝ  s    r�  )rZ   )r   rœ  r�  r
   r™  r   Ú_makeRegistryÚ  s   z(VerifyingBaseFallbackTests._makeRegistryc                    óà   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                    r5  rñ   r6  r	  r8  r
   r   r  æ  r:  z7VerifyingBaseFallbackTests.test_lookup.<locals>._lookuprÂ   r  r  r  r(  r)  rp   )rZ   rž  r`   r  ri   rq   r›  rr   ©r   r<  r=  r>  r  rG   r!  r+  r
   r8  r   Útest_lookupâ  ó$   

ÿz&VerifyingBaseFallbackTests.test_lookupc                    rŸ  )
Nc                    r5  rñ   r6  r	  r8  r
   r   r  û  r:  z8VerifyingBaseFallbackTests.test_lookup1.<locals>._lookuprÂ   r  r  r  r(  r)  rp   )rZ   rž  r`   rL  ri   rq   r›  rr   r   r
   r8  r   Útest_lookup1÷  r¢  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                    ra  r   r
   r\  ©r<  r
   r   Ú	_factory1  rH   z?VerifyingBaseFallbackTests.test_adapter_hook.<locals>._factory1c                    ra  r   r
   r\  ©r=  r
   r   Ú	_factory2  rH   z?VerifyingBaseFallbackTests.test_adapter_hook.<locals>._factory2c                    ó   ˆ   d¡ d S r  rî   r\  r(   r
   r   Ú	_factory3  r#   z?VerifyingBaseFallbackTests.test_adapter_hook.<locals>._factory3c                    ó
   ˆ   d¡S rñ   ©r7  r	  ©Ú
_factoriesr
   r   r    r    z=VerifyingBaseFallbackTests.test_adapter_hook.<locals>._lookuprÂ   r  r(  rp   )rZ   rž  r`   rU  ri   r›  rr   ©r   Ú_cr¥  r§  r©  r  rV  rW  r1  rG   r!  re  r
   ©r­  r<  r=  r   r   Útest_adapter_hook  ó    

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                    ra  r   r
   r\  r¤  r
   r   r¥  $  rH   z?VerifyingBaseFallbackTests.test_queryAdapter.<locals>._factory1c                    ra  r   r
   r\  r¦  r
   r   r§  &  rH   z?VerifyingBaseFallbackTests.test_queryAdapter.<locals>._factory2c                    r¨  r  rî   r\  r(   r
   r   r©  (  r#   z?VerifyingBaseFallbackTests.test_queryAdapter.<locals>._factory3c                    rª  rñ   r«  r	  r¬  r
   r   r  +  r    z=VerifyingBaseFallbackTests.test_queryAdapter.<locals>._lookuprÂ   r  r(  rp   )rZ   rž  r`   rs  ri   r›  rr   rU  r®  r
   r°  r   rt  "  r²  z,VerifyingBaseFallbackTests.test_queryAdapterc                    ó¸   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                    ó   t ˆ  d¡ƒS rñ   ©rW   r7  r  ©r9  r
   r   rx  <  r#   z=VerifyingBaseFallbackTests.test_lookupAll.<locals>._lookupAllrÂ   rz  r  r  rp   )rZ   rž  r`   r}  rq   rW   r›  rr   )r   Ú
_results_1Ú
_results_2rx  rG   r!  r+  r
   r¶  r   Útest_lookupAll8  ó   
z)VerifyingBaseFallbackTests.test_lookupAllc                    r³  )Nc                    r´  rñ   rµ  r  r¶  r
   r   r„  L  r#   zEVerifyingBaseFallbackTests.test_subscriptions.<locals>._subscriptionsrÂ   r…  r  r  rp   )rZ   rž  r`   r‡  rq   rW   r›  rr   )r   r·  r¸  r„  rG   r!  r+  r
   r¶  r   Útest_subscriptionsH  rº  z-VerifyingBaseFallbackTests.test_subscriptionsr‹  )r   r   r	   r  r^   r`   rž  r¡  r£  r±  rt  r¹  r»  r
   r
   r
   r   r’  »  s    
ÿr’  c                   @   r�  )ÚVerifyingBaseTestsc                 C   r?   )Nr   )ÚVerifyingBase)rC   r½  )r   r½  r
   r
   r   r^   \  rE   z"VerifyingBaseTests._getTargetClassNr�  r
   r
   r
   r   r¼  Y  r‘  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‡ 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   r?   )Nr   )ÚAdapterLookupBase)rC   r¿  )r   r¿  r
   r
   r   r^   c  rE   z&AdapterLookupBaseTests._getTargetClassc                 C   s   |   ¡ |ƒS r   r_   rs   r
   r
   r   r`   g  r%   zAdapterLookupBaseTests._makeOnec                 G   s   G dd„ dƒ}|ƒ S )Nc                   @   r�  )z<AdapterLookupBaseTests._makeSubregistry.<locals>.Subregistryc                 S   s   g | _ g | _d S r   )r|   rƒ   r(   r
   r
   r   r6   l  ó   
zEAdapterLookupBaseTests._makeSubregistry.<locals>.Subregistry.__init__Nr7   r
   r
   r
   r   ÚSubregistryk  ó    rÁ  r
   )r   rQ   rÁ  r
   r
   r   Ú_makeSubregistryj  s   z'AdapterLookupBaseTests._makeSubregistryc                 G   s   G dd„ dƒ}||ƒS )Nc                   @   r�  )z6AdapterLookupBaseTests._makeRegistry.<locals>.Registryc                 S   s   || _ g | _d S r   )r‰   r›  rP   r
   r
   r   r6   s  rÀ  z?AdapterLookupBaseTests._makeRegistry.<locals>.Registry.__init__Nr7   r
   r
   r
   r   r�  r  rÂ  r�  r
   )r   rQ   r�  r
   r
   r   rž  q  s   z$AdapterLookupBaseTests._makeRegistryc                 C   s$   |   ¡ }|  |¡}|  |ji ¡ d S r   )rž  r`   rq   rO   )r   rm   Úalbr
   r
   r   Útest_ctor_empty_registryx  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.interfacerÈ  rž  r`   rq   rŸ   rO   Úkeys©r   r   rÈ  rÉ  rÊ  rm   rÄ  r
   r
   r   Útest_ctor_w_registry_provided}  s   
ÿ
ÿz4AdapterLookupBaseTests.test_ctor_w_registry_providedc                 C   sD   G dd„ dt ƒ}G dd„ d|  ¡ |ƒ}|  ¡ }||ƒ}| |¡ d S )Nc                   @   r�  )zAAdapterLookupBaseTests.test_changed_empty_required.<locals>.Mixinc                 W   rF   r   r
   r,   r
   r
   r   rM   Ž  rH   zIAdapterLookupBaseTests.test_changed_empty_required.<locals>.Mixin.changedN©r   r   r	   rM   r
   r
   r
   r   ÚMixin�  rÂ  rÐ  c                   @   r   )zCAdapterLookupBaseTests.test_changed_empty_required.<locals>.DerivedNr   r
   r
   r
   r   r  �  r   r  )rZ   r^   rž  rM   )r   rÐ  r  rm   rÄ  r
   r
   r   Útest_changed_empty_required‹  s
   z2AdapterLookupBaseTests.test_changed_empty_requiredc                 C   s¦   G dd„ dt ƒ}G dd„ d|  ¡ |ƒ}G dd„ dt ƒ}|dƒ}|dƒ}|  ¡ }||ƒ}d	|j|< d	|j|< | |¡ |  t|jƒd
¡ |  |jd ¡ |  |j|¡ d S )Nc                   @   r�  )z=AdapterLookupBaseTests.test_changed_w_required.<locals>.Mixinc                 W   rF   r   r
   r,   r
   r
   r   rM   ™  rH   zEAdapterLookupBaseTests.test_changed_w_required.<locals>.Mixin.changedNrÏ  r
   r
   r
   r   rÐ  ˜  rÂ  rÐ  c                   @   r   )z?AdapterLookupBaseTests.test_changed_w_required.<locals>.DerivedNr   r
   r
   r
   r   r  ›  r   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   ó
   || _ d S r   ©Ú_here)r   Úherer
   r
   r   r6   Ÿ  r    zLAdapterLookupBaseTests.test_changed_w_required.<locals>.FauxWeakref.__init__c                 S   s   | j r| S d S r   rÓ  r(   r
   r
   r   Ú__call__¡  r#   zLAdapterLookupBaseTests.test_changed_w_required.<locals>.FauxWeakref.__call__c                 S   rÒ  r   )Ú_unsub)r   Útargetr
   r
   r   rÉ   £  r    zOAdapterLookupBaseTests.test_changed_w_required.<locals>.FauxWeakref.unsubscribe)r   r   r	   r×  r6   rÖ  rÉ   r
   r
   r
   r   ÚFauxWeakref�  s
    rÙ  FTrp   r   )rZ   r^   rž  Ú	_requiredrM   rq   r'   r×  )r   rÐ  r  rÙ  ÚgonerÕ  rm   rÄ  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 rÆ  )r   r   rË  rÈ  rž  r`   r‰   Úinit_extendorsrq   rŸ   rO   rÌ  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 rÆ  )r   r   rË  rÈ  rž  r`   rR   rq   rŸ   rO   rÌ  rÍ  r
   r
   r   Útest_add_extendorÀ  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 rÆ  )r   r   rË  rÈ  rž  r`   rX   rq   rŸ   rO   rÌ  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   rÇ  rÉ  rÊ  rp   )
rË  rÈ  rž  r`   r  rq   r'   rÚ  rÄ   Úweakref©r   rÈ  rÉ  rÊ  rm   rÄ  Úresultr
   r
   r   Útest__uncached_lookup_empty_roá  ó   
z5AdapterLookupBaseTests.test__uncached_lookup_empty_roc                 C   sh   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }|j |¡ |  |¡}| |f|¡}|  |d ¡ d S ©Nr   rÇ  rÉ  rÊ  )	rË  rÈ  rž  rÃ  r›  r;   r`   r  rq   ©r   rÈ  rÉ  rÊ  rm   ÚsubrrÄ  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ç  )rË  rÈ  rž  rÃ  r|   r›  r;   r`   rk   r  rq   rè  r
   r
   r   Ú$test__uncached_lookup_extendors_miss÷  ó   

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   rÇ  rÉ  rÊ  ÚIQuxr…   ©rË  rÈ  rž  rÃ  rZ   r|   r›  r;   r`   rk   r  rq   ©
r   rÈ  rÉ  rÊ  rî  rm   ré  Ú
irrelevantrÄ  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   rÇ  rÉ  rÊ  Ú	wrongnamerï  ©	r   rÈ  rÉ  rÊ  rm   ré  rô  rÄ  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   rÇ  rÉ  rÊ  r…   ©rË  rÈ  rž  rÃ  rZ   r|   r›  r;   r`   rk   r  ri   )	r   rÈ  rÉ  rÊ  rm   ré  Ú	_expectedrÄ  rä  r
   r
   r   Ú test__uncached_lookup_simple_hit*  ó   þ
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   rÈ  rÉ  rÊ  rm   ré  rù  rÄ  rä  Ú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tƒƒ}|ƒ }|  ¡ }|  ¡ }i i g|_|j 	|¡ |  
|¡}	|	j|	_|	|_tƒ }
|	j|f||
d�}|  ||
¡ d S )	Nr   ©ÚimplementerrÇ  rÉ  rÊ  c                   @   r   )zFAdapterLookupBaseTests.test_queryMultiAdaptor_lookup_miss.<locals>.FooNr   r
   r
   r
   r   ÚFooS  ó    r   ©Údefault)Úzope.interface.declarationsrÿ  rË  rÈ  rZ   rž  rÃ  r|   r›  r;   r`   r  r  rk   ÚqueryMultiAdapterri   )r   rÿ  rÈ  rÉ  rÊ  r   Úfoorm   ré  rÄ  r1  rä  r
   r
   r   Ú"test_queryMultiAdaptor_lookup_missN  s&   þ
z9AdapterLookupBaseTests.test_queryMultiAdaptor_lookup_missc                    sl   ddl m} ddlm} |dƒ‰ |  ¡ }|  |¡‰ˆjˆ_‡ ‡fdd„}tt	u}|j
| ||r0dndd	� d S )
Nr   rÇ  )ÚMissingSomeAttrsrÉ  c                    s   ˆ  | fˆ ¡S r   )r  )Úob©rÉ  rÄ  r
   r   Útestr  s   þzVAdapterLookupBaseTests.test_queryMultiAdapter_errors_on_attribute_access.<locals>.testrq  Ú__providedBy__)Úexpected_missing)rË  rÈ  Úzope.interface.testsr  rž  r`   r  r  ÚstrÚbytesÚtest_raises)r   rÈ  r  rm   r  ÚPY3r
   r
  r   Ú1test_queryMultiAdapter_errors_on_attribute_accesse  s   


ÿzHAdapterLookupBaseTests.test_queryMultiAdapter_errors_on_attribute_accessc                    sä   ddl m} ddlm} |dƒ}|d|fƒ}||ƒG dd„ dtƒƒ}|ƒ }|  ||¡}|  ¡ }tƒ }	g ‰ ‡ fdd	„}
i ||d
|
iiig|_|j 	|¡ |  
|¡}|j|_||_tƒ }|j|f||d�}|  ||¡ |  ˆ |g¡ d S )Nr   rþ  rÇ  rÉ  rÊ  c                   @   r   )zGAdapterLookupBaseTests.test_queryMultiAdaptor_factory_miss.<locals>.FooNr   r
   r
   r
   r   r   �  r  r   c                    r[  r   r%  r\  r&  r
   r   r`  ‰  r#   zLAdapterLookupBaseTests.test_queryMultiAdaptor_factory_miss.<locals>._factoryr…   r  ©r  rÿ  rË  rÈ  rZ   rž  rÃ  r|   r›  r;   r`   r  r  rk   r  ri   rq   )r   rÿ  rÈ  rÉ  rÊ  r   r  rm   ré  rù  r`  rÄ  r1  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ƒƒ}|ƒ }|  ||¡}|  ¡ }tƒ ‰g ‰ ‡ ‡fdd	„}	i ||d
|	iiig|_|j 	|¡ |  
|¡}
|
j|
_|
|_tƒ }|
j|f||d�}|  |ˆ¡ |  ˆ |g¡ d S )Nr   rþ  rÇ  rÉ  rÊ  c                   @   r   )zFAdapterLookupBaseTests.test_queryMultiAdaptor_factory_hit.<locals>.FooNr   r
   r
   r
   r   r   ž  r  r   c                    s   ˆ   | ¡ ˆS r   r%  r\  ©r'  rù  r
   r   r`  ¦  rk  zKAdapterLookupBaseTests.test_queryMultiAdaptor_factory_hit.<locals>._factoryr…   r  r  )r   rÿ  rÈ  rÉ  rÊ  r   r  rm   ré  r`  rÄ  r1  rä  r
   r  r   Ú"test_queryMultiAdaptor_factory_hit™  s.   þ
z9AdapterLookupBaseTests.test_queryMultiAdaptor_factory_hitc                    sd   |   |  ¡ ¡}‡ fdd„}dd„ ‰ ||_tt| ƒddtt| ƒg}| |d ¡}|  || dd| f¡ d S )Nc                     ra  r   r
   ©r§   ©Úfactoryr
   r   r  ¸  rH   zKAdapterLookupBaseTests.test_queryMultiAdapter_super_unwraps.<locals>.lookupc                  W   s   | S r   r
   r  r
   r
   r   r  º  rH   zLAdapterLookupBaseTests.test_queryMultiAdapter_super_unwraps.<locals>.factoryé*   Úabc)r`   rž  r  ro  r¾  r  rq   )r   rÄ  r  Úobjectsrä  rp  r  r   Ú$test_queryMultiAdapter_super_unwraps¶  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   rÇ  rÉ  rÊ  r
   rp   )
rË  rÈ  rž  r`   r  rq   r'   rÚ  rÄ   râ  rã  r
   r
   r   Ú!test__uncached_lookupAll_empty_roÍ  ræ  z8AdapterLookupBaseTests.test__uncached_lookupAll_empty_roc                 C   sn   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }|j |¡ |  |¡}||_| |f|¡}|  	|d¡ d S ©Nr   rÇ  rÉ  rÊ  r
   )
rË  rÈ  rž  rÃ  r›  r;   r`   rk   r  rq   rè  r
   r
   r   Ú#test__uncached_lookupAll_order_missØ  ó   
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   )rË  rÈ  rž  rÃ  r|   r›  r;   r`   rk   r  rq   rè  r
   r
   r   Ú'test__uncached_lookupAll_extendors_missä  rì  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   rÇ  rÉ  rÊ  rî  r…   r
   )rË  rÈ  rž  rÃ  rZ   r|   r›  r;   r`   rk   r  rq   rð  r
   r
   r   Ú(test__uncached_lookupAll_components_missñ  ó   þ
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   rÇ  rÉ  rÊ  )r…   Únamedr…   r'  )rË  rÈ  rž  rÃ  rZ   r|   r›  r;   r`   rk   r  rq   rŸ   ©
r   rÈ  rÉ  rÊ  rm   ré  rù  Ú_namedrÄ  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&  )rË  rÈ  rž  rÃ  rZ   r|   r›  r;   r`   r  r}  rk   Únamesrq   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á  )
rË  rÈ  rž  r`   r  rq   r'   rÚ  rÄ   râ  rã  r
   r
   r   Ú%test__uncached_subscriptions_empty_ro(  ræ  z<AdapterLookupBaseTests.test__uncached_subscriptions_empty_roc                 C   sn   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }|j |¡ |  |¡}||_| |f|¡}|  	|g ¡ d S rç  )
rË  rÈ  rž  rÃ  r›  r;   r`   rk   r  rq   rè  r
   r
   r   Ú'test__uncached_subscriptions_order_miss3  r"  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ç  )rË  rÈ  rž  rÃ  rƒ   r›  r;   r`   rk   r  rq   rè  r
   r
   r   Ú+test__uncached_subscriptions_extendors_miss?  rì  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í  ©rË  rÈ  rž  rÃ  rZ   rƒ   r›  r;   r`   rk   r  rq   rð  r
   r
   r   Ú8test__uncached_subscriptions_components_miss_wrong_ifaceL  r%  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ó  r0  rõ  r
   r
   r   Ú7test__uncached_subscriptions_components_miss_wrong_name^  rû  zNAdapterLookupBaseTests.test__uncached_subscriptions_components_miss_wrong_namec                 C   s²   ddl m} |dƒ}|d|fƒ}|  ||¡}|  ¡ }G dd„ dtƒ}|ƒ |ƒ }}i ||d||fiiig|_|j |¡ |  |¡}	|	|_	|	 
|f|¡}
|  t|
ƒt||gƒ¡ d S )Nr   rÇ  rÉ  rÊ  c                   @   r�  )zKAdapterLookupBaseTests.test__uncached_subscriptions_simple_hit.<locals>.Fooc                 S   s   dS )NTr
   r,   r
   r
   r   Ú__lt__v  rH   zRAdapterLookupBaseTests.test__uncached_subscriptions_simple_hit.<locals>.Foo.__lt__N)r   r   r	   r3  r
   r
   r
   r   r   u  rÂ  r   r…   )rË  rÈ  rž  rÃ  rZ   rƒ   r›  r;   r`   rk   r  rq   rŸ   )r   rÈ  rÉ  rÊ  rm   ré  r   Ú_exp1Ú_exp2rÄ  rä  r
   r
   r   Ú'test__uncached_subscriptions_simple_hito  s   þ
z>AdapterLookupBaseTests.test__uncached_subscriptions_simple_hitc                    sø   ddl m} ddlm} |dƒ}|d|fƒ}||ƒG dd„ dtƒƒ}|ƒ }|  ||¡}|  ||¡}|  ¡ }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þ  rÇ  rÉ  rÊ  c                   @   r   )z@AdapterLookupBaseTests.test_subscribers_wo_provided.<locals>.FooNr   r
   r
   r
   r   r   ˆ  r  r   c                    ó   ˆ   dg ¡ | ¡ d S ©Nr¥  ©Ú
setdefaultr;   r\  ©Ú_calledr
   r   r¥  �  ó   zFAdapterLookupBaseTests.test_subscribers_wo_provided.<locals>._factory1c                    r7  ©Nr§  r9  r\  r;  r
   r   r§  ’  r=  zFAdapterLookupBaseTests.test_subscribers_wo_provided.<locals>._factory2r…   r
   )r¥  r§  ©r  rÿ  rË  rÈ  rZ   rž  rÃ  rƒ   r›  r;   r`   r  r‡  rk   Úsubscribersrq   )r   rÿ  rÈ  rÉ  rÊ  r   r  rm   ré  r¥  r§  rÄ  rä  r
   r;  r   Útest_subscribers_wo_providedƒ  s.   þ
z3AdapterLookupBaseTests.test_subscribers_wo_providedc                    s   ddl m} ddlm} |dƒ}|d|fƒ}||ƒG dd„ dtƒƒ}|ƒ }|  ||¡}|  ||¡}|  ¡ }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þ  rÇ  rÉ  rÊ  c                   @   r   )z?AdapterLookupBaseTests.test_subscribers_w_provided.<locals>.FooNr   r
   r
   r
   r   r   ¥  r  r   c                    ó   ˆ   dg ¡ | ¡ ˆS r8  r9  r\  )r<  r4  r
   r   r¥  ®  ó   zEAdapterLookupBaseTests.test_subscribers_w_provided.<locals>._factory1c                    rB  r>  r9  r\  )r<  r5  r
   r   r§  ±  rC  zEAdapterLookupBaseTests.test_subscribers_w_provided.<locals>._factory2c                    r7  )NÚ_side_effect_onlyr9  r\  r;  r
   r   rD  ´  r=  zMAdapterLookupBaseTests.test_subscribers_w_provided.<locals>._side_effect_onlyr…   )r¥  r§  rD  r?  )r   rÿ  rÈ  rÉ  rÊ  r   r  rm   ré  r¥  r§  rD  rÄ  rä  r
   )r<  r4  r5  r   Útest_subscribers_w_provided   s<   þ
þÿz2AdapterLookupBaseTests.test_subscribers_w_provided))r   r   r	   r^   r`   rÃ  rž  rÅ  rÎ  rÑ  rÜ  rÞ  rß  rà  rå  rê  rë  rò  rö  rú  rý  r  r  r  r  r  r  r!  r#  r$  r*  r,  r-  r.  r/  r1  r2  r6  rA  rE  rŒ  r
   r
   rp  r   r¾  a  sL    r¾  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚVerifyingAdapterRegistryTestsc                 C   r?   )Nr   )ÚVerifyingAdapterRegistry)rC   rG  )r   rG  r
   r
   r   r^   Ï  rE   z-VerifyingAdapterRegistryTests._getTargetClassc                 O   s   |   ¡ |i |¤ŽS r   r_   )r   r§   Úkwr
   r
   r   r`   Ó  s   z&VerifyingAdapterRegistryTests._makeOnec                 C   s.   ddl m} ddlm} |  ¡ }|||ƒ d S )Nr   )ÚverifyObject)ÚIAdapterRegistry)Úzope.interface.verifyrI  Úzope.interface.interfacesrJ  r`   )r   rI  rJ  rm   r
   r
   r   Ú,test_verify_object_provides_IAdapterRegistryÖ  s   zJVerifyingAdapterRegistryTests.test_verify_object_provides_IAdapterRegistryN)r   r   r	   r^   r`   rM  r
   r
   r
   r   rF  È  s    rF  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   r?   )Nr   )ÚAdapterRegistry)rC   rO  )r   rO  r
   r
   r   r^   ß  rE   z$AdapterRegistryTests._getTargetClassc                 C   s   |   ¡ }|  t|jƒd¡ d S rñ   )r`   rq   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 r{   )r`   rq   r'   rP  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 r{   ©r`   ry   rq   r'   rP  rÄ   ©r   ÚbeforeÚafterrT  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 )Nry   r   rp   )r`   Ú__dict__r;   ry   rq   r'   rP  rÄ   )r   rX  ÚstrayrY  rT  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 ro   rV  rW  r
   r
   r   Ú*test__setBases_w_existing_entry_continuing  s   
z?AdapterRegistryTests.test__setBases_w_existing_entry_continuingc                 C   sj   |   ¡ }G dd„ dtƒ}|ƒ |ƒ }}| |¡ | |¡ 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   rÒ  r   rJ   )r   Úoriginally_changedr
   r
   r   rM     r    zJAdapterRegistryTests.test_changed_w_subregistries.<locals>.Derived.changed)r   r   r	   rK   rM   r
   r
   r
   r   r    s    r  )r`   rZ   Ú_addSubregistryrM   ri   rK   )r   rS  r  Úderived1Úderived2rL   r
   r
   r   Útest_changed_w_subregistries  s   


z1AdapterRegistryTests.test_changed_w_subregistriesN)
r   r   r	   r^   rR  rU  rZ  r]  r^  rc  r
   r
   r
   r   rN  Ý  s    		
rN  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   )rC   rf  rË  r   ri   )r   rf  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   re  )rC   rf  rZ   ri   )r   rf  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   strr  )rC   rj  rq   r}   r+   )r   rj  ÚSTRÚUNICODEÚ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   ri  Úustr)rC   rj  rq   )r   rj  ÚUSTRr
   r
   r   Útest__normalize_name_unicode1  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   ri  rp   g      ð?r
   )rC   rj  rZ   rª   Ú	TypeError)r   rj  r-   r
   r
   r   Útest__normalize_name_other7  s   ÿz%Test_utils.test__normalize_name_otherN)r   r   r	   rg  rh  rn  rq  rs  r
   r
   r
   r   rd    s    rd  )r  Úunittestr  r   r   rZ   r   r2   r9   r<   r=   ÚTestCaser>   rý   r  rŽ  r’  r¼  r¾  rF  rN  rd  r
   r
   r
   r   Ú<module>   sF   	     U2  Kÿ ÿ    k@