o
    $x`I  ã                   @   s`  d Z 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lmZ ddlm	Z	 dd	lm
Z
 dd
lmZ ddlmZ ddlmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZe deji ¡ZG dd„ deƒZG dd„ deƒZe
eeƒ G dd „ d eeƒZe
eeƒ G d!d"„ d"ejƒZdS )#zµTest interface declarations against ExtensionClass-like classes.

These tests are to make sure we do something sane in the presence of
classic ExtensionClass classes and instances.
é    N)Úodd)Ú	Interface)Úimplementer)ÚdirectlyProvides)Ú
providedBy)ÚdirectlyProvidedBy)ÚclassImplements)ÚclassImplementsOnly)ÚimplementedBy)Ú_skip_under_py3kc                   @   ó   e Zd ZdS )ÚI1N©Ú__name__Ú
__module__Ú__qualname__© r   r   úL/usr/lib/python3/dist-packages/zope/interface/tests/test_odd_declarations.pyr       ó    r   c                   @   r   )ÚI2Nr   r   r   r   r   r   !   r   r   c                   @   r   )ÚI3Nr   r   r   r   r   r   "   r   r   c                   @   r   )ÚI31Nr   r   r   r   r   r   #   r   r   c                   @   r   )ÚI4Nr   r   r   r   r   r   $   r   r   c                   @   r   )ÚI5Nr   r   r   r   r   r   %   r   r   c                   @   r   )ÚOddNr   r   r   r   r   r   '   ó    r   c                   @   ó   e Zd ZeZdS )ÚBN)r   r   r   r   Ú__implemented__r   r   r   r   r   ,   ó    r   c                   @   r   )ÚANr   r   r   r   r   r    4   r   r    c                   @   r   )ÚCNr   r   r   r   r   r!   8   r   r!   c                   @   sH   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZdd„ Z	dd„ Z
dS )ÚTestc                 C   s²  t ƒ }t|tƒ |  dd„ t|ƒD ƒg d¢¡ |  dd„ t|ƒ ¡ D ƒg d¢¡ |  tt|ƒv ¡ |  t	t|ƒv ¡ |  t|ƒ 
t	¡¡ |  t|ƒ 
t¡¡ |  t|ƒ 
t¡¡ G dd„ dttƒ}t|tƒ G dd	„ d	|ƒ}t|tƒ t|tƒ |ƒ }t|tƒ |  d
d„ t|ƒD ƒg d¢¡ |  dd„ t|ƒ ¡ D ƒg d¢¡ |  tt|ƒv ¡ |  t	t|ƒv ¡ |  t|ƒ 
t	¡¡ |  t|ƒ 
t¡¡ |  t|ƒ 
t¡¡ |  t|ƒ 
t¡¡ G dd„ dttƒ}G dd	„ d	|ƒ}t|tƒ t|tƒ |ƒ }t|tƒ |  dd„ t|ƒD ƒg d¢¡ |  dd„ t|ƒ ¡ D ƒg d¢¡ |  tt|ƒv ¡ |  t	t|ƒv ¡ |  t|ƒ 
t	¡¡ |  t|ƒ 
t¡¡ |  t|ƒ 
t¡¡ |  t|ƒ 
t¡¡ d S )Nc                 S   ó   g | ]}|  ¡ ‘qS r   ©ÚgetName©Ú.0Úir   r   r   Ú
<listcomp>B   ó    z1Test.test_ObjectSpecification.<locals>.<listcomp>)r   r   r   r   c                 S   r#   r   r$   r&   r   r   r   r)   E   r*   )r   r   r   r   r   r   c                   @   r   ©z,Test.test_ObjectSpecification.<locals>.COnlyNr   r   r   r   r   ÚCOnlyN   r   r,   c                   @   r   ©z(Test.test_ObjectSpecification.<locals>.DNr   r   r   r   r   ÚDR   r   r.   c                 S   r#   r   r$   r&   r   r   r   r)   Z   r*   )r   r   r   c                 S   r#   r   r$   r&   r   r   r   r)   \   r*   )r   r   r   r   r   c                   @   r   r+   )r   r   r   r   r   r   r   r   r   r,   e   r   c                   @   r   r-   r   r   r   r   r   r.   f   r   c                 S   r#   r   r$   r&   r   r   r   r)   m   r*   c                 S   r#   r   r$   r&   r   r   r   r)   o   r*   )r!   r   r   ÚassertEqualr   Ú	flattenedÚ
assertTruer   ÚassertFalser   Úextendsr   r   r    r   r	   r   )ÚselfÚcr,   r.   r   r   r   Útest_ObjectSpecification?   sd   
ÿÿ



