3
de                 @   s  d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZ ddlmZmZmZmZ G dd dejZG dd deZG d	d
 d
eZG dd dejZG dd deZG dd deZG dd dejZG dd deZG dd deZG dd deZ G dd dejZ!G dd deZ"G dd dejZ#G dd  d eZ$G d!d" d"ejZ%G d#d$ d$eZ&G d%d& d&eZ'G d'd( d(eZ(G d)d* d*ejZ)G d+d, d,eZ*G d-d. d.ejZ+G d/d0 d0eZ,G d1d2 d2eZ-G d3d4 d4ejZ.G d5d6 d6eZ/G d7d8 d8eZ0G d9d: d:eZ1G d;d< d<ejZ2G d=d> d>eZ3G d?d@ d@ejZ4G dAdB dBeZ5G dCdD dDeZ6G dEdF dFejZ7dS )Gzp Integration tests between HasTraits and observe.
See tests in ``traits.observations`` for more targeted tests.
    N)AnyBoolDelegatesToDictEvent	HasTraitsInstanceIntListobservePropertySetStr	Undefined)anytraitpop_exception_handlerpush_exception_handlertraitc               @   s    e Zd ZdZdd Zdd ZdS )TestObserveDecoratorz* General tests for the observe decorator. c             C   sX   d}| j t| G dd dt}W d Q R X | j t| G dd dt}W d Q R X d S )Nz4should be callable with a single positional argumentc               @   s"   e Zd Ze Zeddd ZdS )zJTestObserveDecorator.test_warning_on_handler_with_bad_signature.<locals>.Afooc             S   s   d S )N )selfr   r   ;/tmp/pip-build-7vycvbft/traits/traits/tests/test_observe.py_do_something_when_foo_changes3   s    ziTestObserveDecorator.test_warning_on_handler_with_bad_signature.<locals>.A._do_something_when_foo_changesN)__name__
__module____qualname__r	   r   r   r   r   r   r   r   A0   s   r   c               @   s"   e Zd Ze Zeddd ZdS )zJTestObserveDecorator.test_warning_on_handler_with_bad_signature.<locals>.Br   c             [   s   d S )Nr   )r   kwargsr   r   r   r   ;   s    ziTestObserveDecorator.test_warning_on_handler_with_bad_signature.<locals>.B._do_something_when_foo_changesN)r   r   r   r	   r   r   r   r   r   r   r   B8   s   r   )ZassertWarnsRegexUserWarningr   )r   Zmessage_regexr   r   r   r   r   *test_warning_on_handler_with_bad_signature,   s
    z?TestObserveDecorator.test_warning_on_handler_with_bad_signaturec             C   s<   G dd dt }| }| j|jd d|_| j|jd d S )Nc               @   sn   e Zd Ze ZedZeddd ZeddddZeddd	 Z	edd
d Z
eddddZdS )z@TestObserveDecorator.test_decorated_method_signatures.<locals>.Ar   r   c             S   s   |  j d7  _ d S )N   )
call_count)r   eventr   r   r   _the_usual_signatureH   s    zUTestObserveDecorator.test_decorated_method_signatures.<locals>.A._the_usual_signatureTc             S   s   |  j d7  _ d S )Nr"   )r#   )r   r$   Z
frombicater   r   r    _method_with_extra_optional_argsL   s    zaTestObserveDecorator.test_decorated_method_signatures.<locals>.A._method_with_extra_optional_argsc             W   s   |  j d7  _ d S )Nr"   )r#   )r   argsr   r   r   _method_with_star_argsP   s    zWTestObserveDecorator.test_decorated_method_signatures.<locals>.A._method_with_star_argsc             S   s   |  j d7  _ d S )Nr"   )r#   )r   Zfoo_change_eventr   r   r   _method_with_alternative_nameT   s    z^TestObserveDecorator.test_decorated_method_signatures.<locals>.A._method_with_alternative_nameNc             S   s   |  j d7  _ d S )Nr"   )r#   )r   r$   r   r   r   _optional_second_argumentX   s    zZTestObserveDecorator.test_decorated_method_signatures.<locals>.A._optional_second_argument)T)N)r   r   r   r	   r   r#   r   r%   r&   r(   r)   r*   r   r   r   r   r   C   s   r   r         )r   assertEqualr#   r   )r   r   ar   r   r    test_decorated_method_signatures?   s
    z5TestObserveDecorator.test_decorated_method_signaturesN)r   r   r   __doc__r!   r/   r   r   r   r   r   )   s   r   c               @   s   e Zd ZdZe ZdS )Studentz; Model for testing list + post_init (enthought/traits#275) N)r   r   r   r0   r   graduater   r   r   r   r1   b   s   r1   c               @   sL   e Zd ZdZeeeZe Ze	e
dddjddj
ddddd	 Zd
S )Teacherz; Model for testing list + post_init (enthought/traits#275) studentsT)notifyFr2   )Z	post_initc             C   s   | j j| d S )N)student_graduate_eventsappend)r   r$   r   r   r   _student_graduateo   s    zTeacher._student_graduateN)r   r   r   r0   r
   r   r1   r4   r6   r   r   
list_itemsr8   r   r   r   r   r3   h   s   r3   c               @   s    e Zd ZdZdd Zdd ZdS )TestHasTraitsObservePostInitz Test for enthought/traits#275 c             C   s   t dd | jt d S )NT)reraise_exceptions)r   
addCleanupr   )r   r   r   r   setUp{   s    
z"TestHasTraitsObservePostInit.setUpc             C   sN   dd t dD }t|d}| jt|jd d|d _| jt|jd d S )Nc             S   s   g | ]
}t  qS r   )r1   ).0_r   r   r   
<listcomp>   s    zLTestHasTraitsObservePostInit.test_observe_post_init_true.<locals>.<listcomp>   )r4   r   Tr"   )ranger3   r-   lenr6   r2   )r   r4   Zteacherr   r   r   test_observe_post_init_true   s
    

