U
    j5{iì  ã                   @   sR  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 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ƒ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)Ú	Interface)ÚclassImplements)ÚclassImplementsOnly)ÚdirectlyProvidedBy)ÚdirectlyProvides)ÚimplementedBy)Úimplementer)Ú
providedBy)Úoddc                   @   s   e Zd ZdS )ÚI1N©Ú__name__Ú
__module__Ú__qualname__© r   r   úN/tmp/pip-unpacked-wheel-jkvlexts/zope/interface/tests/test_odd_declarations.pyr       s   r   c                   @   s   e Zd ZdS )ÚI2Nr   r   r   r   r   r   $   s   r   c                   @   s   e Zd ZdS )ÚI3Nr   r   r   r   r   r   (   s   r   c                   @   s   e Zd ZdS )ÚI31Nr   r   r   r   r   r   ,   s   r   c                   @   s   e Zd ZdS )ÚI4Nr   r   r   r   r   r   0   s   r   c                   @   s   e Zd ZdS )ÚI5Nr   r   r   r   r   r   4   s   r   c                   @   s   e Zd ZdS )ÚOddNr   r   r   r   r   r   8   s   r   c                   @   s   e Zd ZeZdS )ÚBN)r   r   r   r   Ú__implemented__r   r   r   r   r   ?   s   r   c                   @   s   e Zd ZdS )ÚANr   r   r   r   r   r   H   s   r   c                   @   s   e Zd ZdS )ÚCNr   r   r   r   r   r   O   s   r   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestc              	   C   sÂ  t ƒ }t|tƒ |  dd„ t|ƒD ƒddddg¡ |  dd„ t|ƒ ¡ D ƒdddddd	g¡ |  tt|ƒ¡ |  t	t|ƒ¡ |  
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 ƒdddg¡ |  dd„ t|ƒ ¡ D ƒddddd	g¡ |  tt|ƒ¡ |  t	t|ƒ¡ |  
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 ƒdddg¡ |  dd„ t|ƒ ¡ D ƒddddd	g¡ |  tt|ƒ¡ |  t	t|ƒ¡ |  
t|ƒ t	¡¡ |  t|ƒ t¡¡ |  
t|ƒ t¡¡ |  
t|ƒ t¡¡ d S )Nc                 S   s   g | ]}|  ¡ ‘qS r   ©ÚgetName©Ú.0Úir   r   r   Ú
<listcomp>[   s     z1Test.test_ObjectSpecification.<locals>.<listcomp>r   r   r   r   c                 S   s   g | ]}|  ¡ ‘qS r   r   r   r   r   r   r"   ^   s     r   r   c                   @   s   e Zd ZdS ©z,Test.test_ObjectSpecification.<locals>.COnlyNr   r   r   r   r   ÚCOnlyg   s   r$   c                   @   s   e Zd ZdS ©z(Test.test_ObjectSpecification.<locals>.DNr   r   r   r   r   ÚDk   s   r&   c                 S   s   g | ]}|  ¡ ‘qS r   r   r   r   r   r   r"   s   s     r   c                 S   s   g | ]}|  ¡ ‘qS r   r   r   r   r   r   r"   u   s     c                   @   s   e Zd ZeZdS r#   )r   r   r   r   r   r   r   r   r   r$   ~   s   c                   @   s   e Zd ZdS r%   r   r   r   r   r   r&   �   s   c                 S   s   g | ]}|  ¡ ‘qS r   r   r   r   r   r   r"   ‰   s     c                 S   s   g | ]}|  ¡ ‘qS r   r   r   r   r   r   r"   ‹   s     )r   r   r   ÚassertEqualr	   Z	flattenedÚassertInr   ÚassertNotInr   Ú
assertTrueZextendsr   ZassertFalser   r   r   r   r   )ÚselfÚcr$   r&   r   r   r   Útest_ObjectSpecificationX   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 ƒd	d
ddg¡ t|t	ƒ |  dd„ t|ƒD ƒd	d
dddg¡ d S )Nc                   @   s   e Zd ZdS )z$Test.test_classImplements.<locals>.ANr   r   r   r   r   r   –   s   r   c                   @   s   e Zd ZdS )z$Test.test_classImplements.<locals>.BNr   r   r   r   r   r   š   s   r   c                   @   s   e Zd ZdS )z$Test.test_classImplements.<locals>.CNr   r   r   r   r   r   ž   s   r   c                 S   s   g | ]}|  ¡ ‘qS r   r   r   r   r   r   r"   ¢   s     z-Test.test_classImplements.<locals>.<listcomp>r   r   r   r   c                 S   s   g | ]}|  ¡ ‘qS r   r   r   r   r   r   r"   ¦   s     r   )
r   r   r   r   r   r   r   r'   r   r   ©r+   r   r   r   r   r   r   Útest_classImplements”   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                   @   s   e Zd ZdS )z(Test.test_classImplementsOnly.<locals>.ANr   r   r   r   r   r   «   s   r   c                   @   s   e Zd ZdS )z(Test.test_classImplementsOnly.<locals>.BNr   r   r   r   r   r   ¯   s   r   c                   @   s   e Zd ZdS )z(Test.test_classImplementsOnly.<locals>.CNr   r   r   r   r   r   ³   s   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   r.   r   r   r   Útest_classImplementsOnly©   s    ÿzTest.test_classImplementsOnlyc           	      C   sj  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|ƒ¡ |  tt|ƒ¡ |  |t|ƒ¡ |  |t|ƒ¡ |  |t|ƒ¡ |  |t|ƒ¡ t|t|ƒt ƒ |  tt|ƒ¡ |  	tt|ƒ¡ |  	tt|ƒ¡ t|t|ƒtƒ |  tt|ƒ¡ d S )Nc                   @   s   e Zd ZdS )z'Test.test_directlyProvides.<locals>.IA1Nr   r   r   r   r   ÚIA1¼   s   r1   c                   @   s   e Zd ZdS )z'Test.test_directlyProvides.<locals>.IA2Nr   r   r   r   r   ÚIA2¿   s   r2   c                   @   s   e Zd ZdS )z&Test.test_directlyProvides.<locals>.IBNr   r   r   r   r   ÚIBÂ   s   r3   c                   @   s   e Zd ZdS )z&Test.test_directlyProvides.<locals>.ICNr   r   r   r   r   ÚICÅ   s   r4   c                   @   s   e Zd ZdS )z%Test.test_directlyProvides.<locals>.ANr   r   r   r   r   r   È   s   r   c                   @   s   e Zd ZdS )z%Test.test_directlyProvides.<locals>.BNr   r   r   r   r   r   Ì   s   r   c                   @   s   e Zd ZdS )z%Test.test_directlyProvides.<locals>.CNr   r   r   r   r   r   Ð   s   r   )
r   r   r   r   r   r   r(   r	   r   r)   )	r+   r1   r2   r3   r4   r   r   r   Úobr   r   r   Útest_directlyProvidesº   s0    

