U
    ÈZjÖÙ  ã                   @   s¤   d Z ddlZdd„ ZG dd„ dejƒZG dd„ dejƒZG d	d
„ d
eƒZG dd„ dejƒZG dd„ deƒZG dd„ dejƒZ	G dd„ dejƒZ
G dd„ dejƒZdS )zAdapter registry tests
é    Nc            
   	   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   úd/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/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	   ÚIR0   s    r   c                   @   s   e Zd ZdS )z_makeInterfaces.<locals>.IR1Nr   r   r   r   r	   ÚIR1    s    r   )Úzope.interfacer   )
r   r
   r   r   r   r   r   r   r   r   r   r   r	   Ú_makeInterfaces   s    r   c                   @   sä   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7S )8ÚBaseAdapterRegistryTestsc                 C   s<   ddl m} G dd„ d|ƒ}|jD ]}t|j|tƒ ƒ q"|S )Nr   )ÚBaseAdapterRegistryc                   @   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   s   d S ©Nr   )ÚselfÚregr   r   r	   Ú__init__,   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_extendor0   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©r!   r   r	   Ú
<listcomp>3   s    ÿzfBaseAdapterRegistryTests._getTargetClass.<locals>._CUT.LookupClass.remove_extendor.<locals>.<listcomp>)Útupler   r    r   r%   r	   Úremove_extendor2   s    zRBaseAdapterRegistryTests._getTargetClass.<locals>._CUT.LookupClass.remove_extendorN)	r   r   r   r   r   r   r   r"   r(   r   r   r   r	   ÚLookupClass*   s
   r)   N)r   r   r   Úobjectr)   r   r   r   r	   Ú_CUT)   s   r+   )Úzope.interface.adapterr   Ú
_delegatedÚsetattrr)   r*   )r   r   r+   Únamer   r   r	   Ú_getTargetClass'   s
    
z(BaseAdapterRegistryTests._getTargetClassc                 C   s
   |   ¡ ƒ S r   ©r0   ©r   r   r   r	   Ú_makeOne9   s    z!BaseAdapterRegistryTests._makeOnec                 C   s:   |   ¡ }|ƒ }|jD ] }|  t||ƒt|j|ƒk¡ qd S r   )r0   r-   Ú
assertTrueÚ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é   )r3   ÚassertEqualÚ_generation©r   r7   r   r   r	   Ú"test__generation_on_first_creationC   s    z;BaseAdapterRegistryTests.test__generation_on_first_creationc                 C   s>   |   ¡ }tƒ }| |¡ |  |jd¡ |  |jj||f¡ d S ©Né   )r3   r*   r   r;   r<   r6   r   )r   r7   r   r   r   r	   Ú&test__generation_after_calling_changedH   s
    
z?BaseAdapterRegistryTests.test__generation_after_calling_changedc                 C   s2   G dd„ dt ƒ}|  ¡ }|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	   Ú_BaseQ   s    rB   r@   )r*   r3   Ú	__bases__r;   r<   )r   rB   r7   r   r   r	   Ú)test__generation_after_changing___bases__P   s    zBBaseAdapterRegistryTests.test__generation_after_changing___bases__c              	   C   sn   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |g|dd¡ |  |
 |g|d¡d¡ |  t|
jƒd¡ |  |
jd¡ d S )NÚ ÚA1r@   )r   r3   Úregisterr;   Ú
registeredÚlenÚ	_adaptersr<   ©r   r
   r   r   r   r   r   r   r   r   r7   r   r   r	   Útest_registerV   s    z&BaseAdapterRegistryTests.test_registerc              	   C   sN   t ƒ \	}}}}}}}}}	|  ¡ }
|  t¡� |
 |g|tƒ d¡ W 5 Q R X d S )NrF   )r   r3   ÚassertRaisesÚ
ValueErrorrG   r*   rK   r   r   r	   Útest_register_with_invalid_name^   s    z8BaseAdapterRegistryTests.test_register_with_invalid_namec              	   C   sZ   t ƒ \	}}}}}}}}}	|  ¡ }
|
 d g|dd¡ |
 d g|dd ¡ |  t|
jƒd¡ d S )NrE   rF   r   )r   r3   rG   r;   rI   rJ   rK   r   r   r	   Ú)test_register_with_value_None_unregistersd   s
    zBBaseAdapterRegistryTests.test_register_with_value_None_unregistersc              	   C   sb   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }|
 d g|d|¡ |
j}|
 d g|d|¡ |  |
j|¡ d S ©NrE   )r   r3   r*   rG   r<   r;   )r   r
   r   r   r   r   r   r   r   r   r7   Ú_valueZ_beforer   r   r	   Útest_register_with_same_valuek   s    z6BaseAdapterRegistryTests.test_register_with_same_valuec                 C   s$   |   ¡ }|  | d gd d¡d ¡ d S rQ   )r3   r;   rH   r=   r   r   r	   Útest_registered_emptyt   s    z.BaseAdapterRegistryTests.test_registered_emptyc              	   C   sN   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |gd dd¡ |  |
 |gd d¡d ¡ d S ©NrE   rF   )r   r3   rG   r;   rH   rK   r   r   r	   Útest_registered_non_empty_missx   s    z7BaseAdapterRegistryTests.test_registered_non_empty_missc                 C   s6   |   ¡ }| d gd dd¡ |  | d gd d¡d¡ d S rU   )r3   rG   r;   rH   r=   r   r   r	   Útest_registered_non_empty_hit~   s    z6BaseAdapterRegistryTests.test_registered_non_empty_hitc                 C   s4   |   ¡ }| d gd d¡ |  | d gd d¡d ¡ d S rQ   )r3   Ú
unregisterr;   rH   r=   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¡ d S rU   ©r   r3   rG   rX   r;   rH   rK   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¡ d S )NrE   rF   ZnonesuchrZ   rK   r   r   r	   Ú&test_unregister_non_empty_miss_on_name�   s
    z?BaseAdapterRegistryTests.test_unregister_non_empty_miss_on_namec              	   C   sn   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }tƒ }|
 |gd d|¡ |
 |gd d|¡ |  |
 |gd d¡|k¡ d S rQ   )r   r3   r*   rG   rX   r4   rH   ©r   r
   r   r   r   r   r   r   r   r   r7   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 | k¡ |  ||
