B
    <[                @   s   d Z ddlZddlZddlZddlmZ ddlmZ ddlZddlm	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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&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4Z4dd	 Z5G d
d deZ6G dd deZ7G dd deZ8G dd deZ9G 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eZ@G d d! d!eZAG d"d# d#e@ZBG d$d% d%eZCG d&d' d'e@ZDG d(d) d)eZEG d*d+ d+e@ZFG d,d- d-eZGG d.d/ d/e@ZHG d0d1 d1eZIG d2d3 d3e@ZJG d4d5 d5eZKG d6d7 d7eJZLG d8d9 d9eZMG d:d; d;e@ZNG d<d= d=eZOG d>d? d?e@ZPG d@dA dAeZQG dBdC dCe@ZRG dDdE dEeZSG dFdG dGe@ZTG dHdI dIeZUG dJdK dKeTZVG dLdM dMeZWG dNdO dOeNZXG dPdQ dQeZYG dRdS dSe@ZZG dTdU dUeZ[G dVdW dWe@Z\G dXdY dYeZ]G dZd[ d[e@Z^G d\d] d]eZ_G d^d_ d_e@Z`G d`da daeZaG dbdc dce@ZbG ddde deeZcG dfdg dge@ZdG dhdi dieZeG djdk dke@ZfG dldm dmeZgG dndo doe@ZhG dpdq dqeZiG drds dse@ZjG dtdu dueZkG dvdw dwe@ZlG dxdy dyeZmG dzd{ d{e@ZnG d|d} d}eoZpG d~d deZqG dd de@ZrG dd deZsG dd de@ZtG dd deZuG dd deZvG dd deZwG dd de@ZxG dd deZyG dd de@ZzG dd deZ{G dd de@Z|G dd deZ}G dd de@Z~G dd deZG dd de@ZG dd deZdd ZG dd deZG dd de@ZG dd deZG dd de@ZG dd deZG dd de@Zdd ZG dd deZG dd deZG dd deZG dd deZdd Zdd ZG dd deZG dd deZG dd deZddÄ ZG ddń deZddǄ ZG ddɄ deZG dd˄ deZG dd̈́ deZG ddτ deZG ddф deoZG ddӄ deZG ddՄ de@ZG ddׄ de@ZG ddل de@ZG ddۄ de@ZG dd݄ deZdd߄ Zdd ZG dd deZG dd deZdd ZG dd deZG dd deZdd ZG dd deZdd ZG dd deZdd Zdd Zdd Zdd ZdS )zTests for traitlets.traitlets.    N   )expected_warnings)TestCase)mark))	HasTraitsMetaHasTraits	TraitTypeAnyBoolCBytesDictEnumIntCIntLongCLongIntegerFloatCFloatComplexBytesUnicode
TraitErrorUnionAll	UndefinedTypeThisInstance
TCPAddressListTuple
ObjectNameDottedObjectNameCRegExplinkdirectional_linkForwardDeclaredTypeForwardDeclaredInstancevalidateobservedefaultobserve_compatBaseDescriptorHasDescriptorsc              G   s   d}t t|| S )N)nameoldnewownertype)dictzip)Zordered_valuesZchange_names r6   =lib/python3.7/site-packages/traitlets/tests/test_traitlets.pychange_dict   s    r8   c               @   s   e Zd Zdd ZdS )HasTraitsStubc             C   s,   |d | _ |d | _|d | _|d | _d S )Nr/   r0   r1   r3   )_notify_name_notify_old_notify_newZ_notify_type)selfchanger6   r6   r7   notify_change)   s    


zHasTraitsStub.notify_changeN)__name__
__module____qualname__r?   r6   r6   r6   r7   r9   '   s   r9   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!d" Zd#S )$TestTraitTypec          	   C   s6   G dd dt }| }| t |j W d Q R X d S )Nc               @   s   e Zd ZeZdS )z+TestTraitType.test_get_undefined.<locals>.AN)r@   rA   rB   r   ar6   r6   r6   r7   A8   s   rE   )r   assertRaisesr   rD   )r=   rE   rD   r6   r6   r7   test_get_undefined7   s    z TestTraitType.test_get_undefinedc             C   sX   G dd dt }| }d|_| |jd | |jd | |jt | |jd d S )Nc               @   s   e Zd ZeZdS )z!TestTraitType.test_set.<locals>.AN)r@   rA   rB   r   rD   r6   r6   r6   r7   rE   ?   s   rE   
   rD   )r9   rD   assertEqualr:   r;   r   r<   )r=   rE   rD   r6   r6   r7   test_set>   s    zTestTraitType.test_setc                sB   G dd dt  G  fdddt}| }d|_| |jd d S )Nc               @   s   e Zd Zdd ZdS )z)TestTraitType.test_validate.<locals>.MyTTc             S   s   dS )Nr6   )r=   instvaluer6   r6   r7   r)   K   s    z2TestTraitType.test_validate.<locals>.MyTT.validateN)r@   rA   rB   r)   r6   r6   r6   r7   MyTTJ   s   rN   c                   s   e Zd Z ZdS )z&TestTraitType.test_validate.<locals>.AN)r@   rA   rB   ttr6   )rN   r6   r7   rE   M   s   rE   rH   rK   )r   r9   rO   rI   )r=   rE   rD   r6   )rN   r7   test_validateI   s
    zTestTraitType.test_validatec                s\   G dd dt  G  fdddt}| }| |jd G  fdddt}| t| d S )Nc               @   s   e Zd Zdd ZdS )z4TestTraitType.test_default_validate.<locals>.MyIntTTc             S   s   t |tr|S | || d S )N)
isinstanceinterror)r=   objrM   r6   r6   r7   r)   V   s    
z=TestTraitType.test_default_validate.<locals>.MyIntTT.validateN)r@   rA   rB   r)   r6   r6   r6   r7   MyIntTTU   s   rU   c                   s   e Zd Z dZdS )z.TestTraitType.test_default_validate.<locals>.ArH   N)r@   rA   rB   rO   r6   )rU   r6   r7   rE   Z   s   rE   rH   c                   s   e Zd Z dZdS )z.TestTraitType.test_default_validate.<locals>.Bzbad defaultN)r@   rA   rB   rO   r6   )rU   r6   r7   B`   s   rV   )r   r   rI   rO   rF   r   )r=   rE   rD   rV   r6   )rU   r7   test_default_validateT   s    z#TestTraitType.test_default_validatec             C   s,   G dd dt }| }| |j d d S )Nc               @   s   e Zd ZeZdS )z"TestTraitType.test_info.<locals>.AN)r@   rA   rB   r   rO   r6   r6   r6   r7   rE   e   s   rE   z	any value)r   rI   rO   info)r=   rE   rD   r6   r6   r7   	test_infod   s    zTestTraitType.test_infoc             C   s.   G dd dt }| }| t|jj|d d S )Nc               @   s   e Zd ZeZdS )z#TestTraitType.test_error.<locals>.AN)r@   rA   rB   r   rO   r6   r6   r6   r7   rE   k   s   rE   rH   )r   rF   r   rO   rS   )r=   rE   rD   r6   r6   r7   
test_errorj   s    zTestTraitType.test_errorc             C   s   G dd dt }G dd d|}G dd d|}| }| |ji  | |jd | |jddi | }| |jd	 | |jdd	i | }| |ji  | |jd
 | |jdd
i | }| }| |ji  | |jd | |jddi d S )Nc               @   s   e Zd ZedZdd ZdS )z<TestTraitType.test_deprecated_dynamic_initializer.<locals>.ArH   c             S   s   dS )N   r6   )r=   r6   r6   r7   
_x_defaults   s    zGTestTraitType.test_deprecated_dynamic_initializer.<locals>.A._x_defaultN)r@   rA   rB   r   xr\   r6   r6   r6   r7   rE   q   s   rE   c               @   s   e Zd ZedZdS )z<TestTraitType.test_deprecated_dynamic_initializer.<locals>.B   N)r@   rA   rB   r   r]   r6   r6   r6   r7   rV   u   s   rV   c               @   s   e Zd Zdd ZdS )z<TestTraitType.test_deprecated_dynamic_initializer.<locals>.Cc             S   s   dS )N   r6   )r=   r6   r6   r7   r\   x   s    zGTestTraitType.test_deprecated_dynamic_initializer.<locals>.C._x_defaultN)r@   rA   rB   r\   r6   r6   r6   r7   Cw   s   r`   r[   r]   r^   r_   )r   rI   _trait_valuesr]   )r=   rE   rV   r`   rD   bcr6   r6   r7   #test_deprecated_dynamic_initializerp   s&    z1TestTraitType.test_deprecated_dynamic_initializerc             C   s   G dd dt }G dd d|}G dd d|}| }| |ji  | |jd | |jddi | }| |jd	 | |jdd	i | }| |ji  | |jd
 | |jdd
i | }| }| |ji  | |jd | |jddi d S )Nc               @   s$   e Zd ZedZeddd ZdS )z1TestTraitType.test_dynamic_initializer.<locals>.ArH   r]   c             S   s   dS )Nr[   r6   )r=   r6   r6   r7   
_default_x   s    z<TestTraitType.test_dynamic_initializer.<locals>.A._default_xN)r@   rA   rB   r   r]   r+   re   r6   r6   r6   r7   rE      s   rE   c               @   s   e Zd ZedZdS )z1TestTraitType.test_dynamic_initializer.<locals>.Br^   N)r@   rA   rB   r   r]   r6   r6   r6   r7   rV      s   rV   c               @   s   e Zd Zeddd ZdS )z1TestTraitType.test_dynamic_initializer.<locals>.Cr]   c             S   s   dS )Nr_   r6   )r=   r6   r6   r7   re      s    z<TestTraitType.test_dynamic_initializer.<locals>.C._default_xN)r@   rA   rB   r+   re   r6   r6   r6   r7   r`      s   r`   r[   r]   r^   r_   )r   rI   ra   r]   )r=   rE   rV   r`   rD   rb   rc   r6   r6   r7   test_dynamic_initializer   s&    z&TestTraitType.test_dynamic_initializerc             C   s<   G dd dt }|djddd}| |jdddd d S )	Nc               @   s   e Zd ZdddZdS )z0TestTraitType.test_tag_metadata.<locals>.MyIntTTr      )rD   rb   N)r@   rA   rB   metadatar6   r6   r6   r7   rU      s   rU   rH         )rb   rc   r   )rD   rb   rc   )r   tagrI   rh   )r=   rU   rD   r6   r6   r7   test_tag_metadata   s    zTestTraitType.test_tag_metadatac             C   s<   G dd dt }|d}|d}d|jd< | d|j d S )Nc               @   s   e Zd ZdddZdS )z?TestTraitType.test_metadata_localized_instance.<locals>.MyIntTTr   rg   )rD   rb   N)r@   rA   rB   rh   r6   r6   r6   r7   rU      s   rU   rH   ri   rc   )r   rh   ZassertNotIn)r=   rU   rD   rb   r6   r6   r7    test_metadata_localized_instance   s
    
