U
    j5{i×· ã                   @   s"  d Z ddlZddlmZ ddlmZ ddlmZ G dd„ dejƒZ	G dd	„ d	e	ƒZ
G d
d„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZG dd„ deeƒZG dd„ deeƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZG d d!„ d!ƒZdS )"zComponent Registry Testsé    N©Ú	Interface)ÚVerifyingAdapterRegistry©Ú
Componentsc                       s°  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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Z d>d?„ Z!d@dA„ Z"dBdC„ Z#dDdE„ Z$dFdG„ Z%dHdI„ Z&dJdK„ Z'dLdM„ Z(dNdO„ Z)dPdQ„ Z*dRdS„ Z+dTdU„ Z,dVdW„ Z-dXdY„ Z.dZd[„ Z/d\d]„ Z0d^d_„ Z1d`da„ Z2dbdc„ Z3ddde„ Z4dfdg„ Z5dhdi„ Z6djdk„ Z7dldm„ Z8dndo„ Z9dpdq„ Z:drds„ Z;dtdu„ Z<dvdw„ Z=dxdy„ Z>dzd{„ Z?d|d}„ Z@d~d„ ZAd€d�„ ZBd‚dƒ„ ZCd„d…„ ZDd†d‡„ ZEdˆd‰„ ZFdŠd‹„ ZG‡ fdŒd�„ZH‡ fdŽd�„ZId�d‘„ ZJd’d“„ ZKd”d•„ ZLd–d—„ ZMd˜d™„ ZNdšd›„ ZO‡ fdœd�„ZPdždŸ„ ZQd d¡„ ZRd¢d£„ ZSd¤d¥„ ZTd¦d§„ ZUd¨d©„ ZVdªd«„ ZWd¬d­„ ZXd®d¯„ ZYd°d±„ ZZd²d³„ Z[d´dµ„ Z\d¶d·„ Z]d¸d¹„ Z^dºd»„ Z_d¼d½„ Z`d¾d¿„ ZadÀdÁ„ ZbdÂdÃ„ ZcdÄdÅ„ ZddÆdÇ„ ZedÈdÉ„ ZfdÊdË„ ZgdÌdÍ„ ZhdÎdÏ„ ZidÐdÑ„ ZjdÒdÓ„ ZkdÔdÕ„ ZldÖd×„ ZmdØdÙ„ ZndÚdÛ„ ZodÜdÝ„ ZpdÞdß„ Zqdèdádâ„Zrdãdä„ Zsdådæ„ Zt‡  ZuS )éÚComponentsTestsc                 C   s   t S ©Nr   ©Úself© r   úF/tmp/pip-unpacked-wheel-jkvlexts/zope/interface/tests/test_registry.pyÚ_getTargetClass   s    zComponentsTests._getTargetClassÚtestc                 O   s   |   ¡ |f|ž|ŽS r   ©r   )r
   ÚnameÚargsÚkwr   r   r   Ú_makeOne   s    zComponentsTests._makeOnec                    s0   ddl m} g ‰ ‡ fdd„}t||d�}|ˆ fS )Nr   )Úregistryc                     s   ˆ   | |f¡ d S r   ©Úappend)r   r   ©Ú_eventsr   r   Ú_notify#   s    z,ComponentsTests._wrapEvents.<locals>._notify)Únotify)Úzope.interfacer   Ú_Monkey)r
   r   r   Ú_monkeyr   r   r   Ú_wrapEvents   s
    zComponentsTests._wrapEventsc                 C   sª   ddl m} |  d¡}|  |jd¡ |  |jd¡ |  |j|¡ |  |j|¡ |  |jjd¡ |  |jjd¡ |  |j	i ¡ |  |j
i ¡ |  |jg ¡ |  |jg ¡ d S )Nr   )ÚAdapterRegistryÚtestingr   )Úzope.interface.adapterr   r   ÚassertEqualÚ__name__Ú	__bases__ÚassertIsInstanceÚadaptersÚ	utilitiesÚ_utility_registrationsÚ_adapter_registrationsÚ_subscription_registrationsÚ_handler_registrations)r
   r   Úcompr   r   r   Útest_ctor_no_bases)   s    
z"ComponentsTests.test_ctor_no_basesc                 C   sb   |   d¡}|   d|f¡}|  |jd¡ |  |j|f¡ |  |jj|jf¡ |  |jj|jf¡ d S )NÚbaser    )r   r"   r#   r$   r&   r'   )r
   r.   r,   r   r   r   Útest_ctor_w_base7   s    
z ComponentsTests.test_ctor_w_basec                 C   s   |   d¡}|  t|ƒd¡ d S )Nr    z<Components testing>©r   r"   Úrepr©r
   r,   r   r   r   Útest___repr__?   s    
zComponentsTests.test___repr__c                 C   sl   |   d¡}|   d¡}|   ¡ }||f|_|  |j||f¡ |  |jj|j|jf¡ |  |jj|j|jf¡ d S )NÚbase1Úbase2)r   r$   r"   r&   r'   )r
   r4   r5   r,   r   r   r   Útest_assign_to___bases__E   s    




ÿ

ÿz(ComponentsTests.test_assign_to___bases__c           	      C   sˆ   ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒG dd„ dƒƒ}|ƒ }d	}|  ¡ }|j|||d
� |  |j|df ||d f¡ d S )Nr   ©ÚInterfaceClass©Únamedc                   @   s   e Zd ZdS )zFComponentsTests.test_registerUtility_with_component_name.<locals>.IFooN©r#   Ú
__module__Ú__qualname__r   r   r   r   ÚIFooT   s   r>   Úfooc                   @   s   e Zd ZdS )zEComponentsTests.test_registerUtility_with_component_name.<locals>.FooNr;   r   r   r   r   ÚFooY   s   r@   Úinfo©rA   )Úzope.interface.declarationsr8   r:   r   ÚregisterUtilityr"   r(   )	r
   r8   r:   r>   Úifoor@   r?   Ú_infor,   r   r   r   Ú(test_registerUtility_with_component_nameP   s    þz8ComponentsTests.test_registerUtility_with_component_namec                 C   s.   dd„ }t ƒ }|  ¡ }| jt|j||d� d S )Nc                   S   s
   t ƒ ‚d S r   ©ÚNotImplementedErrorr   r   r   r   Ú_factoryg   s    zQComponentsTests.test_registerUtility_both_factory_and_component.<locals>._factory©Ú	componentÚfactory)Úobjectr   ÚassertRaisesÚ	TypeErrorrD   ©r
   rJ   Ú_to_regr,   r   r   r   Ú/test_registerUtility_both_factory_and_componentf   s    
 ÿz?ComponentsTests.test_registerUtility_both_factory_and_componentc              	   C   s~  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}d}d}tƒ }|  ¡ }	|  ¡ \}
}|
� |	 	||||¡ W 5 Q R X |  
|	jjd | | |¡ |  |	j||f ||d f¡ |  |	jjd | d	 |f¡ |  t|ƒd
¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  
|jj|	¡ |  
|jj|¡ |  
|jj|¡ |  
|jj|¡ |  
|jj|¡ |  |jj¡ d S )Nr   r7   ©Ú
Registered©ÚUtilityRegistrationc                   @   s   e Zd ZdS )z>ComponentsTests.test_registerUtility_w_component.<locals>.IFooNr;   r   r   r   r   r>   s   s   r>   rA   r   Ú é   )rC   r8   Úzope.interface.interfacesrU   Úzope.interface.registryrW   rN   r   r   rD   ÚassertIsr'   Ú	_adaptersr"   r(   Ú_subscribersÚlenr%   r   Úprovidedr   rL   rA   ÚassertIsNonerM   )r
   r8   rU   rW   r>   rE   rF   Ú_namerR   r,   r   r   r   r   Úeventr   r   r   Ú test_registerUtility_w_componentn   s:    ÿz0ComponentsTests.test_registerUtility_w_componentc              	      s:  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}d}d}tƒ ‰ ‡ fd	d
„}|  ¡ }	|  ¡ \}
}|
� |	j	d ||||d� W 5 Q R X |  
t|ƒd¡ |d \}}|\}|  
|i ¡ |  ||¡ |  |j|¡ |  |jj|	¡ |  |jj|¡ |  |jj|¡ |  |jjˆ ¡ |  |jj|¡ |  |jj|¡ d S )Nr   r7   rT   rV   c                   @   s   e Zd ZdS )z<ComponentsTests.test_registerUtility_w_factory.<locals>.IFooNr;   r   r   r   r   r>   ”   s   r>   rA   r   c                      s   ˆ S r   r   r   ©rR   r   r   rJ   œ   s    z@ComponentsTests.test_registerUtility_w_factory.<locals>._factory©rM   rY   )rC   r8   rZ   rU   r[   rW   rN   r   r   rD   r"   r_   r%   r\   r   r`   r   rL   rA   rM   )r
   r8   rU   rW   r>   rE   rF   rb   rJ   r,   r   r   r   r   rc   r   re   r   Útest_registerUtility_w_factory�   s2    z.ComponentsTests.test_registerUtility_w_factoryc                 C   s>   G dd„ dƒ}d}d}|ƒ }|   ¡ }|  t|j|d ||¡ d S )Nc                   @   s   e Zd ZdS )zGComponentsTests.test_registerUtility_no_provided_available.<locals>.FooNr;   r   r   r   r   r@   ²   s   r@   rA   r   )r   rO   rP   rD   )r
   r@   rF   rb   rR   r,   r   r   r   Ú*test_registerUtility_no_provided_available°   s        ÿz:ComponentsTests.test_registerUtility_no_provided_availablec              	   C   sL  ddl m} ddl m} ddlm} ddlm} G dd„ d|ƒ}G dd	„ d	ƒ}|dƒ}d
}d}	|ƒ }
||
|ƒ |  ¡ }|  ¡ \}}|� | 	|
d |	|¡ W 5 Q R X |  
t|ƒd¡ |d \}}|\}|  
|i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jj|	¡ |  |jj|
¡ |  |jj|¡ |  |jj¡ d S )Nr   r7   ©ÚdirectlyProvidesrT   rV   c                   @   s   e Zd ZdS )z>ComponentsTests.test_registerUtility_wo_provided.<locals>.IFooNr;   r   r   r   r   r>   Â   s   r>   c                   @   s   e Zd ZdS )z=ComponentsTests.test_registerUtility_wo_provided.<locals>.FooNr;   r   r   r   r   r@   Å   s   r@   rA   r   rY   )rC   r8   rj   rZ   rU   r[   rW   r   r   rD   r"   r_   r%   rN   r\   r   r`   r   rL   rA   ra   rM   )r
   r8   rj   rU   rW   r>   r@   rE   rF   rb   rR   r,   r   r   r   r   rc   r   r   r   Ú test_registerUtility_wo_provided¼   s6    
z0ComponentsTests.test_registerUtility_wo_providedc           
   	   C   sŠ   ddl m} G dd„ d|ƒ}|dƒ}d}d}tƒ }|  ¡ }| ||||¡ |  ¡ \}}	|� | ||||¡ W 5 Q R X |  t|	ƒd¡ d S )Nr   r7   c                   @   s   e Zd ZdS )zJComponentsTests.test_registerUtility_duplicates_existing_reg.<locals>.IFooNr;   r   r   r   r   r>   á   s   r>   rA   r   )rC   r8   rN   r   rD   r   r"   r_   ©
r
   r8   r>   rE   rF   rb   rR   r,   r   r   r   r   r   Ú,test_registerUtility_duplicates_existing_regÞ   s    z<ComponentsTests.test_registerUtility_duplicates_existing_regc              	   C   sÈ   ddl m} G dd„ d|ƒ}|dƒ}d}d}d}tƒ }|  ¡ }| ||||¡ |  ¡ \}	}
|	� | ||||¡ W 5 Q R X |  t|
ƒd¡ |  |j||f ||d f¡ |  |j	j
d | d	 |f¡ d S )
Nr   r7   c                   @   s   e Zd ZdS )zCComponentsTests.test_registerUtility_w_different_info.<locals>.IFooNr;   r   r   r   r   r>   ò   s   r>   Zinfo1Zinfo2r   é   rX   ©rC   r8   rN   r   rD   r   r"   r_   r(   r'   r^   )r
   r8   r>   rE   Z_info1Z_info2rb   rR   r,   r   r   r   r   r   Ú%test_registerUtility_w_different_infoï   s&    ÿÿz5ComponentsTests.test_registerUtility_w_different_infoc              	   C   sì   ddl m} G dd„ d|ƒ}|dƒ}d}d}d}tƒ }tƒ }|  ¡ }	|	 ||||¡ |  ¡ \}
}|
� |	 ||||¡ W 5 Q R X |  t|ƒd¡ |  |	j||f ||d f¡ |  |	j||f ||d f¡ |  |	j	j
d | d	 ||f¡ d S )
Nr   r7   c                   @   s   e Zd ZdS )zSComponentsTests.test_registerUtility_w_different_names_same_component.<locals>.IFooNr;   r   r   r   r   r>     s   r>   rA   Úname1Úname2rY   rX   ro   ©r
   r8   r>   rE   rF   Ú_name1Ú_name2Z
_other_regrR   r,   r   r   r   r   r   Ú5test_registerUtility_w_different_names_same_component  s.    ÿÿÿzEComponentsTests.test_registerUtility_w_different_names_same_componentc              	   C   sâ  ddl m} ddlm} ddlm} ddlm} G dd„ d|ƒ}|dƒ}d}d	}tƒ tƒ  }	}
|  ¡ }| 	|	|||¡ |  
¡ \}}|� | 	|
|||¡ W 5 Q R X |  t|ƒd
¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jj|¡ |  |jj|	¡ |  |jj|¡ |  |jj¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jj|¡ |  |jj|
¡ |  |jj|¡ |  |jj¡ d S )Nr   r7   rT   ©ÚUnregisteredrV   c                   @   s   e Zd ZdS )zHComponentsTests.test_registerUtility_replaces_existing_reg.<locals>.IFooNr;   r   r   r   r   r>   $  s   r>   rA   r   rn   rY   )rC   r8   rZ   rU   rx   r[   rW   rN   r   rD   r   r"   r_   r%   r\   r   r`   r   rL   rA   ra   rM   )r
   r8   rU   rx   rW   r>   rE   rF   rb   Z_beforeZ_afterr,   r   r   r   r   rc   r   r   r   Ú*test_registerUtility_replaces_existing_reg  sJ    z:ComponentsTests.test_registerUtility_replaces_existing_regc              	   C   sœ   ddl m} G dd„ d|ƒ}|dƒ}d}d}d}tƒ }|  ¡ }| ||||¡ |  ¡ \}	}
|	� | ||||¡ W 5 Q R X |  |jjd | d |f¡ d S )	Nr   r7   c                   @   s   e Zd ZdS )zDComponentsTests.test_registerUtility_w_existing_subscr.<locals>.IFooNr;   r   r   r   r   r>   K  s   r>   rA   rq   rr   rX   )	rC   r8   rN   r   rD   r   r"   r'   r^   ©r
   r8   r>   rE   rF   rt   ru   rR   r,   r   r   r   r   r   Ú&test_registerUtility_w_existing_subscrH  s    z6ComponentsTests.test_registerUtility_w_existing_subscrc           
   	   C   s|   ddl m} G dd„ d|ƒ}|dƒ}d}d}tƒ }|  ¡ }|  ¡ \}}	|� | ||||d¡ W 5 Q R X |  t|	ƒd¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z;ComponentsTests.test_registerUtility_wo_event.<locals>.IFooNr;   r   r   r   r   r>   ]  s   r>   rA   r   F)rC   r8   rN   r   r   rD   r"   r_   rl   r   r   r   Útest_registerUtility_wo_eventZ  s    z-ComponentsTests.test_registerUtility_wo_eventc                 C   sz   G dd„ d|   ¡ ƒ}|ƒ }| tƒ t¡ |  tt| ¡ ƒƒd¡ G dd„ dtƒ}| tƒ |¡ |  tt| ¡ ƒƒd¡ d S )Nc                       s    e Zd ZdZ‡ fdd„Z‡  ZS )zdComponentsTests.test_registerUtility_changes_object_identity_after.<locals>.CompThatChangesAfter1Regr   c                    s4   |  j d7  _ tƒ j|Ž  | j dkr0t| jƒ| _d S )NrY   )Ú	reg_countÚsuperrD   Údictr(   ©r
   r   ©Ú	__class__r   r   rD   p  s    
ÿztComponentsTests.test_registerUtility_changes_object_identity_after.<locals>.CompThatChangesAfter1Reg.registerUtility©r#   r<   r=   r}   rD   Ú__classcell__r   r   r�   r   ÚCompThatChangesAfter1Regm  s   r…   rY   c                   @   s   e Zd ZdS )zPComponentsTests.test_registerUtility_changes_object_identity_after.<locals>.IFooNr;   r   r   r   r   r>   }  s   r>   rn   ©r   rD   rN   r   r"   r_   ÚlistÚregisteredUtilities)r
   r…   r,   r>   r   r   r   Ú2test_registerUtility_changes_object_identity_afterj  s    zBComponentsTests.test_registerUtility_changes_object_identity_afterc                 C   s°   G dd„ d|   ¡ ƒ}|ƒ }| tƒ t¡ |  tt| ¡ ƒƒd¡ G dd„ dtƒ}| tƒ |¡ |  tt| ¡ ƒƒd¡ G dd„ dtƒ}| tƒ |¡ |  tt| ¡ ƒƒd	¡ d S )