zTest.test_directlyProvidesc                 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                   @   s   e Zd ZdS )z#Test.test_implementedBy.<locals>.I2Nr   r   r   r   r   r   ò   s   r   c                   @   s   e Zd ZdS )z#Test.test_implementedBy.<locals>.C1Nr   r   r   r   r   ÚC1õ   s   r7   c                   @   s   e Zd ZdS )z#Test.test_implementedBy.<locals>.C2Nr   r   r   r   r   ÚC2ú   s   r8   c                 S   s   g | ]}|  ¡ ‘qS r   r   r   r   r   r   r"   ÿ   s     z+Test.test_implementedBy.<locals>.<listcomp>r   )r   r   r   r   r'   r   )r+   r   r7   r8   r   r   r   Útest_implementedByð   s    

ÿzTest.test_implementedByc                 C   s  G dd„ dƒ}t  d|j|j¡}G dd„ dƒ}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 |  |j	j	|j	¡ d S )	Nc                   @   s   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   
  s   r   c                   @   s   e Zd ZdZdS )z<Test.test_odd_metaclass_that_doesnt_subclass_type.<locals>.Br:   N)r   r   r   Úbr   r   r   r   r     s   r   c                   @   s   e Zd ZdS )z<Test.test_odd_metaclass_that_doesnt_subclass_type.<locals>.CNr   r   r   r   r   r     s   r   r:   é   )
r
   Ú	MetaClassÚ	__bases__Ú__dict__r'   r;   r<   r,   ZassertIsÚ	__class__)r+   r   r   r   r;   Zaar,   r   r   r   Ú,test_odd_metaclass_that_doesnt_subclass_type  s,    z1Test.test_odd_metaclass_that_doesnt_subclass_typeN)	r   r   r   r-   r/   r0   r6   r9   rB   r   r   r   r   r   V   s   <6r   )Ú__doc__ZunittestZzope.interfacer   r   r   r   r   r   r   r	   Zzope.interface.testsr
   r   r   r   r   r   r   r   r>   r?   r   r   r   ZTestCaser   r   r   r   r   Ú<module>   s0   	