z.TestTraitType.test_metadata_localized_instancec             C   s   G dd dt }| }| |ddd  | |ddd i |_| |ddd | |ddd d	|_| |ddd	 | |ddd d S )
Nc               @   s2   e Zd Ze jdde jdddB jddZdS )	z.TestTraitType.test_union_metadata.<locals>.Foor   )targ   rb   )rn   tirD   )ro   N)r@   rA   rB   r   rk   r   barr6   r6   r6   r7   Foo   s   rq   rp   rn   ro   rD   rg   rb   r   )r   rI   trait_metadatarp   )r=   rq   foor6   r6   r7   test_union_metadata   s    z!TestTraitType.test_union_metadatac             C   s(   G dd dt }| }| |jd d S )Nc               @   s    e Zd Zee e gddZdS )z3TestTraitType.test_union_default_value.<locals>.Foor   )default_valueN)r@   rA   rB   r   r   r   rp   r6   r6   r6   r7   rq      s   rq   r   )r   rI   rp   )r=   rq   rs   r6   r6   r7   test_union_default_value   s    z&TestTraitType.test_union_default_valuec          	   C   s   G dd dt }|d}tdgd  |dd |d}W d Q R X | |d tdgd  |d	d
 |d	}W d Q R X | |d
 d S )Nc               @   s   e Zd ZdddZdS )z>TestTraitType.test_deprecated_metadata_access.<locals>.MyIntTTr   rg   )rD   rb   N)r@   rA   rB   rh   r6   r6   r6   r7   rU      s   rU   rH   z.use the instance .metadata dictionary directlyrg   keyrM   z&use the instance .help string directlyhelpz	some help)r   r   Zset_metadataZget_metadatarI   )r=   rU   rD   vr6   r6   r7   test_deprecated_metadata_access   s    z-TestTraitType.test_deprecated_metadata_accessc          	   C   s*   t dg G dd dt}W d Q R X d S )Nz#Traits should be given as instancesc               @   s   e Zd ZeZdS )z4TestTraitType.test_trait_types_deprecated.<locals>.CN)r@   rA   rB   r   tr6   r6   r6   r7   r`      s   r`   )r   r   )r=   r`   r6   r6   r7   test_trait_types_deprecated   s    z)TestTraitType.test_trait_types_deprecatedc          	   C   s*   t dg G dd dt}W d Q R X d S )Nz#Traits should be given as instancesc               @   s   e Zd ZeeZdS )z9TestTraitType.test_trait_types_list_deprecated.<locals>.CN)r@   rA   rB   r    r   r{   r6   r6   r6   r7   r`      s   r`   )r   r   )r=   r`   r6   r6   r7    test_trait_types_list_deprecated   s    z.TestTraitType.test_trait_types_list_deprecatedc          	   C   s*   t dg G dd dt}W d Q R X d S )Nz#Traits should be given as instancesc               @   s   e Zd ZeeZdS )z:TestTraitType.test_trait_types_tuple_deprecated.<locals>.CN)r@   rA   rB   r!   r   r{   r6   r6   r6   r7   r`      s   r`   )r   r   )r=   r`   r6   r6   r7   !test_trait_types_tuple_deprecated   s    z/TestTraitType.test_trait_types_tuple_deprecatedc          	   C   s*   t dg G dd dt}W d Q R X d S )Nz#Traits should be given as instancesc               @   s   e Zd ZeeZdS )z9TestTraitType.test_trait_types_dict_deprecated.<locals>.CN)r@   rA   rB   r   r   r{   r6   r6   r6   r7   r`      s   r`   )r   r   )r=   r`   r6   r6   r7    test_trait_types_dict_deprecated   s    z.TestTraitType.test_trait_types_dict_deprecatedN)r@   rA   rB   rG   rJ   rP   rW   rY   rZ   rd   rf   rl   rm   rt   rv   rz   r|   r}   r~   r   r6   r6   r6   r7   rC   5   s"   %	rC   c               @   s   e Zd Zdd Zdd ZdS )TestHasDescriptorsMetac             C   s   |  ttt G dd dt}| }|  t|jt |  |jd d|_|  |jd G dd dt}| }|  |jd d|_|  |jd G dd dt}| }|  |jd	 d|_|  |jd d S )
Nc               @   s   e Zd Ze ZdS )z0TestHasDescriptorsMeta.test_metaclass.<locals>.AN)r@   rA   rB   r   rD   r6   r6   r6   r7   rE      s   rE   r   rH   c               @   s   e Zd Ze ZdS )z0TestHasDescriptorsMeta.test_metaclass.<locals>.BN)r@   rA   rB   r   rb   r6   r6   r6   r7   rV     s   rV   c               @   s   e Zd ZedZdS )z0TestHasDescriptorsMeta.test_metaclass.<locals>.C   N)r@   rA   rB   r   rc   r6   r6   r6   r7   r`     s   r`   r   )rI   r3   r   r   	__class__rD   rb   rc   )r=   rE   rD   rV   rb   r`   rc   r6   r6   r7   test_metaclass   s"    z%TestHasDescriptorsMeta.test_metaclassc             C   sd   G dd dt }G dd d|}| |jj| | |jj| | |jj| | |jj| d S )Nc               @   s   e Zd Ze Ze ZdS )z1TestHasDescriptorsMeta.test_this_class.<locals>.AN)r@   rA   rB   r   r{   rO   r6   r6   r6   r7   rE     s   rE   c               @   s   e Zd Ze Ze ZdS )z1TestHasDescriptorsMeta.test_this_class.<locals>.BN)r@   rA   rB   r   rO   tttr6   r6   r6   r7   rV     s   rV   )r   rI   r{   Z
this_classrO   r   )r=   rE   rV   r6   r6   r7   test_this_class  s    z&TestHasDescriptorsMeta.test_this_classN)r@   rA   rB   r   r   r6   r6   r6   r7   r      s   r   c               @   s   e Zd Zdd ZdS )TestHasDescriptorsc                s4   G dd dt  G  fdddtdd}d S )Nc               @   s   e Zd Zdd ZdS )z=TestHasDescriptors.test_setup_instance.<locals>.FooDescriptorc             S   s
   |j }d S )N)rs   )r=   rL   rs   r6   r6   r7   instance_init(  s    zKTestHasDescriptors.test_setup_instance.<locals>.FooDescriptor.instance_initN)r@   rA   rB   r   r6   r6   r6   r7   FooDescriptor&  s   r   c                   s$   e Zd Z Z fddZ  ZS )zATestHasDescriptors.test_setup_instance.<locals>.HasFooDescriptorsc                s$   | dd | _t | j|| d S )Nrs   )getrs   supersetup_instance)r=   argskwargs)HasFooDescriptorsr   r6   r7   r   /  s    zPTestHasDescriptors.test_setup_instance.<locals>.HasFooDescriptors.setup_instance)r@   rA   rB   fdr   __classcell__r6   )r   r   )r   r7   r   +  s   r   rp   )rs   )r-   r.   )r=   Zhfdr6   )r   r   r7   test_setup_instance$  s    z&TestHasDescriptors.test_setup_instanceN)r@   rA   rB   r   r6   r6   r6   r7   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S )TestHasTraitsNotifyc             C   s   g | _ g | _d S )N)_notify1_notify2)r=   r6   r6   r7   setUp7  s    zTestHasTraitsNotify.setUpc             C   s   | j |||f d S )N)r   append)r=   r/   r0   r1   r6   r6   r7   notify1;  s    zTestHasTraitsNotify.notify1c             C   s   | j |||f d S )N)r   r   )r=   r/   r0   r1   r6   r6   r7   notify2>  s    zTestHasTraitsNotify.notify2c             C   s   G dd dt }| }|| j d|_| t| jd d|_| t| jd d|_| d| jk d|_| d| jk | 	t
t|d	d
 | 	t
t|dd
 g | _|j| jdd d|_d|_| t| jd d S )Nc               @   s   e Zd Ze Ze ZdS )z.TestHasTraitsNotify.test_notify_all.<locals>.AN)r@   rA   rB   r   rD   r   rb   r6   r6   r6   r7   rE   C  s   rE   r   g        rH   )rD   r   rH   g      $@)rb   g        g      $@rD   z
bad stringrb   T)remover^   g      4@)r   on_trait_changer   rD   rI   lenr   rb   
assertTruerF   r   setattr)r=   rE   rD   r6   r6   r7   test_notify_allA  s$    z#TestHasTraitsNotify.test_notify_allc             C   sh   G dd dt }| }|| jd d|_| t| jd d|_| d| jk | t	t
|dd d S )Nc               @   s   e Zd Ze Ze ZdS )z.TestHasTraitsNotify.test_notify_one.<locals>.AN)r@   rA   rB   r   rD   r   rb   r6   r6   r6   r7   rE   [  s   rE   rD   r   rH   )rD   r   rH   z
bad string)r   r   r   rD   rI   r   r   r   rF   r   r   )r=   rE   rD   r6   r6   r7   test_notify_oneY  s    z#TestHasTraitsNotify.test_notify_onec             C   sn   G dd dt }G dd d|}| }| |jd | |jd d|_d|_| |jd | |jd d S )	Nc               @   s   e Zd Ze ZdS )z,TestHasTraitsNotify.test_subclass.<locals>.AN)r@   rA   rB   r   rD   r6   r6   r6   r7   rE   i  s   rE   c               @   s   e Zd Ze ZdS )z,TestHasTraitsNotify.test_subclass.<locals>.BN)r@   rA   rB   r   rb   r6   r6   r6   r7   rV   l  s   rV   r   g        d   g      Y@)r   rI   rD   rb   )r=   rE   rV   rb   r6   r6   r7   test_subclassg  s    z!TestHasTraitsNotify.test_subclassc             C   s   G dd dt }G dd d|}| }|| jd || jd d|_d|_| t| jd | t| j	d d	|_d
|_| 
d| jk | 
d| j	k d S )Nc               @   s   e Zd Ze ZdS )z3TestHasTraitsNotify.test_notify_subclass.<locals>.AN)r@   rA   rB   r   rD   r6   r6   r6   r7   rE   y  s   rE   c               @   s   e Zd Ze ZdS )z3TestHasTraitsNotify.test_notify_subclass.<locals>.BN)r@   rA   rB   r   rb   r6   r6   r6   r7   rV   |  s   rV   rD   rb   r   g        rH   g      $@)rD   r   rH   )rb   g        g      $@)r   r   r   r   rD   rb   rI   r   r   r   r   )r=   rE   rV   rb   r6   r6   r7   test_notify_subclassw  s    z(TestHasTraitsNotify.test_notify_subclassc             C   s   G dd dt }| }d|_| t|jd d|_| d|jk G dd d|}| }d|_d|_| d|jk | d	|jk d S )
Nc               @   s   e Zd Ze Zg Zdd ZdS )z1TestHasTraitsNotify.test_static_notify.<locals>.Ac             S   s   | j |||f d S )N)r   r   )r=   r/   r0   r1   r6   r6   r7   
_a_changed  s    z<TestHasTraitsNotify.test_static_notify.<locals>.A._a_changedN)r@   rA   rB   r   rD   r   r   r6   r6   r6   r7   rE     s   rE   r   rH   )rD   r   rH   c               @   s   e Zd Ze Zg Zdd ZdS )z1TestHasTraitsNotify.test_static_notify.<locals>.Bc             S   s   | j |||f d S )N)r   r   )r=   r/   r0   r1   r6   r6   r7   
_b_changed  s    z<TestHasTraitsNotify.test_static_notify.<locals>.B._b_changedN)r@   rA   rB   r   rb   r   r   r6   r6   r6   r7   rV     s   rV   g      $@)rb   g        g      $@)r   rD   rI   r   r   r   rb   r   )r=   rE   rD   rV   rb   r6   r6   r7   test_static_notify  s    z&TestHasTraitsNotify.test_static_notifyc                s   fdd} fdd} fdd} fdd} fd	d
}G dd dt }| }||d d|_  jd |j|ddd ||d d|_  jd |j|ddd ||d d|_  jd |j|ddd ||d d|_  jd |j|ddd ||d d|_  jddd|f  t|jd d d |j|ddd  t|jd d d d S )Nc                  s
   d _ d S )Nr6   )cbr6   )r=   r6   r7   	callback0  s    z7TestHasTraitsNotify.test_notify_args.<locals>.callback0c                s   | f _ d S )N)r   )r/   )r=   r6   r7   	callback1  s    z7TestHasTraitsNotify.test_notify_args.<locals>.callback1c                s   | |f _ d S )N)r   )r/   r1   )r=   r6   r7   	callback2  s    z7TestHasTraitsNotify.test_notify_args.<locals>.callback2c                s   | ||f _ d S )N)r   )r/   r0   r1   )r=   r6   r7   	callback3  s    z7TestHasTraitsNotify.test_notify_args.<locals>.callback3c                s   | |||f _ d S )N)r   )r/   r0   r1   rT   )r=   r6   r7   	callback4  s    z7TestHasTraitsNotify.test_notify_args.<locals>.callback4c               @   s   e Zd Ze ZdS )z/TestHasTraitsNotify.test_notify_args.<locals>.AN)r@   rA   rB   r   rD   r6   r6   r6   r7   rE     s   rE   rD   rH   r6   T)r   r   )rD   i  )rD   i  i'  )rD   i  i'  i r>   r   r   )r   r   rD   rI   r   r   _trait_notifiers)r=   r   r   r   r   r   rE   rD   r6   )r=   r7   test_notify_args  s:    z$TestHasTraitsNotify.test_notify_argsc                s   G  fdddt  G fddd  }| jd7  _| |j|j | |j|j | jd7  _| |j|j | |j|j d S )Nc                   s8   e Zd ZdgZedZdZ fddZdd Z  Z	S )z4TestHasTraitsNotify.test_notify_only_once.<locals>.ArD   r   c                s&   t  | jf | | | jdg d S )NrD   )r   __init__r   	listener1)r=   r   )rE   r   r6   r7   r     s    z=TestHasTraitsNotify.test_notify_only_once.<locals>.A.__init__c             S   s   |  j d7  _ d S )Nr   )rb   )r=   r/   r0   r1   r6   r6   r7   r     s    z>TestHasTraitsNotify.test_notify_only_once.<locals>.A.listener1)
r@   rA   rB   	listen_tor   rD   rb   r   r   r   r6   )rE   )r   r7   rE     s
   rE   c                   s6   e Zd ZdZdZ fddZdd Zdd Z  ZS )z4TestHasTraitsNotify.test_notify_only_once.<locals>.Br   c                s"   t  | jf | | | j d S )N)r   r   r   	listener2)r=   r   )rV   r   r6   r7   r     s    z=TestHasTraitsNotify.test_notify_only_once.<locals>.B.__init__c             S   s   |  j d7  _ d S )Nr   )rc   )r=   r/   r0   r1   r6   r6   r7   r     s    z>TestHasTraitsNotify.test_notify_only_once.<locals>.B.listener2c             S   s   |  j d7  _ d S )Nr   )d)r=   r/   r0   r1   r6   r6   r7   r     s    z?TestHasTraitsNotify.test_notify_only_once.<locals>.B._a_changed)	r@   rA   rB   rc   r   r   r   r   r   r6   )rV   )r   r7   rV     s
   rV   r   )r   rD   rI   rb   rc   r   )r=   rb   r6   )rE   rV   r7   test_notify_only_once  s    z)TestHasTraitsNotify.test_notify_only_onceN)r@   rA   rB   r   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   r   5  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S )TestObserveDecoratorc             C   s   g | _ g | _d S )N)r   r   )r=   r6   r6   r7   r     s    zTestObserveDecorator.setUpc             C   s   | j | d S )N)r   r   )r=   r>   r6   r6   r7   r     s    zTestObserveDecorator.notify1c             C   s   | j | d S )N)r   r   )r=   r>   r6   r6   r7   r     s    zTestObserveDecorator.notify2c             C   s   G dd dt }| }|| j d|_| t| jd d|_| t| jd d|_tddd|d}| 	|| jk d|_td	dd|d}| 	|| jk | 
tt|dd
 | 
tt|d	d
 g | _|| j d|_d|_| t| jd d S )Nc               @   s   e Zd Ze Ze ZdS )z/TestObserveDecorator.test_notify_all.<locals>.AN)r@   rA   rB   r   rD   r   rb   r6   r6   r6   r7   rE     s   rE   r   g        rH   rD   r>   g      $@rb   z
bad stringr^   g      4@)r   r*   r   rD   rI   r   r   rb   r8   r   rF   r   r   	unobserve)r=   rE   rD   r>   r6   r6   r7   r     s(    z$TestObserveDecorator.test_notify_allc             C   sx   G dd dt }| }|| jd d|_| t| jd d|_tddd|d}| || jk | 	t
t|dd d S )Nc               @   s   e Zd Ze Ze ZdS )z/TestObserveDecorator.test_notify_one.<locals>.AN)r@   rA   rB   r   rD   r   rb   r6   r6   r6   r7   rE   !  s   rE   rD   r   rH   r>   z
bad string)r   r*   r   rD   rI   r   r   r8   r   rF   r   r   )r=   rE   rD   r>   r6   r6   r7   r     s    z$TestObserveDecorator.test_notify_onec             C   sn   G dd dt }G dd d|}| }| |jd | |jd d|_d|_| |jd | |jd d S )	Nc               @   s   e Zd Ze ZdS )z-TestObserveDecorator.test_subclass.<locals>.AN)r@   rA   rB   r   rD   r6   r6   r6   r7   rE   0  s   rE   c               @   s   e Zd Ze ZdS )z-TestObserveDecorator.test_subclass.<locals>.BN)r@   rA   rB   r   rb   r6   r6   r6   r7   rV   3  s   rV   r   g        r   g      Y@)r   rI   rD   rb   )r=   rE   rV   rb   r6   r6   r7   r   .  s    z"TestObserveDecorator.test_subclassc             C   s   G dd dt }G dd d|}| }|| jd || jd d|_d|_| t| jd | t| j	d d	|_d
|_t
ddd	|d}| || jk t
ddd
|d}| || j	k d S )Nc               @   s   e Zd Ze ZdS )z4TestObserveDecorator.test_notify_subclass.<locals>.AN)r@   rA   rB   r   rD   r6   r6   r6   r7   rE   @  s   rE   c               @   s   e Zd Ze ZdS )z4TestObserveDecorator.test_notify_subclass.<locals>.BN)r@   rA   rB   r   rb   r6   r6   r6   r7   rV   C  s   rV   rD   rb   r   g        rH   g      $@r>   )r   r*   r   r   rD   rb   rI   r   r   r   r8   r   )r=   rE   rV   rb   r>   r6   r6   r7   r   >  s    z)TestObserveDecorator.test_notify_subclassc             C   s   G dd dt }| }d|_| t|jd d|_tddd|d}| ||jk d|_| t|jd td	dd|d}| ||jk G d
d d|}| }d|_d|_tddd|d}| ||jk td	dd|d}| ||j	k d S )Nc               @   s@   e Zd Ze Ze Zg Zg Zeddd Z	ee
dd ZdS )z2TestObserveDecorator.test_static_notify.<locals>.ArD   c             S   s   | j | d S )N)r   r   )r=   r>   r6   r6   r7   r   \  s    z=TestObserveDecorator.test_static_notify.<locals>.A._a_changedc             S   s   | j | d S )N)_notify_anyr   )r=   r>   r6   r6   r7   _any_changed`  s    z?TestObserveDecorator.test_static_notify.<locals>.A._any_changedN)r@   rA   rB   r   rD   rb   r   r   r*   r   r   r   r6   r6   r6   r7   rE   V  s   rE   r   rH   rD   r>   r   rg   rb   c               @   s&   e Zd Ze Zg Zeddd ZdS )z2TestObserveDecorator.test_static_notify.<locals>.Brb   c             S   s   | j | d S )N)r   r   )r=   r>   r6   r6   r7   r   r  s    z=TestObserveDecorator.test_static_notify.<locals>.B._b_changedN)r@   rA   rB   r   rb   r   r*   r   r6   r6   r6   r7   rV   o  s   rV   g      $@g        )
r   rD   rI   r   r   r8   r   rb   r   r   )r=   rE   rD   r>   rV   rb   r6   r6   r7   r   T  s&    z'TestObserveDecorator.test_static_notifyc                s    fdd} fdd}G dd dt }| }||d d|_  jd	 ||d ||d d
|_tddd
|d}  j|  t|j	d d d ||d  t|j	d d d d S )Nc                  s
   d _ d S )Nr6   )r   r6   )r=   r6   r7   r     s    z8TestObserveDecorator.test_notify_args.<locals>.callback0c                s
   |  _ d S )N)r   )r>   )r=   r6   r7   r     s    z8TestObserveDecorator.test_notify_args.<locals>.callback1c               @   s   e Zd Ze ZdS )z0TestObserveDecorator.test_notify_args.<locals>.AN)r@   rA   rB   r   rD   r6   r6   r6   r7   rE     s   rE   rD   rH   r6   r   r>   r   r   )
