B
    u9a  ã               @   sf   d Z ddlZddlZddlZddlZddlZddlmZ dd„ ZG dd„ dej	ƒZ
edkrbe ¡  dS )	z'Unit tests for collections.defaultdict.é    N)Údefaultdictc               C   s   t S )N)Úlist© r   r   ú&/usr/lib/python3.7/test_defaultdict.pyÚfoobar   s    r   c               @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestDefaultDictc          
   C   sì  t ƒ }|  |jd ¡ t|_|d  d¡ |  |ddgi¡ |d  d¡ |  |dddgi¡ |d  |d  |  |ddgg g dœ¡ |  |d |d   k	o¦|d k	n  ¡ t tddd	}|  |jt¡ |  |ddd	œ¡ |  |d
 d¡ |  |d d¡ |  |d g ¡ |  d
|¡ |  d
| ¡ ¡ |  d|¡ |  d| ¡ ¡ |  d|¡ |  d| ¡ ¡ |  d|¡ |  d| ¡ ¡ d |_|  |jd ¡ y|d  W n2 t	k
rÎ } z|  |j
d¡ W d d }~X Y nX |  d¡ |  tt d¡ d S )Né   é*   é   é   é   )r   r   r   é   é   )ÚfooÚbarr   r   é   )r   zd2[15] didn't raise KeyError)r   ÚassertEqualÚdefault_factoryr   ÚappendÚ
assertTrueZassertInÚkeysZassertNotInÚKeyErrorÚargsÚfailÚassertRaisesÚ	TypeError)ÚselfÚd1Úd2Úerrr   r   r   Ú
test_basic   sB    * 
zTestDefaultDict.test_basicc             C   s2   t ƒ }|  t|jd¡ t|_|  | d¡g ¡ d S )Nr	   )r   r   r   Ú__missing__r   r   r   )r   r   r   r   r   Útest_missing4   s    zTestDefaultDict.test_missingc             C   sÂ   t ƒ }|  |jd ¡ |  t|ƒd¡ |  tt|ƒƒ|¡ d|d< |  t|ƒd¡ t tƒ}|  |jt¡ d|d< |  t|ƒd¡ dd	„ }t |ƒ}|  |j|k¡ |d
  |  t|ƒdt|ƒ ¡ d S )Nzdefaultdict(None, {})é)   é   zdefaultdict(None, {11: 41})r	   r   z$defaultdict(<class 'int'>, {12: 42})c               S   s   dS )Né+   r   r   r   r   r   r   E   ó    z&TestDefaultDict.test_repr.<locals>.foor   zdefaultdict(%s, {13: 43}))r   r   r   ÚreprÚevalÚintr   )r   r   r   r   Úd3r   r   r   Ú	test_repr:   s    zTestDefaultDict.test_reprc          	   C   s¦   t ƒ }dd„ }t |ddiƒ}t ¡ }zpt|dƒ}zVt||d t||d | d¡ |  | ¡ t|ƒd ¡ |  | ¡ t|ƒd ¡ W d | 	¡  X W d t
 |¡ X d S )	Nc               S   s   dS )Nr	   r   r   r   r   r   r   M   r&   z'TestDefaultDict.test_print.<locals>.foor   r   zw+)Úfiler   Ú
)r   ÚtempfileÚmktempÚopenÚprintÚseekr   Úreadliner'   ÚcloseÚosÚremove)r   r   r   r   ÚtfnÚfr   r   r   Ú
test_printK   s    

zTestDefaultDict.test_printc             C   sò   t ƒ }| ¡ }|  t|ƒt ¡ |  |jd ¡ |  |i ¡ t|_| ¡ }|  t|ƒt ¡ |  |jt¡ |  |i ¡ |d  | ¡ }|  t|ƒt ¡ |  |jt¡ |  |dg i¡ |d  |  |g g dœ¡ t ƒ }d|d< | ¡ }|  |d d¡ d S )Nr	   r   )r	   r   Úa)r   Úcopyr   Útyper   r   )r   r   r   r*   Zd4ÚdÚer   r   r   Ú	test_copy`   s*    zTestDefaultDict.test_copyc             C   s`   t tddiƒ}t |¡}|  |jt¡ |  ||¡ t|_t |¡}|  |jt¡ |  ||¡ d S )Nr   )r   r   r;   r   r   r   )r   r   r   r   r   r   Útest_shallow_copyy   s    

z!TestDefaultDict.test_shallow_copyc             C   sx   t tddgiƒ}t |¡}|  |jt¡ |  ||¡ |  |d |d k	¡ t|_t |¡}|  |jt¡ |  ||¡ d S )Nr   )r   r   r;   Zdeepcopyr   r   r   r   )r   r   r   r   r   r   Útest_deep_copyƒ   s    

zTestDefaultDict.test_deep_copyc          
   C   sV   t ƒ }y|d  W n4 tk
rF } z|  |jd d¡ W d d }~X Y nX |  d¡ d S )N)r   r   zexpected KeyError)r   r   r   r   r   )r   r   r   r   r   r   Útest_keyerror_without_factoryŽ   s    $z-TestDefaultDict.test_keyerror_without_factoryc          	   C   sj   G dd„ dt ƒ}|ƒ }|  t|ƒd¡ t ¡ }z*t|dƒ}zt||d W d | ¡  X W d t 	|¡ X d S )Nc               @   s   e Zd Zdd„ Zdd„ ZdS )z0TestDefaultDict.test_recursive_repr.<locals>.subc             S   s   | j | _d S )N)Ú_factoryr   )r   r   r   r   Ú__init__š   s    z9TestDefaultDict.test_recursive_repr.<locals>.sub.__init__c             S   s   g S )Nr   )r   r   r   r   rC   œ   s    z9TestDefaultDict.test_recursive_repr.<locals>.sub._factoryN)Ú__name__Ú
__module__Ú__qualname__rD   rC   r   r   r   r   Úsub™   s   rH   zBsub\(<bound method .*sub\._factory of sub\(\.\.\., \{\}\)>, \{\}\)zw+)r,   )
r   ZassertRegexr'   r.   r/   r0   r1   r4   r5   r6   )r   rH   r=   r7   r8   r   r   r   Útest_recursive_repr—   s    

z#TestDefaultDict.test_recursive_reprc             C   s   |   tti ¡ d S )N)r   r   r   )r   r   r   r   Útest_callable_arg¯   s    z!TestDefaultDict.test_callable_argc             C   sN   t tƒ}|d  x8ttjd ƒD ]&}t ||¡}t |¡}|  ||¡ q W d S )Nr   )r   r)   ÚrangeÚpickleZHIGHEST_PROTOCOLÚdumpsÚloadsr   )r   r=   ÚprotoÚsÚor   r   r   Útest_pickling²   s    
zTestDefaultDict.test_picklingN)rE   rF   rG   r    r"   r+   r9   r?   r@   rA   rB   rI   rJ   rR   r   r   r   r   r      s   $
	r   Ú__main__)Ú__doc__r5   r;   rL   r.   ZunittestÚcollectionsr   r   ZTestCaser   rE   Úmainr   r   r   r   Ú<module>   s    -