Nc                       s    e Zd ZdZ‡ fdd„Z‡  ZS )zeComponentsTests.test_registerUtility_changes_object_identity_before.<locals>.CompThatChangesAfter2Regr   c                    s4   |  j d7  _ | j dkr$t| jƒ| _tƒ j|Ž  d S )NrY   rn   )r}   r   r(   r~   rD   r€   r�   r   r   rD   ‰  s    
ÿzuComponentsTests.test_registerUtility_changes_object_identity_before.<locals>.CompThatChangesAfter2Reg.registerUtilityrƒ   r   r   r�   r   ÚCompThatChangesAfter2Reg†  s   rŠ   rY   c                   @   s   e Zd ZdS )zQComponentsTests.test_registerUtility_changes_object_identity_before.<locals>.IFooNr;   r   r   r   r   r>   —  s   r>   rn   c                   @   s   e Zd ZdS )zQComponentsTests.test_registerUtility_changes_object_identity_before.<locals>.IBarNr;   r   r   r   r   ÚIBar�  s   r‹   é   r†   )r
   rŠ   r,   r>   r‹   r   r   r   Ú3test_registerUtility_changes_object_identity_beforeƒ  s    zCComponentsTests.test_registerUtility_changes_object_identity_beforec                 C   s"   |   ¡ }| jt|jd d d d� d S )N)rL   r`   rM   )r   rO   rP   ÚunregisterUtilityr2   r   r   r   Ú<test_unregisterUtility_wo_factory_nor_component_nor_provided£  s    
  ÿzLComponentsTests.test_unregisterUtility_wo_factory_nor_component_nor_providedc                 C   s.   dd„ }t ƒ }|  ¡ }| jt|j||d� d S )Nc                   S   s
   t ƒ ‚d S r   rH   r   r   r   r   rJ   ©  s    zSComponentsTests.test_unregisterUtility_both_factory_and_component.<locals>._factoryrK   )rN   r   rO   rP   rŽ   rQ   r   r   r   Ú1test_unregisterUtility_both_factory_and_component¨  s    
 ÿzAComponentsTests.test_unregisterUtility_both_factory_and_componentc           
   	   C   sx   ddl m} G dd„ d|ƒ}|dƒ}d}tƒ }|  ¡ }|  ¡ \}}|� | |||¡}	W 5 Q R X |  |	¡ |  |¡ d S )Nr   r7   c                   @   s   e Zd ZdS )zEComponentsTests.test_unregisterUtility_w_component_miss.<locals>.IFooNr;   r   r   r   r   r>   ³  s   r>   r   )rC   r8   rN   r   r   rŽ   ÚassertFalse)
r
   r8   r>   rE   rb   rR   r,   r   r   Úunregr   r   r   Ú'test_unregisterUtility_w_component_miss°  s    
z7ComponentsTests.test_unregisterUtility_w_component_missc              	   C   sX  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}d}tƒ }|  ¡ }| |||¡ |  	¡ \}	}
|	� | 
|||¡}W 5 Q R X |  |¡ |  |jj¡ |  ||f|j¡ |  |jj¡ |  t|
ƒd¡ |
d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jj|¡ |  |jj|¡ |  |jj¡ d S )	Nr   r7   rw   rV   c                   @   s   e Zd ZdS )z@ComponentsTests.test_unregisterUtility_w_component.<locals>.IFooNr;   r   r   r   r   r>   Å  s   r>   r   rY   )rC   r8   rZ   rx   r[   rW   rN   r   rD   r   rŽ   Ú
assertTruer‘   r'   r]   ZassertNotInr(   r^   r"   r_   r%   r\   r   r`   r   rL   ra   rM   )r
   r8   rx   rW   r>   rE   rb   rR   r,   r   r   r’   r   r   rc   r   r   r   Ú"test_unregisterUtility_w_componentÀ  s6    
z2ComponentsTests.test_unregisterUtility_w_componentc              	      sF  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}d}d}tƒ ‰ ‡ fd	d
„}|  ¡ }	|	jd ||||d� |  	¡ \}
}|
� |	j
d |||d�}W 5 Q R X |  |¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|	¡ |  |jj|¡ |  |jj|¡ |  |jjˆ ¡ |  |jj|¡ d S )Nr   r7   rw   rV   c                   @   s   e Zd ZdS )z>ComponentsTests.test_unregisterUtility_w_factory.<locals>.IFooNr;   r   r   r   r   r>   å  s   r>   rA   r   c                      s   ˆ S r   r   r   re   r   r   rJ   í  s    zBComponentsTests.test_unregisterUtility_w_factory.<locals>._factoryrf   rY   )rC   r8   rZ   rx   r[   rW   rN   r   rD   r   rŽ   r”   r"   r_   r%   r\   r   r`   r   rL   rM   )r
   r8   rx   rW   r>   rE   rF   rb   rJ   r,   r   r   r’   r   r   rc   r   re   r   Ú test_unregisterUtility_w_factoryà  s4    
z0ComponentsTests.test_unregisterUtility_w_factoryc              	   C   sd  ddl m} ddl m} ddlm} ddlm} G dd„ d|ƒ}G dd	„ d	ƒ}|dƒ}d
}d}	|ƒ }
||
|ƒ |  ¡ }| |
||	|¡ |  	¡ \}}|� | 
|
d |	¡}W 5 Q R X |  |¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jj|	¡ |  |jj|
¡ |  |jj|¡ |  |jj¡ d S )Nr   r7   ri   rw   rV   c                   @   s   e Zd ZdS )zIComponentsTests.test_unregisterUtility_wo_explicit_provided.<locals>.IFooNr;   r   r   r   r   r>     s   r>   c                   @   s   e Zd ZdS )zHComponentsTests.test_unregisterUtility_wo_explicit_provided.<locals>.FooNr;   r   r   r   r   r@     s   r@   rA   r   rY   ©rC   r8   rj   rZ   rx   r[   rW   r   rD   r   rŽ   r”   r"   r_   r%   rN   r\   r   r`   r   rL   rA   ra   rM   ©r
   r8   rj   rx   rW   r>   r@   rE   rF   rb   rR   r,   r   r   r’   r   r   rc   r   r   r   Ú+test_unregisterUtility_wo_explicit_provided  s:    

z;ComponentsTests.test_unregisterUtility_wo_explicit_providedc              	   C   sd  ddl m} ddl m} ddlm} ddlm} G dd„ d|ƒ}G dd	„ d	ƒ}|dƒ}d
}d}	|ƒ }
||
|ƒ |  ¡ }| |
||	|¡ |  	¡ \}}|� |j
||	d�}W 5 Q R X |  |¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jj|	¡ |  |jj|
¡ |  |jj|¡ |  |jj¡ d S )Nr   r7   ri   rw   rV   c                   @   s   e Zd ZdS )zLComponentsTests.test_unregisterUtility_wo_component_or_factory.<locals>.IFooNr;   r   r   r   r   r>   ,  s   r>   c                   @   s   e Zd ZdS )zKComponentsTests.test_unregisterUtility_wo_component_or_factory.<locals>.FooNr;   r   r   r   r   r@   /  s   r@   rA   r   ©r`   r   rY   r—   r˜   r   r   r   Ú.test_unregisterUtility_wo_component_or_factory&  s:    

z>ComponentsTests.test_unregisterUtility_wo_component_or_factoryc              	   C   sª   ddl m} G dd„ d|ƒ}|dƒ}d}d}d}tƒ }|  ¡ }| ||||¡ | ||||¡ |  ¡ \}	}
|	� | |||¡ W 5 Q R X |  |jj	d | d |f¡ d S )	Nr   r7   c                   @   s   e Zd ZdS )zFComponentsTests.test_unregisterUtility_w_existing_subscr.<locals>.IFooNr;   r   r   r   r   r>   N  s   r>   rA   rq   rr   rX   ©
rC   r8   rN   r   rD   r   rŽ   r"   r'   r^   rz   r   r   r   Ú(test_unregisterUtility_w_existing_subscrK  s    z8ComponentsTests.test_unregisterUtility_w_existing_subscrc              	   C   sª   ddl m} G dd„ d|ƒ}|dƒ}d}d}d}tƒ }|  ¡ }| ||||¡ | ||||¡ |  ¡ \}	}
|	� | |||¡ W 5 Q R X |  |jj	d | d |f¡ d S )	Nr   r7   c                   @   s   e Zd ZdS )zSComponentsTests.test_unregisterUtility_w_existing_subscr_non_hashable.<locals>.IFooNr;   r   r   r   r   r>   a  s   r>   rA   rq   rr   rX   )
rC   r8   r   r   rD   r   rŽ   r"   r'   r^   rz   r   r   r   Ú5test_unregisterUtility_w_existing_subscr_non_hashable^  s    zEComponentsTests.test_unregisterUtility_w_existing_subscr_non_hashablec              	   C   s¶   ddl m} ddlm} G dd„ d|ƒ}|dƒ}d}d}d}tƒ }|  ¡ }	|	 ||||¡ |	 ||||¡ |  ¡ \}
}|
� |	 |||¡ W 5 Q R X |  	|	j
jd | d	 |f¡ d S )
Nr   r7   )Ú_UtilityRegistrationsc                   @   s   e Zd ZdS )z]ComponentsTests.test_unregisterUtility_w_existing_subs_non_hashable_fresh_cache.<locals>.IFooNr;   r   r   r   r   r>   w  s   r>   rA   rq   rr   rX   )rC   r8   r[   rŸ   r   r   rD   r   rŽ   r"   r'   r^   )r
   r8   rŸ   r>   rE   rF   rt   ru   rR   r,   r   r   r   r   r   Ú?test_unregisterUtility_w_existing_subs_non_hashable_fresh_cacheq  s    zOComponentsTests.test_unregisterUtility_w_existing_subs_non_hashable_fresh_cachec              	   C   sº   ddl m} G dd„ d|ƒ}|dƒ}d}d}d}tƒ }|  ¡ }| ||||¡ | ||||¡ | d¡ | ||||¡ |  ¡ \}	}
|	� | |||¡ W 5 Q R X |  dt	|j
jƒ¡ d S )	Nr   r7   c                   @   s   e Zd ZdS )z]ComponentsTests.test_unregisterUtility_w_existing_subscr_non_hashable_reinitted.<locals>.IFooNr;   r   r   r   r   r>   �  s   r>   rA   rq   rr   r.   )rC   r8   r   r   rD   Ú__init__r   rŽ   r"   r_   r'   r^   rz   r   r   r   Ú?test_unregisterUtility_w_existing_subscr_non_hashable_reinittedˆ  s     
zOComponentsTests.test_unregisterUtility_w_existing_subscr_non_hashable_reinittedc              	   C   s°   ddl m} G dd„ d|ƒ}|dƒ}d}d}d}tƒ }tƒ }|  ¡ }	|	 ||||¡ |	 ||||¡ |  ¡ \}
}|
� |	 |||¡ W 5 Q R X |  |	jj	d | d |f¡ d S )	Nr   r7   c                   @   s   e Zd ZdS )zVComponentsTests.test_unregisterUtility_w_existing_subscr_other_component.<locals>.IFooNr;   r   r   r   r   r>   §  s   r>   rA   rq   rr   rX   rœ   rs   r   r   r   Ú8test_unregisterUtility_w_existing_subscr_other_component¤  s"    ÿzHComponentsTests.test_unregisterUtility_w_existing_subscr_other_componentc              	   C   s°   ddl m} G dd„ d|ƒ}|dƒ}d}d}d}tƒ }tƒ }|  ¡ }	|	 ||||¡ |	 ||||¡ |  ¡ \}
}|
� |	 |||¡ W 5 Q R X |  |	j	j
d | d |f¡ d S )	Nr   r7   c                   @   s   e Zd ZdS )z[ComponentsTests.test_unregisterUtility_w_existing_subscr_oter_comp_mixed_hash.<locals>.IFooNr;   r   r   r   r   r>   ¼  s   r>   rA   rq   rr   rX   )rC   r8   rN   r   r   rD   r   rŽ   r"   r'   r^   rs   r   r   r   Ú=test_unregisterUtility_w_existing_subscr_oter_comp_mixed_hash¹  s"    ÿzMComponentsTests.test_unregisterUtility_w_existing_subscr_oter_comp_mixed_hashc                 C   s    |   ¡ }|  t| ¡ ƒg ¡ d S r   )r   r"   r‡   rˆ   r2   r   r   r   Útest_registeredUtilities_emptyÐ  s    z.ComponentsTests.test_registeredUtilities_emptyc                 C   s†  ddl m} ddlm} G dd„ d|ƒ}|dƒ}d}d}d}tƒ }|  ¡ }	|	 ||||¡ |	 ||||¡ t|	 ¡ d	d
„ d�}
|  	t
|
ƒd¡ |  |
d |¡ |  |
d j|	¡ |  |
d j|¡ |  |
d j|¡ |  |
d j|¡ |  |
d j|¡ |  |
d j¡ |  |
d |¡ |  |
d j|	¡ |  |
d j|¡ |  |
d j|¡ |  |
d j|¡ |  |
d j|¡ |  |
d j¡ d S )Nr   r7   rV   c                   @   s   e Zd ZdS )z?ComponentsTests.test_registeredUtilities_notempty.<locals>.IFooNr;   r   r   r   r   r>   Ø  s   r>   rA   rq   rr   c                 S   s   | j S r   ©r   ©Úrr   r   r   Ú<lambda>ã  ó    zCComponentsTests.test_registeredUtilities_notempty.<locals>.<lambda>©Úkeyrn   rY   )rC   r8   r[   rW   rN   r   rD   Úsortedrˆ   r"   r_   r%   r\   r   r`   r   rL   rA   ra   rM   )r
   r8   rW   r>   rE   rF   rt   ru   rR   r,   Úregr   r   r   Ú!test_registeredUtilities_notemptyÔ  s6    z1ComponentsTests.test_registeredUtilities_notemptyc                 C   s@   ddl m} G dd„ d|ƒ}|dƒ}|  ¡ }|  | |¡¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z?ComponentsTests.test_queryUtility_miss_no_default.<locals>.IFooNr;   r   r   r   r   r>   ÷  s   r>   )rC   r8   r   ra   ÚqueryUtility©r
   r8   r>   rE   r,   r   r   r   Ú!test_queryUtility_miss_no_defaultô  s
    z1ComponentsTests.test_queryUtility_miss_no_defaultc                 C   sL   ddl m} G dd„ d|ƒ}|dƒ}|  ¡ }tƒ }|  |j||d�|¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z>ComponentsTests.test_queryUtility_miss_w_default.<locals>.IFooNr;   r   r   r   r   r>     s   r>   ©Údefault)rC   r8   r   rN   r\   r°   )r
   r8   r>   rE   r,   Ú_defaultr   r   r   Ú test_queryUtility_miss_w_defaultþ  s    z0ComponentsTests.test_queryUtility_miss_w_defaultc                 C   sT   ddl m} G dd„ d|ƒ}|dƒ}tƒ }|  ¡ }| ||¡ |  | |¡|¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z3ComponentsTests.test_queryUtility_hit.<locals>.IFooNr;   r   r   r   r   r>     s   r>   )rC   r8   rN   r   rD   r\   r°   ©r
   r8   r>   rE   rR   r,   r   r   r   Útest_queryUtility_hit	  s    z%ComponentsTests.test_queryUtility_hitc                 C   sL   ddl m} ddlm} G dd„ d|ƒ}|dƒ}|  ¡ }|  ||j|¡ d S )Nr   r7   ©ÚComponentLookupErrorc                   @   s   e Zd ZdS )z2ComponentsTests.test_getUtility_miss.<locals>.IFooNr;   r   r   r   r   r>     s   r>   )rC   r8   rZ   rº   r   rO   Ú
