3
do.                 @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZ dd Zd	d
 Zdd ZG dd dejZG dd dejZdS )    N)	HasTraits)ComparisonModeDefaultValue	TraitKindMAXIMUM_DEFAULT_VALUE_TYPE)CTrait)
TraitError)AnyIntListc               C   s   dS )z Trivial getter. T r   r   r   ;/tmp/pip-build-7vycvbft/traits/traits/tests/test_ctraits.pygetter   s    r   c             C   s   dS )z Trivial setter. Nr   )valuer   r   r   setter   s    r   c             C   s   | S )z Trivial validator. r   )r   r   r   r   	validator#   s    r   c               @   s   e Zd 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"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0S )1
TestCTraitz Tests for the CTrait class. c             C   s$   t tj}| j|j tjd f d S )N)r   r   traitassertEqualdefault_valuer   constant)selfr   r   r   r   test_initial_default_value+   s    
z%TestCTrait.test_initial_default_valuec             C   sb   t tj}|jtjd | j|j tjdf |jtjdddg | j|j tjdddgf d S )Ngffffff@         )	r   r   r   set_default_valuer   r   r   r   Z	list_copy)r   r   r   r   r   test_set_and_get_default_value1   s    
z)TestCTrait.test_set_and_get_default_valuec             C   sp   d dt dft dddfg}ttj}xH|D ]@}| j|d* | jt |jtj	| W d Q R X W d Q R X q(W d S )N{   r   r      )r   )r   )
intr   r   r   subTestassertRaises
ValueErrorr   r   Zcallable_and_args)r   Z
bad_valuesr   r   r   r   r   1test_validate_default_value_for_callable_and_args;   s    

z<TestCTrait.test_validate_default_value_for_callable_and_argsc             C   s   t tj}tjdd }tjdt |jtj	d W d Q R X | j
t|d |d }| jdt|j tjd\}}}| j||j d S )	NT)recordalwaysg@r   r   z1default_value method with arguments is deprecated.)r   r   r   warningscatch_warningssimplefilterDeprecationWarningr   r   r   r   lenZassertInstrmessage__name__
rpartitionfilename)r   r   Z	warn_msgsZwarn_msg_Zthis_moduler   r   r   (test_default_value_for_set_is_deprecatedK   s    
z3TestCTrait.test_default_value_for_set_is_deprecatedc             C   sV   t tj}| jt |jdd  W d Q R X | jt |jtd d  W d Q R X d S )Nr   )r   r   r   r"   r#   r   r   )r   r   r   r   r   test_bad_default_value_typeZ   s
    
z&TestCTrait.test_bad_default_value_typec          	   C   sN   t tj}| j|j tttf|_| j	|j | j
t d|_W d Q R X d S )NF)r   r   r   assertFalseZis_propertyr   r   r   property_fields
assertTruer"   AttributeError)r   r   r   r   r   test_is_propertyc   s    
zTestCTrait.test_is_propertyc          	   C   s   t tj}| j|j dd }dd }||d f|_|j\}}}| j|| | j|| | j| | jt |j| W d Q R X d S )Nc             S   s   | j jddS )N_valuer   )__dict__get)r   r   r   r   	value_getu   s    z3TestCTrait.test_get_set_property.<locals>.value_getc             S   s.   | j jdd}||kr*|| _| jd|| d S )Nr;   r   r   )r<   r=   r;   Ztrait_property_changed)r   r   	old_valuer   r   r   	value_setx   s    z3TestCTrait.test_get_set_property.<locals>.value_set)	r   r   r   assertIsNoner7   ZassertIsr"   	TypeErrorZ_get_property)r   r   r>   r@   fgetfsetvalidater   r   r   test_get_set_propertyo   s    