r   r   rD   rI   r   r   r*   r8   r   r   )r=   r   r   rE   rD   r>   r6   )r=   r7   r   ~  s    z%TestObserveDecorator.test_notify_argsc                s   G  fdddt  G fddd  }| jd7  _| |j|j | |j|j | jd7  _| |j|j | |j|j d S )Nc                   s8   e Zd ZdgZedZdZ fddZdd Z  Z	S )z5TestObserveDecorator.test_notify_only_once.<locals>.ArD   r   c                s&   t  | jf | | | jdg d S )NrD   )r   r   r*   r   )r=   r   )rE   r   r6   r7   r     s    z>TestObserveDecorator.test_notify_only_once.<locals>.A.__init__c             S   s   |  j d7  _ d S )Nr   )rb   )r=   r>   r6   r6   r7   r     s    z?TestObserveDecorator.test_notify_only_once.<locals>.A.listener1)
r@   rA   rB   r   r   rD   rb   r   r   r   r6   )rE   )r   r7   rE     s
   rE   c                   s>   e Zd ZdZdZ fddZdd Zeddd Z  Z	S )	z5TestObserveDecorator.test_notify_only_once.<locals>.Br   c                s"   t  | jf | | | j d S )N)r   r   r*   r   )r=   r   )rV   r   r6   r7   r     s    z>TestObserveDecorator.test_notify_only_once.<locals>.B.__init__c             S   s   |  j d7  _ d S )Nr   )rc   )r=   r>   r6   r6   r7   r     s    z?TestObserveDecorator.test_notify_only_once.<locals>.B.listener2rD   c             S   s   |  j d7  _ d S )Nr   )r   )r=   r>   r6   r6   r7   r     s    z@TestObserveDecorator.test_notify_only_once.<locals>.B._a_changed)
r@   rA   rB   rc   r   r   r   r*   r   r   r6   )rV   )r   r7   rV     s
   rV   r   )r   rD   rI   rb   rc   r   )r=   rb   r6   )rE   rV   r7   r     s    z*TestObserveDecorator.test_notify_only_onceN)r@   rA   rB   r   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   r     s   *r   c               @   sT   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S )TestHasTraitsc             C   sj   G dd dt }| }| t| ddg | t| ddg | |d | |d d S )Nc               @   s   e Zd Ze Ze ZdS )z)TestHasTraits.test_trait_names.<locals>.AN)r@   rA   rB   r   ir   fr6   r6   r6   r7   rE     s   rE   r   r   g)r   rI   sortedZtrait_namesZclass_trait_namesr   Z	has_traitZassertFalse)r=   rE   rD   r6   r6   r7   test_trait_names  s    zTestHasTraits.test_trait_namesc          	   C   sD   t dg G dd dt}W d Q R X | }| |ddd d S )Nz1metadata should be set using the \.tag\(\) methodc               @   s   e Zd ZeddZdS )z7TestHasTraits.test_trait_metadata_deprecated.<locals>.AMY_VALUE)