getUtility)r
   r8   rº   r>   rE   r,   r   r   r   Útest_getUtility_miss  s    z$ComponentsTests.test_getUtility_missc                 C   sT   ddl m} G dd„ d|ƒ}|dƒ}tƒ }|  ¡ }| ||¡ |  | |¡|¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z1ComponentsTests.test_getUtility_hit.<locals>.IFooNr;   r   r   r   r   r>   #  s   r>   )rC   r8   rN   r   rD   r\   r»   r·   r   r   r   Útest_getUtility_hit   s    z#ComponentsTests.test_getUtility_hitc                 C   sF   ddl m} G dd„ d|ƒ}|dƒ}|  ¡ }|  t| |¡ƒg ¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z7ComponentsTests.test_getUtilitiesFor_miss.<locals>.IFooNr;   r   r   r   r   r>   /  s   r>   )rC   r8   r   r"   r‡   ÚgetUtilitiesForr±   r   r   r   Útest_getUtilitiesFor_miss,  s
    z)ComponentsTests.test_getUtilitiesFor_missc                 C   s€   ddl m} G dd„ d|ƒ}|dƒ}d}d}tƒ }|  ¡ }|j|||d� |j|||d� |  t| |¡ƒ||f||fg¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z6ComponentsTests.test_getUtilitiesFor_hit.<locals>.IFooNr;   r   r   r   r   r>   9  s   r>   rq   rr   r¦   )rC   r8   rN   r   rD   r"   r­   r¾   ©r
   r8   r>   rE   rt   ru   rR   r,   r   r   r   Útest_getUtilitiesFor_hit6  s    ÿz(ComponentsTests.test_getUtilitiesFor_hitc                 C   sF   ddl m} G dd„ d|ƒ}|dƒ}|  ¡ }|  t| |¡ƒg ¡ d S )Nr   r7   c                   @   s   e Zd ZdS )zDComponentsTests.test_getAllUtilitiesRegisteredFor_miss.<locals>.IFooNr;   r   r   r   r   r>   I  s   r>   )rC   r8   r   r"   r‡   ÚgetAllUtilitiesRegisteredForr±   r   r   r   Ú&test_getAllUtilitiesRegisteredFor_missF  s
    z6ComponentsTests.test_getAllUtilitiesRegisteredFor_missc                 C   sv   ddl m} G dd„ d|ƒ}|dƒ}d}d}tƒ }|  ¡ }|j|||d� |j|||d� |  t| |¡ƒ|g¡ d S )Nr   r7   c                   @   s   e Zd ZdS )zCComponentsTests.test_getAllUtilitiesRegisteredFor_hit.<locals>.IFooNr;   r   r   r   r   r>   S  s   r>   rq   rr   r¦   )rC   r8   rN   r   rD   r"   r‡   rÂ   rÀ   r   r   r   Ú%test_getAllUtilitiesRegisteredFor_hitP  s    ÿz5ComponentsTests.test_getAllUtilitiesRegisteredFor_hitc           	      C   s�   ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒ}|dƒG dd	„ d	ƒƒ}d
}|  ¡ }|j||f||d� |  |j|f|df ||f¡ d S )Nr   r7   r9   c                   @   s   e Zd ZdS )zFComponentsTests.test_registerAdapter_with_component_name.<locals>.IFooNr;   r   r   r   r   r>   d  s   r>   r‹   r?   c                   @   s   e Zd ZdS )zEComponentsTests.test_registerAdapter_with_component_name.<locals>.FooNr;   r   r   r   r   r@   j  s   r@   rA   rB   )rC   r8   r:   r   ÚregisterAdapterr"   r)   )	r
   r8   r:   r>   rE   Úibarr@   rF   r,   r   r   r   Ú(test_registerAdapter_with_component_name`  s    þz8ComponentsTests.test_registerAdapter_with_component_namec              	   C   sx  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}d}d	}d
d„ }	|  ¡ }
|  ¡ \}}|� |
 |	|f|||¡ W 5 Q R X |  	|
j
jd | | | |	¡ |  |
j|f||f |	|f¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  	|jj|
¡ |  	|jj|¡ |  |jj|f¡ |  	|jj|¡ |  	|jj|¡ |  	|jj|	¡ d S )Nr   r7   rT   ©ÚAdapterRegistrationc                   @   s   e Zd ZdS )zSComponentsTests.test_registerAdapter_w_explicit_provided_and_required.<locals>.IFooNr;   r   r   r   r   r>   {  s   r>   r‹   rA   r   c                 S   s
   t ƒ ‚d S r   rH   ©Úcontextr   r   r   rJ   ƒ  s    zWComponentsTests.test_registerAdapter_w_explicit_provided_and_required.<locals>._factoryrY   ©rC   r8   rZ   rU   r[   rÉ   r   r   rÅ   r\   r&   r]   r"   r)   r_   r%   rN   r   r`   Úrequiredr   rA   rM   )r
   r8   rU   rÉ   r>   rE   rÆ   rF   rb   rJ   r,   r   r   r   r   rc   r   r   r   Ú5test_registerAdapter_w_explicit_provided_and_requiredv  s@    þÿzEComponentsTests.test_registerAdapter_w_explicit_provided_and_requiredc                 C   s`   ddl m} G dd„ d|ƒ}|dƒ}d}d}G dd	„ d	ƒ}|  ¡ }| jt|j||f||d
� d S )Nr   r7   c                   @   s   e Zd ZdS )zHComponentsTests.test_registerAdapter_no_provided_available.<locals>.IFooNr;   r   r   r   r   r>   Ÿ  s   r>   r‹   rA   r   c                   @   s   e Zd ZdS )zLComponentsTests.test_registerAdapter_no_provided_available.<locals>._FactoryNr;   r   r   r   r   Ú_Factory¦  s   rÏ   ©r   rA   ©rC   r8   r   rO   rP   rÅ   )r
   r8   r>   rÆ   rF   rb   rÏ   r,   r   r   r   Ú*test_registerAdapter_no_provided_availableœ  s     ÿz:ComponentsTests.test_registerAdapter_no_provided_availablec              	   C   s’  ddl m} ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}d	}d
}	||ƒG dd„ dƒƒ}
|  ¡ }|  ¡ \}}|� |j	|
|f|	|d� W 5 Q R X |  
|jjd | | |	 |
¡ |  |j|f||	f |
|f¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  
|jj|¡ |  
|jj|¡ |  |jj|f¡ |  
|jj|	¡ |  
|jj|¡ |  
|jj|
¡ d S )Nr   r7   ©ÚimplementerrT   rÈ   c                   @   s   e Zd ZdS )zGComponentsTests.test_registerAdapter_wo_explicit_provided.<locals>.IFooNr;   r   r   r   r   r>   ³  s   r>   r‹   rA   r   c                   @   s   e Zd ZdS )zKComponentsTests.test_registerAdapter_wo_explicit_provided.<locals>._FactoryNr;   r   r   r   r   rÏ   »  s   rÏ   rÐ   rY   )rC   r8   rÔ   rZ   rU   r[   rÉ   r   r   rÅ   r\   r&   r]   r"   r)   r_   r%   rN   r   r`   rÍ   r   rA   rM   )r
   r8   rÔ   rU   rÉ   r>   rE   rÆ   rF   rb   rÏ   r,   r   r   r   r   rc   r   r   r   Ú)test_registerAdapter_wo_explicit_provided­  sD    þÿz9ComponentsTests.test_registerAdapter_wo_explicit_providedc                 C   s^   ddl m} G dd„ d|ƒ}|dƒ}d}d}G dd„ dƒ}|  ¡ }| jt|j||||d	� d S )
Nr   r7   c                   @   s   e Zd ZdS )zHComponentsTests.test_registerAdapter_no_required_available.<locals>.IFooNr;   r   r   r   r   r>   Ù  s   r>   rA   r   c                   @   s   e Zd ZdS )zLComponentsTests.test_registerAdapter_no_required_available.<locals>._FactoryNr;   r   r   r   r   rÏ   á  s   rÏ   ©r`   r   rA   rÑ   ©r
   r8   r>   rE   rF   rb   rÏ   r,   r   r   r   Ú*test_registerAdapter_no_required_availableÖ  s      ÿz:ComponentsTests.test_registerAdapter_no_required_availablec           	   	   C   sh   ddl m} G dd„ d|ƒ}|dƒ}|dƒ}d}d}G dd	„ d	ƒ}|  ¡ }| jt|j|||||d
� d S )Nr   r7   c                   @   s   e Zd ZdS )zEComponentsTests.test_registerAdapter_w_invalid_required.<locals>.IFooNr;   r   r   r   r   r>   ë  s   r>   r‹   rA   r   c                   @   s   e Zd ZdS )zIComponentsTests.test_registerAdapter_w_invalid_required.<locals>._FactoryNr;   r   r   r   r   rÏ   ó  s   rÏ   rÖ   rÑ   )	r
   r8   r>   rE   rÆ   rF   rb   rÏ   r,   r   r   r   Ú'test_registerAdapter_w_invalid_requiredè  s       ÿz7ComponentsTests.test_registerAdapter_w_invalid_requiredc              	   C   s„  ddl m} ddlm} ddlm} ddlm} G dd„ d|ƒ}|dƒ}d}d	}G d
d„ dƒ}	|  ¡ }
|  	¡ \}}|� |
j
|	d g|||d� W 5 Q R X |  |
jjd | | | |	¡ |  |
j|f||f |	|f¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|
¡ |  |jj|¡ |  |jj|f¡ |  |jj|¡ |  |jj|¡ |  |jj|	¡ d S )Nr   r7   r   rT   rÈ   c                   @   s   e Zd ZdS )zMComponentsTests.test_registerAdapter_w_required_containing_None.<locals>.IFooNr;   r   r   r   r   r>      s   r>   rA   r   c                   @   s   e Zd ZdS )zQComponentsTests.test_registerAdapter_w_required_containing_None.<locals>._FactoryNr;   r   r   r   r   rÏ     s   rÏ   rÖ   rY   )rC   r8   Zzope.interface.interfacer   rZ   rU   r[   rÉ   r   r   rÅ   r\   r&   r]   r"   r)   r_   r%   rN   r   r`   rÍ   r   rA   rM   )r
   r8   r   rU   rÉ   r>   rE   rF   rb   rÏ   r,   r   r   r   r   rc   r   r   r   Ú/test_registerAdapter_w_required_containing_Noneú  sH     ÿþþz?ComponentsTests.test_registerAdapter_w_required_containing_Nonec              	   C   s¶  ddl m} ddl m} ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|d	ƒ}d
}	d}
G dd„ dƒ}||ƒG dd„ dƒƒ}||ƒ}|  ¡ }|  	¡ \}}|� |j
||g||
|	d� W 5 Q R X |  |jjd | | |
 |¡ |  |j|f||
f ||	f¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jj|f¡ |  |jj|
¡ |  |jj|	¡ |  |jj|¡ d S )Nr   r7   )ÚimplementedByrÓ   rT   rÈ   c                   @   s   e Zd ZdS )zNComponentsTests.test_registerAdapter_w_required_containing_class.<locals>.IFooNr;   r   r   r   r   r>   +  s   r>   r‹   rA   r   c                   @   s   e Zd ZdS )zRComponentsTests.test_registerAdapter_w_required_containing_class.<locals>._FactoryNr;   r   r   r   r   rÏ   3  s   rÏ   c                   @   s   e Zd ZdS )zRComponentsTests.test_registerAdapter_w_required_containing_class.<locals>._ContextNr;   r   r   r   r   Ú_Context6  s   rÜ   rÖ   rY   )rC   r8   rÛ   rÔ   rZ   rU   r[   rÉ   r   r   rÅ   r\   r&   r]   r"   r)   r_   r%   rN   r   r`   rÍ   r   rA   rM   )r
   r8   rÛ   rÔ   rU   rÉ   r>   rE   rÆ   rF   rb   rÏ   rÜ   Z	_ctx_implr,   r   r   r   r   rc   r   r   r   Ú0test_registerAdapter_w_required_containing_class$  sR     ÿþþz@ComponentsTests.test_registerAdapter_w_required_containing_classc              	   C   st   ddl m} G dd„ d|ƒ}|dƒ}d}d}G dd„ dƒ}|  ¡ }|  t¡� |j|tƒ g|||d	� W 5 Q R X d S )
Nr   r7   c                   @   s   e Zd ZdS )zMComponentsTests.test_registerAdapter_w_required_containing_junk.<locals>.IFooNr;   r   r   r   r   r>   X  s   r>   rA   r   c                   @   s   e Zd ZdS )zQComponentsTests.test_registerAdapter_w_required_containing_junk.<locals>._FactoryNr;   r   r   r   r   rÏ   `  s   rÏ   rÖ   )rC   r8   r   rO   rP   rÅ   rN   r×   r   r   r   Ú/test_registerAdapter_w_required_containing_junkU  s        ÿz?ComponentsTests.test_registerAdapter_w_required_containing_junkc              	      s€  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ‰ d}d	}G ‡ fd
d„dƒ}|  ¡ }	|  ¡ \}
}|
� |	j||||d� W 5 Q R X |  	|	j
jd ˆ  | | |¡ |  |	jˆ f||f ||f¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  	|jj|	¡ |  	|jj|¡ |  |jjˆ f¡ |  	|jj|¡ |  	|jj|¡ |  	|jj|¡ d S )Nr   r7   rT   rÈ   c                   @   s   e Zd ZdS )zGComponentsTests.test_registerAdapter_wo_explicit_required.<locals>.IFooNr;   r   r   r   r   r>   n  s   r>   r‹   rA   r   c                       s   e Zd Z” fZdS )zKComponentsTests.test_registerAdapter_wo_explicit_required.<locals>._FactoryN©r#   r<   r=   Ú__component_adapts__r   ©rÆ   r   r   rÏ   v  s   rÏ   rÖ   rY   rÌ   )r
   r8   rU   rÉ   r>   rE   rF   rb   rÏ   r,   r   r   r   r   rc   r   rá   r   Ú)test_registerAdapter_wo_explicit_requiredi  sD    
ÿþÿz9ComponentsTests.test_registerAdapter_wo_explicit_requiredc              	   C   sŒ   ddl m} G dd„ d|ƒ}|dƒ}|dƒ}d}d}dd	„ }|  ¡ }|  ¡ \}	}
|	� |j||f|||d
d� W 5 Q R X |  t|
ƒd¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z;ComponentsTests.test_registerAdapter_wo_event.<locals>.IFooNr;   r   r   r   r   r>   ”  s   r>   r‹   rA   r   c                 S   s
   t ƒ ‚d S r   rH   rÊ   r   r   r   rJ   œ  s    z?ComponentsTests.test_registerAdapter_wo_event.<locals>._factoryF)rc   )rC   r8   r   r   rÅ   r"   r_   )r
   r8   r>   rE   rÆ   rF   rb   rJ   r,   r   r   r   r   r   Útest_registerAdapter_wo_event‘  s    ÿz-ComponentsTests.test_registerAdapter_wo_eventc                 C   s    |   ¡ }| jt|jd d d� d S ©N)rM   r`   )r   rO   rP   ÚunregisterAdapterr2   r   r   r   Ú3test_unregisterAdapter_neither_factory_nor_provided¥  s
    
 ÿzCComponentsTests.test_unregisterAdapter_neither_factory_nor_providedc                 C   sF   ddl m} G dd„ d|ƒ}|dƒ}|  ¡ }| jt|jd |d d� d S )Nr   r7   c                   @   s   e Zd ZdS )zQComponentsTests.test_unregisterAdapter_neither_factory_nor_required.<locals>.IFooNr;   r   r   r   r   r>   ­  s   r>   ©rM   r`   rÍ   )rC   r8   r   rO   rP   rå   r±   r   r   r   Ú3test_unregisterAdapter_neither_factory_nor_requiredª  s    
  ÿzCComponentsTests.test_unregisterAdapter_neither_factory_nor_requiredc           
   	   C   s|   ddl m} G dd„ d|ƒ}|dƒ}|dƒ}G dd„ dƒ}|  ¡ }|  ¡ \}}|� | ||f|¡}	W 5 Q R X |  |	¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z9ComponentsTests.test_unregisterAdapter_miss.<locals>.IFooNr;   r   r   r   r   r>   ¸  s   r>   r‹   c                   @   s   e Zd ZdS )z=ComponentsTests.test_unregisterAdapter_miss.<locals>._FactoryNr;   r   r   r   r   rÏ   ¾  s   rÏ   )rC   r8   r   r   rå   r‘   ©
r
   r8   r>   rE   rÆ   rÏ   r,   r   r   r’   r   r   r   Útest_unregisterAdapter_missµ  s    z+ComponentsTests.test_unregisterAdapter_missc              	   C   sh  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}G dd	„ d	ƒ}|  ¡ }| ||f|¡ |  ¡ \}	}
|	� | 	||f|¡}W 5 Q R X |  
|¡ |  |jj¡ |  |j¡ |  t|
ƒd
¡ |
d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jj|f¡ |  |jjd¡ |  |jjd¡ |  |jj|¡ d S )Nr   r7   rw   rÈ   c                   @   s   e Zd ZdS )zYComponentsTests.test_unregisterAdapter_hit_w_explicit_provided_and_required.<locals>.IFooNr;   r   r   r   r   r>   Ì  s   r>   r‹   c                   @   s   e Zd ZdS )z]ComponentsTests.test_unregisterAdapter_hit_w_explicit_provided_and_required.<locals>._FactoryNr;   r   r   r   r   rÏ   Ò  s   rÏ   rY   rX   )rC   r8   rZ   rx   r[   rÉ   r   rÅ   r   rå   r”   r‘   r&   r]   r)   r"   r_   r%   rN   r\   r   r`   rÍ   r   rA   rM   )r
   r8   rx   rÉ   r>   rE   rÆ   rÏ   r,   r   r   r’   r   r   rc   r   r   r   Ú;test_unregisterAdapter_hit_w_explicit_provided_and_requiredÇ  s6    
zKComponentsTests.test_unregisterAdapter_hit_w_explicit_provided_and_requiredc              	   C   s`  ddl m} ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}||ƒG d	d
„ d
ƒƒ}|  ¡ }	|	 ||f|¡ |  	¡ \}
}|
� |	 
||f¡}W 5 Q R X |  |¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|	¡ |  |jj|¡ |  |jj|f¡ |  |jjd¡ |  |jjd¡ |  |jj|¡ d S )Nr   r7   rÓ   rw   rÈ   c                   @   s   e Zd ZdS )zIComponentsTests.test_unregisterAdapter_wo_explicit_provided.<locals>.IFooNr;   r   r   r   r   r>   ð  s   r>   r‹   c                   @   s   e Zd ZdS )zMComponentsTests.test_unregisterAdapter_wo_explicit_provided.<locals>._FactoryNr;   r   r   r   r   rÏ   ö  s   rÏ   rY   rX   )rC   r8   rÔ   rZ   rx   r[   rÉ   r   rÅ   r   rå   r”   r"   r_   r%   rN   r\   r   r`   rÍ   r   rA   rM   )r
   r8   rÔ   rx   rÉ   r>   rE   rÆ   rÏ   r,   r   r   r’   r   r   rc   r   r   r   Ú+test_unregisterAdapter_wo_explicit_providedê  s6    
z;ComponentsTests.test_unregisterAdapter_wo_explicit_providedc              	      sP  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ‰ G ‡ fdd	„d	ƒ}|  ¡ }| |ˆ f|¡ |  ¡ \}}	|� |j	||d
�}
W 5 Q R X |  
|
¡ |  t|	ƒd¡ |	d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jjˆ f¡ |  |jjd¡ |  |jjd¡ |  |jj|¡ d S )Nr   r7   rw   rÈ   c                   @   s   e Zd ZdS )zIComponentsTests.test_unregisterAdapter_wo_explicit_required.<locals>.IFooNr;   r   r   r   r   r>     s   r>   r‹   c                       s   e Zd Z” fZdS )zMComponentsTests.test_unregisterAdapter_wo_explicit_required.<locals>._FactoryNrß   r   rá   r   r   rÏ     s   rÏ   ©r`   rY   rX   )rC   r8   rZ   rx   r[   rÉ   r   rÅ   r   rå   r”   r"   r_   r%   rN   r\   r   r`   rÍ   r   rA   rM   )r
   r8   rx   rÉ   r>   rE   rÏ   r,   r   r   r’   r   r   rc   r   rá   r   Ú+test_unregisterAdapter_wo_explicit_required  s2    