z TestCTrait.test_get_set_propertyc             C   s,   t tj}| j|j d|_| j|j d S )NT)r   r   r   r6   Zmodify_delegater8   )r   r   r   r   r   test_modify_delegate   s    
zTestCTrait.test_modify_delegatec             C   s,   t tj}| j|j d|_| j|j d S )NT)r   r   r   r6   Zsetattr_original_valuer8   )r   r   r   r   r   test_setattr_original_value   s    
z&TestCTrait.test_setattr_original_valuec             C   s,   t tj}| j|j d|_| j|j d S )NT)r   r   r   r6   Zpost_setattr_original_valuer8   )r   r   r   r   r    test_post_setattr_original_value   s    
z+TestCTrait.test_post_setattr_original_valuec             C   s,   t tj}| j|j d|_| j|j d S )NT)r   r   r   r6   Z	is_mappedr8   )r   r   r   r   r   test_is_mapped   s    
zTestCTrait.test_is_mappedc             C   s,   t tj}| j|jt | j|jtj d S )N)r   r   r   assertIsInstancecomparison_moder   r   equality)r   r   r   r   r   test_default_comparison_mode   s    
z'TestCTrait.test_default_comparison_modec             C   sF   t tj}| jt d|_W d Q R X | jt d|_W d Q R X d S )Nr   r   r4   )r   r   r   r"   r#   rL   )r   r   r   r   r   test_invalid_comparison_mode   s
    
z'TestCTrait.test_invalid_comparison_modec          
   C   sV   t tj}|j}| j|tj tj|_| jt d|_W d Q R X | j	|jtj d S )Nr   r4   )
r   r   r   rL   ZassertNotEqualr   noner"   r#   r   )r   r   Zdefault_comparison_moder   r   r   )test_comparison_mode_unchanged_if_invalid   s    
z4TestCTrait.test_comparison_mode_unchanged_if_invalidc             C   sz   t tj}d|_| j|jt | j|jtj d|_| j|jt | j|jtj d|_| j|jt | j|jtj	 d S )Nr   r   r   )
r   r   r   rL   rK   r   r   rP   identityrM   )r   r   r   r   r   test_comparison_mode_int   s    
z#TestCTrait.test_comparison_mode_intc             C   s   t tj}tj|_| j|jt | j|jtj tj|_| j|jt | j|jtj tj	|_| j|jt | j|jtj	 d S )N)
r   r   r   r   rP   rL   rK   r   rR   rM   )r   r   r   r   r   test_comparison_mode_enum   s    
z$TestCTrait.test_comparison_mode_enumc          	      s   d}d}dd }t tj G  fdddt}| _| j j | }||_| j||j d  _| j	 j ||_| j||j | _||_| j||j | j
t d _W d Q R X d S )Nr?   	new_valuec             S   s
   || _ d S )N)output_variable)objnamer   r   r   r   post_setattr_func   s    zCTestCTrait.test_assign_post_setattr_none.<locals>.post_setattr_funcc                   s   e Zd Z ZdS )z;TestCTrait.test_assign_post_setattr_none.<locals>.TestClassN)r/   
__module____qualname__atrr   )r   r   r   	TestClass   s   r]   ZInvalid)r   r   r   r   Zpost_setattrZassertIsNotNoner\   r   rV   rA   r"   r#   )r   r?   rU   rY   r]   rW   r   )r   r   test_assign_post_setattr_none   s&    
z(TestCTrait.test_assign_post_setattr_nonec                sd    fdd}dddh}t d t| _tj||}~| j|j d  _| j|j | j j d S )Nc                  s   t j j d S )N)sysgetrefcounthandlerr   )trr   r   get_handler_refcount  s    z>TestCTrait.test_unsafe_set_value.<locals>.get_handler_refcountr   r   r   r   )	r   r	   ra   weakreffinalizer8   aliver6   rA   )r   rc   Zweakrefable_object	finalizerr   )rb   r   test_unsafe_set_value  s    

z TestCTrait.test_unsafe_set_valuec          
   C   s*   | j t tttd  W d Q R X d S )Nr   )r"   r   r   maxr   )r   r   r   r   test_invalid_initialization%  s    z&TestCTrait.test_invalid_initializationc          
   C   s$   | j t tdd W d Q R X d S )Nr   )kind)r"   r   r   )r   r   r   r   'test_initialization_with_keywords_fails)  s    z2TestCTrait.test_initialization_with_keywords_failsc                s   t   tjjdd} j| G  fdddt}| }| jt|jd d|_	|j