jd | k¡ |
 ||gd d|¡ |  ||
jd | k¡ |  ||
jd | k¡ d S )NrE   r@   )r   r3   r*   rG   r4   rJ   rX   ZassertFalse)r   r
   r   r   r   r   r   r   r   r   r7   ÚoneZanotherr   r   r	   Ú.test_unregister_hit_clears_empty_subcomponentsŸ   s    zGBaseAdapterRegistryTests.test_unregister_hit_clears_empty_subcomponentsc                 C   s4   |   ¡ }| d gd d¡ |  | d gd d¡d ¡ d S rQ   )r3   Úunsubscriber;   rH   r=   r   r   r	   Útest_unsubscribe_empty¬   s    z/BaseAdapterRegistryTests.test_unsubscribe_emptyc              	   C   s\   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }|
 |gd |¡ |
 |gd |¡ |  t|
jƒd¡ d S ©Nr   ©r   r3   r*   Ú	subscribera   r;   rI   Ú_subscribers)r   r
   r   r   r   r   r   r   r   r   r7   r   r   r   r	   Útest_unsubscribe_hit±   s    z-BaseAdapterRegistryTests.test_unsubscribe_hitc              	   C   sÎ   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }tƒ }tƒ }tƒ }|
 |gd |¡ |
 |gd |¡ |
 |g||¡ |
 |g||¡ |
 |g||¡ |
 |g||¡ |
 |gd |¡ |
 |gd |¡ |  t|
jƒd¡ d S rc   rd   )r   r
   r   r   r   r   r   r   r   r   r7   ÚfirstÚsecondÚthirdZfourthr   r   r	   Útest_unsubscribe_after_multiple¹   s    z8BaseAdapterRegistryTests.test_unsubscribe_after_multiplec              	   C   sv   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }tƒ }tƒ }|
 |gd |¡ |
 |gd |¡ |
 |gd ¡ |  t|
jƒd¡ d S rc   rd   )r   r
   r   r   r   r   r   r   r   r   r7   rh   ri   rj   r   r   r	   Ú&test_unsubscribe_w_None_after_multipleÊ   s    z?BaseAdapterRegistryTests.test_unsubscribe_w_None_after_multiplec              	   C   sh   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |gd d¡ |  t|
jƒd¡ |
 |gd d¡ |  t|
jƒd¡ d S )NrF   r@   rE   ©r   r3   re   r;   rI   rf   ra   rK   r   r   r	   Ú+test_unsubscribe_non_empty_miss_on_requiredÕ   s    zDBaseAdapterRegistryTests.test_unsubscribe_non_empty_miss_on_requiredc              	   C   sh   t ƒ \	}}}}}}}}}	|  ¡ }
|
 |gd d¡ |  t|
jƒd¡ |
 |gd d¡ |  t|
jƒd¡ d S )NrF   r@   ÚA2rm   rK   r   r   r	   Ú(test_unsubscribe_non_empty_miss_on_valueÝ   s    zABaseAdapterRegistryTests.test_unsubscribe_non_empty_miss_on_valuec              	   C   sb   t ƒ \	}}}}}}}}}	|  ¡ }
tƒ }tƒ }|
 |gd |¡ |
 |gd |¡ |  t|