z;ComponentsTests.test_unregisterAdapter_wo_explicit_requiredc                 C   s    |   ¡ }|  t| ¡ ƒg ¡ d S r   )r   r"   r‡   ÚregisteredAdaptersr2   r   r   r   Útest_registeredAdapters_empty.  s    z-ComponentsTests.test_registeredAdapters_emptyc                 C   s¦  ddl m} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}d}d}d}G d	d
„ d
ƒ}	|  ¡ }
|
 |	|f|||¡ |
 |	|f|||¡ t|
 ¡ dd„ d�}|  t	|ƒd¡ |  
|d |¡ |  |d j|
¡ |  |d j|¡ |  |d j|f¡ |  |d j|¡ |  |d j|¡ |  |d j|	¡ |  
|d |¡ |  |d j|
¡ |  |d j|¡ |  |d j|f¡ |  |d j|¡ |  |d j|¡ |  |d j|	¡ d S )Nr   r7   rÈ   c                   @   s   e Zd ZdS )z>ComponentsTests.test_registeredAdapters_notempty.<locals>.IFooNr;   r   r   r   r   r>   6  s   r>   rA   rq   rr   c                   @   s   e Zd ZdS )zBComponentsTests.test_registeredAdapters_notempty.<locals>._FactoryNr;   r   r   r   r   rÏ   ?  s   rÏ   c                 S   s   | j S r   r¦   r§   r   r   r   r©   E  rª   zBComponentsTests.test_registeredAdapters_notempty.<locals>.<lambda>r«   rn   rY   )rC   r8   r[   rÉ   r   rÅ   r­   rï   r"   r_   r%   r\   r   r`   rÍ   r   rA   rM   )r
   r8   rÉ   r>   rE   rÆ   rF   rt   ru   rÏ   r,   r®   r   r   r   Ú test_registeredAdapters_notempty2  s8    z0ComponentsTests.test_registeredAdapters_notemptyc                 C   sH   ddl m} G dd„ d|ƒ}|dƒ}|  ¡ }tƒ }|  | ||¡¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z?ComponentsTests.test_queryAdapter_miss_no_default.<locals>.IFooNr;   r   r   r   r   r>   Y  s   r>   )rC   r8   r   rN   ra   ÚqueryAdapter)r
   r8   r>   rE   r,   Ú_contextr   r   r   Ú!test_queryAdapter_miss_no_defaultV  s    z1ComponentsTests.test_queryAdapter_miss_no_defaultc                 C   sT   ddl m} G dd„ d|ƒ}|dƒ}|  ¡ }tƒ }tƒ }|  |j|||d�|¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z>ComponentsTests.test_queryAdapter_miss_w_default.<locals>.IFooNr;   r   r   r   r   r>   d  s   r>   r³   )rC   r8   r   rN   r\   rò   )r
   r8   r>   rE   r,   ró   rµ   r   r   r   Ú test_queryAdapter_miss_w_defaulta  s    þz0ComponentsTests.test_queryAdapter_miss_w_defaultc                 C   s¤   ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒ}G dd„ dƒ}||ƒG d	d
„ d
ƒƒ}|ƒ }|  ¡ }	|	 ||f|¡ |	 ||¡}
|  |
|¡ |  |
j|¡ d S )Nr   r7   rÓ   c                   @   s   e Zd ZdS )z3ComponentsTests.test_queryAdapter_hit.<locals>.IFooNr;   r   r   r   r   r>   t  s   r>   r‹   c                   @   s   e Zd Zdd„ ZdS )z7ComponentsTests.test_queryAdapter_hit.<locals>._Factoryc                 S   s
   || _ d S r   rÊ   ©r
   rË   r   r   r   r¡   {  s    z@ComponentsTests.test_queryAdapter_hit.<locals>._Factory.__init__N©r#   r<   r=   r¡   r   r   r   r   rÏ   z  s   rÏ   c                   @   s   e Zd ZdS )z7ComponentsTests.test_queryAdapter_hit.<locals>._ContextNr;   r   r   r   r   rÜ   ~  s   rÜ   )	rC   r8   rÔ   r   rÅ   rò   r%   r\   rË   ©r
   r8   rÔ   r>   rE   rÆ   rÏ   rÜ   ró   r,   Úadapterr   r   r   Útest_queryAdapter_hitp  s    z%ComponentsTests.test_queryAdapter_hitc           
      C   s~   ddl m} ddl m} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}||ƒG dd	„ d	ƒƒ}|ƒ }|  ¡ }	|  ||	j||¡ d S )
Nr   r7   rÓ   r¹   c                   @   s   e Zd ZdS )z2ComponentsTests.test_getAdapter_miss.<locals>.IFooNr;   r   r   r   r   r>   Ž  s   r>   r‹   c                   @   s   e Zd ZdS )z6ComponentsTests.test_getAdapter_miss.<locals>._ContextNr;   r   r   r   r   rÜ   ”  s   rÜ   )rC   r8   rÔ   rZ   rº   r   rO   Ú
getAdapter)
r
   r8   rÔ   rº   r>   rE   rÆ   rÜ   ró   r,   r   r   r   Útest_getAdapter_miss‰  s      ÿz$ComponentsTests.test_getAdapter_missc                 C   s¤   ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒ}G dd„ dƒ}||ƒG d	d
„ d
ƒƒ}|ƒ }|  ¡ }	|	 ||f|¡ |	 ||¡}
|  |
|¡ |  |
j|¡ d S )Nr   r7   rÓ   c                   @   s   e Zd ZdS )z1ComponentsTests.test_getAdapter_hit.<locals>.IFooNr;   r   r   r   r   r>   ¡  s   r>   r‹   c                   @   s   e Zd Zdd„ ZdS )z5ComponentsTests.test_getAdapter_hit.<locals>._Factoryc                 S   s
   || _ d S r   rÊ   rö   r   r   r   r¡   ¨  s    z>ComponentsTests.test_getAdapter_hit.<locals>._Factory.__init__Nr÷   r   r   r   r   rÏ   §  s   rÏ   c                   @   s   e Zd ZdS )z5ComponentsTests.test_getAdapter_hit.<locals>._ContextNr;   r   r   r   r   rÜ   «  s   rÜ   )	rC   r8   rÔ   r   rÅ   rû   r%   r\   rË   rø   r   r   r   Útest_getAdapter_hit�  s    z#ComponentsTests.test_getAdapter_hitc                    s$  ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	|ƒ}||ƒG d
d„ dƒƒ}||ƒG dd„ d|ƒƒ}G dd„ dƒ}G dd„ dƒ}	|  ¡ }
|
 |	|f|¡ |
 ||f|¡ |  |
¡ |ƒ }|
 ||¡}|  ||	¡ |  	|j
|¡ t||ƒ}|
 ||¡}|  ||¡ |  	|j
|¡ d S )Nr   r   rÓ   c                   @   s   e Zd ZdS )z8ComponentsTests.test_getAdapter_hit_super.<locals>.IBaseNr;   r   r   r   r   ÚIBaseº  s   rþ   c                   @   s   e Zd ZdS )z;ComponentsTests.test_getAdapter_hit_super.<locals>.IDerivedNr;   r   r   r   r   ÚIDerived½  s   rÿ   c                   @   s   e Zd ZdS )z7ComponentsTests.test_getAdapter_hit_super.<locals>.IFooNr;   r   r   r   r   r>   À  s   r>   c                   @   s   e Zd ZdS )z7ComponentsTests.test_getAdapter_hit_super.<locals>.BaseNr;   r   r   r   r   ÚBaseÃ  s   r   c                   @   s   e Zd ZdS )z:ComponentsTests.test_getAdapter_hit_super.<locals>.DerivedNr;   r   r   r   r   ÚDerivedÇ  s   r  c                   @   s   e Zd Zdd„ ZdS )z>ComponentsTests.test_getAdapter_hit_super.<locals>.AdapterBasec                 S   s
   || _ d S r   rÊ   rö   r   r   r   r¡   Ì  s    zGComponentsTests.test_getAdapter_hit_super.<locals>.AdapterBase.__init__Nr÷   r   r   r   r   ÚAdapterBaseË  s   r  c                   @   s   e Zd Zdd„ ZdS )zAComponentsTests.test_getAdapter_hit_super.<locals>.AdapterDerivedc                 S   s
   || _ d S r   rÊ   rö   r   r   r   r¡   Ð  s    zJComponentsTests.test_getAdapter_hit_super.<locals>.AdapterDerived.__init__Nr÷   r   r   r   r   ÚAdapterDerivedÏ  s   r  ©r   r   rC   rÔ   r   rÅ   Ú_should_not_changerû   r%   r\   rË   r~   ©r
   r   rÔ   rþ   rÿ   r>   r   r  r  r  r,   Úderivedrù   Úsuper�   r   r   Útest_getAdapter_hit_super¶  s.    

z)ComponentsTests.test_getAdapter_hit_superc                    sF  ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	|ƒ}G d
d„ dƒ}G dd„ d|ƒ}||ƒG dd„ d|ƒƒ}||ƒG dd„ d||ƒƒ}	G dd„ dƒ}
G dd„ dƒ}|  ¡ }| ||f|¡ | |
|f|¡ |  |¡ |	ƒ }| ||¡}|  ||¡ |  	|j
|¡ t|	|ƒ}| ||¡}|  ||
¡ |  	|j
|¡ d S )Nr   r   rÓ   c                   @   s   e Zd ZdS )z^ComponentsTests.test_getAdapter_hit_super_w_parent_implements_interface_diamond.<locals>.IBaseNr;   r   r   r   r   rþ   æ  s   rþ   c                   @   s   e Zd ZdS )zaComponentsTests.test_getAdapter_hit_super_w_parent_implements_interface_diamond.<locals>.IDerivedNr;   r   r   r   r   rÿ   é  s   rÿ   c                   @   s   e Zd ZdS )z]ComponentsTests.test_getAdapter_hit_super_w_parent_implements_interface_diamond.<locals>.IFooNr;   r   r   r   r   r>   ì  s   r>   c                   @   s   e Zd ZdS )z]ComponentsTests.test_getAdapter_hit_super_w_parent_implements_interface_diamond.<locals>.BaseNr;   r   r   r   r   r   ï  s   r   c                   @   s   e Zd ZdS )z_ComponentsTests.test_getAdapter_hit_super_w_parent_implements_interface_diamond.<locals>.Child1Nr;   r   r   r   r   ÚChild1ò  s   r
  c                   @   s   e Zd ZdS )z_ComponentsTests.test_getAdapter_hit_super_w_parent_implements_interface_diamond.<locals>.Child2Nr;   r   r   r   r   ÚChild2õ  s   r  c                   @   s   e Zd ZdS )z`ComponentsTests.test_getAdapter_hit_super_w_parent_implements_interface_diamond.<locals>.DerivedNr;   r   r   r   r   r  ù  s   r  c                   @   s   e Zd Zdd„ ZdS )zdComponentsTests.test_getAdapter_hit_super_w_parent_implements_interface_diamond.<locals>.AdapterBasec                 S   s
   || _ d S r   rÊ   rö   r   r   r   r¡   þ  s    zmComponentsTests.test_getAdapter_hit_super_w_parent_implements_interface_diamond.<locals>.AdapterBase.__init__Nr÷   r   r   r   r   r  ý  s   r  c                   @   s   e Zd Zdd„ ZdS )zgComponentsTests.test_getAdapter_hit_super_w_parent_implements_interface_diamond.<locals>.AdapterDerivedc                 S   s
   || _ d S r   rÊ   rö   r   r   r   r¡     s    zpComponentsTests.test_getAdapter_hit_super_w_parent_implements_interface_diamond.<locals>.AdapterDerived.__init__Nr÷   r   r   r   r   r    s   r  r  )r
   r   rÔ   rþ   rÿ   r>   r   r
  r  r  r  r  r,   r  rù   r  r�   r   r   Ú?test_getAdapter_hit_super_w_parent_implements_interface_diamondâ  s2    

zOComponentsTests.test_getAdapter_hit_super_w_parent_implements_interface_diamondc                 C   sœ   ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒ}|dƒ}||ƒG dd	„ d	ƒƒ}||ƒG d
d„ dƒƒ}|ƒ }	|ƒ }
|  ¡ }|  | |	|
f|¡d ¡ d S )Nr   r7   rÓ   c                   @   s   e Zd ZdS )z9ComponentsTests.test_queryMultiAdapter_miss.<locals>.IFooNr;   r   r   r   r   r>     s   r>   r‹   ÚIBazc                   @   s   e Zd ZdS )z>ComponentsTests.test_queryMultiAdapter_miss.<locals>._Context1Nr;   r   r   r   r   Ú	_Context1  s   r  c                   @   s   e Zd ZdS )z>ComponentsTests.test_queryMultiAdapter_miss.<locals>._Context2Nr;   r   r   r   r   Ú	_Context2"  s   r  )rC   r8   rÔ   r   r"   ÚqueryMultiAdapter©r
   r8   rÔ   r>   rE   rÆ   Úibazr  r  Ú	_context1Ú	_context2r,   r   r   r   Útest_queryMultiAdapter_miss  s     ÿz+ComponentsTests.test_queryMultiAdapter_missc                 C   s¦   ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒ}|dƒ}||ƒG dd	„ d	ƒƒ}||ƒG d
d„ dƒƒ}|ƒ }	|ƒ }
tƒ }|  ¡ }|  |j|	|
f||d�|¡ d S )Nr   r7   rÓ   c                   @   s   e Zd ZdS )zCComponentsTests.test_queryMultiAdapter_miss_w_default.<locals>.IFooNr;   r   r   r   r   r>   0  s   r>   r‹   r  c                   @   s   e Zd ZdS )zHComponentsTests.test_queryMultiAdapter_miss_w_default.<locals>._Context1Nr;   r   r   r   r   r  7  s   r  c                   @   s   e Zd ZdS )zHComponentsTests.test_queryMultiAdapter_miss_w_default.<locals>._Context2Nr;   r   r   r   r   r  ;  s   r  r³   )rC   r8   rÔ   rN   r   r\   r  )r
   r8   rÔ   r>   rE   rÆ   r  r  r  r  r  rµ   r,   r   r   r   Ú%test_queryMultiAdapter_miss_w_default,  s(    ÿýz5ComponentsTests.test_queryMultiAdapter_miss_w_defaultc                 C   sÒ   ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒ}|dƒ}||ƒG dd	„ d	ƒƒ}||ƒG d
d„ dƒƒ}|ƒ }	|ƒ }
G dd„ dƒ}|  ¡ }| |||f|¡ | |	|
f|¡}|  ||¡ |  |j|	|
f¡ d S )Nr   r7   rÓ   c                   @   s   e Zd ZdS )z8ComponentsTests.test_queryMultiAdapter_hit.<locals>.IFooNr;   r   r   r   r   r>   M  s   r>   r‹   r  c                   @   s   e Zd ZdS )z=ComponentsTests.test_queryMultiAdapter_hit.<locals>._Context1Nr;   r   r   r   r   r  T  s   r  c                   @   s   e Zd ZdS )z=ComponentsTests.test_queryMultiAdapter_hit.<locals>._Context2Nr;   r   r   r   r   r  X  s   r  c                   @   s   e Zd Zdd„ ZdS )z<ComponentsTests.test_queryMultiAdapter_hit.<locals>._Factoryc                 S   s   ||f| _ d S r   rÊ   ©r
   Úcontext1Úcontext2r   r   r   r¡   `  s    zEComponentsTests.test_queryMultiAdapter_hit.<locals>._Factory.__init__Nr÷   r   r   r   r   rÏ   _  s   rÏ   )	rC   r8   rÔ   r   rÅ   r  r%   r"   rË   ©r
   r8   rÔ   r>   rE   rÆ   r  r  r  r  r  rÏ   r,   rù   r   r   r   Útest_queryMultiAdapter_hitI  s$    z*ComponentsTests.test_queryMultiAdapter_hitc                 C   s¦   ddl m} ddl m} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}|dƒ}||ƒG d	d
„ d
ƒƒ}||ƒG dd„ dƒƒ}	|ƒ }
|	ƒ }|  ¡ }|  ||j|
|f|¡ d S )Nr   r7   rÓ   r¹   c                   @   s   e Zd ZdS )z7ComponentsTests.test_getMultiAdapter_miss.<locals>.IFooNr;   r   r   r   r   r>   n  s   r>   r‹   r  c                   @   s   e Zd ZdS )z<ComponentsTests.test_getMultiAdapter_miss.<locals>._Context1Nr;   r   r   r   r   r  u  s   r  c                   @   s   e Zd ZdS )z<ComponentsTests.test_getMultiAdapter_miss.<locals>._Context2Nr;   r   r   r   r   r  y  s   r  )rC   r8   rÔ   rZ   rº   r   rO   ÚgetMultiAdapter)r
   r8   rÔ   rº   r>   rE   rÆ   r  r  r  r  r  r,   r   r   r   Útest_getMultiAdapter_missi  s&      ÿz)ComponentsTests.test_getMultiAdapter_missc                 C   sÒ   ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒ}|dƒ}||ƒG dd	„ d	ƒƒ}||ƒG d
d„ dƒƒ}|ƒ }	|ƒ }
G dd„ dƒ}|  ¡ }| |||f|¡ | |	|
f|¡}|  ||¡ |  |j|	|
f¡ d S )Nr   r7   rÓ   c                   @   s   e Zd ZdS )z6ComponentsTests.test_getMultiAdapter_hit.<locals>.IFooNr;   r   r   r   r   r>   ‡  s   r>   r‹   r  c                   @   s   e Zd ZdS )z;ComponentsTests.test_getMultiAdapter_hit.<locals>._Context1Nr;   r   r   r   r   r  Ž  s   r  c                   @   s   e Zd ZdS )z;ComponentsTests.test_getMultiAdapter_hit.<locals>._Context2Nr;   r   r   r   r   r  ’  s   r  c                   @   s   e Zd Zdd„ ZdS )z:ComponentsTests.test_getMultiAdapter_hit.<locals>._Factoryc                 S   s   ||f| _ d S r   rÊ   r  r   r   r   r¡   š  s    zCComponentsTests.test_getMultiAdapter_hit.<locals>._Factory.__init__Nr÷   r   r   r   r   rÏ   ™  s   rÏ   )	rC   r8   rÔ   r   rÅ   r  r%   r"   rË   r  r   r   r   Útest_getMultiAdapter_hitƒ  s$    z(ComponentsTests.test_getMultiAdapter_hitc                    s(   ‡ fdd„}||_ ||j_ ||jj_ d S )Nc                     s   ˆ   d¡ d S )NzNothing should get changed)Zfail)r   r	   r   r   Ú
no_changes§  s    z6ComponentsTests._should_not_change.<locals>.no_changes)Úchangedr&   Ú	_v_lookup)r
   r,   r  r   r	   r   r  £  s    z"ComponentsTests._should_not_changec                    sZ  ddl m} ddlm} G dd„ d|ƒ}G dd„ d|ƒ}G dd	„ d	|ƒ}||ƒG d