config_keyN)r@   rA   rB   r   r   r6   r6   r6   r7   rE     s   rE   r   r   r   )r   r   rI   rr   )r=   rE   rD   r6   r6   r7   test_trait_metadata_deprecated  s    z,TestHasTraits.test_trait_metadata_deprecatedc             C   s.   G dd dt }| }| |ddd d S )Nc               @   s   e Zd Ze jddZdS )z,TestHasTraits.test_trait_metadata.<locals>.Ar   )r   N)r@   rA   rB   r   rk   r   r6   r6   r6   r7   rE     s   rE   r   r   r   )r   rI   rr   )r=   rE   rD   r6   r6   r7   test_trait_metadata  s    z!TestHasTraits.test_trait_metadatac             C   sD   G dd dt }| }| |ddd  | |dddd d S )Nc               @   s   e Zd Ze ZdS )z4TestHasTraits.test_trait_metadata_default.<locals>.AN)r@   rA   rB   r   r   r6   r6   r6   r7   rE     s   rE   r   r   r+   )r   rI   rr   )r=   rE   rD   r6   r6   r7   test_trait_metadata_default  s    z)TestHasTraits.test_trait_metadata_defaultc             C   sR   G dd dt }| }| | t|j|jd | | t|j|jd d S )Nc               @   s   e Zd Ze Ze ZdS )z$TestHasTraits.test_traits.<locals>.AN)r@   rA   rB   r   r   r   r   r6   r6   r6   r7   rE     s   rE   )r   r   )r   rI   traitsr4   r   r   Zclass_traits)r=   rE   rD   r6   r6   r7   test_traits  s    zTestHasTraits.test_traitsc             C   s   G dd dt }| }| | t|j|j|jd |jddd}| |t|jd |jdd	 d
}| |t|j|j|jd d S )Nc               @   s4   e Zd Ze jdddZe jdddZedZdS )z-TestHasTraits.test_traits_metadata.<locals>.AVALUE1VALUE2)r   other_thingVALUE3r   N)	r@   rA   rB   r   rk   r   r   r   jr6   r6   r6   r7   rE     s   rE   )r   r   r   r   r   )r   r   )r   c             S   s   dS )NTr6   )ry   r6   r6   r7   <lambda>  s    z4TestHasTraits.test_traits_metadata.<locals>.<lambda>)r   )r   rI   r   r4   r   r   r   )r=   rE   rD   r   r6   r6   r7   test_traits_metadata  s     z"TestHasTraits.test_traits_metadatac          	   C   s   t dgd  G dd dt}W d Q R X | }| | t|j|j|jd |jddd}| |t|jd	 |jd
d d}| |t|j|j|jd d S )Nz1metadata should be set using the \.tag\(\) methodrg   c               @   s,   e Zd ZedddZedddZedZdS )z8TestHasTraits.test_traits_metadata_deprecated.<locals>.Ar   r   )r   r   r   r   N)r@   rA   rB   r   r   r   r   r   r6   r6   r6   r7   rE     s   rE   )r   r   r   r   r   )r   r   )r   c             S   s   dS )NTr6   )ry   r6   r6   r7   r     s    z?TestHasTraits.test_traits_metadata_deprecated.<locals>.<lambda>)r   )r   r   rI   r   r4   r   r   r   )r=   rE   rD   r   r6   r6   r7   test_traits_metadata_deprecated  s     z-TestHasTraits.test_traits_metadata_deprecatedc             C   s<   G dd dt }|ddd}| |jd | |jd d S )Nc               @   s   e Zd Ze Ze ZdS )z"TestHasTraits.test_init.<locals>.AN)r@   rA   rB   r   r   r   r]   r6   r6   r6   r7   rE     s   rE   r   g      $@)r   r]   )r   rI   r   r]   )r=   rE   rD   r6   r6   r7   	test_init  s    zTestHasTraits.test_initc                s:   G  fdddt   d}| |jd | t  d S )Nc                   s&   e Zd ZedZ fddZ  ZS )z-TestHasTraits.test_positional_args.<locals>.Ar   c                s   t  |   || _d S )N)r   r   r   )r=   r   )rE   r   r6   r7   r     s    z6TestHasTraits.test_positional_args.<locals>.A.__init__)r@   rA   rB   r   r   r   r   r6   )rE   )r   r7   rE     s   rE      )r   rI   r   rF   	TypeError)r=   rD   r6   )rE   r7   test_positional_args  s    z"TestHasTraits.test_positional_argsN)r@   rA   rB   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   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 )TestTypec             C   s^   G dd dt }G dd dt}| }| |jt  ||_| |j| | tt|dd d S )Nc               @   s   e Zd ZdS )z TestType.test_default.<locals>.BN)r@   rA   rB   r6   r6   r6   r7   rV   $  s    rV   c               @   s   e Zd ZeddZdS )z TestType.test_default.<locals>.AT)
allow_noneN)r@   rA   rB   r   klassr6   r6   r6   r7   rE   %  s   rE   r   rH   )objectr   rI   r   rF   r   r   )r=   rV   rE   rD   r6   r6   r7   test_default"  s    zTestType.test_defaultc                sT  G dd dt  G dd d G  fdddt}| |jjt  | |jjt  | |jjd  | |jjt  | |jj  | |jj  | |jj  | |jj  | |j	jd  | |j	j  | |j
j | |j
j  | }| |jt  | |jd  | |j  | |j  | |j	d  | |j
 d S )Nc               @   s   e Zd ZdS )z(TestType.test_default_options.<locals>.BN)r@   rA   rB   r6   r6   r6   r7   rV   1  s    rV   c               @   s   e Zd ZdS )z(TestType.test_default_options.<locals>.CN)r@   rA   rB   r6   r6   r6   r7   r`   2  s    r`   c                   sJ   e Zd Ze ZedddZe Ze dZed ddZe dZ	dS )z(TestType.test_default_options.<locals>.ANT)r   )r   )ru   r   r   )ru   r   )
r@   rA   rB   r   k1k2k3k4k5k6r6   )rV   r`   r6   r7   rE   3  s   
rE   )r   r   assertIsr   ru   r   r   r   r   r   r   )r=   rE   rD   r6   )rV   r`   r7   test_default_options/  s,    
zTestType.test_default_optionsc                sv   G dd dt  G dd dt }G  fdddt}| }| |j  | tt|d| | tt|dt   |_d S )Nc               @   s   e Zd ZdS )zTestType.test_value.<locals>.BN)r@   rA   rB   r6   r6   r6   r7   rV   T  s    rV   c               @   s   e Zd ZdS )zTestType.test_value.<locals>.CN)r@   rA   rB   r6   r6   r6   r7   r`   U  s    r`   c                   s   e Zd Ze ZdS )zTestType.test_value.<locals>.AN)r@   rA   rB   r   r   r6   )rV   r6   r7   rE   V  s   rE   r   )r   r   rI   r   rF   r   r   )r=   r`   rE   rD   r6   )rV   r7   
test_valueR  s    zTestType.test_valuec                sr   G dd dt  G dd d }G  fdddt}| }| |j  | tt|dd  ||_| |j| d S )Nc               @   s   e Zd ZdS )z#TestType.test_allow_none.<locals>.BN)r@   rA   rB   r6   r6   r6   r7   rV   a  s    rV   c               @   s   e Zd ZdS )z#TestType.test_allow_none.<locals>.CN)r@   rA   rB   r6   r6   r6   r7   r`   b  s    r`   c                   s   e Zd Ze ZdS )z#TestType.test_allow_none.<locals>.AN)r@   rA   rB   r   r   r6   )rV   r6   r7   rE   c  s   rE   r   )r   r   rI   r   rF   r   r   )r=   r`   rE   rD   r6   )rV   r7   test_allow_none_  s    zTestType.test_allow_nonec             C   s<   G dd dt }| t| G dd dt }| t| d S )Nc               @   s   e Zd ZedZdS )z'TestType.test_validate_klass.<locals>.Azno strings allowedN)r@   rA   rB   r   r   r6   r6   r6   r7   rE   n  s   rE   c               @   s   e Zd ZedZdS )z'TestType.test_validate_klass.<locals>.Azrub.adub.DuckN)r@   rA   rB   r   r   r6   r6   r6   r7   rE   s  s   )r   rF   ImportError)r=   rE   r6   r6   r7   test_validate_klassl  s    zTestType.test_validate_klassc                sT   G dd dt  G  fdddt}| t| G  fdddt}| t| d S )Nc               @   s   e Zd ZdS )z)TestType.test_validate_default.<locals>.BN)r@   rA   rB   r6   r6   r6   r7   rV   z  s    rV   c                   s   e Zd Zed ZdS )z)TestType.test_validate_default.<locals>.Azbad defaultN)r@   rA   rB   r   r   r6   )rV   r6   r7   rE   {  s   rE   c                   s   e Zd Zed ZdS )z)TestType.test_validate_default.<locals>.CN)r@   rA   rB   r   r   r6   )rV   r6   r7   r`     s   r`   )r   r   rF   r   r   )r=   rE   r`   r6   )rV   r7   test_validate_defaultx  s
    zTestType.test_validate_defaultc             C   sL   G dd dt }ddlm} | }||_| |j| | tt|dd d S )Nc               @   s   e Zd ZedZdS )z"TestType.test_str_klass.<locals>.Az ipython_genutils.ipstruct.StructN)r@   rA   rB   r   r   r6   r6   r6   r7   rE     s   rE   r   )Structr   rH   )r   ipython_genutils.ipstructr   r   rI   rF   r   r   )r=   rE   r   rD   r6   r6   r7   test_str_klass  s    zTestType.test_str_klassc             C   s8   G dd dt }|dd}ddlm} | |j| d S )Nc               @   s   e Zd Ze ZdS )z&TestType.test_set_str_klass.<locals>.AN)r@   rA   rB   r   r   r6   r6   r6   r7   rE     s   rE   z ipython_genutils.ipstruct.Struct)r   r   )r   )r   r   r   rI   r   )r=   rE   rD   r   r6   r6   r7   test_set_str_klass  s    
zTestType.test_set_str_klassN)r@   rA   rB   r   r   r   r   r   r   r   r   r6   r6   r6   r7   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S )TestInstancec                s   G dd dt  G dd d }G dd dt }G  fdddt}| }| |jd k   |_| t|j  | |_| t|j  | tt|d	  | tt|d	| | tt|d	|  d S )
Nc               @   s   e Zd ZdS )z$TestInstance.test_basic.<locals>.FooN)r@   rA   rB   r6   r6   r6   r7   rq     s    rq   c               @   s   e Zd ZdS )z$TestInstance.test_basic.<locals>.BarN)r@   rA   rB   r6   r6   r6   r7   Bar  s    r   c               @   s   e Zd ZdS )z$TestInstance.test_basic.<locals>.BahN)r@   rA   rB   r6   r6   r6   r7   Bah  s    r   c                   s   e Zd Ze ddZdS )z"TestInstance.test_basic.<locals>.AT)r   N)r@   rA   rB   r   rL   r6   )rq   r6   r7   rE     s   rE   rL   )r   r   r   rL   rQ   rF   r   r   )r=   r   r   rE   rD   r6   )rq   r7   
test_basic  s    zTestInstance.test_basicc                s   G dd dt  G dd d }G dd dt }G  fdddtG fd	d
d
t}| }| |jd k   |_| t|j  | |_| t|j  | tt|d  | tt|d| | tt|d|  d S )Nc               @   s   e Zd ZdS )z,TestInstance.test_default_klass.<locals>.FooN)r@   rA   rB   r6   r6   r6   r7   rq     s    rq   c               @   s   e Zd ZdS )z,TestInstance.test_default_klass.<locals>.BarN)r@   rA   rB   r6   r6   r6   r7   r     s    r   c               @   s   e Zd ZdS )z,TestInstance.test_default_klass.<locals>.BahN)r@   rA   rB   r6   r6   r6   r7   r     s    r   c                   s   e Zd Z ZdS )z4TestInstance.test_default_klass.<locals>.FooInstanceN)r@   rA   rB   r   r6   )rq   r6   r7   FooInstance  s   r   c                   s   e Zd Z ddZdS )z*TestInstance.test_default_klass.<locals>.AT)r   N)r@   rA   rB   rL   r6   )r   r6   r7   rE     s   rE   rL   )	r   r   r   r   rL   rQ   rF   r   r   )r=   r   r   rE   rD   r6   )rq   r   r7   test_default_klass  s    zTestInstance.test_default_klassc                sF   G dd dt  G  fdddt}| }| }| |j|jk	 d S )Nc               @   s   e Zd ZdS )z3TestInstance.test_unique_default_value.<locals>.FooN)r@   rA   rB   r6   r6   r6   r7   rq     s    rq   c                   s   e Zd Ze di ZdS )z1TestInstance.test_unique_default_value.<locals>.Ar6   N)r@   rA   rB   r   rL   r6   )rq   r6   r7   rE     s   rE   )r   r   r   rL   )r=   rE   rD   rb   r6   )rq   r7   test_unique_default_value  s
    z&TestInstance.test_unique_default_valuec                s   G dd dt G dd dt }G dd dt  G fdddt}| }| |jjd	 G  fd
ddt}| }| |jjd	 | |jjd G fdddt}| }| |jd k d S )Nc               @   s   e Zd Zdd ZdS )z&TestInstance.test_args_kw.<locals>.Fooc             S   s
   || _ d S )N)rc   )r=   rc   r6   r6   r7   r     s    z/TestInstance.test_args_kw.<locals>.Foo.__init__N)r@   rA   rB   r   r6   r6   r6   r7   rq     s   rq   c               @   s   e Zd ZdS )z&TestInstance.test_args_kw.<locals>.BarN)r@   rA   rB   r6   r6   r6   r7   r     s    r   c               @   s   e Zd Zdd ZdS )z&TestInstance.test_args_kw.<locals>.Bahc             S   s   || _ || _d S )N)rc   r   )r=   rc   r   r6   r6   r7   r     s     z/TestInstance.test_args_kw.<locals>.Bah.__init__N)r@   rA   rB   r   r6   r6   r6   r7   r     s   r   c                   s   e Zd Ze dZdS )z$TestInstance.test_args_kw.<locals>.A)rH   N)r@   rA   rB   r   rL   r6   )rq   r6   r7   rE     s   rE   rH   c                   s    e Zd Ze dedddZdS )z$TestInstance.test_args_kw.<locals>.B)rH   r^   )r   )r   kwN)r@   rA   rB   r   r4   rL   r6   )r   r6   r7   rV     s   rV   r^   c                   s   e Zd Ze ddZdS )z$TestInstance.test_args_kw.<locals>.CT)r   N)r@   rA   rB   r   rL   r6   )rq   r6   r7   r`     s   r`   )r   r   rI   rL   rc   r   r   )r=   r   rE   rD   rV   rb   r`   rc   r6   )r   rq   r7   test_args_kw  s    zTestInstance.test_args_kwc          	      sJ   G dd dt  G  fdddt}| }| t |j W d Q R X d S )Nc               @   s   e Zd ZdS )z*TestInstance.test_bad_default.<locals>.FooN)r@   rA   rB   r6   r6   r6   r7   rq     s    rq   c                   s   e Zd Ze ZdS )z(TestInstance.test_bad_default.<locals>.AN)r@   rA   rB   r   rL   r6   )rq   r6   r7   rE     s   rE   )r   r   rF   r   rL   )r=   rE   rD   r6   )rq   r7   test_bad_default  s
    zTestInstance.test_bad_defaultc                s,   G dd dt   fdd}| t| d S )Nc               @   s   e Zd ZdS )z'TestInstance.test_instance.<locals>.FooN)r@   rA   rB   r6   r6   r6   r7   rq     s    rq   c                 s   G  fdddt } d S )Nc                   s   e Zd Ze  ZdS )z4TestInstance.test_instance.<locals>.inner.<locals>.AN)r@   rA   rB   r   rL   r6   )rq   r6   r7   rE     s   rE   )r   )rE   )rq   r6   r7   inner  s    z)TestInstance.test_instance.<locals>.inner)r   rF   r   )r=   r   r6   )rq   r7   test_instance  s    zTestInstance.test_instanceN)	r@   rA   rB   r   r   r   r   r   r   r6   r6   r6   r7   r     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 )TestThisc             C   sT   G dd dt }| }| |jd  | }||_| |j| | tt|dd d S )Nc               @   s   e Zd Ze ZdS )z%TestThis.test_this_class.<locals>.FooN)r@   rA   rB   r   thisr6   r6   r6   r7   rq     s   rq   r   rH   )r   rI   r   rF   r   r   )r=   rq   r   r   r6   r6   r7   r     s    zTestThis.test_this_classc             C   s4   G dd dt }| }| |_| t|j| d S )Nc               @   s   e Zd Ze ZdS )z$TestThis.test_this_inst.<locals>.FooN)r@   rA   rB   r   r   r6   r6   r6   r7   rq     s   rq   )r   r   r   rQ   )r=   rq   r   r6   r6   r7   test_this_inst  s    zTestThis.test_this_instc             C   sX   G dd dt }G dd d|}| }| }||_||_| |j| | |j| d S )Nc               @   s   e Zd Ze ZdS )z#TestThis.test_subclass.<locals>.FooN)r@   rA   rB   r   r{   r6   r6   r6   r7   rq     s   rq   c               @   s   e Zd ZdS )z#TestThis.test_subclass.<locals>.BarN)r@   rA   rB   r6   r6   r6   r7   r     s   r   )r   r{   rI   )r=   rq   r   r   rb   r6   r6   r7   r     s    zTestThis.test_subclassc             C   sV   G dd dt }G dd d|}| }| }||_| |j| | tt|d| d S )Nc               @   s   e Zd Ze ZdS )z,TestThis.test_subclass_override.<locals>.FooN)r@   rA   rB   r   r{   r6   r6   r6   r7   rq     s   rq   c               @   s   e Zd Ze ZdS )z,TestThis.test_subclass_override.<locals>.BarN)r@   rA   rB   r   r{   r6   r6   r6   r7   r     s   r   r{   )r   r{   rI   rF   r   r   )r=   rq   r   r   rb   r6   r6   r7   test_subclass_override  s    zTestThis.test_subclass_overridec          	   C   sP   G dd dt }|d|dd|ddgd}| t dd	g|_W d Q R X d S )
