o
    $x`  ã                   @   s~   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ dd„ fdd	„Zd
d„ Zdd„ Z	G dd„ de j
ƒZG dd„ deƒZdS )é    N)ÚverifyClass)ÚverifyObject)ÚABCInterface)ÚABCInterfaceClassc                 C   s   dS )NT© ©Úifacer   r   úF/usr/lib/python3/dist-packages/zope/interface/common/tests/__init__.pyÚ<lambda>   s    r
   c                 c   sŒ   � t ƒ }ttjƒ}|rD| d¡}||v st|tƒsq	| |¡ | t|jƒ¡ | |ƒs,q	t | 	¡ ƒ}|t |j
ƒ8 }|r@||fV  |sd S d S )Nr   )ÚsetÚlistr   Ú
dependentsÚpopÚ
isinstancer   ÚaddÚextendÚgetRegisteredConformersÚ#_ABCInterfaceClass__ignored_classes)Ú	predicateÚseenÚstackr   Ú
registeredr   r   r	   Úiter_abc_interfaces   s    €



ôr   c                    s   ‡ fdd„}t | t|ƒƒ d S )Nc                    s
   | j ˆ kS ©N)Ú
__module__r   ©Úmoduler   r	   r   0   s   
z*add_abc_interface_tests.<locals>.predicate)Úadd_verify_testsr   )Úclsr   r   r   r   r	   Úadd_abc_interface_tests/   s   r   c           	      C   s¸   d | _ |D ]T\}}|D ]M}||fdd„}d|j|j dd¡|jf }d| }||_t| |ƒr7J |t| jƒfƒ‚t| ||ƒ ||fdd„}d	| }||_t| |ƒrRJ ‚t| ||ƒ qqd S )
Nc                 S   s:   || j v s|j| j v r|  d| ¡ |  |  ||¡¡ d S )NzUnable to verify %s)ÚUNVERIFIABLEÚ__name__ÚskipTestÚ
assertTrueÚverify)ÚselfÚstdlib_classr   r   r   r	   Útest9   s   zadd_verify_tests.<locals>.testz%s_%s_%sÚ.Ú_Ú
test_auto_c           
      S   sž   ddl m} ddl m} ddl m} |  t|j|dd�ƒ|j¡ ||ƒ}|j}|  |d |¡ || jv}|j||d�}	|	 	|¡ |	 
|¡ |  t|	ƒ|¡ d S )Nr   )Úro)ÚimplementedBy)Ú	InterfaceT)Ústrictéÿÿÿÿ)Úzope.interfacer+   r,   r-   ÚassertEqualÚtupleÚ__sro__ÚassertIsÚNON_STRICT_ROÚremoveÚappend)
r%   r&   r   r+   r,   r-   Ú
implementsÚsror.   Úisror   r   r	   Útest_roI   s   þ


z!add_verify_tests.<locals>.test_roÚtest_auto_ro_)ÚmaxDiffr!   r   ÚreplaceÚhasattrr   Ú__dict__Úsetattr)	r   Úiface_classes_iterr   Úregistered_classesr&   r'   ÚsuffixÚnamer;   r   r   r	   r   5   s(   ýÖÿr   c                   @   s,   e Zd ZeeƒZdZdZdd„ Zdd„ Z	dS )ÚVerifyClassMixinr   c                 C   s   |S r   r   )r%   r   Úxr   r   r	   Ú_adjust_object_before_verifyi   s   z-VerifyClassMixin._adjust_object_before_verifyc                 K   s   | j ||  ||¡fi |¤ŽS r   )ÚverifierrH   )r%   r   ÚklassÚkwargsr   r   r	   r$   l   s
   
ÿþzVerifyClassMixin.verifyN)
r!   r   Ú__qualname__Ústaticmethodr   rI   r    r5   rH   r$   r   r   r   r	   rF   d   s    rF   c                   @   s    e Zd ZeeƒZi Zdd„ ZdS )ÚVerifyObjectMixinc                 C   sr   | j  |¡}|s| j  |¡}|s| j  |j¡}|s|}|tju r)|  dt|ƒ ¡ |ƒ }t|dƒr7|  |j	¡ |S )NzCannot create Úclose)
ÚCONSTRUCTORSÚgetr!   ÚunittestÚSkipTestr"   Ústrr?   Ú
addCleanuprO   )r%   r   rG   ÚconstructorÚresultr   r   r	   rH   w   s   

z.VerifyObjectMixin._adjust_object_before_verifyN)r!   r   rL   rM   r   rI   rP   rH   r   r   r   r	   rN   r   s    rN   )rR   Úzope.interface.verifyr   r   Úzope.interface.commonr   r   r   r   r   ÚTestCaserF   rN   r   r   r   r	   Ú<module>   s   /