d„ dƒƒ}||ƒG dd„ d|ƒƒ}G dd„ dƒ}G dd„ d|ƒ}	|  ¡ }
|
 |	||f|¡ |
 |||f|¡ |  |
¡ |ƒ }|
 ||f|¡}|  ||	¡ |  	|j
|¡ |  	|j|¡ t||ƒ}|
 ||f|¡}|  ||¡ |  ||	¡ |  	|j
|¡ |  	|j|¡ d S )Nr   r   rÓ   c                   @   s   e Zd ZdS )z=ComponentsTests.test_getMultiAdapter_hit_super.<locals>.IBaseNr;   r   r   r   r   rþ   ±  s   rþ   c                   @   s   e Zd ZdS )z@ComponentsTests.test_getMultiAdapter_hit_super.<locals>.IDerivedNr;   r   r   r   r   rÿ   ´  s   rÿ   c                   @   s   e Zd ZdS )z<ComponentsTests.test_getMultiAdapter_hit_super.<locals>.IFooNr;   r   r   r   r   r>   ·  s   r>   c                   @   s   e Zd ZdS )z<ComponentsTests.test_getMultiAdapter_hit_super.<locals>.BaseNr;   r   r   r   r   r   º  s   r   c                   @   s   e Zd ZdS )z?ComponentsTests.test_getMultiAdapter_hit_super.<locals>.DerivedNr;   r   r   r   r   r  ¾  s   r  c                   @   s   e Zd Zdd„ ZdS )zCComponentsTests.test_getMultiAdapter_hit_super.<locals>.AdapterBasec                 S   s   || _ || _d S r   ©r  r  r  r   r   r   r¡   Ã  s    zLComponentsTests.test_getMultiAdapter_hit_super.<locals>.AdapterBase.__init__Nr÷   r   r   r   r   r  Â  s   r  c                   @   s   e Zd ZdS )zFComponentsTests.test_getMultiAdapter_hit_super.<locals>.AdapterDerivedNr;   r   r   r   r   r  Ç  s   r  )r   r   rC   rÔ   r   rÅ   r  r  r%   r\   r  r  r~   ZassertNotIsInstancer  r�   r   r   Útest_getMultiAdapter_hit_super­  s4    

z.ComponentsTests.test_getMultiAdapter_hit_superc                 C   s    ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒ}|dƒ}||ƒG dd	„ d	ƒƒ}||ƒG d
d„ dƒƒ}|ƒ }	|ƒ }
|  ¡ }|  t| |	|
f|¡ƒg ¡ d S )Nr   r7   rÓ   c                   @   s   e Zd ZdS )z4ComponentsTests.test_getAdapters_empty.<locals>.IFooNr;   r   r   r   r   r>   à  s   r>   r‹   r  c                   @   s   e Zd ZdS )z9ComponentsTests.test_getAdapters_empty.<locals>._Context1Nr;   r   r   r   r   r  ç  s   r  c                   @   s   e Zd ZdS )z9ComponentsTests.test_getAdapters_empty.<locals>._Context2Nr;   r   r   r   r   r  ë  s   r  )rC   r8   rÔ   r   r"   r‡   ÚgetAdaptersr  r   r   r   Útest_getAdapters_emptyÜ  s"     ÿz&ComponentsTests.test_getAdapters_emptyc                    sÔ   ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒ}|dƒ}||ƒG dd	„ d	ƒƒ}||ƒG d
d„ dƒƒ}|ƒ }	|ƒ }
|  ¡ }g ‰ ‡ fdd„}| |||f|¡ |  t| |	|
f|¡ƒg ¡ |  ˆ |	|
fg¡ d S )Nr   r7   rÓ   c                   @   s   e Zd ZdS )zCComponentsTests.test_getAdapters_factory_returns_None.<locals>.IFooNr;   r   r   r   r   r>   ù  s   r>   r‹   r  c                   @   s   e Zd ZdS )zHComponentsTests.test_getAdapters_factory_returns_None.<locals>._Context1Nr;   r   r   r   r   r     s   r  c                   @   s   e Zd ZdS )zHComponentsTests.test_getAdapters_factory_returns_None.<locals>._Context2Nr;   r   r   r   r   r    s   r  c                    s   ˆ   | |f¡ d S r   r   r"  ©Z_called_withr   r   Ú_side_effect_only  s    zPComponentsTests.test_getAdapters_factory_returns_None.<locals>._side_effect_only)rC   r8   rÔ   r   rÅ   r"   r‡   r$  )r
   r8   rÔ   r>   rE   rÆ   r  r  r  r  r  r,   r'  r   r&  r   Ú%test_getAdapters_factory_returns_Noneõ  s*     ÿz5ComponentsTests.test_getAdapters_factory_returns_Nonec                 C   sH  ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒ}|dƒ}||ƒG dd	„ d	ƒƒ}||ƒG d
d„ dƒƒ}|ƒ }	|ƒ }
G dd„ dƒ}G dd„ dƒ}d}d}|  ¡ }|j|||f||d� |j|||f||d� t| |	|
f|¡ƒ}|  t|ƒd¡ |  |d d |¡ |  	|d d |¡ |  |d d |¡ |  	|d d |¡ d S )Nr   r7   rÓ   c                   @   s   e Zd ZdS )z8ComponentsTests.test_getAdapters_non_empty.<locals>.IFooNr;   r   r   r   r   r>     s   r>   r‹   r  c                   @   s   e Zd ZdS )z=ComponentsTests.test_getAdapters_non_empty.<locals>._Context1Nr;   r   r   r   r   r  !  s   r  c                   @   s   e Zd ZdS )z=ComponentsTests.test_getAdapters_non_empty.<locals>._Context2Nr;   r   r   r   r   r  %  s   r  c                   @   s   e Zd Zdd„ ZdS )z=ComponentsTests.test_getAdapters_non_empty.<locals>._Factory1c                 S   s   ||f| _ d S r   rÊ   r  r   r   r   r¡   -  s    zFComponentsTests.test_getAdapters_non_empty.<locals>._Factory1.__init__Nr÷   r   r   r   r   Ú	_Factory1,  s   r)  c                   @   s   e Zd Zdd„ ZdS )z=ComponentsTests.test_getAdapters_non_empty.<locals>._Factory2c                 S   s   ||f| _ d S r   rÊ   r  r   r   r   r¡   1  s    zFComponentsTests.test_getAdapters_non_empty.<locals>._Factory2.__init__Nr÷   r   r   r   r   Ú	_Factory20  s   r*  rq   rr   r¦   rn   rY   )
rC   r8   rÔ   r   rÅ   r­   r$  r"   r_   r%   )r
   r8   rÔ   r>   rE   rÆ   r  r  r  r  r  r)  r*  rt   ru   r,   Úfoundr   r   r   Útest_getAdapters_non_empty  s2    z*ComponentsTests.test_getAdapters_non_emptyc           	   	   C   sb   ddl m} G dd„ d|ƒ}|dƒ}|dƒ}d}d}dd	„ }|  ¡ }|  t|j||f|||¡ d S )
Nr   r7   c                   @   s   e Zd ZdS )zNComponentsTests.test_registerSubscriptionAdapter_w_nonblank_name.<locals>.IFooNr;   r   r   r   r   r>   C  s   r>   r‹   r   rA   c                 S   s
   t ƒ ‚d S r   rH   rÊ   r   r   r   rJ   K  s    zRComponentsTests.test_registerSubscriptionAdapter_w_nonblank_name.<locals>._factory)rC   r8   r   rO   rP   ÚregisterSubscriptionAdapter)	r
   r8   r>   rE   rÆ   rb   rF   rJ   r,   r   r   r   Ú0test_registerSubscriptionAdapter_w_nonblank_name@  s    
    ÿz@ComponentsTests.test_registerSubscriptionAdapter_w_nonblank_namec              	   C   sŽ  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}d}d	}d
d„ }	|  ¡ }
|  ¡ \}}|� |
j|	|f||d� W 5 Q R X |
j	j
d | | | }|  t|ƒd¡ |  |d |	¡ |  |
j|f|||	|fg¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|
¡ |  |jj|¡ |  |jj|f¡ |  |jj|¡ |  |jj|¡ |  |jj|	¡ d S )Nr   r7   rT   ©ÚSubscriptionRegistrationc                   @   s   e Zd ZdS )z]ComponentsTests.test_registerSubscriptionAdapter_w_explicit_provided_n_required.<locals>.IFooNr;   r   r   r   r   r>   W  s   r>   r‹   rX   rA   c                 S   s
   t ƒ ‚d S r   rH   rÊ   r   r   r   rJ   _  s    zaComponentsTests.test_registerSubscriptionAdapter_w_explicit_provided_n_required.<locals>._factoryrB   rY   ©rC   r8   rZ   rU   r[   r0  r   r   r-  r&   r^   r"   r_   r\   r*   r%   rN   r   r`   rÍ   r   rA   rM   )r
   r8   rU   r0  r>   rE   rÆ   Ú_blankrF   rJ   r,   r   r   r®   r   r   rc   r   r   r   Ú?test_registerSubscriptionAdapter_w_explicit_provided_n_requiredR  sB    ÿÿzOComponentsTests.test_registerSubscriptionAdapter_w_explicit_provided_n_requiredc              	   C   s¦  ddl m} ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}d	}d
}	||ƒG dd„ dƒƒ}
|  ¡ }|  ¡ \}}|� |j	|
|f|d� W 5 Q R X |j
jd | | |	 }|  t|ƒd¡ |  |d |
¡ |  |j|f||	|
|fg¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jj|f¡ |  |jj|	¡ |  |jj|¡ |  |jj|
¡ d S )Nr   r7   rÓ   rT   r/  c                   @   s   e Zd ZdS )zSComponentsTests.test_registerSubscriptionAdapter_wo_explicit_provided.<locals>.IFooNr;   r   r   r   r   r>     s   r>   r‹   rA   rX   c                   @   s   e Zd ZdS )zWComponentsTests.test_registerSubscriptionAdapter_wo_explicit_provided.<locals>._FactoryNr;   r   r   r   r   rÏ   ‡  s   rÏ   rB   rY   )rC   r8   rÔ   rZ   rU   r[   r0  r   r   r-  r&   r^   r"   r_   r\   r*   r%   rN   r   r`   rÍ   r   rA   rM   )r
   r8   rÔ   rU   r0  r>   rE   rÆ   rF   r2  rÏ   r,   r   r   r®   r   r   rc   r   r   r   Ú5test_registerSubscriptionAdapter_wo_explicit_providedy  sB    ÿzEComponentsTests.test_registerSubscriptionAdapter_wo_explicit_providedc              	      s”  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ‰ d}d	}G ‡ fd
d„dƒ}|  ¡ }	|  ¡ \}
}|
� |	j|||d� W 5 Q R X |	j	j
d ˆ  | | }|  t|ƒd¡ |  |d |¡ |  |	jˆ f||||fg¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|	¡ |  |jj|¡ |  |jjˆ f¡ |  |jj|¡ |  |jj|¡ |  |jj|¡ d S )Nr   r7   rT   r/  c                   @   s   e Zd ZdS )zSComponentsTests.test_registerSubscriptionAdapter_wo_explicit_required.<locals>.IFooNr;   r   r   r   r   r>   ¦  s   r>   r‹   rA   rX   c                       s   e Zd Z” fZdS )zWComponentsTests.test_registerSubscriptionAdapter_wo_explicit_required.<locals>._FactoryNrß   r   rá   r   r   rÏ   ®  s   rÏ   )r`   rA   rY   r1  )r
   r8   rU   r0  r>   rE   rF   r2  rÏ   r,   r   r   r®   r   r   rc   r   rá   r   Ú5test_registerSubscriptionAdapter_wo_explicit_required¡  sF      ÿÿzEComponentsTests.test_registerSubscriptionAdapter_wo_explicit_requiredc           
   	   C   s†   ddl m} G dd„ d|ƒ}|dƒ}|dƒ}d}dd„ }|  ¡ }|  ¡ \}}	|� |j||f||d	d
� W 5 Q R X |  t|	ƒd¡ d S )Nr   r7   c                   @   s   e Zd ZdS )zGComponentsTests.test_registerSubscriptionAdapter_wo_event.<locals>.IFooNr;   r   r   r   r   r>   Ì  s   r>   r‹   rA   c                 S   s
   t ƒ ‚d S r   rH   rÊ   r   r   r   rJ   Ó  s    zKComponentsTests.test_registerSubscriptionAdapter_wo_event.<locals>._factoryF©rA   rc   )rC   r8   r   r   r-  r"   r_   )
r
   r8   r>   rE   rÆ   rF   rJ   r,   r   r   r   r   r   Ú)test_registerSubscriptionAdapter_wo_eventÉ  s     ÿz9ComponentsTests.test_registerSubscriptionAdapter_wo_eventc                 C   s    |   ¡ }|  t| ¡ ƒg ¡ d S r   )r   r"   r‡   ÚregisteredSubscriptionAdaptersr2   r   r   r   Ú)test_registeredSubscriptionAdapters_emptyÝ  s    z9ComponentsTests.test_registeredSubscriptionAdapters_emptyc                 C   sš  ddl m} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}d}d}G dd	„ d	ƒ}|  ¡ }	|	j||f||d
� |	j||f||d
� t|	 ¡ ƒ}
|  t	|
ƒd¡ |  
|
d |¡ |  |
d j|	¡ |  |
d j|¡ |  |
d j|f¡ |  |
d j|¡ |  |
d j|¡ |  |
d j|¡ |  
|
d |¡ |  |
d j|	¡ |  |
d j|¡ |  |
d j|f¡ |  |
d j|¡ |  |
d j|¡ |  |
d j|¡ d S )Nr   r7   r/  c                   @   s   e Zd ZdS )zJComponentsTests.test_registeredSubscriptionAdapters_notempty.<locals>.IFooNr;   r   r   r   r   r>   å  s   r>   rA   rX   c                   @   s   e Zd ZdS )zNComponentsTests.test_registeredSubscriptionAdapters_notempty.<locals>._FactoryNr;   r   r   r   r   rÏ   í  s   rÏ   rB   rn   rY   )rC   r8   r[   r0  r   r-  r‡   r8  r"   r_   r%   r\   r   r`   rÍ   r   rA   rM   )r
   r8   r0  r>   rE   rÆ   rF   r2  rÏ   r,   r®   r   r   r   Ú,test_registeredSubscriptionAdapters_notemptyá  s6    z<ComponentsTests.test_registeredSubscriptionAdapters_notemptyc                 C   sR   ddl m} G dd„ d|ƒ}|dƒ}|dƒ}d}|  ¡ }| jt|j|||d� d S )Nr   r7   c                   @   s   e Zd ZdS )zPComponentsTests.test_unregisterSubscriptionAdapter_w_nonblank_name.<locals>.IFooNr;   r   r   r   r   r>     s   r>   r‹   Únonblank)rÍ   r`   r   ©rC   r8   r   rO   rP   ÚunregisterSubscriptionAdapter)r
   r8   r>   rE   rÆ   Ú	_nonblankr,   r   r   r   Ú2test_unregisterSubscriptionAdapter_w_nonblank_name  s    
  ÿzBComponentsTests.test_unregisterSubscriptionAdapter_w_nonblank_namec                 C   s    |   ¡ }| jt|jd d d� d S rä   )r   rO   rP   r=  r2   r   r   r   Ú?test_unregisterSubscriptionAdapter_neither_factory_nor_provided  s
    
 ÿzOComponentsTests.test_unregisterSubscriptionAdapter_neither_factory_nor_providedc                 C   sF   ddl m} G dd„ d|ƒ}|dƒ}|  ¡ }| jt|jd |d d� d S )Nr   r7   c                   @   s   e Zd ZdS )z]ComponentsTests.test_unregisterSubscriptionAdapter_neither_factory_nor_required.<locals>.IFooNr;   r   r   r   r   r>     s   r>   rç   r<  r±   r   r   r   Ú?test_unregisterSubscriptionAdapter_neither_factory_nor_required  s    
  ÿzOComponentsTests.test_unregisterSubscriptionAdapter_neither_factory_nor_requiredc           
   	   C   s†   ddl m} G dd„ d|ƒ}|dƒ}|dƒ}G dd„ dƒ}|  ¡ }|  ¡ \}}|� | ||f|¡}	W 5 Q R X |  |	¡ |  |¡ d S )Nr   r7   c                   @   s   e Zd ZdS )zEComponentsTests.test_unregisterSubscriptionAdapter_miss.<locals>.IFooNr;   r   r   r   r   r>   $  s   r>   r‹   c                   @   s   e Zd ZdS )zIComponentsTests.test_unregisterSubscriptionAdapter_miss.<locals>._FactoryNr;   r   r   r   r   rÏ   *  s   rÏ   )rC   r8   r   r   r=  r‘   ré   r   r   r   Ú'test_unregisterSubscriptionAdapter_miss!  s    
z7ComponentsTests.test_unregisterSubscriptionAdapter_missc              	   C   sf  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}G dd	„ d	ƒ}|  ¡ }| ||f|¡ |  ¡ \}	}
|	� | 	d |f|¡}W 5 Q R X |  
|¡ |  |jj¡ |  |j¡ |  t|
ƒd
¡ |
d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jj|f¡ |  |jjd¡ |  |jjd¡ |  |jj¡ d S )Nr   r7   rw   r/  c                   @   s   e Zd ZdS )zOComponentsTests.test_unregisterSubscriptionAdapter_hit_wo_factory.<locals>.IFooNr;   r   r   r   r   r>   9  s   r>   r‹   c                   @   s   e Zd ZdS )zSComponentsTests.test_unregisterSubscriptionAdapter_hit_wo_factory.<locals>._FactoryNr;   r   r   r   r   rÏ   ?  s   rÏ   rY   rX   )rC   r8   rZ   rx   r[   r0  r   r-  r   r=  r”   r‘   r&   r^   r*   r"   r_   r%   rN   r\   r   r`   rÍ   r   rA   ra   rM   ©r
   r8   rx   r0  r>   rE   rÆ   rÏ   r,   r   r   r’   r   r   rc   r   r   r   Ú1test_unregisterSubscriptionAdapter_hit_wo_factory4  s6    