Nc               @   s   e Zd Ze Zee ZdS )z-TestThis.test_this_in_container.<locals>.TreeN)r@   rA   rB   r   rM   r    r   leavesr6   r6   r6   r7   Tree&  s   r   rs   rp   )rM   Zbuzz)rM   r   r   rg   )r   rF   r   r   )r=   r   Ztreer6   r6   r7   test_this_in_container$  s    zTestThis.test_this_in_containerN)r@   rA   rB   r   r   r   r   r   r6   r6   r6   r7   r     s
   r   c               @   sH   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S )TraitTestBasez+A best testing class for basic trait types.c             C   s   || j _d S )N)rT   rM   )r=   rM   r6   r6   r7   assign5  s    zTraitTestBase.assignc             C   s   |S )Nr6   )r=   rM   r6   r6   r7   coerce8  s    zTraitTestBase.coercec             C   s>   t | dr:x.| jD ]$}| | | | jj| | qW d S )N_good_values)hasattrr   r   rI   rT   rM   r   )r=   rM   r6   r6   r7   test_good_values;  s    

zTraitTestBase.test_good_valuesc          	   C   sT   t | drPxD| jD ]:}y| t| j| W q tk
rJ   dsFt|Y qX qW d S )N_bad_valuesF)r   r   rF   r   r   AssertionError)r=   rM   r6   r6   r7   test_bad_valuesA  s    
zTraitTestBase.test_bad_valuesc             C   s    t | dr| | j| jj d S )N_default_value)r   rI   r  rT   rM   )r=   r6   r6   r7   test_default_valueI  s    
z TraitTestBase.test_default_valuec          	   C   s   t | drt | drd | jkr| j d }z@d|_| jd  | d  | | jjd  | 	  | 
  W d d|_| jd  X d S )Nr   r   rM   TF)r   r   rT   r   r   r   r   rI   rM   r   r  r   )r=   traitr6   r6   r7   r   M  s    

zTraitTestBase.test_allow_nonec             C   s   t | dr| j| j_d S )Nr  )r   r  rT   rM   )r=   r6   r6   r7   tearDown^  s    
zTraitTestBase.tearDownN)r@   rA   rB   __doc__r   r   r   r  r  r   r  r6   r6   r6   r7   r   2  s   r   c               @   s   e Zd Ze ZdS )AnyTraitN)r@   rA   rB   r	   rM   r6   r6   r6   r7   r  d  s   r  c               @   s4   e Zd Ze ZdZddddgddidddgZg ZdS )AnyTraitTestNg      $@tenrH   )rH   y              ?)r@   rA   rB   r  rT   r  r   r   r6   r6   r6   r7   r	  h  s   r	  c               @   s   e Zd Zee e gZdS )
UnionTraitN)r@   rA   rB   r   r   r
   rM   r6   r6   r6   r7   r  p  s   r  c               @   s*   e Zd ZeddZeedgZg ddgZdS )UnionTraitTestz ipython_genutils.ipstruct.Struct)rM   T)r   y              ?N)	r@   rA   rB   r  rT   rR   floatr   r   r6   r6   r6   r7   r  t  s   

r  c               @   s   e Zd Ze e B ZdS )OrTraitN)r@   rA   rB   r
   r   rM   r6   r6   r6   r7   r  z  s   r  c               @   s&   e Zd Ze ZdddgZg ddgZdS )OrTraitTestTFr
  )r   y              ?N)r@   rA   rB   r  rT   r   r   r6   r6   r6   r7   r  ~  s   
r  c               @   s   e Zd ZedddZdS )IntTraitc   i)minN)r@   rA   rB   r   rM   r6   r6   r6   r7   r    s   r  c               @   s~   e Zd Ze ZdZddgZdddgddiddddd	d
dddd
dddddddgZej	sze
ededdej dej g dS )TestIntr  rH   ir
  )rH   Ny              ?g333333$@g333333$10Lz-10Lz10.1z-10.110z-10i8)r@   rA   rB   r  rT   r  r   r   sixPY3extendlongsysmaxintr6   r6   r6   r7   r    s   r  c               @   s   e Zd ZedZdS )	CIntTrait5N)r@   rA   rB   r   rM   r6   r6   r6   r7   r    s   r  c            	   @   sN   e Zd Ze ZdZddddddddgZdddgddid	d
dddg	Zdd Zd
S )TestCIntr   r  z-10rH   g      $@g      $g333333$@r
  )rH   Ny              ?z10.1c             C   s   t |S )N)rR   )r=   nr6   r6   r7   r     s    zTestCInt.coerce)	r@   rA   rB   r  rT   r  r   r   r   r6   r6   r6   r7   r    s   r  c               @   s   e Zd ZedddZdS )MinBoundCIntTraitr  ri   )r  N)r@   rA   rB   r   rM   r6   r6   r6   r7   r     s   r   c               @   s,   e Zd Ze ZdZdddgZddddgZd	S )
TestMinBoundCIntr   ri   g      @3g@rg   g      N)r@   rA   rB   r   rT   r  r   r   r6   r6   r6   r7   r!    s   
r!  c               @   s"   e Zd ZeejrdnedZdS )	LongTraitr  N)r@   rA   rB   r   r  r  r  rM   r6   r6   r6   r7   r$    s   r$  c               @   s   e Zd Ze ZejrdnedZddgZ	dddgddiddddd	d
dddddd
dddddgZ
ejse	ededdej dej g e
edgedfg ejejdddd ZdS )TestLongr  rH   ir
  )rH   Ny              ?g333333$@g333333$r  z-10r  z-10Lz10.1z-10.1znot relevant on py3)reasonc             C   s    d| j _| t| j jt dS )zLong casts ints to longrH   N)rT   rM   rI   r3   r  )r=   r6   r6   r7   test_cast_small  s    zTestLong.test_cast_small)r@   rA   rB   r$  rT   r  r  r  r  r   r   r  r  r  r   skipifr'  r6   r6   r6   r7   r%    s   &r%  c               @   s&   e Zd ZeejrdnedddZdS )MinBoundLongTraitr  r   )r  N)r@   rA   rB   r   r  r  r  rM   r6   r6   r6   r7   r)    s   r)  c               @   s4   e Zd Ze ZejrdnedZddgZ	ddgZ
dS )TestMinBoundLongr  r   rH   rj   iN)r@   rA   rB   r)  rT   r  r  r  r  r   r   r6   r6   r6   r7   r*    s   r*  c               @   s&   e Zd ZeejrdnedddZdS )MaxBoundLongTraitr   rH   )maxN)r@   rA   rB   r   r  r  r  rM   r6   r6   r6   r7   r+    s   r+  c               @   s4   e Zd Ze ZejrdnedZddgZ	ddgZ
dS )TestMaxBoundLongr   rH   r[   r^   N)r@   rA   rB   r+  rT   r  r  r  r  r   r   r6   r6   r6   r7   r-    s   r-  c               @   s   e Zd ZedZdS )
CLongTraitr  N)r@   rA   rB   r   rM   r6   r6   r6   r7   r/    s   r/  c            	   @   s\   e Zd Ze ZejrdnedZddddddddgZ	dddgddid	d
dddg	Z
dd Zd
S )	TestCLongr   r  z-10rH   g      $@g      $g333333$@r
  )rH   Ny              ?z10.1c             C   s   t jrt|S t|S )N)r  r  rR   r  )r=   r  r6   r6   r7   r     s    zTestCLong.coerce)r@   rA   rB   r/  rT   r  r  r  r  r   r   r   r6   r6   r6   r7   r0    s   r0  c               @   s   e Zd ZedddZdS )MaxBoundCLongTraitr  rH   )r,  N)r@   rA   rB   r   rM   r6   r6   r6   r7   r1    s   r1  c               @   s6   e Zd Ze ZejrdnedZdddgZ	ddgZ
dS )TestMaxBoundCLongr   rH   r  g$@g      &@Z11N)r@   rA   rB   r1  rT   r  r  r  r  r   r   r6   r6   r6   r7   r2    s   
r2  c               @   s   e Zd ZedZdS )IntegerTraitr   N)r@   rA   rB   r   rM   r6   r6   r6   r7   r3    s   r3  c               @   s6   e Zd Ze ZdZdd Zeje	j
dddd ZdS )	TestIntegerr   c             C   s   t |S )N)rR   )r=   r  r6   r6   r7   r     s    zTestInteger.coerceznot relevant on py3)r&  c             C   s$   t d| j_| t| jjt dS )z Integer casts small longs to intr   N)r  rT   rM   rI   r3   rR   )r=   r6   r6   r7   r'    s    zTestInteger.test_cast_smallN)r@   rA   rB   r3  rT   r  r   r   r(  r  r  r'  r6   r6   r6   r7   r4    s   r4  c               @   s   e Zd ZedddZdS )MinBoundIntegerTraitr   ri   )r  N)r@   rA   rB   r   rM   r6   r6   r6   r7   r5  
  s   r5  c               @   s"   e Zd Ze ZdZdZddgZdS )TestMinBoundIntegerr   )ri   r^   rg   iN)r@   rA   rB   r5  rT   r  r   r   r6   r6   r6   r7   r6    s   r6  c               @   s   e Zd ZedddZdS )MaxBoundIntegerTraitr   ri   )r,  N)r@   rA   rB   r   rM   r6   r6   r6   r7   r7    s   r7  c               @   s"   e Zd Ze ZdZdZddgZdS )TestMaxBoundIntegerr   )ri   r.  rj   rH   N)r@   rA   rB   r7  rT   r  r   r   r6   r6   r6   r7   r8    s   r8  c               @   s   e Zd ZedddZdS )