ÿÿ


ÿÿzTest.test_ObjectSpecificationc                 C   s˜   t tƒG dd„ dtƒƒ}t tƒG dd„ dtƒƒ}G dd„ d||ƒ}t|ttƒ |  dd„ t|ƒD ƒg d	¢¡ t|t	ƒ |  d
d„ t|ƒD ƒg d¢¡ d S )Nc                   @   r   )z$Test.test_classImplements.<locals>.ANr   r   r   r   r   r    z   ó    r    c                   @   r   )z$Test.test_classImplements.<locals>.BNr   r   r   r   r   r   ~   r7   r   c                   @   r   )z$Test.test_classImplements.<locals>.CNr   r   r   r   r   r!   ‚   r   r!   c                 S   r#   r   r$   r&   r   r   r   r)   …   r*   z-Test.test_classImplements.<locals>.<listcomp>)r   r   r   r   c                 S   r#   r   r$   r&   r   r   r   r)   ˆ   r*   )r   r   r   r   r   )
r   r   r   r   r   r   r   r/   r
   r   ©r4   r    r   r!   r   r   r   Útest_classImplementsx   s   ÿ
ÿzTest.test_classImplementsc                 C   sp   t tƒG dd„ dtƒƒ}t tƒG dd„ dtƒƒ}G dd„ d||ƒ}t|ttƒ |  dd„ t|ƒD ƒd	d
g¡ d S )Nc                   @   r   )z(Test.test_classImplementsOnly.<locals>.ANr   r   r   r   r   r    Œ   r7   r    c                   @   r   )z(Test.test_classImplementsOnly.<locals>.BNr   r   r   r   r   r   �   r7   r   c                   @   r   )z(Test.test_classImplementsOnly.<locals>.CNr   r   r   r   r   r!   ”   r   r!   c                 S   s   g | ]}|j ‘qS r   )r   r&   r   r   r   r)   —   s    z1Test.test_classImplementsOnly.<locals>.<listcomp>r   r   )	r   r   r   r   r	   r   r   r/   r
   r8   r   r   r   Útest_classImplementsOnly‹   s   ÿzTest.test_classImplementsOnlyc           	      C   s~  G dd„ dt ƒ}G dd„ dt ƒ}G dd„ dt ƒ}G dd„ dt ƒ}G d	d
„ d
tƒ}t|||ƒ G dd„ dtƒ}t||ƒ G dd„ d||ƒ}t||ƒ |ƒ }t|ttƒ |  tt|ƒv ¡ |  tt|ƒv ¡ |  |t|ƒv ¡ |  |t|ƒv ¡ |  |t|ƒv ¡ |  |t|ƒv ¡ t|t|ƒt ƒ |  tt|ƒv ¡ |  	tt|ƒv ¡ |  	tt|ƒv ¡ t|t|ƒtƒ |  tt|ƒv ¡ d S )Nc                   @   r   )z'Test.test_directlyProvides.<locals>.IA1Nr   r   r   r   r   ÚIA1œ   r   r;   c                   @   r   )z'Test.test_directlyProvides.<locals>.IA2Nr   r   r   r   r   ÚIA2�   r   r<   c                   @   r   )z&Test.test_directlyProvides.<locals>.IBNr   r   r   r   r   ÚIBž   r   r=   c                   @   r   )z&Test.test_directlyProvides.<locals>.ICNr   r   r   r   r   ÚICŸ   r   r>   c                   @   r   )z%Test.test_directlyProvides.<locals>.ANr   r   r   r   r   r        r   r    c                   @   r   )z%Test.test_directlyProvides.<locals>.BNr   r   r   r   r   r   ¤   r   r   c                   @   r   )z%Test.test_directlyProvides.<locals>.CNr   r   r   r   r   r!   ¨   r   r!   )
r   r   r   r   r   r   r1   r   r   r2   )	r4   r;   r<   r=   r>   r    r   r!   Úobr   r   r   Útest_directlyProvides›   s0   