zAComponentsTests.test_unregisterSubscriptionAdapter_hit_wo_factoryc              	   C   sh  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}G dd	„ d	ƒ}|  ¡ }| ||f|¡ |  ¡ \}	}
|	� | 	||f|¡}W 5 Q R X |  
|¡ |  |jj¡ |  |j¡ |  t|
ƒd
¡ |
d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jj|f¡ |  |jjd¡ |  |jjd¡ |  |jj|¡ d S )Nr   r7   rw   r/  c                   @   s   e Zd ZdS )zNComponentsTests.test_unregisterSubscriptionAdapter_hit_w_factory.<locals>.IFooNr;   r   r   r   r   r>   \  s   r>   r‹   c                   @   s   e Zd ZdS )zRComponentsTests.test_unregisterSubscriptionAdapter_hit_w_factory.<locals>._FactoryNr;   r   r   r   r   rÏ   b  s   rÏ   rY   rX   )rC   r8   rZ   rx   r[   r0  r   r-  r   r=  r”   r‘   r&   r^   r*   r"   r_   r%   rN   r\   r   r`   rÍ   r   rA   rM   rC  r   r   r   Ú0test_unregisterSubscriptionAdapter_hit_w_factoryW  s6    
z@ComponentsTests.test_unregisterSubscriptionAdapter_hit_w_factoryc              	   C   s`  ddl m} ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ}||ƒG d	d
„ d
ƒƒ}|  ¡ }	|	 ||f|¡ |  	¡ \}
}|
� |	 
||f¡}W 5 Q R X |  |¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|	¡ |  |jj|¡ |  |jj|f¡ |  |jjd¡ |  |jjd¡ |  |jj|¡ d S )Nr   r7   rÓ   rw   r/  c                   @   s   e Zd ZdS )zUComponentsTests.test_unregisterSubscriptionAdapter_wo_explicit_provided.<locals>.IFooNr;   r   r   r   r   r>   €  s   r>   r‹   c                   @   s   e Zd ZdS )zYComponentsTests.test_unregisterSubscriptionAdapter_wo_explicit_provided.<locals>._FactoryNr;   r   r   r   r   rÏ   †  s   rÏ   rY   rX   )rC   r8   rÔ   rZ   rx   r[   r0  r   r-  r   r=  r”   r"   r_   r%   rN   r\   r   r`   rÍ   r   rA   rM   )r
   r8   rÔ   rx   r0  r>   rE   rÆ   rÏ   r,   r   r   r’   r   r   rc   r   r   r   Ú7test_unregisterSubscriptionAdapter_wo_explicit_providedz  s6    
zGComponentsTests.test_unregisterSubscriptionAdapter_wo_explicit_providedc              	      sP  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|dƒ‰ G ‡ fdd	„d	ƒ}|  ¡ }| |ˆ f|¡ |  ¡ \}}	|� |j	||d
�}
W 5 Q R X |  
|
¡ |  t|	ƒd¡ |	d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |jjˆ f¡ |  |jjd¡ |  |jjd¡ |  |jj|¡ d S )Nr   r7   rw   r/  c                   @   s   e Zd ZdS )zUComponentsTests.test_unregisterSubscriptionAdapter_wo_explicit_required.<locals>.IFooNr;   r   r   r   r   r>   ¢  s   r>   r‹   c                       s   e Zd Z” fZdS )zYComponentsTests.test_unregisterSubscriptionAdapter_wo_explicit_required.<locals>._FactoryNrß   r   rá   r   r   rÏ   ¨  s   rÏ   rí   rY   rX   )rC   r8   rZ   rx   r[   r0  r   r-  r   r=  r”   r"   r_   r%   rN   r\   r   r`   rÍ   r   rA   rM   )r
   r8   rx   r0  r>   rE   rÏ   r,   r   r   r’   r   r   rc   r   rá   r   Ú7test_unregisterSubscriptionAdapter_wo_explicit_required�  s2    
zGComponentsTests.test_unregisterSubscriptionAdapter_wo_explicit_requiredc           	      C   sz   ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒ}|  ¡ }||ƒG dd„ dƒƒ}|ƒ }|  t| |f|¡ƒg ¡ d S )	Nr   r7   rÓ   c                   @   s   e Zd ZdS )z4ComponentsTests.test_subscribers_empty.<locals>.IFooNr;   r   r   r   r   r>   Â  s   r>   r‹   c                   @   s   e Zd ZdS )z3ComponentsTests.test_subscribers_empty.<locals>.BarNr;   r   r   r   r   ÚBarÉ  s   rH  )rC   r8   rÔ   r   r"   r‡   Úsubscribers)	r
   r8   rÔ   r>   rE   rÆ   r,   rH  Úbarr   r   r   Útest_subscribers_empty¾  s    z&ComponentsTests.test_subscribers_emptyc                    sô   ddl m} ddl m} G dd„ d|ƒ}|dƒ}|dƒ‰ G ‡ fdd„dƒ}G d	d
„ d
|ƒ}|  ¡ }| |ˆ f|¡ | |ˆ f|¡ |ˆ ƒG dd„ dƒƒ}|ƒ }	| |	f|¡}
dd„ }t|
|d�}
|  t|
ƒd¡ |  	|
d |¡ |  	|
d |¡ d S )Nr   r7   rÓ   c                   @   s   e Zd ZdS )z8ComponentsTests.test_subscribers_non_empty.<locals>.IFooNr;   r   r   r   r   r>   Ô  s   r>   r‹   c                       s   e Zd Z” fZdd„ ZdS )z<ComponentsTests.test_subscribers_non_empty.<locals>._Factoryc                 S   s
   || _ d S r   )ró   rö   r   r   r   r¡   Ý  s    zEComponentsTests.test_subscribers_non_empty.<locals>._Factory.__init__N)r#   r<   r=   rà   r¡   r   rá   r   r   rÏ   Ú  s   rÏ   c                   @   s   e Zd ZdS )z<ComponentsTests.test_subscribers_non_empty.<locals>._DerivedNr;   r   r   r   r   Ú_Derivedà  s   rL  c                   @   s   e Zd ZdS )z7ComponentsTests.test_subscribers_non_empty.<locals>.BarNr;   r   r   r   r   rH  ç  s   rH  c                 S   s   | j jS r   )r‚   r#   ©Úxr   r   r   Ú
_klassnameî  s    z>ComponentsTests.test_subscribers_non_empty.<locals>._klassnamer«   rn   rY   )
rC   r8   rÔ   r   r-  rI  r­   r"   r_   r%   )r
   r8   rÔ   r>   rE   rÏ   rL  r,   rH  rJ  rI  rO  r   rá   r   Útest_subscribers_non_emptyÐ  s&    z*ComponentsTests.test_subscribers_non_emptyc                 C   sR   ddl m} G dd„ d|ƒ}|dƒ}d}|  ¡ }dd„ }| jt|j|||d� d S )	Nr   r7   c                   @   s   e Zd ZdS )zBComponentsTests.test_registerHandler_w_nonblank_name.<locals>.IFooNr;   r   r   r   r   r>   ù  s   r>   r;  c                 S   s
   t ƒ ‚d S r   rH   rÊ   r   r   r   rJ    	  s    zFComponentsTests.test_registerHandler_w_nonblank_name.<locals>._factory©rÍ   r   )rC   r8   r   rO   rP   ÚregisterHandler)r
   r8   r>   rE   r>  r,   rJ   r   r   r   Ú$test_registerHandler_w_nonblank_nameö  s     ÿz4ComponentsTests.test_registerHandler_w_nonblank_namec              	   C   sr  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}d}d}d	d
„ }|  ¡ }	|  ¡ \}
}|
� |	j||f|d� W 5 Q R X |	j	j
d | d  | }|  t|ƒd¡ |  |d |¡ |  |	j|f|||fg¡ |  t|ƒd¡ |d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|	¡ |  |jj|f¡ |  |jj|¡ |  |jj|¡ |  |jj|¡ d S )Nr   r7   rT   ©ÚHandlerRegistrationc                   @   s   e Zd ZdS )zFComponentsTests.test_registerHandler_w_explicit_required.<locals>.IFooNr;   r   r   r   r   r>   	  s   r>   rX   rA   c                 S   s
   t ƒ ‚d S r   rH   rÊ   r   r   r   rJ   	  s    zJComponentsTests.test_registerHandler_w_explicit_required.<locals>._factoryrB   rY   )rC   r8   rZ   rU   r[   rU  r   r   rR  r&   r^   r"   r_   r\   r+   r%   rN   r   rÍ   r   rA   rM   )r
   r8   rU   rU  r>   rE   r2  rF   rJ   r,   r   r   r®   r   r   rc   r   r   r   Ú(test_registerHandler_w_explicit_required	  s:    ÿz8ComponentsTests.test_registerHandler_w_explicit_requiredc           
   	      sØ   ddl m} G dd„ d|ƒ}|dƒ‰ d}d}G ‡ fdd„dƒ}|  ¡ }|  ¡ \}}|� |j||d	d
� W 5 Q R X |jjd ˆ  d  | }	|  t|	ƒd¡ |  	|	d |¡ |  |j
ˆ f|||fg¡ |  t|ƒd¡ d S )Nr   r7   c                   @   s   e Zd ZdS )zPComponentsTests.test_registerHandler_wo_explicit_required_no_event.<locals>.IFooNr;   r   r   r   r   r>   -	  s   r>   rA   rX   c                       s   e Zd Z” fZdS )zTComponentsTests.test_registerHandler_wo_explicit_required_no_event.<locals>._FactoryNrß   r   ©rE   r   r   rÏ   4	  s   rÏ   Fr6  rY   )rC   r8   r   r   rR  r&   r^   r"   r_   r\   r+   )
r
   r8   r>   rF   r2  rÏ   r,   r   r   r®   r   rW  r   Ú2test_registerHandler_wo_explicit_required_no_event*	  s"    ÿzBComponentsTests.test_registerHandler_wo_explicit_required_no_eventc                 C   s   |   ¡ }|  t| ¡ ƒ¡ d S r   )r   r‘   r‡   ÚregisteredHandlersr2   r   r   r   Útest_registeredHandlers_emptyC	  s    z-ComponentsTests.test_registeredHandlers_emptyc           
      C   sD  ddl m} ddlm} G dd„ d|ƒ}|dƒ}dd„ }dd	„ }|  ¡ }| ||f¡ | ||f¡ d
d„ }t| ¡ |d�}	|  t	|	ƒd¡ |  
|	d |¡ |  |	d j|f¡ |  |	d jd¡ |  |	d j|¡ |  |	d jd¡ |  
|	d |¡ |  |	d j|f¡ |  |	d jd¡ |  |	d j|¡ |  |	d jd¡ d S )Nr   r7   rT  c                   @   s   e Zd ZdS )z?ComponentsTests.test_registeredHandlers_non_empty.<locals>.IFooNr;   r   r   r   r   r>   K	  s   r>   c                 S   s
   t ƒ ‚d S r   rH   rÊ   r   r   r   Ú	_factory1P	  s    zDComponentsTests.test_registeredHandlers_non_empty.<locals>._factory1c                 S   s
   t ƒ ‚d S r   rH   rÊ   r   r   r   Ú	_factory2S	  s    zDComponentsTests.test_registeredHandlers_non_empty.<locals>._factory2c                 S   s
   | j jjS r   )rM   Ú__code__Úco_namerM  r   r   r   Ú_factory_nameZ	  s    zHComponentsTests.test_registeredHandlers_non_empty.<locals>._factory_namer«   rn   rX   rY   )rC   r8   r[   rU  r   rR  r­   rY  r"   r_   r%   rÍ   r   rM   rA   )
r
   r8   rU  r>   rE   r[  r\  r,   r_  rI  r   r   r   Ú!test_registeredHandlers_non_emptyG	  s,    z1ComponentsTests.test_registeredHandlers_non_emptyc                 C   sJ   ddl m} G dd„ d|ƒ}|dƒ}d}|  ¡ }| jt|j|f|d� d S )Nr   r7   c                   @   s   e Zd ZdS )zDComponentsTests.test_unregisterHandler_w_nonblank_name.<locals>.IFooNr;   r   r   r   r   r>   m	  s   r>   r;  rQ  )rC   r8   r   rO   rP   ÚunregisterHandler)r
   r8   r>   rE   r>  r,   r   r   r   Ú&test_unregisterHandler_w_nonblank_namej	  s    
 ÿz6ComponentsTests.test_unregisterHandler_w_nonblank_namec                 C   s   |   ¡ }|  t|j¡ d S r   )r   rO   rP   ra  r2   r   r   r   Ú3test_unregisterHandler_neither_factory_nor_requiredv	  s    zCComponentsTests.test_unregisterHandler_neither_factory_nor_requiredc                 C   sH   ddl m} G dd„ d|ƒ}|dƒ}|  ¡ }|j|fd�}|  |¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z9ComponentsTests.test_unregisterHandler_miss.<locals>.IFooNr;   r   r   r   r   r>   }	  s   r>   ©rÍ   )rC   r8   r   ra  r‘   )r
   r8   r>   rE   r,   r’   r   r   r   Útest_unregisterHandler_missz	  s    z+ComponentsTests.test_unregisterHandler_missc              	   C   s$  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|  ¡ }dd„ }|  ¡ }| ||f¡ |  ¡ \}}	|� | 	||f¡}
W 5 Q R X |  
|
¡ |  t|	ƒd	¡ |	d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|f¡ |  |jjd
¡ |  |jj|¡ d S )Nr   r7   rw   rT  c                   @   s   e Zd ZdS )zXComponentsTests.test_unregisterHandler_hit_w_factory_and_explicit_provided.<locals>.IFooNr;   r   r   r   r   r>   Š	  s   r>   c                 S   s
   t ƒ ‚d S r   rH   rÊ   r   r   r   rJ   �	  s    z\ComponentsTests.test_unregisterHandler_hit_w_factory_and_explicit_provided.<locals>._factoryrY   rX   )rC   r8   rZ   rx   r[   rU  r   rR  r   ra  r”   r"   r_   r%   rN   r\   r   rÍ   r   rM   ©r
   r8   rx   rU  r>   rE   r,   rJ   r   r   r’   r   r   rc   r   r   r   Ú:test_unregisterHandler_hit_w_factory_and_explicit_provided…	  s.    
zJComponentsTests.test_unregisterHandler_hit_w_factory_and_explicit_providedc              	   C   s"  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ}|  ¡ }dd„ }|  ¡ }| ||f¡ |  ¡ \}}	|� |j	|fd	�}
W 5 Q R X |  
|
¡ |  t|	ƒd
¡ |	d \}}|\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jj|f¡ |  |jjd¡ |  |jj¡ d S )Nr   r7   rw   rT  c                   @   s   e Zd ZdS )zQComponentsTests.test_unregisterHandler_hit_w_only_explicit_provided.<locals>.IFooNr;   r   r   r   r   r>   ©	  s   r>   c                 S   s
   t ƒ ‚d S r   rH   rÊ   r   r   r   rJ   ¯	  s    zUComponentsTests.test_unregisterHandler_hit_w_only_explicit_provided.<locals>._factoryrd  rY   rX   )rC   r8   rZ   rx   r[   rU  r   rR  r   ra  r”   r"   r_   r%   rN   r\   r   rÍ   r   ra   rM   rf  r   r   r   Ú3test_unregisterHandler_hit_w_only_explicit_provided¤	  s.    
zCComponentsTests.test_unregisterHandler_hit_w_only_explicit_providedc              	      s.  ddl m} ddlm} ddlm} G dd„ d|ƒ}|dƒ‰ G ‡ fdd„dƒ}|  ¡ }| |¡ |  ¡ \}}|� | 	|¡}	W 5 Q R X |  
|	¡ |  t|ƒd	¡ |d \}
}|
\}|  |i ¡ |  ||¡ |  |j|¡ |  |jj|¡ |  |jjˆ f¡ |  |jjd
¡ |  |jjd
¡ |  |jj|¡ d S )Nr   r7   rw   rT  c                   @   s   e Zd ZdS )zIComponentsTests.test_unregisterHandler_wo_explicit_required.<locals>.IFooNr;   r   r   r   r   r>   È	  s   r>   c                       s   e Zd Z” fZdS )zMComponentsTests.test_unregisterHandler_wo_explicit_required.<locals>._FactoryNrß   r   rW  r   r   rÏ   Í	  s   rÏ   rY   rX   )rC   r8   rZ   rx   r[   rU  r   rR  r   ra  r”   r"   r_   r%   rN   r\   r   rÍ   r   rA   rM   )r
   r8   rx   rU  r>   rÏ   r,   r   r   r’   r   r   rc   r   rW  r   Ú+test_unregisterHandler_wo_explicit_requiredÃ	  s.    

z;ComponentsTests.test_unregisterHandler_wo_explicit_requiredc                 C   sd   ddl m} ddl m} G dd„ d|ƒ}|dƒ}|  ¡ }||ƒG dd„ dƒƒ}|ƒ }| |f¡ d S )Nr   r7   rÓ   c                   @   s   e Zd ZdS )z/ComponentsTests.test_handle_empty.<locals>.IFooNr;   r   r   r   r   r>   æ	  s   r>   c                   @   s   e Zd ZdS )z.ComponentsTests.test_handle_empty.<locals>.BarNr;   r   r   r   r   rH  ì	  s   rH  )rC   r8   rÔ   r   Úhandle)r
   r8   rÔ   r>   rE   r,   rH  rJ  r   r   r   Útest_handle_emptyâ	  s    z!ComponentsTests.test_handle_emptyc           
         sº   ddl m} ddl m} G dd„ d|ƒ}|dƒ}g ‰ ‡ fdd„}g ‰‡fdd	„}|  ¡ }| ||f¡ | ||f¡ ||ƒG d