FloatTraitg     X@g      i@)r,  N)r@   rA   rB   r   rM   r6   r6   r6   r7   r9     s   r9  c               @   sp   e Zd Ze ZdZddddgZdddgddiddd	d
dddddd
ddddddgZej	sle
ededg dS )	TestFloatg     X@rH   ig333333$@g333333$r
  )rH   Ny              ?r  z-10r  z-10Lz10.1z-10.1g      i@)r@   rA   rB   r9  rT   r  r   r   r  r  r  r  r6   r6   r6   r7   r:  $  s   r:  c               @   s   e Zd ZedddZdS )CFloatTraitz99.0g      i@)r,  N)r@   rA   rB   r   rM   r6   r6   r6   r7   r;  1  s   r;  c            	   @   sN   e Zd Ze ZdZddddddddgZdddgddid	d
dddg	Zdd Zd
S )
TestCFloatg     X@rH   g      $@g      %@z10.0r  z-10r
  )rH   Ny              ?g33333i@z200.1c             C   s   t |S )N)r  )r=   ry   r6   r6   r7   r   >  s    zTestCFloat.coerce)	r@   rA   rB   r;  rT   r  r   r   r   r6   r6   r6   r7   r<  5  s   r<  c               @   s   e Zd ZedZdS )ComplexTraity     X@     XN)r@   rA   rB   r   rM   r6   r6   r6   r7   r=  B  s   r=  c            
   @   sb   e Zd Ze ZdZdddddddd	d
dg
ZddddgddiddgZej	s^e
ededg dS )TestComplexy     X@     XrH   ig333333$@g333333$y              $@y      $@      $@y      $@      $y        333333$@y333333$@333333$@y333333$@333333$r  z-10Lr
  )rH   N)r@   rA   rB   r=  rT   r  r   r   r  r  r  r  r6   r6   r6   r7   r>  F  s   
r>  c               @   s   e Zd ZedZdS )
BytesTraits   stringN)r@   rA   rB   r   rM   r6   r6   r6   r7   r?  R  s   r?  c               @   sf   e Zd Ze ZdZdddddddgZdd	d
dddgdgddidddgZej	sbe
eded	g dS )	TestBytess   strings   10s   -10s   10Ls   -10Ls   10.1s   -10.1rH   ig333333$@g333333$y              ?r
  )rH   Nstring)r@   rA   rB   r?  rT   r  r   r   r  r  r  r  r6   r6   r6   r7   r@  V  s   r@  c               @   s   e Zd ZedZdS )UnicodeTraitunicodeN)r@   rA   rB   r   rM   r6   r6   r6   r7   rB  c  s   rB  c               @   sp   e Zd Ze ZdZddddddddd	d	d
gZddddddgdgdgddiddgZej	sle
ededg dS )TestUnicoderC  r  z-10r  z-10Lz10.1z-10.1 rA  u   €rH   ig333333$@g333333$y              ?r
  )rH   N)r@   rA   rB   rB  rT   r  r   r   r  r  r  r  r6   r6   r6   r7   rD  g  s   

rD  c               @   s   e Zd ZedZdS )ObjectNameTraitabcN)r@   rA   rB   r"   rM   r6   r6   r6   r7   rF  t  s   rF  c               @   sj   e Zd Ze ZdZddddddgZdd	d
dddddddde egZe	j
d dk r\ed n
ed dS )TestObjectNamerG  rD   ZghZg9Zg_Z_GZa345_r   rE  u   €Z9g!z#abczaj@za.bza()za[0]Nr   ri      þ)r@   rA   rB   rF  rT   r  r   r   r   r  version_infor   r6   r6   r6   r7   rH  w  s   rH  c               @   s   e Zd ZedZdS )DottedObjectNameTraitza.bN)r@   rA   rB   r#   rM   r6   r6   r6   r7   rL    s   rL  c               @   s\   e Zd Ze ZdZdddddgZdddd	d
dddgZej	d dk rNe
d n
e
d dS )TestDottedObjectNameza.brE   zy.tzy765.__repr__zos.path.joinr   u   abc.€z_.@.z.abczabc.z.abc.Nr   ri   u   t.þ)r@   rA   rB   rL  rT   r  r   r   r  rK  r   r6   r6   r6   r7   rM    s   rM  c               @   s   e Zd Ze ZdS )TCPAddressTraitN)r@   rA   rB   r   rM   r6   r6   r6   r7   rO    s   rO  c               @   s,   e Zd Ze ZdZdddgZddddgZdS )	TestTCPAddress)z	127.0.0.1r   )	localhostr   )z192.168.0.1i  )zwww.google.comP   )r   r   )rQ  g      $@)rQ  rK   N)r@   rA   rB   rO  rT   r  r   r   r6   r6   r6   r7   rP    s   
rP  c               @   s   e Zd Zee ZdS )	ListTraitN)r@   rA   rB   r    r   rM   r6   r6   r6   r7   rS    s   rS  c               @   sB   e Zd Ze Zg Zg dgeeddgZdddgdgZ	dd Z
dS )TestListr   rH   )r   rg   rD   c             C   s   |d k	rt |}|S )N)list)r=   rM   r6   r6   r7   r     s    zTestList.coerceN)r@   rA   rB   rS  rT   r  rU  ranger   r   r   r6   r6   r6   r7   rT    s
   rT  c               @   s   e Zd ZdS )rq   N)r@   rA   rB   r6   r6   r6   r7   rq     s   rq   c               @   s   e Zd ZeeeZdS )NoneInstanceListTraitN)r@   rA   rB   r    r   rq   rM   r6   r6   r6   r7   rW    s   rW  c               @   s6   e Zd Ze Zg Ze e gg gZdge dggZdS )TestNoneInstanceListN)	r@   rA   rB   rW  rT   r  rq   r   r   r6   r6   r6   r7   rX    s   rX  c               @   s   e Zd Zeee d ZdS )InstanceListTraitz.FooN)r@   rA   rB   r    r   rM   r6   r6   r6   r7   rY    s   rY  c               @   s@   e Zd Ze Zdd Zg Ze e gg gZddgdegdgZ	dS )TestInstanceListc             C   s   |  | j d jjt dS )z2Test that the instance klass is properly assigned.rM   N)r   rT   r   _traitr   rq   )r=   r6   r6   r7   
test_klass  s    zTestInstanceList.test_klass1rg   N)
r@   rA   rB   rY  rT   r\  r  rq   r   r   r6   r6   r6   r7   rZ    s
   rZ  c               @   s   e Zd Zee e B ZdS )UnionListTraitN)r@   rA   rB   r    r   r
   rM   r6   r6   r6   r7   r^    s   r^  c               @   s2   e Zd Ze Zg ZddgddggZddgdgZdS )TestUnionListTraitTr   FTrueN)r@   rA   rB   r^  rT   r  r   r   r6   r6   r6   r7   r_    s   r_  c               @   s    e Zd Zee dgdddZdS )LenListTraitr   r   rg   )ZminlenmaxlenN)r@   rA   rB   r    r   rM   r6   r6   r6   r7   ra    s   ra  c               @   sJ   e Zd Ze ZdgZdgddgdgZdddgdg eedgZ	dd	 Z
d
S )TestLenListr   r   rg   )r   rg   rH   rD   ri   c             C   s   |d k	rt |}|S )N)rU  )r=   rM   r6   r6   r7   r     s    zTestLenList.coerceN)r@   rA   rB   ra  rT   r  r   rU  rV  r   r   r6   r6   r6   r7   rc    s
   rc  c               @   s   e Zd ZeeddddZdS )
TupleTraitT)r   )r   )ru   N)r@   rA   rB   r!   r   rM   r6   r6   r6   r7   rd    s   rd  c               @   s@   e Zd Ze ZdZdddggZdddddgZd	d
 Zdd Z	dS )TestTupleTrait)r   )r   r   rH   )r   rg   rD   r6   Nc             C   s   |d k	rt |}|S )N)tuple)r=   rM   r6   r6   r7   r     s    zTestTupleTrait.coercec             C   s4   |  ttd | j ttdd tt t dd}d S )Nr   hello)ru   )r   r   )rF   r   r!   r   r   )r=   r{   r6   r6   r7   test_invalid_args  s    z TestTupleTrait.test_invalid_args)
r@   rA   rB   rd  rT   r  r   r   r   rh  r6   r6   r6   r7   re    s   re  c               @   s   e Zd ZedZdS )LooseTupleTrait)r   rg   ri   N)r@   rA   rB   r!   rM   r6   r6   r6   r7   ri    s   ri  c               @   sR   e Zd Ze ZdZddgdeededddgZd	di d
gZ	dd Z
dd Zd
S )TestLooseTupleTrait)r   rg   ri   )r   r   )r   r   rg  )rD   r   r6   rH   Nc             C   s   |d k	rt |}|S )N)rf  )r=   rM   r6   r6   r7   r     s    zTestLooseTupleTrait.coercec             C   s4   |  ttd | j ttdd tt t dd}d S )Nr   rg  )ru   )r   r   )rF   r   r!   r   r   )r=   r{   r6   r6   r7   rh    s    z%TestLooseTupleTrait.test_invalid_args)r@   rA   rB   ri  rT   r  rf  rV  r   r   r   rh  r6   r6   r6   r7   rj    s    rj  c               @   s"   e Zd Zee e ddgdZdS )MultiTupleTraitr  s   bottles)ru   N)r@   rA   rB   r!   r   r   rM   r6   r6   r6   r7   rk    s   rk  c               @   s"   e Zd Ze ZdZddgZdZdS )TestMultiTuple)r  s   bottles)r      a)rg      b)r6   rH   rm  )r   rm  ri   )rm  r   )r   rD   N)r@   rA   rB   rk  rT   r  r   r   r6   r6   r6   r7   rl    s   rl  c               @   s   e Zd ZedZdS )CRegExpTraitrE  N)r@   rA   rB   r$   rM   r6   r6   r6   r7   ro  &  s   ro  c               @   s<   e Zd Zdd Ze ZedZdedgZ	dddgZ
dS )TestCRegExpc             C   s
   t |S )N)recompile)r=   rM   r6   r6   r7   r   ,  s    zTestCRegExp.coercerE  z\d+(Nr6   )r@   rA   rB   r   ro  rT   rq  rr  r  r   r   r6   r6   r6   r7   rp  *  s
   