z8TestHasTraitsObservePostInit.test_observe_post_init_trueN)r   r   r   r0   r=   rD   r   r   r   r   r:   x   s   r:   c               @   s>   e Zd ZedZe Ze Ze Z	dd Z
eddd ZdS )Record
   c             C   s   |  j d7  _ dS )Nr"   c   )default_call_count)r   r   r   r   _number_default   s    zRecord._number_defaultnumberc             C   s   | j j| d S )N)number_change_eventsr7   )r   r$   r   r   r   handle_number_change   s    zRecord.handle_number_changeN)r   r   r   r	   rJ   rH   r
   rK   r   clickedrI   r   rL   r   r   r   r   rE      s   rE   c               @   sx   e Zd ZeeeZe Ze Z	e
eeZe Ze Zdd Zeedj jddd Zdd Zed	d
d ZdS )Albumc             C   s   |  j d7  _ t gS )Nr"   )records_default_call_countrE   )r   r   r   r   _records_default   s    zAlbum._records_defaultrecordsrJ   c             C   s   | j j| d S )N)record_number_change_eventsr7   )r   r$   r   r   r   handle_record_number_changed   s    z"Album.handle_record_number_changedc             C   s   |  j d7  _ dt iS )Nr"   rE   )"name_to_records_default_call_countrE   )r   r   r   r   _name_to_records_default   s    zAlbum._name_to_records_defaultzname_to_records:items:clickedc             C   s   | j j| d S )N)name_to_records_clicked_eventsr7   )r   r$   r   r   r   handle_event   s    zAlbum.handle_eventN)r   r   r   r
   r   rE   rQ   r	   rO   rR   r   r   name_to_recordsrT   rV   rP   r   r   r9   rS   rU   rW   r   r   r   r   rN      s   