|dd | j|j	d | jt|jd | j|jd d d S )NZbaz)Zreturn_valuec                   s   e Zd Z ZeZdd ZdS )z3TestCTrait.test_default_initialization.<locals>.Fooc             S   s   | j j| d S )N)bar_changedappend)r   newr   r   r   _bar_changed8  s    z@TestCTrait.test_default_initialization.<locals>.Foo._bar_changedN)r/   rZ   r[   barr   rm   rp   r   )ctraitr   r   Foo3  s   rs   r   r   rq   )r   unittestZmockZ	MagicMockZset_validater   r   r,   rm   rq   Zassert_called_once_with)r   rE   rs   foor   )rr   r   test_default_initialization-  s    
z&TestCTrait.test_default_initializationc             C   s   ddddddg}ddd	d
dg}t d}x4|D ],}| j|d | jt|| W d Q R X q,W xD|D ]<}| j|d& | jt t|| W d Q R X W d Q R X qbW d S )NZnon_existentZ__non_existentZnon_existent__Z_non_existent_Z__a__b_r2   __package__Z__a__Z____Z_____r   )rX   )r   r!   rA   getattrr"   r9   )r   Znon_dunder_namesZdunder_namesrr   rX   r   r   r   test_failed_attribute_accessF  s&    

z'TestCTrait.test_failed_attribute_accessc             C   sR   | j ttd tdd t_z(td}| jt |j W d Q R X W d t`X d S )Nbadattr_testc             S   s   dd S )Nr   r   r   )r   r   r   r   <lambda>j  s    zATestCTrait.test_exception_from_attribute_access.<locals>.<lambda>r   )r6   hasattrr   propertyr{   r"   ZeroDivisionError)r   rr   r   r   r   $test_exception_from_attribute_accessc  s    z/TestCTrait.test_exception_from_attribute_accessN)r/   rZ   r[   __doc__r   r   r$   r3   r5   r:   rF   rG   rH   rI   rJ   rN   rO   rQ   rS   rT   r^   rh   rj   rl   rv   rz   r   r   r   r   r   r   (   s0   
					r   c               @   s    e Zd ZdZdd Zdd ZdS )TestCTraitNotifiersz4 Test calling trait notifiers and object notifiers. c             C   s:   G dd dt }|dd}|jd}| j|jdg  d S )Nc               @   s   e Zd Ze ZdS )z5TestCTraitNotifiers.test_notifiers_empty.<locals>.FooN)r/   rZ   r[   r
   xr   r   r   r   rs   x  s   rs   r   )r   r   T)r   r   r   
_notifiers)r   rs   ru   x_ctraitr   r   r   test_notifiers_emptyv  s    

z(TestCTraitNotifiers.test_notifiers_emptyc             C   sX   G dd dt }|dd}|jd}|jd}| jt|d |\}| j|j|j d S )Nc               @   s   e Zd Ze Zdd ZdS )z8TestCTraitNotifiers.test_notifiers_on_trait.<locals>.Fooc             S   s   d S )Nr   )r   r   r   r   
_x_changed  s    zCTestCTraitNotifiers.test_notifiers_on_trait.<locals>.Foo._x_changedN)r/   rZ   r[   r
   r   r   r   r   r   r   rs     s   rs   r   )r   r   T)r   r   r   r   r,   ra   r   )r   rs   ru   r   Z
tnotifiersZnotifierr   r   r   test_notifiers_on_trait  s    


z+TestCTraitNotifiers.test_notifiers_on_traitN)r/   rZ   r[   r   r   r   r   r   r   r   r   s  s   
r   )r_   Zunittest.mockrt   r(   rd   Z
traits.apir   Ztraits.constantsr   r   r   r   Ztraits.ctraitr   Ztraits.trait_errorsr   Ztraits.trait_typesr	   r
   r   r   r   r   ZTestCaser   r   r   r   r   r   <module>   s     M