zTest.test_directlyProvidesc                 C   s   |   tttt¡ d S )N)ÚassertRaisesÚ	TypeErrorr   r!   r   )r4   r   r   r   Ú)test_directlyProvides_fails_for_odd_class½   s   z.Test.test_directlyProvides_fails_for_odd_classc                 C   sf   G dd„ dt ƒ}G dd„ dtƒ}t||ƒ G dd„ d|ƒ}t|tƒ |  dd„ t|ƒD ƒd	dg¡ d S )
Nc                   @   r   )z#Test.test_implementedBy.<locals>.I2Nr   r   r   r   r   r   Í   r   r   c                   @   r   )z#Test.test_implementedBy.<locals>.C1Nr   r   r   r   r   ÚC1Ï   r   rD   c                   @   r   )z#Test.test_implementedBy.<locals>.C2Nr   r   r   r   r   ÚC2Ó   r   rE   c                 S   r#   r   r$   r&   r   r   r   r)   ×   r*   z+Test.test_implementedBy.<locals>.<listcomp>r   )r   r   r   r   r/   r
   )r4   r   rD   rE   r   r   r   Útest_implementedByÌ   s   

ÿzTest.test_implementedByc                 C   sN  G dd„ dt ƒ}t d|j|j¡}G dd„ dt ƒ}t d|j|j¡}G dd„ d||ƒ}|  |j||f¡ |ƒ }|ƒ }|  |jd¡ |  |jd¡ d|_|  |jd¡ |  |jd¡ |ƒ }|  |jd¡ |  |jd¡ d|_|  |jd¡ d|_|  |jd¡ |j zd	d
l	m
} W n	 ty’   Y n
w t|t|fƒrœJ ‚|  |jj|j¡ d S )Nc                   @   ó   e Zd ZdZdS )z<Test.test_odd_metaclass_that_doesnt_subclass_type.<locals>.Aé   N)r   r   r   Úar   r   r   r   r    á   ó    r    c                   @   rG   )z<Test.test_odd_metaclass_that_doesnt_subclass_type.<locals>.BrH   N)r   r   r   Úbr   r   r   r   r   æ   rJ   r   c                   @   r   )z<Test.test_odd_metaclass_that_doesnt_subclass_type.<locals>.CNr   r   r   r   r   r!   ë   r   r!   rH   é   r   )Ú	ClassType)Úobjectr   Ú	MetaClassÚ	__bases__Ú__dict__r/   rI   rK   r5   ÚtypesrM   ÚImportErrorÚ
isinstanceÚtypeÚassertIsÚ	__class__)r4   r    r   r!   rI   Úaar5   rM   r   r   r   Ú,test_odd_metaclass_that_doesnt_subclass_typeÚ   s8   ÿz1Test.test_odd_metaclass_that_doesnt_subclass_typeN)r   r   r   r6   r9   r:   r@   r   rC   rF   rY   r   r   r   r   r"   =   s    9"
r"   )Ú__doc__ÚunittestÚzope.interface.testsr   Úzope.interfacer   r   r   r   r   r   r	   r
   Úzope.interface._compatr   r   r   r   r   r   r   rN   r   rO   rP   r   r    r!   ÚTestCaser"   r   r   r   r   Ú<module>   s4   