rp  c               @   s   e Zd Ze ZdS )	DictTraitN)r@   rA   rB   r   rM   r6   r6   r6   r7   rt  5  s   rt  c              C   s:   t  } t }| |_d| d< | |jks(t|j| ks6td S )Nr   rD   )r4   rt  rM   r  )r   rc   r6   r6   r7   test_dict_assignment8  s    ru  c               @   s   e Zd Zee ddidZdS )UniformlyValidatedDictTraitrs   r]  )r  ru   N)r@   rA   rB   r   r   rM   r6   r6   r6   r7   rv  A  s   rv  c               @   s2   e Zd Ze ZddiZdddgZdddgZdS )"TestInstanceUniformlyValidatedDictrs   r]  0)rs   rp   r   N)r@   rA   rB   rv  rT   r  r   r   r6   r6   r6   r7   rw  G  s   rw  c               @   s"   e Zd Zede iddidZdS )KeyValidatedDictTraitrs   r   )r   ru   N)r@   rA   rB   r   r   rM   r6   r6   r6   r7   ry  P  s   
ry  c               @   s:   e Zd Ze ZddiZddddddgZdddgZdS )TestInstanceKeyValidatedDictrs   r   r   r]  )rs   rp   rx  N)r@   rA   rB   ry  rT   r  r   r   r6   r6   r6   r7   rz  V  s   rz  c               @   s&   e Zd Zee de iddidZdS )FullyValidatedDictTraitrs   r   )r  r   ru   N)r@   rA   rB   r   r   r   rM   r6   r6   r6   r7   r{  _  s   r{  c               @   sB   e Zd Ze ZddiZddddddgZddddddgZdS )	TestInstanceFullyValidatedDictrs   r   r   r]  )rs   rp   2rx  N)r@   rA   rB   r{  rT   r  r   r   r6   r6   r6   r7   r|  f  s   r|  c              C   sF   G dd dt } |  }|ji ks$t|ji ks2t|j|jk	sBtdS )zZCheck that the `{}` default value of the Dict traitlet constructor is
    actually copied.c               @   s   e Zd Ze Ze ZdS )z$test_dict_default_value.<locals>.FooN)r@   rA   rB   r   d1d2r6   r6   r6   r7   rq   s  s   rq   N)r   r~  r  r  )rq   rs   r6   r6   r7   test_dict_default_valueo  s
    r  c               @   s   e Zd Zdd Zdd ZdS )TestValidationHookc          	   C   sN   G dd dt }| }d|_d|_| t d|_W dQ R X d|_d|_dS )z2Verify that the early validation hook is effectivec               @   s4   e Zd ZedZeddgddZeddd ZdS )	z4TestValidationHook.test_parity_trait.<locals>.Parityr   oddeven)ru   rM   c             S   sD   |d }| j dkr"|d r"td| j dkr@|d dkr@td|S )NrM   r  rg   zExpected an even numberr  r   zExpected an odd number)parityr   )r=   proposalrM   r6   r6   r7   _value_validate  s    zDTestValidationHook.test_parity_trait.<locals>.Parity._value_validateN)	r@   rA   rB   r   rM   r   r  r)   r  r6   r6   r6   r7   Parity  s   r  r  r   rg   Nr  )r   r  rM   rF   r   )r=   r  ur6   r6   r7   test_parity_trait  s    z$TestValidationHook.test_parity_traitc          	   C   s^   G dd dt }| }d|_| t d|_W dQ R X d|_| t d|_W dQ R X dS )z@Verify that we can register the same validator to multiple namesc               @   s.   e Zd ZedZedZedddd ZdS )z:TestValidationHook.test_multiple_validate.<locals>.OddEvenr   r   r  r  c             S   sH   |d j dkr"|d d s"td|d j dkrD|d d rDtdd S )Nr  r  rM   rg   zodd should be oddr  zeven should be even)r/   r   )r=   r  r6   r6   r7   check_valid  s    zFTestValidationHook.test_multiple_validate.<locals>.OddEven.check_validN)r@   rA   rB   r   r  r  r)   r  r6   r6   r6   r7   OddEven  s   r  ri   rg   N)r   r  rF   r   r  )r=   r  r  r6   r6   r7   test_multiple_validate  s    z)TestValidationHook.test_multiple_validateN)r@   rA   rB   r  r  r6   r6   r6   r7   r  }  s   r  c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestLinkc             C   sv   G dd dt }|dd}|dd}t|df|df}| |j|j d|_| |j|j d|_| |j|j d	S )
zHVerify two traitlets of the same type can be linked together using link.c               @   s   e Zd Ze ZdS )z%TestLink.test_connect_same.<locals>.AN)r@   rA   rB   r   rM   r6   r6   r6   r7   rE     s   rE   	   )rM      rM   r      N)r   r%   rI   rM   )r=   rE   rD   rb   rc   r6   r6   r7   test_connect_same  s    

zTestLink.test_connect_samec             C   s   G dd dt }G dd dt }|dd}|dd}t|d	f|d
f}| |j|j d|_| |j|j d|_| |j|j dS )zJVerify two traitlets of different types can be linked together using link.c               @   s   e Zd Ze ZdS )z'TestLink.test_link_different.<locals>.AN)r@   rA   rB   r   rM   r6   r6   r6   r7   rE     s   rE   c               @   s   e Zd Ze ZdS )z'TestLink.test_link_different.<locals>.BN)r@   rA   rB   r   countr6   r6   r6   r7   rV     s   rV   r  )rM   r  )r  rM   r  r   rj   N)r   r%   rI   rM   r  )r=   rE   rV   rD   rb   rc   r6   r6   r7   test_link_different  s    

zTestLink.test_link_differentc             C   s^   G dd dt }|dd}|dd}t|df|df}d|_|  d|_| |j|j d	S )
z,Verify two linked traitlets can be unlinked.c               @   s   e Zd Ze ZdS )zTestLink.test_unlink.<locals>.AN)r@   rA   rB   r   rM   r6   r6   r6   r7   rE     s   rE   r  )rM   r  rM   rj   r   N)r   r%   rM   unlinkassertNotEqual)r=   rE   rD   rb   rc   r6   r6   r7   test_unlink  s    

zTestLink.test_unlinkc                s   G dd dt }G dd dt }|dd}|dd}g   fd	d
}||d  fdd}||d t|df|df}| d d  dd= d|_| d d  dd= d|_| d d  dd= dS )z=Verify two linked traitlets have their callbacks called once.c               @   s   e Zd Ze ZdS )z"TestLink.test_callbacks.<locals>.AN)r@   rA   rB   r   rM   r6   r6   r6   r7   rE     s   rE   c               @   s   e Zd Ze ZdS )z"TestLink.test_callbacks.<locals>.BN)r@   rA   rB   r   r  r6   r6   r6   r7   rV     s   rV   r  )rM   r  )r  c                s     d d S )NrD   )r   )r/   r0   r1   )callback_countr6   r7   
a_callback   s    z+TestLink.test_callbacks.<locals>.a_callbackrM   c                s     d d S )Nrb   )r   )r/   r0   r1   )r  r6   r7   
b_callback  s    z+TestLink.test_callbacks.<locals>.b_callbackr  rE  rb   Nr   Zbarj   Zab)r   r   r%   rI   joinr  rM   )r=   rE   rV   rD   rb   r  r  rc   r6   )r  r7   test_callbacks  s$    



zTestLink.test_callbacksN)r@   rA   rB   r  r  r  r  r6   r6   r6   r7   r    s   r  c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestDirectionalLinkc             C   sr   G dd dt }|dd}|dd}t|df|df}| |j|j d|_| |jd d|_| |jd d	S )
zTVerify two traitlets of the same type can be linked together using directional_link.c               @   s   e Zd Ze ZdS )z0TestDirectionalLink.test_connect_same.<locals>.AN)r@   rA   rB   r   rM   r6   r6   r6   r7   rE     s   rE   r  )rM   r  rM   r   r  N)r   r&   rI   rM   )r=   rE   rD   rb   rc   r6   r6   r7   r    s    

z%TestDirectionalLink.test_connect_samec             C   s|   G dd dt }|dd}|dd}t|df|dfdd }| |jd	|j  d
|_| |jd d|_| |jd
 dS )zTest transform link.c               @   s   e Zd Ze ZdS )z,TestDirectionalLink.test_tranform.<locals>.AN)r@   rA   rB   r   rM   r6   r6   r6   r7   rE   3  s   rE   r  )rM   r  rM   c             S   s   d|  S )Nrg   r6   )r]   r6   r6   r7   r   9  s    z3TestDirectionalLink.test_tranform.<locals>.<lambda>rg   r   rH   r  N)r   r&   rI   rM   )r=   rE   rD   rb   rc   r6   r6   r7   test_tranform/  s    

z!TestDirectionalLink.test_tranformc             C   s   G dd dt }G dd dt }|dd}|dd}t|d	f|d
f}| |j|j d|_| |jd d|_| |jd dS )zJVerify two traitlets of different types can be linked together using link.c               @   s   e Zd Ze ZdS )z2TestDirectionalLink.test_link_different.<locals>.AN)r@   rA   rB   r   rM   r6   r6   r6   r7   rE   I  s   rE   c               @   s   e Zd Ze ZdS )z2TestDirectionalLink.test_link_different.<locals>.BN)r@   rA   rB   r   r  r6   r6   r6   r7   rV   K  s   rV   r  )rM   r  )r  rM   r  r   r  N)r   r&   rI   rM   r  )r=   rE   rV   rD   rb   rc   r6   r6   r7   r  E  s    

z'TestDirectionalLink.test_link_differentc             C   s^   G dd dt }|dd}|dd}t|df|df}d|_|  d|_| |j|j d	S )
z,Verify two linked traitlets can be unlinked.c               @   s   e Zd Ze ZdS )z*TestDirectionalLink.test_unlink.<locals>.AN)r@   rA   rB   r   rM   r6   r6   r6   r7   rE   a  s   rE   r  )rM   r  rM   rj   r   N)r   r&   rM   r  r  )r=   rE   rD   rb   rc   r6   r6   r7   r  ]  s    

zTestDirectionalLink.test_unlinkN)r@   rA   rB   r  r  r  r  r6   r6   r6   r7   r    s   r  c               @   s@   e Zd Ze Zeddd Zeddd Ze Z	dd Z
dS )	
Pickleabler   c             C   s   d S )Nr6   )r=   r>   r6   r6   r7   
_i_changedr  s    zPickleable._i_changedc             C   s   |d S )NrM   r6   )r=   Zcommitr6   r6   r7   _i_validatet  s    zPickleable._i_validatec          	   C   s,   |    d| _W d Q R X | | jd d S )Nr   r   )hold_trait_notificationsr   r   r  )r=   r6   r6   r7   r   z  s    
zPickleable.__init__N)r@   rA   rB   r   r   r*   r  r)   r  r   r   r6   r6   r6   r7   r  o  s
   r  c              C   s   t  } xLttjd D ]:}t| |}t|}|j| jks@t|j| jkstqW d| _xLttjd D ]:}t| |}t|}|j| jkst|j| jksjtqjW d S )Nr   r   )	r  rV  pickleZHIGHEST_PROTOCOLdumpsloadsr   r  r   )rc   ZprotocolpZc2r6   r6   r7   test_pickle_hastraits  s    

r  c           
      s<  g  G  fdddt } |  }|  | & d|_|jdksFt g ksRtW d Q R X d|_|jdkspt| F d|_|jdkst g kstd|_|jdkst g kstW d Q R X d|_|jdkst g kstW d Q R X  dgksty|  d|_W d Q R X W n   Y nX |jdks8td S )	Nc                   s0   e Zd ZedZedZ fddZdd ZdS )z+test_hold_trait_notifications.<locals>.Testr   c                s     ||f d S )N)r   )r=   r/   r0   r1   )changesr6   r7   r     s    z6test_hold_trait_notifications.<locals>.Test._a_changedc             S   s   |dkrt d|S )Nr   zOnly 0 is a valid value)r   )r=   rM   r  r6   r6   r7   _b_validate  s    z7test_hold_trait_notifications.<locals>.Test._b_validateN)r@   rA   rB   r   rD   rb   r   r  r6   )r  r6   r7   Test  s   r  r   rg   ri   rj   )r   rj   r   )r   r  rD   r  rb   )r  r{   r6   )r  r7   test_hold_trait_notifications  s6    



r  c               @   s   e Zd Ze Zdd ZdS )RollBackc             C   s   |rt d|S )NZfoobar)r   )r=   rM   r  r6   r6   r7   _bar_validate  s    zRollBack._bar_validateN)r@   rA   rB   r   rp   r  r6   r6   r6   r7   r    s   r  c               @   s   e Zd Zdd ZdS )TestRollbackc             C   s   dd }|  t| d S )Nc               S   s   t dd d S )Nr   )rp   )r  r6   r6   r6   r7   assign_rollback  s    z4TestRollback.test_roll_back.<locals>.assign_rollback)rF   r   )r=   r  r6   r6   r7   test_roll_back  s    zTestRollback.test_roll_backN)r@   rA   rB   r  r6   r6   r6   r7   r    s   r  c               @   s(   e Zd Ze Ze Zdd Zdd ZdS )CacheModificationc             C   s
   || _ |S )N)rs   )r=   rM   r  r6   r6   r7   r    s    zCacheModification._bar_validatec             C   s
   || _ |S )N)rp   )r=   rM   r  r6   r6   r7   _foo_validate  s    zCacheModification._foo_validateN)r@   rA   rB   r   rs   rp   r  r  r6   r6   r6   r7   r    s   r  c               C   s   t dd t dd d S )Nr   )rs   )rp   )r  r6   r6   r6   r7   test_cache_modification  s    
r  c                   sr   e Zd Ze Ze Ze Ze Ze Z	e Z
e Ze Ze Ze Ze Ze Ze Zdd Z fddZ  ZS )OrderTraitsc                s    fdddD  j |< dS )zcheck the value of all traits when each trait change is triggered
        
        This verifies that the values are not sensitive
        to dict ordering when loaded from kwargs
        c                s   i | ]}t  ||qS r6   )getattr).0rc   )r=   r6   r7   
<dictcomp>  s   z'OrderTraits._notify.<locals>.<dictcomp>abcdefghijklN)notified)r=   r/   r0   r1   r6   )r=   r7   _notify  s    
zOrderTraits._notifyc                s"   |  | j tt| jf | d S )N)r   r  r   r  r   )r=   r   )r   r6   r7   r     s    zOrderTraits.__init__)r@   rA   rB   r   r  r   rD   rb   rc   r   er   r   hr   r   klr  r   r   r6   r6   )r   r7   r    s   r  c                 sP   dd dD  t  } | ji ks"tt f  }  fdddD }| j|ksLtd S )Nc             S   s   i | ]
}||qS r6   r6   )r  rc   r6   r6   r7   r    s    z+test_notification_order.<locals>.<dictcomp>r  c                s   i | ]
} |qS r6   r6   )r  rc   )r   r6   r7   r    s   )r  r  r  )rT   Znotificationsr6   )r   r7   test_notification_order   s    