rN   c               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )#TestHasTraitsObserverDefaultHandlerz> Test the behaviour with dynamic default handler + container. c             C   s   t dd | jt d S )NT)r;   )r   r<   r   )r   r   r   r   r=      s    
z)TestHasTraitsObserverDefaultHandler.setUpc             C   sn   t dd}| j|jd | jt|jd |j\}| j|j| | j|jd | j|jd | j|jd d S )N{   )rJ   r"   rJ   rG   )	rE   r-   rH   rC   rK   objectnameoldnew)r   recordr$   r   r   r   .test_default_not_called_if_init_contains_value   s    
zRTestHasTraitsObserverDefaultHandler.test_default_not_called_if_init_contains_valuec             C   s   t  }| j|jd | jt|jd |jd  jd7  _| j|jd | jt|jd |j\}| j|j|jd  | j|jd | j|j	d | j|j
d d S )Nr   r"   rJ   rG   d   )rN   r-   rO   rC   rR   rQ   rJ   r[   r\   r]   r^   )r   albumr$   r   r   r   #test_observe_extended_trait_in_list   s    zGTestHasTraitsObserverDefaultHandler.test_observe_extended_trait_in_listc             C   sH   t  }| j|jd | jt|jd d|jd _| jt|jd d S )Nr   TrE   r"   )rN   r-   rT   rC   rV   rX   rM   )r   rb   r   r   r   +test_observe_extended_trait_in_default_dict   s
    zOTestHasTraitsObserverDefaultHandler.test_observe_extended_trait_in_default_dictN)r   r   r   r0   r=   r`   rc   rd   r   r   r   r   rY      s
   rY   c               @   s   e Zd Ze ZdS )SingleValueN)r   r   r   r	   valuer   r   r   r   re      s   re   c               @   s   e Zd ZeeeZdS )ClassWithListOfInstanceN)r   r   r   r
   r   re   list_of_instancesr   r   r   r   rg      s   rg   c               @   s   e Zd ZeeeeZdS )ClassWithListOfListOfInstanceN)r   r   r   r
   r   re   list_of_list_of_instancesr   r   r   r   ri     s   ri   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
"TestHasTraitsObserveListOfInstancec             C   s   t dd | jt d S )NT)r;   )r   r<   r   )r   r   r   r   r=   	  s    
z(TestHasTraitsObserveListOfInstance.setUpc             C   s   t  }g }|j}|jtdddjddjddjd|d t }|g}|jj| | jt|d | j	d7  _	|\}| j|j
| | j|jd | j|jd | j|jd d S )Nrj   F)r5   rf   )
expressionhandlerr   r"   )ri   r7   r   r   r9   re   rj   r-   rC   rf   r[   r\   r]   r^   )r   	containereventsrm   single_value_instance
inner_listr$   r   r   r   $test_observe_instance_in_nested_list  s&    zGTestHasTraitsObserveListOfInstance.test_observe_instance_in_nested_listc             C   s   t  }g }|j}|jtdddjddjddjd|d t g}|g|_| jt|d ||jd< t }|jd j| | jt|d | j	d7  _	|\}| j|j
| | j|jd | j|jd | j|jd d S )Nrj   F)r5   rf   )rl   rm   r   r"   )ri   r7   r   r   r9   re   rj   r-   rC   rf   r[   r\   r]   r^   )r   rn   ro   rm   rq   Zsecond_instancer$   r   r   r   2test_nested_list_reassigned_value_compared_equally,  s,    
zUTestHasTraitsObserveListOfInstance.test_nested_list_reassigned_value_compared_equallyc             C   s   t  }g }|j}|jtdddjddjd|d t }|jj| |jj| | jt|d | j	d7  _	| jt|d |j
  |jj  | j	d7  _	| jt|d |j
  |jj  | j	d7  _	| jt|d d S )Nrh   F)r5   rf   )rl   rm   r   r"   )rg   r7   r   r   r9   re   rh   r-   rC   rf   clearpop)r   rn   ro   rm   instancer   r   r   test_duplicated_items_trackedR  s,    

z@TestHasTraitsObserveListOfInstance.test_duplicated_items_trackedN)r   r   r   r=   rr   rs   rw   r   r   r   r   rk     s   &rk   c               @   s   e Zd ZeeeeZdS )ClassWithDictOfInstanceN)r   r   r   r   r   r   re   name_to_instancer   r   r   r   rx     s   rx   c               @   s   e Zd Zdd Zdd ZdS )"TestHasTraitsObserveDictOfInstancec             C   s   t dd | jt d S )NT)r;   )r   r<   r   )r   r   r   r   r=     s    
z(TestHasTraitsObserveDictOfInstance.setUpc             C   s   t  }g }|j}|j|tdddjddjdd t }d|i|_| jt|d | j	d7  _	|\}| j|j
| | j|jd | j|jd | j|jd d S )	Nry   F)r5   rf   )rm   rl   r\   r   r"   )rx   r7   r   r   
dict_itemsre   ry   r-   rC   rf   r[   r\   r]   r^   )r   rn   ro   rm   rp   r$   r   r   r   test_observe_instance_in_dict  s"    

z@TestHasTraitsObserveDictOfInstance.test_observe_instance_in_dictN)r   r   r   r=   r|   r   r   r   r   rz     s   rz   c               @   s$   e Zd ZeeeZeeeZdS )ClassWithSetOfInstanceN)r   r   r   r   r   re   	instancesZinstances_compatr   r   r   r   r}     s   r}   c               @   s   e Zd Zdd Zdd ZdS )!TestHasTraitsObserveSetOfInstancec             C   s   t dd | jt d S )NT)r;   )r   r<   r   )r   r   r   r   r=     s    
z'TestHasTraitsObserveSetOfInstance.setUpc             C   s   t  }g }|j}|j|tdddjddjdd t }t|g|_| jt	|d | j
d7  _
|\}| j|j| | j|jd | j|jd | j|jd d S )Nr~   F)r5   rf   )rm   rl   r   r"   )r}   r7   r   r   Z	set_itemsre   setr~   r-   rC   rf   r[   r\   r]   r^   )r   rn   ro   rm   rp   r$   r   r   r   test_observe_instance_in_set  s"    
z>TestHasTraitsObserveSetOfInstance.test_observe_instance_in_setN)r   r   r   r=   r   r   r   r   r   r     s   r   c               @   s   e Zd Ze ZdS )PotatoN)r   r   r   r   r\   r   r   r   r   r     s   r   c               @   s   e Zd ZeeeZdS )	PotatoBagN)r   r   r   r
   r   r   potatosr   r   r   r   r     s   r   c               @   s   e Zd ZeeZdS )CrateN)r   r   r   r
   r   potato_bagsr   r   r   r   r     s   r   c               @   s   e Zd Zdd Zdd ZdS )(TestHasTraitsObserverDifferentiateParentc             C   sf   t  }t|gd}t|gd}t|gd}g }|j}|j|d |j|d d|_| jt|d d S )N)r   )r   z$potato_bags:items:potatos:items:namezKing Edward   )r   r   r   r7   r   r\   r-   rC   )r   ZpotatoZ
potato_bagcrate1crate2ro   rm   r   r   r   )test_shared_instance_but_different_target  s    zRTestHasTraitsObserverDifferentiateParent.test_shared_instance_but_different_targetc             C   s   t  }t  }g }|j}|j|d |j|d t }t|gd}|g|_|g|_d|_| jt|d |j	  |j|ddd d|_| jt|d |j	  t }|jd	 j
j| g |_| jt|d	 d
|_| jt|d	 d S )Nz$potato_bags:items:potatos:items:name)r   zKing Edward Ir   T)removezKing Edward IIr"   r   zMaris Piper)r   r7   r   r   r   r   r\   r-   rC   rt   r   )r   r   r   ro   rm   Z
new_potatoZnew_potato_bagZmaris_piperr   r   r   0test_shared_instance_same_graph_different_target   s0    zYTestHasTraitsObserverDifferentiateParent.test_shared_instance_same_graph_different_targetN)r   r   r   r   r   r   r   r   r   r     s   r   c               @   s&   e Zd ZeddZeddd ZdS )FooWithEventMetadataZ	the_trait)r$   c             C   s   d S )Nr   )r   r$   r   r   r   _handle_the_trait_changed.  s    z.FooWithEventMetadata._handle_the_trait_changedN)r   r   r   r   valr   r   r   r   r   r   r   +  s   
r   c               @   s    e Zd ZdZdd Zdd ZdS )TestSpecialEventz? Test the 'event' metadata... won't work with ``observe``!
    c             C   s   t dd | jt d S )NT)r;   )r   r<   r   )r   r   r   r   r=   7  s    
zTestSpecialEvent.setUpc             C   s2   | j t}t  W d Q R X | jdt|j d S )Nz!Trait named 'the_trait' not found)assertRaises
ValueErrorr   assertInstr	exception)r   exception_cmr   r   r   test_events;  s
    zTestSpecialEvent.test_eventsN)r   r   r   r0   r=   r   r   r   r   r   r   3  s   r   c               @   s   e Zd Ze ZdS )PersonN)r   r   r   r   r\   r   r   r   r   r   J  s   r   c               @   s$   e Zd ZeeZee Ze	 Z
dS )TeamN)r   r   r   r   r   leaderr
   r   member_namesr   	any_valuer   r   r   r   r   N  s   
r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestObserverErrorc             C   s   t dd | jt d S )NT)r;   )r   r<   r   )r   r   r   r   r=   X  s    
zTestObserverError.setUpc             C   sV   t  }|jdd tdj  t }| jt}||_W d Q R X | jdt	|j
 d S )Nc             S   s   d S )Nr   )er   r   r   <lambda>b  s    z:TestObserverError.test_trait_is_not_list.<locals>.<lambda>r   z#Expected a TraitList to be observed)r   r   r   r9   r   r   r   r   r   r   r   )r   teamZpersonr   r   r   r   test_trait_is_not_list\  s    z(TestObserverError.test_trait_is_not_listc          
   C   sX   t  }|jdd tdj jd | jt}dg|_W d Q R X | jt|j	d d S )Nc             S   s   d S )Nr   )r   r   r   r   r   s  s    zVTestObserverError.test_items_on_a_list_not_observable_by_named_trait.<locals>.<lambda>r   does_not_existZPaulz1Trait named 'does_not_exist' not found on 'Paul'.)
r   r   r   r9   r   r   r   r-   r   r   )r   r   r   r   r   r   2test_items_on_a_list_not_observable_by_named_traitm  s    zDTestObserverError.test_items_on_a_list_not_observable_by_named_traitc             C   sR   t  }d|_| jt }|jdd tdjd W d Q R X | jt|jd d S )NrZ   c             S   s   d S )Nr   )r   r   r   r   r     s    zDTestObserverError.test_extended_trait_on_any_value.<locals>.<lambda>r   r   z.Trait named 'does_not_exist' not found on 123.)	r   r   r   r   r   r   r-   r   r   )r   r   r   r   r   r    test_extended_trait_on_any_value  s     z2TestObserverError.test_extended_trait_on_any_valuec          
   C   sT   t  }|jdd tdjd | jt t |_W d Q R X | jd|jj  d S )Nc             S   s   d S )Nr   )r   r   r   r   r     s    z;TestObserverError.test_no_new_trait_added.<locals>.<lambda>r   r   )	r   r   r   r   r   r   r   assertNotInZtrait_names)r   r   r   r   r   test_no_new_trait_added  s
    z)TestObserverError.test_no_new_trait_addedN)r   r   r   r=   r   r   r   r   r   r   r   r   r   V  s
   r   c               @   s   e Zd ZedZdS )DummyrF   N)r   r   r   r	   xr   r   r   r   r     s   r   c               @   s   e Zd ZedZeeZdS )Dummy2   N)r   r   r   r	   yr   r   dummyr   r   r   r   r     s   r   c               @   sH   e Zd Zeef dZeeZedZ	e
dZdd Zeddd Zd	S )
DelegateMess)r'   dummy2Fc             C   s   t | jdS )N)r   )r   dummy1)r   r   r   r   _dummy2_default  s    zDelegateMess._dummy2_defaultzdummy1.xc             C   s
   d| _ d S )NT)handler_called)r   r$   r   r   r   _on_dummy1_x  s    zDelegateMess._on_dummy1_xN)r   r   r   r   r   r   r   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S )TestDelegateToInteractionc             C   s*   t  }| j|j d|j_| j|j d S )Nr   )r   ZassertFalser   r   r   Z
assertTrue)r   Zmessr   r   r   test_delegate_initializer  s    z3TestDelegateToInteraction.test_delegate_initializerN)r   r   r   r   r   r   r   r   r     s   r   c               @   s   e Zd ZdS )ApplicationN)r   r   r   r   r   r   r   r     s   r   c               @   s   e Zd Zdd ZdS )!TestObserveItemsFromOnTraitChangec             C   sp   t  }dd }|j|d | j|jdd | jd|j  g }|j|jd |jddd | j	t
|d d S )Nc               S   s   d S )Nr   r   r   r   r   dummy_handler  s    zlTestObserveItemsFromOnTraitChange.test_observe_event_with_undefined_name_suffix_items.<locals>.dummy_handlerZi_am_undefined_with_itemsr   r"   r   )r   Zon_trait_changeZassertIsNotNoneZ_traitr   Ztraitsr   r7   Ztrait_property_changedr-   rC   )r   Zappr   ro   r   r   r   3test_observe_event_with_undefined_name_suffix_items  s    zUTestObserveItemsFromOnTraitChange.test_observe_event_with_undefined_name_suffix_itemsN)r   r   r   r   r   r   r   r   r     s   r   c               @   s:   e Zd Ze ZedZedZe	e
Zeddd ZdS )HasVariousTraits   off*c             C   s   | j }|d k	r|| d S )N)trait_change_callback)r   r$   callbackr   r   r   _record_trait_change  s    z%HasVariousTraits._record_trait_changeN)r   r   r   r   r   r	   r   r   barr   r   updatedr   r   r   r   r   r   r     s
   r   c               @   s   e Zd ZeeZeeZdS )UpdateListenerN)r   r   r   r   r   r   r   r   r   r   r   r     s   r   c               @   sL   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S )TestObserveAnytraitc             C   s   t  }g }|j|jd d|_d|_| jt|d |\}}| j|j| | j|jd | j|j	d | j|j
d | j|j| | j|jd | j|j	d | j|j
d d S )	Nr   r+   onr   r   r   r   r   )r   r   r7   r   r   r-   rC   r[   r\   r]   r^   )r   objro   	foo_event	bar_eventr   r   r   test_observe_method_anytrait  s    z0TestObserveAnytrait.test_observe_method_anytraitc             C   s   g }t |jd}d|_d|_| jt|d |\}}}| j|j| | j|jd | j|j	d  | j|j
|j | j|j| | j|jd | j|j	d | j|j
d | j|j| | j|jd | j|j	d	 | j|j
d d S )
N)r   r+   r   rA   r   r   r   r   r   )r   r7   r   r   r-   rC   r[   r\   ZassertIsr]   r^   )r   ro   r   Zcallback_eventr   r   r   r   r   test_observe_decorator_anytrait  s$    
z3TestObserveAnytrait.test_observe_decorator_anytraitc             C   s   t  }g }|j|jt  d|_d|_| jt|d |\}}| j|j| | j|j	d | j|j
d | j|jd | j|j| | j|j	d | j|j
d | j|jd d S )Nr+   r   r   r   r   r   r   )r   r   r7   r   r   r   r-   rC   r[   r\   r]   r^   )r   r   ro   r   r   r   r   r   test_anytrait_expression+  s    z,TestObserveAnytrait.test_anytrait_expressionc             C   s   t  }t  }t||d}g }|j|jtdddj  d|_d|_| jt|d |\}| j|j	| | j|j
d | j|jt | j|jd d S )N)r   r   r   F)r5   Tr"   r   )r   r   r   r7   r   r   r   r-   rC   r[   r\   r]   r   r^   )r   r   r   r   ro   r   r   r   r   test_anytrait_method@  s    z(TestObserveAnytrait.test_anytrait_methodc          
   C   sD   t  }t  }t||d}g }| jt |j|jd W d Q R X d S )N)r   r   z	*:updated)r   r   r   r   r   r7   )r   r   r   r   ro   r   r   r   test_anytrait_with_childrenS  s    z/TestObserveAnytrait.test_anytrait_with_childrenc          
   C   sD   t  }t  }t||d}g }| jt |j|jd W d Q R X d S )N)r   r   z*:*)r   r   r   r   r   r7   )r   r   r   r   ro   r   r   r   test_anytrait_of_anytrait\  s    z-TestObserveAnytrait.test_anytrait_of_anytraitc             C   sf   t  }g }|j|jd d|_d|_| jt|d |j|jddd d|_d|_| jt|d d S )	Nr   r+   r   r   T)r      Zmid)r   r   r7   r   r   r-   rC   )r   r   ro   r   r   r   test_anytrait_unobservee  s    z+TestObserveAnytrait.test_anytrait_unobservec             C   sf   G dd dt }G dd d|}g }|dd}|j|jd | jt|d d	|_| jt|d
 d S )Nc               @   s(   e Zd Ze Zee ddZdd ZdS )z@TestObserveAnytrait.test_property_subclass_observe.<locals>.Baser   )r   c             S   s   | j S )N)r   )r   r   r   r   _get_foo~  s    zITestObserveAnytrait.test_property_subclass_observe.<locals>.Base._get_fooN)r   r   r   r	   r   r   r   r   r   r   r   r   Basey  s   r   c               @   s   e Zd ZdS )zCTestObserveAnytrait.test_property_subclass_observe.<locals>.DerivedN)r   r   r   r   r   r   r   Derived  s   r   rA   )r   r   r   r,   r"   )r   r   r7   r-   rC   r   )r   r   r   ro   r   r   r   r   test_property_subclass_observew  s    
z2TestObserveAnytrait.test_property_subclass_observeN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   		r   )8r0   ZunittestZ
traits.apir   r   r   r   r   r   r   r	   r
   r   r   r   r   r   Ztraits.observation.apir   r   r   r   ZTestCaser   r1   r3   r:   rE   rN   rY   re   rg   ri   rk   rx   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sH   @96y&%EC 