d„ dƒƒ}|ƒ }	| |	¡ |  ˆ |	g¡ |  ˆ|	g¡ d S )Nr   r7   rÓ   c                   @   s   e Zd ZdS )z3ComponentsTests.test_handle_non_empty.<locals>.IFooNr;   r   r   r   r   r>   ÷	  s   r>   c                    s   ˆ   | ¡ d S r   r   rÊ   )Ú	_called_1r   r   Ú
_factory_1ý	  s    z9ComponentsTests.test_handle_non_empty.<locals>._factory_1c                    s   ˆ   | ¡ d S r   r   rÊ   )Ú	_called_2r   r   Ú
_factory_2
  s    z9ComponentsTests.test_handle_non_empty.<locals>._factory_2c                   @   s   e Zd ZdS )z2ComponentsTests.test_handle_non_empty.<locals>.BarNr;   r   r   r   r   rH  	
  s   rH  )rC   r8   rÔ   r   rR  rj  r"   )
r
   r8   rÔ   r>   rE   rm  ro  r,   rH  rJ  r   )rl  rn  r   Útest_handle_non_emptyó	  s"    
z%ComponentsTests.test_handle_non_emptyTc                 C   sü   G dd„ dt ƒ}|  ¡ }tƒ }|r&|ntƒ }|j||d� |j||dd� |  t|jjƒd¡ |  |jj|d|rv|fn||fiig¡ |  |jj||ršdnd	i¡ |j	||d�}|  
|¡ |j	||dd�}|  
|¡ |  |jji ¡ |  t|jjƒd
¡ d S )Nc                   @   s   e Zd ZdS )zQComponentsTests.test_register_unregister_identical_objects_provided.<locals>.IFooNr;   r   r   r   r   r>   
  s   r>   rí   rJ  rš   rY   rX   rŒ   é   r   )r   r   rN   rD   r"   r_   r'   r^   Z	_providedrŽ   r”   )r
   Ú	identicalr>   r,   ÚfirstÚsecondÚresr   r   r   Ú3test_register_unregister_identical_objects_provided
  s*    
 ÿ
 
ÿ

zCComponentsTests.test_register_unregister_identical_objects_providedc                 C   s   | j dd� d S )NF)rr  )rv  r	   r   r   r   Ú2test_register_unregister_nonequal_objects_provided0
  s    ÿzBComponentsTests.test_register_unregister_nonequal_objects_providedc                 C   sà  G dd„ dt ƒ}G dd„ dƒ}|  ¡ }tdƒD ]}|j|ƒ ||› d� q.|jj}|jj}|  t|ƒd¡ |  t|d ƒd¡ |  t|d | ƒd¡ |jj	}|  t|ƒd¡ |  t|d ƒd¡ |  t|d | ƒd¡ |  t|d | d	 ƒd¡ t
|ƒƒ  }|j_| i ¡ i  }	|d |< td
ƒD ]&}
tt|
ƒƒ}
|d | |
 |	|
< �q(|  ||¡ t
|ƒƒ  }|j_	| i ¡ i  }	|d |< d|	d	< tddƒD ]4}
tt|
ƒƒ}
|d | |
 }|	d	  |f7  < �qš| ¡ }|  |jj|¡ |  |d
ddddœ¡ |jdd�}|  |jj|d ¡ |  ||¡ |  ||¡ |  t|d | d	 ƒt|d | d	 ƒ¡ |d | d	 D ]}|  ||d | d	 ¡ �qr| ¡ }|  |dddddœ¡ |jdd�}|  ||¡ |  |jj|d ¡ d S )Nc                   @   s   e Zd ZdZdS )zGComponentsTests.test_rebuildUtilityRegistryFromLocalCache.<locals>.IFooúDoes nothingN©r#   r<   r=   Ú__doc__r   r   r   r   r>   7
  s   r>   c                   @   s   e Zd ZdZdS )zYComponentsTests.test_rebuildUtilityRegistryFromLocalCache.<locals>.UtilityImplementingFoorx  Nry  r   r   r   r   ÚUtilityImplementingFoo:
  s   r{  é   r¦   rY   r   rX   é
   r   é   é   é   é   é   )Zdid_not_registerZneeded_registeredZdid_not_subscribeZneeded_subscribedT)Zrebuild)r   r   ÚrangerD   r'   Z_generationr]   r"   r_   r^   Útyper   ÚstrÚassertNotEqualZ$rebuildUtilityRegistryFromLocalCacheÚassertIn)r
   r>   r{  ÚcompsÚiZorig_generationZorig_adaptersZorig_subscribersZnew_adaptersÚdr   Znew_subsr,   Zrebuild_preflightZrebuild_resultsZorig_subscriberZpreflight_afterZrebuild_afterr   r   r   Ú)test_rebuildUtilityRegistryFromLocalCache5
  s„      ÿ

û	ÿþûÿz9ComponentsTests.test_rebuildUtilityRegistryFromLocalCache)r   )T)vr#   r<   r=   r   r   r   r-   r/   r3   r6   rG   rS   rd   rg   rh   rk   rm   rp   rv   ry   r{   r|   r‰   r�   r�   r�   r“   r•   r–   r™   r›   r�   rž   r    r¢   r£   r¤   r¥   r¯   r²   r¶   r¸   r¼   r½   r¿   rÁ   rÃ   rÄ   rÇ   rÎ   rÒ   rÕ   rØ   rÙ   rÚ   rÝ   rÞ   râ   rã   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.  r3  r4  r5  r7  r9  r:  r?  r@  rA  rB  rD  rE  rF  rG  rK  rP  rS  rV  rX  rZ  r`  rb  rc  re  rg  rh  ri  rk  rp  rv  rw  r‹  r„   r   r   r�   r   r      sæ   

!!"*  "$% 


&)*1(##!$,2  
/!*'((####!&$#  ÿ
r   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚUnhashableComponentsTestsc                    s    G dd„ dt t| ƒ ¡ tƒ}|S )Nc                   @   s   e Zd ZdS )z=UnhashableComponentsTests._getTargetClass.<locals>.ComponentsNr;   r   r   r   r   r   ™
  s   r   )r~   rŒ  r   r   )r
   r   r�   r   r   r   •
  s
    
 ÿz)UnhashableComponentsTests._getTargetClass)r#   r<   r=   r   r„   r   r   r�   r   rŒ  “
  s   rŒ  c                   @   sÞ   e Zd Zdd„ Zd6d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dS )7ÚUtilityRegistrationTestsc                 C   s   ddl m} |S )Nr   rV   )r[   rW   )r
   rW   r   r   r   r   ¦
  s    z(UtilityRegistrationTests._getTargetClassNc                 C   s`   ddl m} G dd„ d|ƒ}|dƒ}G dd„ dƒ}|ƒ }d}d	}	|  ¡ }
|
|||||	|ƒ||fS )
Nr   r7   c                   @   s   e Zd ZdS )zAUtilityRegistrationTests._makeOne.<locals>.InterfaceClassSubclassNr;   r   r   r   r   ÚInterfaceClassSubclass­
  s   rŽ  r>   c                   @   s   e Zd Zdd„ ZdS )z4UtilityRegistrationTests._makeOne.<locals>._Registryc                 S   s   dS ©NZ	_REGISTRYr   r	   r   r   r   Ú__repr__³
  s    z=UtilityRegistrationTests._makeOne.<locals>._Registry.__repr__N©r#   r<   r=   r�  r   r   r   r   Ú	_Registry²
  s   r’  r   Ú	DOCSTRING©rC   r8   r   )r
   rL   rM   r8   rŽ  rE   r’  r   r   ÚdocÚklassr   r   r   r   ª
  s    ýz!UtilityRegistrationTests._makeOnec                 C   s*   ddl m} ddlm} |||  ¡ ƒ d S )Nr   ©ÚIUtilityRegistration©ÚverifyClass)rZ   r˜  Úzope.interface.verifyrš  r   )r
   r˜  rš  r   r   r   Ú+test_class_conforms_to_IUtilityRegistrationÀ
  s    zDUtilityRegistrationTests.test_class_conforms_to_IUtilityRegistrationc                 C   s4   ddl m} ddlm} |  ¡ \}}}|||ƒ d S )Nr   r—  ©ÚverifyObject)rZ   r˜  r›  rž  r   )r
   r˜  rž  ÚurÚ_r   r   r   Ú.test_instance_conforms_to_IUtilityRegistrationÅ
  s    zGUtilityRegistrationTests.test_instance_conforms_to_IUtilityRegistrationc                 C   s<   G dd„ dƒ}|ƒ }|   |¡\}}}|  t|ƒd| ¡ d S )Nc                   @   s   e Zd ZdZ dS )z:UtilityRegistrationTests.test___repr__.<locals>._ComponentÚTESTNr;   r   r   r   r   Ú
_ComponentÍ
  s   r£  zAUtilityRegistration(_REGISTRY, IFoo, %r, TEST, None, 'DOCSTRING')r0   ©r
   r£  Ú
_componentrŸ  Ú	_registryrb   r   r   r   r3   Ë
  s    ýÿz&UtilityRegistrationTests.test___repr__c                 C   sD   G dd„ dƒ}|ƒ }|   |¡\}}}tƒ |_|  t|ƒd| ¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )zKUtilityRegistrationTests.test___repr___provided_wo_name.<locals>._Componentc                 S   s   dS ©Nr¢  r   r	   r   r   r   r�  Ü
  s    zTUtilityRegistrationTests.test___repr___provided_wo_name.<locals>._Component.__repr__Nr‘  r   r   r   r   r£  Û
  s   r£  úAUtilityRegistration(_REGISTRY, None, %r, TEST, None, 'DOCSTRING')©r   rN   r`   r"   r1   r¤  r   r   r   Útest___repr___provided_wo_nameÙ
  s    ýÿz7UtilityRegistrationTests.test___repr___provided_wo_namec                 C   sD   G dd„ dƒ}|ƒ }|   |¡\}}}tƒ |_|  t|ƒd| ¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )zLUtilityRegistrationTests.test___repr___component_wo_name.<locals>._Componentc                 S   s   dS r§  r   r	   r   r   r   r�  ì
  s    zUUtilityRegistrationTests.test___repr___component_wo_name.<locals>._Component.__repr__Nr‘  r   r   r   r   r£  ë
  s   r£  r¨  r©  r¤  r   r   r   Útest___repr___component_wo_nameé
  s    ýÿz8UtilityRegistrationTests.test___repr___component_wo_namec                 C   s.   t ƒ }|  |¡\}}}|  | ¡ t|ƒ¡ d S r   ©rN   r   r"   Ú__hash__Úid©r
   r¥  rŸ  r¦  rb   r   r   r   Útest___hash__ù
  s    z&UtilityRegistrationTests.test___hash__c                 C   s&   t ƒ }|  |¡\}}}|  ||¡ d S r   ©rN   r   r"   r¯  r   r   r   Útest___eq___identityþ
  s    z-UtilityRegistrationTests.test___eq___identityc                 C   s6   t ƒ }|  |¡\}}}|  |¡\}}}|  ||¡ d S r   r±  ©r
   r¥  rŸ  r¦  rb   Úur2r   r   r   r   Útest___eq___hit  s    z(UtilityRegistrationTests.test___eq___hitc                 C   s<   t ƒ }t ƒ }|  |¡\}}}|  |¡\}}}|  ||¡ d S r   ©rN   r   r†  ©r
   r¥  Ú_component2rŸ  r¦  rb   r´  r   r   r   r   Útest___eq___miss	  s
    z)UtilityRegistrationTests.test___eq___missc                 C   s&   t ƒ }|  |¡\}}}|  ||¡ d S r   r±  r¯  r   r   r   Útest___ne___identity  s    z-UtilityRegistrationTests.test___ne___identityc                 C   s6   t ƒ }|  |¡\}}}|  |¡\}}}|  ||¡ d S r   r±  r³  r   r   r   Útest___ne___hit  s    z(UtilityRegistrationTests.test___ne___hitc                 C   s<   t ƒ }t ƒ }|  |¡\}}}|  |¡\}}}|  ||¡ d S r   r¶  r·  r   r   r   Útest___ne___miss  s
    z)UtilityRegistrationTests.test___ne___missc                 C   s(   t ƒ }|  |¡\}}}|  ||k ¡ d S r   ©rN   r   r‘   r¯  r   r   r   Útest___lt___identity"  s    z-UtilityRegistrationTests.test___lt___identityc                 C   s8   t ƒ }|  |¡\}}}|  |¡\}}}|  ||k ¡ d S r   r½  r³  r   r   r   Útest___lt___hit'  s    z(UtilityRegistrationTests.test___lt___hitc                 C   sF   t ƒ }t ƒ }|  |¡\}}}|  |¡\}}}|d |_|  ||¡ d S ©NÚ2©rN   r   r   Z
