3
d`"                 @   sZ   d Z ddlZddlZddlmZmZmZmZmZm	Z	 G dd deZ
G dd dejZdS )z
Tests for the Map handler.
    N)	HasTraitsIntListMapon_trait_change
TraitErrorc               @   sP   e Zd ZdZe Ze ZeddddddZe	dd	d
 Z
e	ddd ZdS )PreferenceszD
    Example class with a Map that records changes to that map.
             )redgreenyellowr   )default_valuecolorc             C   s   ||||f}| j j| d S )N)primary_changesappend)selfobjnameoldnewchange r   7/tmp/pip-build-7vycvbft/traits/traits/tests/test_map.py_record_primary_trait_change"   s    z(Preferences._record_primary_trait_changecolor_c             C   s   ||||f}| j j| d S )N)shadow_changesr   )r   r   r   r   r   r   r   r   r   _record_shadow_trait_change'   s    z'Preferences._record_shadow_trait_changeN)__name__
__module____qualname____doc__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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!S )"TestMapc             C   s   G dd dt }| }d|_| jd|j | jd|j d|_| jd|j | jd|j | jt d|_W d Q R X | jt g |_W d Q R X d S )Nc               @   s   e Zd ZedddddZdS )z'TestMap.test_assignment.<locals>.Person   r   )yesyeahnonahN)r   r    r!   r   marriedr   r   r   r   Person/   s   r*   r%   r$   r'   r   z	dont know)r   r)   assertEqualmarried_assertRaisesr   )r   r*   Zpersonr   r   r   test_assignment.   s    zTestMap.test_assignmentc                sH   ddddd G  fdddt }| }| j|jd | j|jd d S )Nr$   r   )r%   r&   r'   r(   c                   s   e Zd Ze ZdS )z'TestMap.test_no_default.<locals>.PersonN)r   r    r!   r   r)   r   )mappingr   r   r*   E   s   r*   r%   )r   r+   r)   r,   )r   r*   pr   )r/   r   test_no_defaultB   s
    zTestMap.test_no_defaultc                sP   ddddd G  fdddt }| }|j}|j}| j|d | j|d d S )Nr$   r   )r%   r&   r'   r(   c                   s   e Zd Ze ZdS )z<TestMap.test_no_default_reverse_access_order.<locals>.PersonN)r   r    r!   r   r)   r   )r/   r   r   r*   R   s   r*   r%   )r   r,   r)   r+   )r   r*   r0   Zshadow_valueZprimary_valuer   )r/   r   $test_no_default_reverse_access_orderO   s    z,TestMap.test_no_default_reverse_access_orderc             C   s4   G dd dt }| }| j|j | j|jd d S )Nc               @   s$   e Zd ZeddddddddZdS )z$TestMap.test_default.<locals>.Personr$   r   r
   )r%   r&   r'   r(   NN)r   )r   r    r!   r   r)   r   r   r   r   r*   _   s   
r*   r
   )r   assertIsNoner)   r+   r,   )r   r*   r0   r   r   r   test_default^   s    zTestMap.test_defaultc             C   s4   G dd dt }| }| j|jd | j|j d S )Nc               @   s$   e Zd ZeddddddddZdS )z9TestMap.test_default_reverse_access_order.<locals>.Personr$   r   r
   )r%   r&   r'   r(   NN)r   )r   r    r!   r   r)   r   r   r   r   r*   h   s   
r*   r
   )r   r+   r,   r3   r)   )r   r*   r0   r   r   r   !test_default_reverse_access_orderg   s    z)TestMap.test_default_reverse_access_orderc             C   sp   G dd dt }| }| j|j | j|jd | j|jd | }| j|jd | j|j | j|jd d S )Nc               @   s0   e Zd ZeddddddZedZdd ZdS )z+TestMap.test_default_method.<locals>.Personr$   r   r
   )r%   r&   r'   r(   Nc             S   s   |  j d7  _ d S )Nr$   )default_calls)r   r   r   r   _married_defaultw   s    z<TestMap.test_default_method.<locals>.Person._married_defaultN)r   r    r!   r   r)   r   r6   r7   r   r   r   r   r*   q   s   

r*   r
   r$   )r   r3   r)   r+   r,   r6   )r   r*   r0   p2r   r   r   test_default_methodp   s    
zTestMap.test_default_methodc             C   sF   G dd dt }G dd d|}| }| j|jd | j|jd d S )Nc               @   s$   e Zd ZeddddddddZdS )z?TestMap.test_default_static_override_static.<locals>.BasePersonr$   r   r
   )r%   r&   r'   r(   NN)r   )r   r    r!   r   r)   r   r   r   r   
BasePerson   s   
r:   c               @   s   e Zd ZdZdS )z;TestMap.test_default_static_override_static.<locals>.Personr%   N)r   r    r!   r)   r   r   r   r   r*      s   r*   r%   r$   )r   r+   r)   r,   )r   r:   r*   r0   r   r   r   #test_default_static_override_static   s
    z+TestMap.test_default_static_override_staticc             C   sT   G dd dt }G dd d|}| }| j|jd | j|jd | j|jd d S )Nc               @   s$   e Zd ZeddddddddZdS )z?TestMap.test_default_static_override_method.<locals>.BasePersonr$   r   r
   )r%   r&   r'   r(   NN)r   )r   r    r!   r   r)   r   r   r   r   r:      s   
r:   c               @   s   e Zd ZedZdd ZdS )z;TestMap.test_default_static_override_method.<locals>.Personr   c             S   s   |  j d7  _ dS )Nr$   r%   )r6   )r   r   r   r   r7      s    zLTestMap.test_default_static_override_method.<locals>.Person._married_defaultN)r   r    r!   r   r6   r7   r   r   r   r   r*      s   r*   r%   r$   )r   r+   r)   r,   r6   )r   r:   r*   r0   r   r   r   #test_default_static_override_method   s    z+TestMap.test_default_static_override_methodc             C   sT   G dd dt }G dd d|}| }| j|jd | j|jd | j|jd d S )Nc               @   s0   e Zd ZeddddddZedZdd ZdS )z?TestMap.test_default_method_override_static.<locals>.BasePersonr$   r   r
   )r%   r&   r'   r(   Nc             S   s   |  j d7  _ d S )Nr$   )r6   )r   r   r   r   r7      s    zPTestMap.test_default_method_override_static.<locals>.BasePerson._married_defaultN)r   r    r!   r   r)   r   r6   r7   r   r   r   r   r:      s   

r:   c               @   s   e Zd ZdZdS )z;TestMap.test_default_method_override_static.<locals>.Personr%   N)r   r    r!   r)   r   r   r   r   r*      s   r*   r%   r$   r   )r   r+   r)   r,   r6   )r   r:   r*   r0   r   r   r   #test_default_method_override_static   s    
z+TestMap.test_default_method_override_staticc             C   sT   G dd dt }G dd d|}| }| j|jd | j|jd | j|jd d S )Nc               @   s0   e Zd ZeddddddZedZdd ZdS )z?TestMap.test_default_method_override_method.<locals>.BasePersonr$   r   r
   )r%   r&   r'   r(   Nc             S   s   |  j d7  _ d S )Nr$   )r6   )r   r   r   r   r7      s    zPTestMap.test_default_method_override_method.<locals>.BasePerson._married_defaultN)r   r    r!   r   r)   r   r6   r7   r   r   r   r   r:      s   

r:   c               @   s   e Zd Zdd ZdS )z;TestMap.test_default_method_override_method.<locals>.Personc             S   s   |  j d7  _ dS )Nr$   r%   )r6   )r   r   r   r   r7      s    zLTestMap.test_default_method_override_method.<locals>.Person._married_defaultN)r   r    r!   r7   r   r   r   r   r*      s   r*   r%   r$   )r   r+   r)   r,   r6   )r   r:   r*   r0   r   r   r   #test_default_method_override_method   s    
z+TestMap.test_default_method_override_methodc          	   C   s"   | j t ti  W d Q R X d S )N)r-   
ValueErrorr   )r   r   r   r   test_empty_map   s    zTestMap.test_empty_mapc          
   C   s   t  }| jt|jd | jt|jd d|_| jt|jd | jt|jd d|_| jt|jd | jt|jd | jt d|_W d Q R X | jt|jd | jt|jd d S )Nr   r   r$   r   r
   Zblue)r   r+   lenr   r   r   r-   r   )r   preferencesr   r   r   test_notification   s    zTestMap.test_notificationc             C   s2   t dd}| jt|jd | jt|jd d S )Nr   )r   r$   )r   r+   rA   r   r   )r   rB   r   r   r   test_notification_init_value   s    
z$TestMap.test_notification_init_valuec             C   sh   G dd dt }| }| jt|jd | jt|jd |j | jt|jd | jt|jd d S )Nc               @   s   e Zd Zdd ZdS )zTTestMap.test_notification_change_shadow_value.<locals>.PreferencesWithDynamicDefaultc             S   s   dS )Nr   r   )r   r   r   r   _color_default   s    zcTestMap.test_notification_change_shadow_value.<locals>.PreferencesWithDynamicDefault._color_defaultN)r   r    r!   rE   r   r   r   r   PreferencesWithDynamicDefault   s   rF   r   )r   r+   rA   r   r   r   )r   rF   rB   r   r   r   %test_notification_change_shadow_value   s    z-TestMap.test_notification_change_shadow_valuec             C   s   G dd dt }| }|j d }tjtj|}| j|j|ddd | j|j|ddd | jt |j|dd W d Q R X d S )Nc               @   s"   e Zd ZedddddddZdS )z-TestMap.test_pickle_roundtrip.<locals>.Personr$   r   )r%   r&   r'   r(   r%   )r   N)r   r    r!   r   r)   r   r   r   r   r*      s   r*   r)   r%   unknown)	r   Ztraitspickleloadsdumpsr+   validater-   r   )r   r*   r0   Zmarried_traitreconstitutedr   r   r   test_pickle_roundtrip   s    zTestMap.test_pickle_roundtripc             C   sP   G dd dt }| }|jd}tjtj|}|j d }| j||d d S )Nc               @   s"   e Zd ZedddddddZdS )z0TestMap.test_pickle_shadow_trait.<locals>.Personr$   r   )r%   r&   r'   r(   r%   )r   N)r   r    r!   r   r)   r   r   r   r   r*     s   r*   r,   r$   )r   ZtraitrI   rJ   rK   r   r+   )r   r*   r0   Zmarried_shadow_traitrM   Zdefault_value_callabler   r   r   test_pickle_shadow_trait  s    
z TestMap.test_pickle_shadow_traitN)r   r    r!   r.   r1   r2   r4   r5   r9   r;   r<   r=   r>   r@   rC   rD   rG   rN   rO   r   r   r   r   r#   -   s    		r#   )r"   rI   ZunittestZ
traits.apir   r   r   r   r   r   r   ZTestCaser#   r   r   r   r   <module>   s
    