jƒd¡ d S r?   rd   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failr2   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 rc   )r   r3   r;   rI   rf   re   rs   ra   rK   r   r   r	   Ú test_unsubscribe_instance_methodñ   s    z9BaseAdapterRegistryTests.test_unsubscribe_instance_methodN)r   r   r   r0   r3   r8   r>   rA   rD   rL   rO   rP   rS   rT   rV   rW   rY   r[   r\   r^   r`   rb   rg   rk   rl   rn   rp   rq   rs   rt   r   r   r   r	   r   %   s6   			r   c                   @   sæ   e Zd Zdd„ Zd8d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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ ZdS )9ÚLookupBaseFallbackTestsc                 C   s   ddl m} |S ©Nr   )ÚLookupBaseFallback)r,   rw   )r   rw   r   r   r	   r0   ü   s    z'LookupBaseFallbackTests._getTargetClassNc                    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   Úrequiredr!   r/   r   r   r	   Ú	uc_lookup  s    z3LookupBaseFallbackTests._makeOne.<locals>.uc_lookupc                 S   s
   t ƒ ‚d S r   ©ÚNotImplementedError©r   ry   r!   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   ©rz   r~   r   r   r	   ÚDerived  s   r„   r1   )r   rz   r~   r   r„   r   rƒ   r	   r3      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 calledrr   rx   r   r   r	   Ú_lookup  s    zCLookupBaseFallbackTests.test_lookup_w_invalid_name.<locals>._lookup©rz   ©ÚAÚB)r3   rM   rN   Úlookupr*   ©r   r†   Úlbr   r   r	   Útest_lookup_w_invalid_name  s    z2LookupBaseFallbackTests.test_lookup_w_invalid_namec                    sJ   g ‰ ‡ fdd„}| j |d�}| ddd¡}|  |d k¡ |  ˆ dg¡ d S )Nc                    s   ˆ   |||f¡ d S r   ©Úappendrx   ©Ú_called_withr   r	   r†     s    zDLookupBaseFallbackTests.test_lookup_miss_no_default.<locals>._lookupr‡   rˆ   rŠ   ÚC©rˆ   rŠ   r“   )r3   r‹   r4   r;   ©r   r†   r�   Úfoundr   r‘   r	   Útest_lookup_miss_no_default  s    z3LookupBaseFallbackTests.test_lookup_miss_no_defaultc                    sR   g ‰ t ƒ }‡ fdd„}| j|d�}| ddd|¡}|  ||k¡ |  ˆ dg¡ d S )Nc                    s   ˆ   |||f¡ d S r   r�   rx   r‘   r   r	   r†   %  s    zCLookupBaseFallbackTests.test_lookup_miss_w_default.<locals>._lookupr‡   rˆ   rŠ   r“   r”   ©r*   r3   r‹   r4   r;   ©r   Ú_defaultr†   r�   r–   r   r‘   r	   Útest_lookup_miss_w_default"  s    z2LookupBaseFallbackTests.test_lookup_miss_w_defaultc                    s|   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}|  ||k¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rc   ©r�   Úpoprx   ©r’   Ú_resultsr   r	   r†   1  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¡}|  ||k¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rc   rœ   rx   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                    s|   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}|  ||k¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rc   rœ   rx   rž   r   r	   r†   L  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_requiredH  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¡}|  ||k¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rc   rœ   rx   rž   r   r	   r†   Y  s    zJLookupBaseFallbackTests.test_lookup_cached_multi_required.<locals>._lookupr‡   r¦   rŠ   r“   r¨   r˜   r    r   rž   r	   Ú!test_lookup_cached_multi_requiredU  s    
z9LookupBaseFallbackTests.test_lookup_cached_multi_requiredc                    s”   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}| |¡ | ddd¡}|  ||k¡ |  ˆ ddg¡ |  ˆ|g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rc   rœ   rx   rž   r   r	   r†   g  s    zMLookupBaseFallbackTests.test_lookup_not_cached_after_changed.<locals>._lookupr‡   rˆ   rŠ   r“   r”   )r*   r3   r‹   r   r4   r;   r    r   rž   r	   Ú$test_lookup_not_cached_after_changedc  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…   rr   rx   r   r   r	   r†   t  s    zDLookupBaseFallbackTests.test_lookup1_w_invalid_name.<locals>._lookupr‡   r‰   rŠ   )r3   rM   rN   Úlookup1r*   rŒ   r   r   r	   Útest_lookup1_w_invalid_names  s    z3LookupBaseFallbackTests.test_lookup1_w_invalid_namec                    sJ   g ‰ ‡ fdd„}| j |d�}| ddd¡}|  |d k¡ |  ˆ dg¡ d S )Nc                    s   ˆ   |||f¡ d S r   r�   rx   r‘   r   r	   r†   }  s    zELookupBaseFallbackTests.test_lookup1_miss_no_default.<locals>._lookupr‡   r‰   rŠ   r“   r”   )r3   r¬   r4   r;   r•   r   r‘   r	   Útest_lookup1_miss_no_default{  s    z4LookupBaseFallbackTests.test_lookup1_miss_no_defaultc                    sR   g ‰ t ƒ }‡ fdd„}| j|d�}| ddd|¡}|  ||k¡ |  ˆ dg¡ d S )Nc                    s   ˆ   |||f¡ d S r   r�   rx   r‘   r   r	   r†   ˆ  s    zDLookupBaseFallbackTests.test_lookup1_miss_w_default.<locals>._lookupr‡   r‰   rŠ   r“   r”   ©r*   r3   r¬   r4   r;   r™   r   r‘   r	   Útest_lookup1_miss_w_default…  s    z3LookupBaseFallbackTests.test_lookup1_miss_w_defaultc                    sp   g ‰ t ƒ }‡ fdd„}| j|d�}| ddd|¡}|  ||k¡ | ddd|¡}|  ||k¡ |  ˆ dg¡ d S )Nc                    s   ˆ   |||f¡ d S r   r�   rx   r‘   r   r	   r†   “  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_cache�  s    zBLookupBaseFallbackTests.test_lookup1_miss_w_default_negative_cachec                    s|   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}|  ||k¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rc   rœ   rx   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_cached�  s    
z/LookupBaseFallbackTests.test_lookup1_not_cachedc                    sŠ   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}| j|d�}| ddd¡}| ddd¡}|  ||k¡ |  ˆ dg¡ |  ˆ||g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rc   rœ   rx   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¡}|  ||k¡ |  ˆ ddg¡ |  ˆ|g¡ d S )Nc                    s   ˆ   |||f¡ ˆ d¡S rc   rœ   rx   rž   r   r	   r†   ¼  s    zNLookupBaseFallbackTests.test_lookup1_not_cached_after_changed.<locals>._lookupr‡   r‰   rŠ   r“   r”   )r*   r3   r¬   r   r4   r;   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   )r*   r3   rM   rN   Úadapter_hook)r   ÚreqÚprvr�   r   r   r	   Ú test_adapter_hook_w_invalid_nameÈ  s    z8LookupBaseFallbackTests.test_adapter_hook_w_invalid_namec                 C   s6   t ƒ t ƒ  }}|  ¡ }| ||d¡}|  |d k¡ d S rQ   ©r*   r3   rµ   r4   )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|¡}|  ||k¡ d S rQ   r¹   )r   r¶   r·   rš   r�   r–   r   r   r	   Ú test_adapter_hook_miss_w_defaultÔ  s    z8LookupBaseFallbackTests.test_adapter_hook_miss_w_defaultc                    sn   g ‰ ‡ fdd„‰‡fdd„}t ƒ t ƒ t ƒ   }}}| j|d�}| ||d|¡}|  ||k¡ |  ˆ |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   rx   ©r¿   r   r	   r†   ß  s    zSLookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_None.<locals>._lookupr‡   r“   ©r*   r3   rµ   r4   r;   ©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                    sv   g ‰t ƒ ‰ ‡ ‡fdd„‰‡fdd„}t ƒ t ƒ t ƒ   }}}| j|d�}| ||d|¡}|  |ˆ k¡ |  ˆ|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   rx   rÀ   r   r	   r†   í  s    zVLookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_adapter.<locals>._lookupr‡   r“   rÁ   rÂ   r   ©rÆ   r¾   r¿   r	   Ú-test_adapter_hook_hit_factory_returns_adapterç  s    zELookupBaseFallbackTests.test_adapter_hook_hit_factory_returns_adapterc                    sv   g ‰t ƒ ‰ ‡ ‡fdd„‰‡fdd„}t ƒ t ƒ t ƒ   }}}| j|d�}| ||d|¡}|  |ˆ k¡ |  ˆ|g¡ d S )Nc                    s   ˆ  | ¡ ˆ S r   r�   r¼   rÅ   r   r	   r¿   ø  s    
z;LookupBaseFallbackTests.test_queryAdapter.<locals>._factoryc                    s   ˆ S r   r   rx   rÀ   r   r	   r†   û  s    z:LookupBaseFallbackTests.test_queryAdapter.<locals>._lookupr‡   r“   )r*   r3   ÚqueryAdapterr4   r;   rÂ   r   rÇ   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   ©r�   r'   r}   rž   r   r	   Ú
_lookupAll  s    zCLookupBaseFallbackTests.test_lookupAll_uncached.<locals>._lookupAll©r~   r‰   rŠ   ©rˆ   rŠ   ©r*   r3   Ú	lookupAllr;   r'   ©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   rË   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   rË   r}   rž   r   r	   Ú_subscriptions  s    zKLookupBaseFallbackTests.test_subscriptions_uncached.<locals>._subscriptions©r   r‰   rŠ   rÎ   ©r*   r3   Úsubscriptionsr;   r'   ©r   rÔ   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   rË   r}   rž   r   r	   rÔ   (  s    zILookupBaseFallbackTests.test_subscriptions_cached.<locals>._subscriptionsrÕ   r‰   rŠ   rÎ   rÖ   rØ   r   rž   r	   Útest_subscriptions_cached%  s    z1LookupBaseFallbackTests.test_subscriptions_cached)NNN)r   r   r   r0   r3   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	   ru   ú   s:     ÿ


ru   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚLookupBaseTestsc                 C   s   ddl m} |S )Nr   )Ú
LookupBase)r,   rÜ   )r   rÜ   r   r   r	   r0   4  s    zLookupBaseTests._getTargetClassc                 C   sR   ddl m} zdd l}W n$ tk
r<   |  |  ¡ |¡ Y nX |  |  ¡ |¡ d S rv   )r,   rw   Ú-zope.interface._zope_interface_coptimizationsÚImportErrorÚassertIsr0   ÚassertIsNot)r   rw   Úzoper   r   r	   Útest_optimizations8  s    z"LookupBaseTests.test_optimizationsN©r   r   r   r0   râ   r   r   r   r	   rÛ   2  s   rÛ   c                   @   sV   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚVerifyingBaseFallbackTestsc                 C   s   ddl m} |S ©Nr   )ÚVerifyingBaseFallback)r,   ræ   )r   ræ   r   r   r	   r0   D  s    z*VerifyingBaseFallbackTests._getTargetClassNc                    sd   ˆ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{   rx   r   r   r	   rz   K  s    z6VerifyingBaseFallbackTests._makeOne.<locals>.uc_lookupc                 S   s
   t ƒ ‚d S r   r{   r}   r   r   r	   r~   N  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   )Úsuperr   Ú	_registryr=   )r„   Ú	__class__r   r	   r   W  s    z=VerifyingBaseFallbackTests._makeOne.<locals>.Derived.__init__)r   r   r   r€   r�   r‚   r   Ú__classcell__r   ©r„   rz   r~   r   )ré   r	   r„   S  s   r„   )r0   r   )r   r7   rz   r~   r   Zderivedr   rë   r	   r3   H  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>.WithGenerationr:   N)r   r   r   r<   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   )r#   Úi©rì   r   r	   r&   c  s     zWVerifyingBaseFallbackTests._makeRegistry.<locals>.Registry.__init__.<locals>.<listcomp>)ÚrangeÚro)r   Údepthrî   r   r	   r   b  s    zCVerifyingBaseFallbackTests._makeRegistry.<locals>.Registry.__init__N©r   r   r   r   r   rî   r   r	   ÚRegistrya  s   ró   )r*   )r   rñ   ró   r   rî   r	   Ú_makeRegistry^  s    z(VerifyingBaseFallbackTests._makeRegistryc                    sä   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}|  d¡}| j||d�}| ddd¡}| ddd¡}|  ||k¡ |  ˆ dg¡ |  ˆ||g¡ |jd	  jd	7  _| ddd¡}|  ||k¡ |  ˆ ddg¡ |  ˆ|g¡ d S )
Nc                    s   ˆ   |||f¡ ˆ d¡S rc   rœ   rx   rž   r   r	   r†   j  s    z7VerifyingBaseFallbackTests.test_lookup.<locals>._lookupé   r‡   rˆ   rŠ   r“   r”   r:   )r*   rô   r3   r‹   r4   r;   rð   r<   ©r   r¡   r¢   r£   r†   r   r�   r–   r   rž   r	   Útest_lookupf  s$    

ÿz&VerifyingBaseFallbackTests.test_lookupc                    sä   g ‰ t ƒ t ƒ t ƒ   }}}|||g‰‡ ‡fdd„}|  d¡}| j||d�}| ddd¡}| ddd¡}|  ||k¡ |  ˆ dg¡ |  ˆ||g¡ |jd	  jd	7  _| ddd¡}|  ||k¡ |  ˆ ddg¡ |  ˆ|g¡ d S )
Nc                    s   ˆ   |||f¡ ˆ d¡S rc   rœ   rx   rž   r   r	   r†     s    z8VerifyingBaseFallbackTests.test_lookup1.<locals>._lookuprõ   r‡   r‰   rŠ   r“   r”   r:   )r*   rô   r3   r¬   r4   r;   rð   r<   rö   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|¡}ˆ |ˆk¡ |
 ||d|¡}ˆ |ˆk¡ |	jd  jd7  _|
 ||d|¡}ˆ |ˆk¡ 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…   rr   r¼   r2   r   r	   Ú	_factory3–  s    z?VerifyingBaseFallbackTests.test_adapter_hook.<locals>._factory3c                    s
   ˆ   d¡S rc   ©r�   rx   ©Ú
_factoriesr   r	   r†   ™  s    z=VerifyingBaseFallbackTests.test_adapter_hook.<locals>._lookuprõ   r‡   r“   r:   )r*   rô   r3   rµ   r4   rð   r<   ©r   Z_crú   rü   rý   r†   r¶   r·   rš   r   r�   rÃ   r   ©r   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|¡}ˆ |ˆk¡ |
 ||d|¡}ˆ |ˆk¡ |	jd  jd7  _|
 ||d|¡}ˆ |ˆk¡ 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…   rr   r¼   r2   r   r	   rý   ¬  s    z?VerifyingBaseFallbackTests.test_queryAdapter.<locals>._factory3c                    s
   ˆ   d¡S rc   rþ   rx   rÿ   r   r	   r†   ¯  s    z=VerifyingBaseFallbackTests.test_queryAdapter.<locals>._lookuprõ   r‡   r“   r:   )r*   rô   r3   rÉ   r4   rð   r<   rµ   r  r   r  r	   rÊ   ¦  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 rc   ©r'   r�   r}   ©rŸ   r   r	   rÌ   À  s    z=VerifyingBaseFallbackTests.test_lookupAll.<locals>._lookupAllrõ   rÍ   r‰   rŠ   r:   )r*   rô   r3   rÐ   r;   r'   rð   r<   )r   Ú
_results_1Ú
_results_2rÌ   r   r�   r–   r   r  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 rc   r  r}   r  r   r	   rÔ   Ð  s    zEVerifyingBaseFallbackTests.test_subscriptions.<locals>._subscriptionsrõ   rÕ   r‰   rŠ   r:   )r*   rô   r3   r×   r;   r'   rð   r<   )r   r  r  rÔ   r   r�   r–   r   r  r	   Útest_subscriptionsÌ  s    
z-VerifyingBaseFallbackTests.test_subscriptions)NNN)r   r   r   r0   r3   rô   r÷   rø   r  rÊ   r  r	  r   r   r   r	   rä   B  s     ÿ
rä   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚVerifyingBaseTestsc                 C   s   ddl m} |S )Nr   )ÚVerifyingBase)r,   r  )r   r  r   r   r	   r0   ß  s    z"VerifyingBaseTests._getTargetClassc                 C   sR   ddl m} zdd l}W n$ tk
r<   |  |  ¡ |¡ Y nX |  |  ¡ |¡ d S rå   )r,   ræ   rÝ   rÞ   rß   r0   rà   )r   ræ   rá   r   r   r	   râ   ã  s    z%VerifyingBaseTests.test_optimizationsNrã   r   r   r   r	   r
  Ý  s   r
  c                   @   s$  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGS )HÚAdapterLookupBaseTestsc                 C   s   ddl m} |S )Nr   )ÚAdapterLookupBase)r,   r  )r   r  r   r   r	   r0   ï  s    z&AdapterLookupBaseTests._getTargetClassc                 C   s   |   ¡ |ƒS r   r1   r=   r   r   r	   r3   ó  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   )rJ   rf   r2   r   r   r	   r   ø  s    zEAdapterLookupBaseTests._makeSubregistry.<locals>.Subregistry.__init__Nrò   r   r   r   r	   ÚSubregistry÷  s   r  r   )r   r!   r  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   )Ú	_providedrð   r    r   r   r	   r   ÿ  s    z?AdapterLookupBaseTests._makeRegistry.<locals>.Registry.__init__Nrò   r   r   r   r	   ró   þ  s   ró   r   )r   r!   ró   r   r   r	   rô   ý  s    z$AdapterLookupBaseTests._makeRegistryc                 C   s$   |   ¡ }|  |¡}|  |ji ¡ d S r   )rô   r3   r;   r   )r   r7   Ú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|ƒ}|  ||¡}|  |¡}|  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ô   r3   r;   Úsortedr   Úkeys©r   r   r  r  r  r7   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                   @   s   e Zd Zdd„ ZdS )zAAdapterLookupBaseTests.test_changed_empty_required.<locals>.Mixinc                 W   s   d S r   r   ©r   Úotherr   r   r	   r     s    zIAdapterLookupBaseTests.test_changed_empty_required.<locals>.Mixin.changedN©r   r   r   r   r   r   r   r	   ÚMixin  s   r   c                   @   s   e Zd ZdS )zCAdapterLookupBaseTests.test_changed_empty_required.<locals>.DerivedNr   r   r   r   r	   r„     s   r„   )r*   r0   rô   r   )r   r   r„   r7   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                   @   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„   '  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   +  s    zLAdapterLookupBaseTests.test_changed_w_required.<locals>.FauxWeakref.__init__c                 S   s   | j r
| S d S r   r"  r2   r   r   r	   Ú__call__-  s    zLAdapterLookupBaseTests.test_changed_w_required.<locals>.FauxWeakref.__call__c                 S   s
   || _ d S r   )Ú_unsub)r   Útargetr   r   r	   ra   0  s    zOAdapterLookupBaseTests.test_changed_w_required.<locals>.FauxWeakref.unsubscribe)r   r   r   r%  r   r$  ra   r   r   r   r	   ÚFauxWeakref)  s   r'  FTr:   r   )r*   r0   rô   Ú	_requiredr   r;   rI   r%  )r   r   r„   r'  Úgoner#  r7   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|ƒ}|  ¡ }|  |¡}||g|_| ¡  |  t	|j
 ¡ ƒt	|||gƒ¡ |  |j
| |g¡ |  |j
| |g¡ |  t	|j
| ƒt	||gƒ¡ d S r  )r   r   r  r  rô   r3   r  Zinit_extendorsr;   r  r   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|ƒ}|  ¡ }|  |¡}| |¡ | |¡ |  t|j	 
¡ ƒt|||gƒ¡ |  |j	| |g¡ |  |j	| |g¡ |  t|j	| ƒt||gƒ¡ d S r  )r   r   r  r  rô   r3   r"   r;   r  r   r  r  r   r   r	   Útest_add_extendorM  s     



ÿ
ÿz(AdapterLookupBaseTests.test_add_extendorc                 C   s°   ddl m} ddlm} |dƒ}|d|ƒ}|  ||¡}|  |¡}| |¡ |  t|j	 
¡ ƒt|||gƒ¡ |  |j	| g ¡ |  |j	| |g¡ |  t|j	| ƒt|gƒ¡ d S r  )r   r   r  r  rô   r3   r(   r;   r  r   r  r  r   r   r	   Útest_remove_extendor]  s    


ÿÿz+AdapterLookupBaseTests.test_remove_extendorc                 C   st   ddl m} |dƒ}|d|ƒ}|  ¡ }|  |¡}| |f|¡}|  |d ¡ |  t|jƒd¡ |  | 	¡ |jk¡ d S ©Nr   r  r  r  r:   )
r  r  rô   r3   r€   r;   rI   r(  r4   Úweakref©r   r  r  r  r7   r  Úresultr   r   r	   Útest__uncached_lookup_empty_ron  s    

z5AdapterLookupBaseTests.test__uncached_lookup_empty_roc                 C   sf   ddl m} |dƒ}|d|ƒ}|  ||¡}|  ¡ }|j |¡ |  |¡}| |f|¡}|  |d ¡ d S ©Nr   r  r  r  )	r  r  rô   r  rð   r�   r3   r€   r;   ©r   r  r  r  r7   Úsubrr  r1  r   r   r	   Ú test__uncached_lookup_order_missy  s    

z7AdapterLookupBaseTests.test__uncached_lookup_order_missc                 C   sr   ddl m} |dƒ}|d|ƒ}|  ¡ }|  ¡ }i i g|_|j |¡ |  |¡}||_| 	|f|¡}|  
|d ¡ d S r3  )r  r  rô   r  rJ   rð   r�   r3   r6   r€   r;   r4  r   r   r	   Ú$test__uncached_lookup_extendors_miss„  s    


z;AdapterLookupBaseTests.test__uncached_lookup_extendors_missc           
      C   s�   ddl m} |dƒ}|d|ƒ}|dƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}	|  |	d ¡ d S ©Nr   r  r  r  ÚIQuxrE   ©r  r  rô   r  r*   rJ   rð   r�   r3   r6   r€   r;   ©
r   r  r  r  r9  r7   r5  Ú
irrelevantr  r1  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|ƒ}|  ||¡}|  ¡ }tƒ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}	|  |	d ¡ d S ©Nr   r  r  r  Ú	wrongnamer:  )
r   r  r  r  r7   r5  r<  r?  r  r1  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|ƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}|  ||k¡ d S ©Nr   r  r  r  rE   ©r  r  rô   r  r*   rJ   rð   r�   r3   r6   r€   r4   )	r   r  r  r  r7   r5  Ú	_expectedr  r1  r   r   r	   Ú test__uncached_lookup_simple_hit·  s    
þ
z7AdapterLookupBaseTests.test__uncached_lookup_simple_hitc           
      C   s¦   ddl m} |dƒ}|d|ƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}| 
|f|¡}	|  ||k¡ |  |	|k¡ d S rA  rB  )
r   r  r  r  r7   r5  rC  r  r1  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|ƒ}||ƒG dd„ dtƒƒ}|ƒ }|  ¡ }|  ¡ }i i g|_|j 	|¡ |  
|¡}	|	j|	_|	|_tƒ }
|	j|f||
d�}|  ||
k¡ d S )	Nr   ©Úimplementerr  r  r  c                   @   s   e Zd ZdS )zFAdapterLookupBaseTests.test_queryMultiAdaptor_lookup_miss.<locals>.FooNr   r   r   r   r	   ÚFooà  s   rH  ©Údefault)Úzope.interface.declarationsrG  r  r  r*   rô   r  rJ   rð   r�   r3   r€   r‹   r6   ÚqueryMultiAdapterr4   )r   rG  r  r  r  rH  Úfoor7   r5  r  rš   r1  r   r   r	   Ú"test_queryMultiAdaptor_lookup_missÛ  s&    
þ
z9AdapterLookupBaseTests.test_queryMultiAdaptor_lookup_missc                    sä   ddl m} ddlm} |dƒ}|d|ƒ}||ƒG dd„ dtƒƒ}|ƒ }|  ||¡}|  ¡ }tƒ }	g ‰ ‡ fdd	„}
i ||d
|
iiig|_|j 	|¡ |  
|¡}|j|_||_tƒ }|j|f||d�}|  ||k¡ |  ˆ |g¡ d S )Nr   rF  r  r  r  c                   @   s   e Zd ZdS )zGAdapterLookupBaseTests.test_queryMultiAdaptor_factory_miss.<locals>.FooNr   r   r   r   r	   rH  ÷  s   rH  c                    s   ˆ   | ¡ d S r   r�   r¼   r‘   r   r	   r¿   ÿ  s    
zLAdapterLookupBaseTests.test_queryMultiAdaptor_factory_miss.<locals>._factoryrE   rI  ©rK  rG  r  r  r*   rô   r  rJ   rð   r�   r3   r€   r‹   r6   rL  r4   r;   )r   rG  r  r  r  rH  rM  r7   r5  rC  r¿   r  rš   r1  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|ƒ}||ƒG dd„ dtƒƒ}|ƒ }|  ||¡}|  ¡ }tƒ ‰g ‰ ‡ ‡fdd	„}	i ||d
|	iiig|_|j 	|¡ |  
|¡}
|
j|
_|
|_tƒ }|
j|f||d�}|  |ˆk¡ |  ˆ |g¡ d S )Nr   rF  r  r  r  c                   @   s   e Zd ZdS )zFAdapterLookupBaseTests.test_queryMultiAdaptor_factory_hit.<locals>.FooNr   r   r   r   r	   rH    s   rH  c                    s   ˆ   | ¡ ˆS r   r�   r¼   ©r’   rC  r   r	   r¿     s    
zKAdapterLookupBaseTests.test_queryMultiAdaptor_factory_hit.<locals>._factoryrE   rI  rO  )r   rG  r  r  r  rH  rM  r7   r5  r¿   r  rš   r1  r   rQ  r	   Ú"test_queryMultiAdaptor_factory_hit  s.    
þ
z9AdapterLookupBaseTests.test_queryMultiAdaptor_factory_hitc                 C   st   ddl m} |dƒ}|d|ƒ}|  ¡ }|  |¡}| |f|¡}|  |d¡ |  t|jƒd¡ |  | 	¡ |jk¡ d S )Nr   r  r  r  r   r:   )
r  r  rô   r3   r�   r;   rI   r(  r4   r/  r0  r   r   r	   Ú!test__uncached_lookupAll_empty_ro,  s    

z8AdapterLookupBaseTests.test__uncached_lookupAll_empty_roc                 C   sl   ddl m} |dƒ}|d|ƒ}|  ||¡}|  ¡ }|j |¡ |  |¡}||_| |f|¡}|  	|d¡ d S ©Nr   r  r  r  r   )
r  r  rô   r  rð   r�   r3   r6   r�   r;   r4  r   r   r	   Ú#test__uncached_lookupAll_order_miss7  s    

z:AdapterLookupBaseTests.test__uncached_lookupAll_order_missc                 C   sr   ddl m} |dƒ}|d|ƒ}|  ¡ }|  ¡ }i i g|_|j |¡ |  |¡}||_| 	|f|¡}|  
|d¡ d S rT  )r  r  rô   r  rJ   rð   r�   r3   r6   r�   r;   r4  r   r   r	   Ú'test__uncached_lookupAll_extendors_missC  s    


z>AdapterLookupBaseTests.test__uncached_lookupAll_extendors_missc           
      C   s�   ddl m} |dƒ}|d|ƒ}|dƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}	|  |	d¡ d S )Nr   r  r  r  r9  rE   r   )r  r  rô   r  r*   rJ   rð   r�   r3   r6   r�   r;   r;  r   r   r	   Ú(test__uncached_lookupAll_components_missP  s    
þ
z?AdapterLookupBaseTests.test__uncached_lookupAll_components_missc           
      C   s    ddl m} |dƒ}|d|ƒ}|  ||¡}|  ¡ }tƒ }tƒ }i ||||dœiig|_|j |¡ |  |¡}||_	| 
|f|¡}	|  t|	ƒd|fd|fg¡ d S ©Nr   r  r  r  )rE   ÚnamedrE   rY  )r  r  rô   r  r*   rJ   rð   r�   r3   r6   r�   r;   r  ©
r   r  r  r  r7   r5  rC  Z_namedr  r1  r   r   r	   Ú#test__uncached_lookupAll_simple_hitb  s    
þ
z:AdapterLookupBaseTests.test__uncached_lookupAll_simple_hitc           
      C   s    ddl m} |dƒ}|d|ƒ}|  ||¡}|  ¡ }tƒ }tƒ }i ||||dœiig|_|j |¡ |  |¡}|j	|_
||_| |f|¡}	|  t|	ƒddg¡ d S rX  )r  r  rô   r  r*   rJ   rð   r�   r3   r�   rÐ   r6   Únamesr;   r  rZ  r   r   r	   Ú
test_namest  s     
þ
z!AdapterLookupBaseTests.test_namesc                 C   st   ddl m} |dƒ}|d|ƒ}|  ¡ }|  |¡}| |f|¡}|  |g ¡ |  t|jƒd¡ |  | 	¡ |jk¡ d S r.  )
r  r  rô   r3   r‚   r;   rI   r(  r4   r/  r0  r   r   r	   Ú%test__uncached_subscriptions_empty_ro‡  s    

z<AdapterLookupBaseTests.test__uncached_subscriptions_empty_roc                 C   sl   ddl m} |dƒ}|d|ƒ}|  ||¡}|  ¡ }|j |¡ |  |¡}||_| |f|¡}|  	|g ¡ d S r3  )
r  r  rô   r  rð   r�   r3   r6   r‚   r;   r4  r   r   r	   Ú'test__uncached_subscriptions_order_miss’  s    

z>AdapterLookupBaseTests.test__uncached_subscriptions_order_missc                 C   sr   ddl m} |dƒ}|d|ƒ}|  ¡ }|  ¡ }i i g|_|j |¡ |  |¡}||_| 	|f|¡}|  
|g ¡ d S r3  )r  r  rô   r  rf   rð   r�   r3   r6   r‚   r;   r4  r   r   r	   Ú+test__uncached_subscriptions_extendors_missž  s    


zBAdapterLookupBaseTests.test__uncached_subscriptions_extendors_missc           
      C   s�   ddl m} |dƒ}|d|ƒ}|dƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}	|  |	g ¡ d S r8  ©r  r  rô   r  r*   rf   rð   r�   r3   r6   r‚   r;   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|ƒ}|  ||¡}|  ¡ }tƒ }i ||d|iiig|_|j |¡ |  |¡}||_	| 
|f|¡}|  |g ¡ d S r>  ra  )	r   r  r  r  r7   r5  r?  r  r1  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|ƒ}|  ||¡}|  ¡ }G dd„ dtƒ}|ƒ |ƒ  }}i ||d||fiiig|_|j |¡ |  |¡}	|	|_	|	 
|f|¡}
|  t|
ƒt||gƒ¡ d S )Nr   r  r  r  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__Õ  s    zRAdapterLookupBaseTests.test__uncached_subscriptions_simple_hit.<locals>.Foo.__lt__N)r   r   r   rd  r   r   r   r	   rH  Ô  s   rH  rE   )r  r  rô   r  r*   rf   rð   r�   r3   r6   r‚   r;   r  )r   r  r  r  r7   r5  rH  Ú_exp1Ú_exp2r  r1  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|ƒ}||ƒ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   rF  r  r  r  c                   @   s   e Zd ZdS )z@AdapterLookupBaseTests.test_subscribers_wo_provided.<locals>.FooNr   r   r   r   r	   rH  ç  s   rH  c                    s   ˆ   dg ¡ | ¡ d S ©Nrú   ©Ú
setdefaultr�   r¼   ©Ú_calledr   r	   rú   ï  s    zFAdapterLookupBaseTests.test_subscribers_wo_provided.<locals>._factory1c                    s   ˆ   dg ¡ | ¡ d S ©Nrü   ri  r¼   rk  r   r	   rü   ñ  s    zFAdapterLookupBaseTests.test_subscribers_wo_provided.<locals>._factory2rE   r   )rú   rü   ©rK  rG  r  r  r*   rô   r  rf   rð   r�   r3   r‚   r×   r6   Zsubscribersr;   )r   rG  r  r  r  rH  rM  r7   r5  rú   rü   r  r1  r   rk  r	   Útest_subscribers_wo_providedâ  s.    
þ
z3AdapterLookupBaseTests.test_subscribers_wo_providedc                    s  ddl m} ddlm} |dƒ}|d|ƒ}||ƒ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   rF  r  r  r  c                   @   s   e Zd ZdS )z?AdapterLookupBaseTests.test_subscribers_w_provided.<locals>.FooNr   r   r   r   r	   rH    s   rH  c                    s   ˆ   dg ¡ | ¡ ˆS rh  ri  r¼   )rl  re  r   r	   rú     s    zEAdapterLookupBaseTests.test_subscribers_w_provided.<locals>._factory1c                    s   ˆ   dg ¡ | ¡ ˆS rm  ri  r¼   )rl  rf  r   r	   rü     s    zEAdapterLookupBaseTests.test_subscribers_w_provided.<locals>._factory2c                    s   ˆ   dg ¡ | ¡ d S )NÚ_side_effect_onlyri  r¼   rk  r   r	   rp    s    zMAdapterLookupBaseTests.test_subscribers_w_provided.<locals>._side_effect_onlyrE   )rú   rü   rp  rn  )r   rG  r  r  r  rH  rM  r7   r5  rú   rü   rp  r  r1  r   )rl  re  rf  r	   Útest_subscribers_w_providedÿ  s<    
þ
þÿz2AdapterLookupBaseTests.test_subscribers_w_providedN)&r   r   r   r0   r3   r  rô   r  r  r!  r*  r+  r,  r-  r2  r6  r7  r=  r@  rD  rE  rN  rP  rR  rS  rU  rV  rW  r[  r]  r^  r_  r`  rb  rc  rg  ro  rq  r   r   r   r	   r  í  sF   r  c                   @   sL   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S )ÚAdapterRegistryTestsc                 C   s   ddl m} |S )Nr   )ÚAdapterRegistry)r,   rs  )r   rs  r   r   r	   r0   )  s    z$AdapterRegistryTests._getTargetClassc                 O   s   |   ¡ ||ŽS r   r1   )r   ÚargsÚkwr   r   r	   r3   -  s    zAdapterRegistryTests._makeOnec                 C   s   |   ¡ }|  t|jƒd¡ d S rc   )r3   r;   rI   Ú_v_subregistries)r   Úarr   r   r	   Útest_ctor_no_bases0  s    z'AdapterRegistryTests.test_ctor_no_basesc                 C   sL   |   ¡ }|   |g¡}|  t|jƒd¡ |  t|jƒd¡ |  ||jk¡ d S ©Nr   r:   )r3   r;   rI   rv  r4   )r   ÚbaseÚsubr   r   r	   Útest_ctor_w_bases4  s
    z&AdapterRegistryTests.test_ctor_w_basesc                 C   s\   |   ¡ }|   ¡ }|   |g¡}|g|_|  t|jƒd¡ |  t|jƒd¡ |  ||jk¡ d S ry  ©r3   rC   r;   rI   rv  r4   ©r   ÚbeforeÚafterr{  r   r   r	   Ú,test__setBases_removing_existing_subregistry=  s    zAAdapterRegistryTests.test__setBases_removing_existing_subregistryc                 C   st   |   ¡ }|   ¡ }|   ¡ }|   |g¡}|jd  |¡ |g|_|  t|jƒd¡ |  t|jƒd¡ |  ||jk¡ d S )NrC   r   r:   )r3   Ú__dict__r�   rC   r;   rI   rv  r4   )r   r  Zstrayr€  r{  r   r   r	   Útest__setBases_wo_stray_entryF  s    z2AdapterRegistryTests.test__setBases_wo_stray_entryc                 C   sn   |   ¡ }|   ¡ }|   |g¡}||g|_|  t|jƒd¡ |  t|jƒd¡ |  ||jk¡ |  ||jk¡ d S r9   r}  r~  r   r   r	   Ú*test__setBases_w_existing_entry_continuingQ  s    