r  c               @   s   e Zd ZedddZdS )ForwardDeclaredInstanceTraitForwardDeclaredBarT)r   N)r@   rA   rB   r(   rM   r6   r6   r6   r7   r    s   r  c               @   s   e Zd ZedddZdS )ForwardDeclaredTypeTraitr  T)r   N)r@   rA   rB   r'   rM   r6   r6   r6   r7   r    s   r  c               @   s   e Zd ZeedZdS ) ForwardDeclaredInstanceListTraitr  N)r@   rA   rB   r    r(   rM   r6   r6   r6   r7   r    s   r  c               @   s   e Zd ZeedZdS )ForwardDeclaredTypeListTraitr  N)r@   rA   rB   r    r'   rM   r6   r6   r6   r7   r    s   r  c               @   s   e Zd ZdS )r  N)r@   rA   rB   r6   r6   r6   r7   r  %  s   r  c               @   s   e Zd ZdS )ForwardDeclaredBarSubN)r@   rA   rB   r6   r6   r6   r7   r  (  s   r  c               @   s0   e Zd Ze ZdZde e gZddeegZ	dS ) TestForwardDeclaredInstanceTraitNrs   ri   )
r@   rA   rB   r  rT   r  r  r  r   r   r6   r6   r6   r7   r  1  s   r  c               @   s0   e Zd Ze ZdZdeegZdde e gZ	dS )TestForwardDeclaredTypeTraitNrs   ri   )
r@   rA   rB   r  rT   r  r  r  r   r   r6   r6   r6   r7   r  8  s   
r  c               @   sL   e Zd Ze Zdd Zg Ze e gg gZ	e e ddgdegdgdgZ
dS )TestForwardDeclaredInstanceListc             C   s   |  | j d jjt dS )z2Test that the instance klass is properly assigned.rM   N)r   rT   r   r[  r   r  )r=   r6   r6   r7   r\  C  s    z*TestForwardDeclaredInstanceList.test_klassri   Nr]  )r@   rA   rB   r  rT   r\  r  r  r  r   r   r6   r6   r6   r7   r  ?  s   

r  c               @   sD   e Zd Ze Zdd Zg Zeegg gZ	eedgde gdgdgZ
dS )TestForwardDeclaredTypeListc             C   s   |  | j d jjt dS )z2Test that the instance klass is properly assigned.rM   N)r   rT   r   r[  r   r  )r=   r6   r6   r7   r\  Z  s    z&TestForwardDeclaredTypeList.test_klassri   r]  N)r@   rA   rB   r  rT   r\  r  r  r  r   r   r6   r6   r6   r7   r  V  s   r  c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestDynamicTraitsc             C   s
   g | _ d S )N)r   )r=   r6   r6   r7   r   r  s    zTestDynamicTraits.setUpc             C   s   | j |||f d S )N)r   r   )r=   r/   r0   r1   r6   r6   r7   r   u  s    zTestDynamicTraits.notify1c             C   s  G dd dt }| }| t|d  | t|d  |jt d | t|d | t||f |jt d | t|d | t||f | |jj	|j	 | }| t|d  | t|d  |
| j d|_| t| jd d|_| t| jd d	|_| d
| jk d|_| d| jk | tt|dd | tt|dd g | _|j
| jdd d|_d|_| t| jd d S )Nc               @   s   e Zd ZdS )z,TestDynamicTraits.test_notify_all.<locals>.AN)r@   rA   rB   r6   r6   r6   r7   rE   z  s   rE   r]   y)r]   )r  r   g        rH   )r]   r   rH   g      $@)r  g        g      $@z
bad stringT)r   r^   g      4@)r   r   r   Z
add_traitsr   rQ   r   rI   r   r@   r   r   r]   r   r   r  rF   r   r   )r=   rE   rD   rb   r6   r6   r7   r   x  s<    z!TestDynamicTraits.test_notify_allN)r@   rA   rB   r   r   r   r6   r6   r6   r7   r  p  s   r  c           	   C   sh   G dd dt } |  }d|_|jdks*t|  }tt |j}W d Q R X | dd}|jdksdtd S )Nc               @   s   e Zd ZeddgZdS )ztest_enum_no_default.<locals>.CrD   rb   N)r@   rA   rB   r   r{   r6   r6   r6   r7   r`     s   r`   rD   rb   )r{   )r   r{   r  pytestZraisesr   )r`   rc   r{   r6   r6   r7   test_enum_no_default  s    
r  c              C   sn   G dd dt } | j dks"t| j dks4t| j dksFt| j dksXt| j dksjtd S )Nc               @   s0   e Zd ZedZeeZedZe	 Z
e ZdS )z"test_default_value_repr.<locals>.Cztraitlets.HasTraitsr   N)r@   rA   rB   r   r{   r   t2r   r  r    lisr   r   r6   r6   r6   r7   r`     s
   r`   z'traitlets.HasTraits'z'traitlets.traitlets.HasTraits'rx  z[]z{})r   r{   Zdefault_value_reprr  r  r  r  r   )r`   r6   r6   r7   test_default_value_repr  s    r  c               @   sr   e Zd Ze Zeddd ZdZedZ	eddd Z
eded	d
 ZdZedZededd ZdS )TransitionalClassr   c             C   s   t S )N)r  )r=   r6   r6   r7   
_d_default  s    zTransitionalClass._d_defaultFr   calls_superc             C   s   dS )NrK   r6   )r=   r6   r6   r7   _calls_super_default  s    z&TransitionalClass._calls_super_defaultc             C   s
   || _ d S )N)parent_super)r=   r>   r6   r6   r7   _calls_super_changed  s    z&TransitionalClass._calls_super_changed	overridesc             C   s
   || _ d S )N)parent_override)r=   r>   r6   r6   r7   _overrides_changed  s    z$TransitionalClass._overrides_changedN)r@   rA   rB   r	   r   r+   r  r  r   r  r  r*   r,   r  r  r  r  r6   r6   r6   r7   r    s   r  c                   s4   e Zd Zdd ZdZ fddZdZdd Z  ZS )SubClassc             C   s   t S )N)r  )r=   r6   r6   r7   r    s    zSubClass._d_defaultFc                s   d| _ tt| ||| d S )NT)subclass_superr   r  r  )r=   r/   r0   r1   )r   r6   r7   r    s    zSubClass._calls_super_changedc             C   s
   d| _ d S )NT)subclass_override)r=   r/   r0   r1   r6   r6   r7   r    s    zSubClass._overrides_changed)	r@   rA   rB   r  r  r  r  r  r   r6   r6   )r   r7   r    s
   r  c              C   sL   t  } d| _| jst| js td| _| js0t| jr:t| jt ksHtd S )Nr   )	r  r  r  r  r  r  r  r  r   )rT   r6   r6   r7   test_subclass_compat  s    



r  c               @   s&   e Zd ZdZe Zeddd ZdS )DefinesHandlerFr  c             C   s
   d| _ d S )NT)parent_called)r=   r>   r6   r6   r7   handler  s    zDefinesHandler.handlerN)r@   rA   rB   r  r   r  r*   r  r6   r6   r6   r7   r    s   r  c               @   s    e Zd ZdZeddd ZdS )OverridesHandlerFr  c             C   s
   d| _ d S )NT)child_called)r=   r>   r6   r6   r7   r  	  s    zOverridesHandler.handlerN)r@   rA   rB   r  r*   r  r6   r6   r6   r7   r  	  s   r  c              C   s$   t  } d| _| jst| jr td S )Nr   )r  r  r  r  r  )rT   r6   r6   r7   test_subclass_override_observer	  s    
r  c               @   s   e Zd ZdZdd ZdS )DoesntRegisterHandlerFc             C   s
   d| _ d S )NT)r  )r=   r>   r6   r6   r7   r  	  s    zDoesntRegisterHandler.handlerN)r@   rA   rB   r  r  r6   r6   r6   r7   r  	  s   r  c              C   s$   t  } d| _| jrt| jr tdS )zISubclass that overrides observer and doesn't re-register unregisters bothr   N)r  r  r  r  r  )rT   r6   r6   r7   %test_subclass_override_not_registered	  s    
r  c               @   s    e Zd ZdZeddd ZdS )AddsHandlerFr  c             C   s
   d| _ d S )NT)r  )r=   r>   r6   r6   r7   child_handler$	  s    zAddsHandler.child_handlerN)r@   rA   rB   r  r*   r  r6   r6   r6   r7   r  !	  s   r  c              C   s$   t  } d| _| jst| js td S )Nr   )r  r  r  r  r  )rT   r6   r6   r7   test_subclass_add_observer(	  s    
r  c                 s  G dd dt } |  }i   fdd}|j|ddhd d|_ d	 jdksPt d	 jdksbtd
|_ d	 jdkszt d	 jd
kstG dd dt}|j||ddhd d|_ d	 jdkst d	 jdkstd|_ d	 jdkst d	 jdkstd S )Nc               @   s   e Zd Ze Ze ZdS )z!test_observe_iterables.<locals>.CN)r@   rA   rB   r   r   r   sr6   r6   r6   r7   r`   1	  s   r`   c                s   |  d< d S )Nr>   r6   )r>   )recordedr6   r7   record7	  s    z&test_observe_iterables.<locals>.recordr   r  )namesr   r>   hic               @   s$   e Zd Zdd Zdd Zdd ZdS )z+test_observe_iterables.<locals>.MyContainerc             S   s
   || _ d S )N)	container)r=   r  r6   r6   r7   r   E	  s    z4test_observe_iterables.<locals>.MyContainer.__init__c             S   s
   t | jS )N)iterr  )r=   r6   r6   r7   __iter__H	  s    z4test_observe_iterables.<locals>.MyContainer.__iter__c             S   s
   || j kS )N)r  )r=   rw   r6   r6   r7   __contains__K	  s    z8test_observe_iterables.<locals>.MyContainer.__contains__N)r@   rA   rB   r   r  r  r6   r6   r6   r7   MyContainerD	  s   r  rH   ok)r   r*   r   r/   r  r1   r  r   )r`   rc   r  r  r6   )r  r7   test_observe_iterables/	  s&    
r  c              C   s   G dd dt } G dd dt| }|ddddd	d
}|jdksBtt|drPtt|dr^t|jdkslt|jdd	dkstd S )Nc               @   s   e Zd Zdd ZdS )z&test_super_args.<locals>.SuperRecorderc             _   s   || _ || _d S )N)
super_argssuper_kwargs)r=   r   r   r6   r6   r7   r   Y	  s    z/test_super_args.<locals>.SuperRecorder.__init__N)r@   rA   rB   r   r6   r6   r6   r7   SuperRecorderX	  s   r  c               @   s   e Zd Ze ZdS )z'test_super_args.<locals>.SuperHasTraitsN)r@   rA   rB   r   r   r6   r6   r6   r7   SuperHasTraits]	  s   r  a1a2rH   r   r]   )rb   r   rc   rb   rc   )r  r  )rb   rc   )r   r   r   r  r   r  r  )r  r  rT   r6   r6   r7   test_super_argsW	  s    r  c           	   C   sh   G dd dt } tjdk r"dg}ndg}t| | ddd}W d Q R X |jdksVtt|d	rdtd S )
Nc               @   s   e Zd Ze ZdS )z+test_super_bad_args.<locals>.SuperHasTraitsN)r@   rA   rB   r   rD   r6   r6   r6   r7   r  h	  s   r  )ri   zobject.__init__zPassing unrecoginized argumentsr   rg   )rD   rb   rb   )r   r  rK  r   rD   r  r   )r  wrT   r6   r6   r7   test_super_bad_argsg	  s    

r  )r  r  rq  r  	_warningsr   Zunittestr   r  r   Z	traitletsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r  r8   r9   rC   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r  r  r  r   r!  r$  r%  r)  r*  r+  r-  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rB  rD  rF  rH  rL  rM  rO  rP  rS  rT  r   rq   rW  rX  rY  rZ  r^  r_  ra  rc  rd  re  ri  rj  rk  rl  ro  rp  rt  ru  rv  rw  ry  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  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r6   r6   r6   r7   <module>   s  		 D* E Gaz^:2						6eW-
 
	5	(