assertLessr·  r   r   r   Útest___lt___miss-  s    
z)UtilityRegistrationTests.test___lt___missc                 C   s&   t ƒ }|  |¡\}}}|  ||¡ d S r   ©rN   r   ÚassertLessEqualr¯  r   r   r   Útest___le___identity5  s    z-UtilityRegistrationTests.test___le___identityc                 C   s6   t ƒ }|  |¡\}}}|  |¡\}}}|  ||¡ d S r   rÄ  r³  r   r   r   Útest___le___hit:  s    z(UtilityRegistrationTests.test___le___hitc                 C   sF   t ƒ }t ƒ }|  |¡\}}}|  |¡\}}}|d |_|  ||¡ d S rÀ  ©rN   r   r   rÅ  r·  r   r   r   Útest___le___miss@  s    
z)UtilityRegistrationTests.test___le___missc                 C   s(   t ƒ }|  |¡\}}}|  ||k¡ d S r   r½  r¯  r   r   r   Útest___gt___identityH  s    z-UtilityRegistrationTests.test___gt___identityc                 C   sF   t ƒ }t ƒ }|  |¡\}}}|  |¡\}}}|d |_|  ||¡ d S rÀ  ©rN   r   r   ZassertGreaterr·  r   r   r   Útest___gt___hitM  s    
z(UtilityRegistrationTests.test___gt___hitc                 C   s8   t ƒ }|  |¡\}}}|  |¡\}}}|  ||k¡ d S r   r½  r³  r   r   r   Útest___gt___missU  s    z)UtilityRegistrationTests.test___gt___missc                 C   s&   t ƒ }|  |¡\}}}|  ||¡ d S r   ©rN   r   ÚassertGreaterEqualr¯  r   r   r   Útest___ge___identity[  s    z-UtilityRegistrationTests.test___ge___identityc                 C   sH   t ƒ }t ƒ }|  |¡\}}}|  |¡\}}}|d |_|  ||k¡ d S rÀ  ©rN   r   r   r‘   r·  r   r   r   Útest___ge___miss`  s    
z)UtilityRegistrationTests.test___ge___missc                 C   s@   t ƒ }|  |¡\}}}|  |¡\}}}|d |_|  ||¡ d S rÀ  ©rN   r   r   rÏ  r³  r   r   r   Útest___ge___hith  s
    
z(UtilityRegistrationTests.test___ge___hit)NN)r#   r<   r=   r   r   rœ  r¡  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�  ¤
  s4   
r�  c                   @   sî   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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ ZdS );ÚAdapterRegistrationTestsc                 C   s   ddl m} |S )Nr   rÈ   )r[   rÉ   )r
   rÉ   r   r   r   r   r  s    z(AdapterRegistrationTests._getTargetClassNc                 C   sj   ddl m} G dd„ d|ƒ}|dƒ}|dƒ}G dd„ dƒ}|ƒ }d}d	}	|  ¡ }
|
||f||||	ƒ||fS )
Nr   r7   c                   @   s   e Zd ZdS )z/AdapterRegistrationTests._makeOne.<locals>.IFooNr;   r   r   r   r   r>   y  s   r>   r‹   c                   @   s   e Zd Zdd„ ZdS )z4AdapterRegistrationTests._makeOne.<locals>._Registryc                 S   s   dS r�  r   r	   r   r   r   r�  €  s    z=AdapterRegistrationTests._makeOne.<locals>._Registry.__repr__Nr‘  r   r   r   r   r’    s   r’  r   r“  r”  ©r
   rL   r8   r>   rE   rÆ   r’  r   r   r•  r–  r   r   r   r   v  s    ýz!AdapterRegistrationTests._makeOnec                 C   s*   ddl m} ddlm} |||  ¡ ƒ d S )Nr   ©ÚIAdapterRegistrationr™  )rZ   rØ  r›  rš  r   )r
   rØ  rš  r   r   r   Ú+test_class_conforms_to_IAdapterRegistration�  s    zDAdapterRegistrationTests.test_class_conforms_to_IAdapterRegistrationc                 C   s4   ddl m} ddlm} |  ¡ \}}}|||ƒ d S )Nr   r×  r�  )rZ   rØ  r›  rž  r   )r
   rØ  rž  Úarr   r   r   r   Ú.test_instance_conforms_to_IAdapterRegistration’  s    zGAdapterRegistrationTests.test_instance_conforms_to_IAdapterRegistrationc                 C   s<   G dd„ dƒ}|ƒ }|   |¡\}}}|  t|ƒd| ¡ d S )Nc                   @   s   e Zd ZdZ dS )z:AdapterRegistrationTests.test___repr__.<locals>._Componentr¢  Nr;   r   r   r   r   r£  š  s   r£  zCAdapterRegistration(_REGISTRY, [IBar], IFoo, %r, TEST, 'DOCSTRING')r0   ©r
   r£  r¥  rÚ  r¦  rb   r   r   r   r3   ˜  s    ýÿz&AdapterRegistrationTests.test___repr__c                 C   sD   G dd„ dƒ}|ƒ }|   |¡\}}}tƒ |_|  t|ƒd| ¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )zKAdapterRegistrationTests.test___repr___provided_wo_name.<locals>._Componentc                 S   s   dS r§  r   r	   r   r   r   r�  ©  s    zTAdapterRegistrationTests.test___repr___provided_wo_name.<locals>._Component.__repr__Nr‘  r   r   r   r   r£  ¨  s   r£  úCAdapterRegistration(_REGISTRY, [IBar], None, %r, TEST, 'DOCSTRING')r©  rÜ  r   r   r   rª  ¦  s    ýÿz7AdapterRegistrationTests.test___repr___provided_wo_namec                 C   sD   G dd„ dƒ}|ƒ }|   |¡\}}}tƒ |_|  t|ƒd| ¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )zLAdapterRegistrationTests.test___repr___component_wo_name.<locals>._Componentc                 S   s   dS r§  r   r	   r   r   r   r�  ¹  s    zUAdapterRegistrationTests.test___repr___component_wo_name.<locals>._Component.__repr__Nr‘  r   r   r   r   r£  ¸  s   r£  rÝ  r©  rÜ  r   r   r   r«  ¶  s    ýÿz8AdapterRegistrationTests.test___repr___component_wo_namec                 C   s.   t ƒ }|  |¡\}}}|  | ¡ t|ƒ¡ d S r   r¬  ©r
   r¥  rÚ  r¦  rb   r   r   r   r°  Æ  s    z&AdapterRegistrationTests.test___hash__c                 C   s&   t ƒ }|  |¡\}}}|  ||¡ d S r   r±  rÞ  r   r   r   r²  Ë  s    z-AdapterRegistrationTests.test___eq___identityc                 C   s6   t ƒ }|  |¡\}}}|  |¡\}}}|  ||¡ d S r   r±  ©r
   r¥  rÚ  r¦  rb   Úar2r   r   r   r   rµ  Ð  s    z(AdapterRegistrationTests.test___eq___hitc                 C   s<   t ƒ }t ƒ }|  |¡\}}}|  |¡\}}}|  ||¡ d S r   r¶  ©r
   r¥  r¸  rÚ  r¦  rb   rà  r   r   r   r   r¹  Ö  s
    z)AdapterRegistrationTests.test___eq___missc                 C   s&   t ƒ }|  |¡\}}}|  ||¡ d S r   r±  rÞ  r   r   r   rº  Ý  s    z-AdapterRegistrationTests.test___ne___identityc                 C   s6   t ƒ }|  |¡\}}}|  |¡\}}}|  ||¡ d S r   r±  rß  r   r   r   r¼  â  s    z)AdapterRegistrationTests.test___ne___missc                 C   s<   t ƒ }t ƒ }|  |¡\}}}|  |¡\}}}|  ||¡ d S r   r¶  rá  r   r   r   Útest___ne___hit_componentè  s
    z2AdapterRegistrationTests.test___ne___hit_componentc           
      C   s`   ddl m} G dd„ d|ƒ}|dƒ}tƒ }|  |¡\}}}|  |¡\}}	}	||_|  ||¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z?AdapterRegistrationTests.test___ne___hit_provided.<locals>.IFooNr;   r   r   r   r   r>   ò  s   r>   r  )rC   r8   rN   r   r`   r†  )
r
   r8   r>   r  r¥  rÚ  r¦  rb   rà  r   r   r   r   Útest___ne___hit_providedï  s    z1AdapterRegistrationTests.test___ne___hit_providedc                 C   sh   ddl m} G dd„ d|ƒ}|dƒ}tƒ }tƒ }|  |¡\}}}|  |¡\}	}
}
|f|	_|  ||	¡ d S )Nr   r7   c                   @   s   e Zd ZdS )z?AdapterRegistrationTests.test___ne___hit_required.<locals>.IFooNr;   r   r   r   r   r>   ÿ  s   r>   r  )rC   r8   rN   r   rÍ   r†  )r
   r8   r>   r  r¥  r¸  rÚ  r¦  rb   rà  r   r   r   r   Útest___ne___hit_requiredü  s    z1AdapterRegistrationTests.test___ne___hit_requiredc                 C   s(   t ƒ }|  |¡\}}}|  ||k ¡ d S r   r½  rÞ  r   r   r   r¾  
  s    z-AdapterRegistrationTests.test___lt___identityc                 C   s8   t ƒ }|  |¡\}}}|  |¡\}}}|  ||k ¡ d S r   r½  rß  r   r   r   r¿    s    z(AdapterRegistrationTests.test___lt___hitc                 C   sF   t ƒ }t ƒ }|  |¡\}}}|  |¡\}}}|d |_|  ||¡ d S rÀ  rÂ  rá  r   r   r   rÃ    s    
z)AdapterRegistrationTests.test___lt___missc                 C   s&   t ƒ }|  |¡\}}}|  ||¡ d S r   rÄ  rÞ  r   r   r   rÆ    s    z-AdapterRegistrationTests.test___le___identityc                 C   s6   t ƒ }|  |¡\}}}|  |¡\}}}|  ||¡ d S r   rÄ  rß  r   r   r   rÇ  "  s    z(AdapterRegistrationTests.test___le___hitc                 C   sF   t ƒ }t ƒ }|  |¡\}}}|  |¡\}}}|d |_|  ||¡ d S rÀ  rÈ  rá  r   r   r   rÉ  (  s    
z)AdapterRegistrationTests.test___le___missc                 C   s(   t ƒ }|  |¡\}}}|  ||k¡ d S r   r½  rÞ  r   r   r   rÊ  0  s    z-AdapterRegistrationTests.test___gt___identityc                 C   sF   t ƒ }t ƒ }|  |¡\}}}|  |¡\}}}|d |_|  ||¡ d S rÀ  rË  rá  r   r   r   rÌ  5  s    
z(AdapterRegistrationTests.test___gt___hitc                 C   s8   t ƒ }|  |¡\}}}|  |¡\}}}|  ||k¡ d S r   r½  rß  r   r   r   rÍ  =  s    z)AdapterRegistrationTests.test___gt___missc                 C   s&   t ƒ }|  |¡\}}}|  ||¡ d S r   rÎ  rÞ  r   r   r   rÐ  C  s    z-AdapterRegistrationTests.test___ge___identityc                 C   sH   t ƒ }t ƒ }|  |¡\}}}|  |¡\}}}|d |_|  ||k¡ d S rÀ  rÑ  rá  r   r   r   rÒ  H  s    
z)AdapterRegistrationTests.test___ge___missc                 C   s@   t ƒ }|  |¡\}}}|  |¡\}}}|d |_|  ||¡ d S rÀ  rÓ  rß  r   r   r   rÔ  P  s
    
z(AdapterRegistrationTests.test___ge___hit)N)r#   r<   r=   r   r   rÙ  rÛ  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Õ  p  s8   
rÕ  c                   @   s.   e Zd Zdd„ Zd
dd„Zdd„ Zdd	„ ZdS )ÚSubscriptionRegistrationTestsc                 C   s   ddl m} |S )Nr   r/  )r[   r0  )r
   r0  r   r   r   r   Z  s    z-SubscriptionRegistrationTests._getTargetClassNc                 C   sj   ddl m} G dd„ d|ƒ}|dƒ}|dƒ}G dd„ dƒ}|ƒ }d}d	}	|  ¡ }
|
||f||||	ƒ||fS )
Nr   r7   c                   @   s   e Zd ZdS )z4SubscriptionRegistrationTests._makeOne.<locals>.IFooNr;   r   r   r   r   r>   a  s   r>   r‹   c                   @   s   e Zd Zdd„ ZdS )z9SubscriptionRegistrationTests._makeOne.<locals>._Registryc                 S   s   dS r�  r   r	   r   r   r   r�  h  s    zBSubscriptionRegistrationTests._makeOne.<locals>._Registry.__repr__Nr‘  r   r   r   r   r’  g  s   r’  r   r“  r”  rÖ  r   r   r   r   ^  s    ýz&SubscriptionRegistrationTests._makeOnec                 C   s*   ddl m} ddlm} |||  ¡ ƒ d S )Nr   ©Ú ISubscriptionAdapterRegistrationr™  )rZ   rç  r›  rš  r   )r
   rç  rš  r   r   r   Ú7test_class_conforms_to_ISubscriptionAdapterRegistrationu  s    zUSubscriptionRegistrationTests.test_class_conforms_to_ISubscriptionAdapterRegistrationc                 C   s4   ddl m} ddlm} |  ¡ \}}}|||ƒ d S )Nr   ræ  r�  )rZ   rç  r›  rž  r   )r
   rç  rž  Zsarr   r   r   r   Ú:test_instance_conforms_to_ISubscriptionAdapterRegistrationz  s    zXSubscriptionRegistrationTests.test_instance_conforms_to_ISubscriptionAdapterRegistration)N)r#   r<   r=   r   r   rè  ré  r   r   r   r   rå  X  s   
rå  c                   @   sF   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S )ÚHandlerRegistrationTestsc                 C   s   ddl m} |S )Nr   rT  )r[   rU  )r
   rU  r   r   r   r   ƒ  s    z(HandlerRegistrationTests._getTargetClassNc           
      C   s`   ddl m} G dd„ d|ƒ}|dƒ}G dd„ dƒ}|ƒ }d}d}|  ¡ }	|	||f|||ƒ||fS )	Nr   r7   c                   @   s   e Zd ZdS )z/HandlerRegistrationTests._makeOne.<locals>.IFooNr;   r   r   r   r   r>   Š  s   r>   c                   @   s   e Zd Zdd„ ZdS )z4HandlerRegistrationTests._makeOne.<locals>._Registryc                 S   s   dS r�  r   r	   r   r   r   r�  �  s    z=HandlerRegistrationTests._makeOne.<locals>._Registry.__repr__Nr‘  r   r   r   r   r’  �  s   r’  r   r“  r”  )
r
   rL   r8   r>   rE   r’  r   r   r•  r–  r   r   r   r   ‡  s    ýz!HandlerRegistrationTests._makeOnec                 C   s*   ddl m} ddlm} |||  ¡ ƒ d S )Nr   ©ÚIHandlerRegistrationr™  )rZ   rì  r›  rš  r   )r
   rì  rš  r   r   r   Ú+test_class_conforms_to_IHandlerRegistration�  s    zDHandlerRegistrationTests.test_class_conforms_to_IHandlerRegistrationc                 C   s4   ddl m} ddlm} |  ¡ \}}}|||ƒ d S )Nr   rë  r�  )rZ   rì  r›  rž  r   )r
   rì  rž  Úhrr   r   r   r   Ú.test_instance_conforms_to_IHandlerRegistration¢  s    zGHandlerRegistrationTests.test_instance_conforms_to_IHandlerRegistrationc                 C   sF   dd„ }|   |¡\}}}|  |j|¡ |  |j|j¡ |  |j¡ d S )Nc                 S   s
   t ƒ ‚d S r   rH   rÊ   r   r   r   rJ   ©  s    z:HandlerRegistrationTests.test_properties.<locals>._factory)r   r\   ÚhandlerrM   ra   r`   )r
   rJ   rî  r   r   r   r   Útest_properties¨  s
    z(HandlerRegistrationTests.test_propertiesc                 C   s8   G dd„ dƒ}|   |ƒ ¡\}}}|  t|ƒd| ¡ d S )Nc                   @   s   e Zd ZdZ dS )zGHandlerRegistrationTests.test___repr___factory_w_name.<locals>._Factoryr¢  Nr;   r   r   r   r   rÏ   ²  s   rÏ   ú=HandlerRegistration(_REGISTRY, [IFoo], %r, TEST, 'DOCSTRING')r0   ©r
   rÏ   rî  r¦  rb   r   r   r   Útest___repr___factory_w_name°  s    ýÿz5HandlerRegistrationTests.test___repr___factory_w_namec                 C   s8   G dd„ dƒ}|   |ƒ ¡\}}}|  t|ƒd| ¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )zHHandlerRegistrationTests.test___repr___factory_wo_name.<locals>._Factoryc                 S   s   dS r§  r   r	   r   r   r   r�  ¿  s    zQHandlerRegistrationTests.test___repr___factory_wo_name.<locals>._Factory.__repr__Nr‘  r   r   r   r   rÏ   ¾  s   rÏ   rò  r0   ró  r   r   r   Útest___repr___factory_wo_name¼  s    ýÿz6HandlerRegistrationTests.test___repr___factory_wo_name)N)
r#   r<   r=   r   r   rí  rï  rñ  rô  rõ  r   r   r   r   rê  �  s   
rê  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚPersistentAdapterRegistryc                 C   sF   | j  ¡ }t|ƒD ]"}|| jks*| d¡r| |¡ q| dd ¡ |S )NZ_vÚro)Ú__dict__Úcopyr‡   Z
_delegatedÚ
startswithÚpop)r
   ÚstateÚkr   r   r   Ú__getstate__Í  s    
z&PersistentAdapterRegistry.__getstate__c                 C   s6   |  dd¡}| j |¡ |  ¡  || _| j | ¡ d S )Nr$   r   )rû  rø  ÚupdateZ_createLookupr$   r!  r   )r
   rü  Úbasesr   r   r   Ú__setstate__Õ  s
    z&PersistentAdapterRegistry.__setstate__N)r#   r<   r=   rþ  r  r   r   r   r   rö  Ë  s   rö  c                   @   s   e Zd Zdd„ ZdS )ÚPersistentComponentsc                 C   s   t ƒ | _t ƒ | _d S r   )rö  r&   r'   r	   r   r   r   Ú_init_registriesá  s    z%PersistentComponents._init_registriesN)r#   r<   r=   r  r   r   r   r   r  Ý  s   r  c                   @   s   e Zd ZdS )ÚPersistentDictComponentsNr;   r   r   r   r   r  æ  s   r  c                   @   s   e Zd Zdd„ ZdS )ÚPersistentComponentsDictc                 C   s   t  | ¡ t | |¡ d S r   )r   r¡   r  )r
   r   r   r   r   r¡   í  s    
z!PersistentComponentsDict.__init__Nr÷   r   r   r   r   r  ë  s   r  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestPersistentComponentsc                 C   s   t dƒS )Nr   )r  r	   r   r   r   r   ô  s    z!TestPersistentComponents._makeOnec                 C   s   d S r   r   ©r
   Zmader   r   r   Ú_check_equality_after_pickle÷  s    z5TestPersistentComponents._check_equality_after_picklec                 C   s<   dd l }|  ¡ }| |¡ | | |¡¡}|  |jd¡ d S ©Nr   r   )Úpickler   ÚdumpsÚloadsr"   r#   )r
   r
  r,   Úcomp2r   r   r   Útest_pickles_emptyú  s
    
z+TestPersistentComponents.test_pickles_emptyc                 C   sŽ   dd l }|  ¡ }tƒ }| |t¡ |  || t¡¡ | | |¡¡}|  	|j
d¡ |  | t¡¡ | |t¡ |  || t¡¡ |  |¡ d S r	  )r
  r   rN   rD   r   r\   r»   r  r  r"   r#   ZassertIsNotNoner  )r
   r
  r,   Zutilityr  r   r   r   Ú&test_pickles_with_utility_registration  s*    þÿþÿz?TestPersistentComponents.test_pickles_with_utility_registrationN)r#   r<   r=   r   r  r  r  r   r   r   r   r  ò  s   r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestPersistentDictComponentsc                 C   s   t S r   )r  r	   r   r   r   r     s    z,TestPersistentDictComponents._getTargetClassc                 C   s   |   ¡ dd�}d|d< |S )Nr   r¦   é*   r¬   r   r2   r   r   r   r   "  s    z%TestPersistentDictComponents._makeOnec                 C   s    |   d|¡ |  |d d¡ d S )Nr¬   r  )r‡  r"   r  r   r   r   r  '  s    z9TestPersistentDictComponents._check_equality_after_pickleN)r#   r<   r=   r   r   r  r   r   r   r   r    s   r  c                   @   s   e Zd Zdd„ ZdS )ÚTestPersistentComponentsDictc                 C   s   t S r   )r  r	   r   r   r   r   .  s    z,TestPersistentComponentsDict._getTargetClassN)r#   r<   r=   r   r   r   r   r   r  ,  s   r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r   c                    s<   ˆ | _ ‡ fdd„|D ƒ| _| ¡ D ]\}}tˆ ||ƒ q"d S )Nc                    s   i | ]}|t ˆ |ƒ“qS r   )Úgetattr)Ú.0r¬   ©Úmoduler   r   Ú
<dictcomp>6  s      z$_Monkey.__init__.<locals>.<dictcomp>)r  Ú
to_restoreÚitemsÚsetattr)r
   r  r   r¬   Úvaluer   r  r   r¡   4  s    z_Monkey.__init__c                 C   s   | S r   r   r	   r   r   r   Ú	__enter__:  s    z_Monkey.__enter__c                 C   s&   | j  ¡ D ]\}}t| j||ƒ q
d S r   )r  r  r  r  )r
   Úexc_typeÚexc_valÚexc_tbr¬   r  r   r   r   Ú__exit__=  s    z_Monkey.__exit__N)r#   r<   r=   r¡   r  r   r   r   r   r   r   2  s   r   )rz  Zunittestr   r   r!   r   r[   r   ZTestCaser   rŒ  r�  rÕ  rå  rê  rö  r  r   r  r  r  r  r  r   r   r   r   r   Ú<module>   sR                         M i)J	+