z?AdapterRegistryTests.test__setBases_w_existing_entry_continuingc                 C   sn   |   ¡ }G dd„ dtƒ}|ƒ |ƒ  }}| |¡ | |¡ tƒ }| |¡ |  |j|k¡ |  |j|k¡ 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„   )r3   r*   Z_addSubregistryr   r4   r   )r   rz  r„   Zderived1Zderived2r   r   r   r	   Útest_changed_w_subregistries[  s    


z1AdapterRegistryTests.test_changed_w_subregistriesN)r   r   r   r0   r3   rx  r|  r�  rƒ  r„  r…  r   r   r   r	   rr  '  s   		
rr  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 ƒ|k¡ d S )Nr   ©Ú_convert_None_to_Interfacer   )r,   rˆ  r  r   r4   )r   rˆ  r   r   r   r	   Ú&test__convert_None_to_Interface_w_Nonel  s    z1Test_utils.test__convert_None_to_Interface_w_Nonec                 C   s(   ddl m} tƒ }|  ||ƒ|k¡ d S )Nr   r‡  )r,   rˆ  r*   r4   )r   rˆ  r  r   r   r	   Ú'test__convert_None_to_Interface_w_otherq  s    z2Test_utils.test__convert_None_to_Interface_w_otherc                 C   sV   dd l }ddlm} d}|jd dk r<|  ||ƒt|ƒ¡ n|  ||ƒt|dƒ¡ d S )Nr   ©Ú_normalize_names   strrõ   Úascii)Úsysr,   rŒ  Úversion_infor;   ÚunicodeÚstr)r   rŽ  rŒ  ZSTRr   r   r	   Útest__normalize_name_strv  s    z#Test_utils.test__normalize_name_strc                 C   s$   ddl m} d}|  ||ƒ|¡ d S )Nr   r‹  Zustr)r,   rŒ  r;   )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Œ  r*   rM   Ú	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†  j  s
   	r†  )Ú__doc__Zunittestr   ZTestCaser   ru   rÛ   rä   r
  r  rr  r†  r   r   r   r	   Ú<module>   s$    V  :     >C