a
    7a-                    @   s  d Z ddlZddl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,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6 dd	 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#eBZDG d$d% d%e	ZEG d&d' d'eBZFG d(d) d)e	ZGG d*d+ d+eBZHG d,d- d-e	ZIG d.d/ d/eBZJG d0d1 d1e	ZKG d2d3 d3eBZLG d4d5 d5e	ZMG d6d7 d7eBZNG d8d9 d9e	ZOG d:d; d;eNZPG d<d= d=e	ZQG d>d? d?eBZRG d@dA dAe	ZSG dBdC dCeBZTG dDdE dEe	ZUG dFdG dGeBZVG dHdI dIe	ZWG dJdK dKeBZXG dLdM dMe	ZYG dNdO dOeXZZG dPdQ dQe	Z[G dRdS dSeRZ\G dTdU dUe	Z]G dVdW dWeBZ^G dXdY dYe	Z_G dZd[ d[eBZ`G d\d] d]e	ZaG d^d_ d_eBZbG d`da dae	ZcG dbdc dceBZdG ddde dee	ZeG dfdg dgeBZfG dhdi die	ZgG djdk dkeBZhG dldm dme	ZiG dndo doeBZjG dpdq dqe	ZkG drds dseBZlG dtdu due	ZmG dvdw dweBZnG dxdy dye	ZoG dzd{ d{eBZpG d|d} d}e	ZqG d~d deBZrG dd desZtG dd de	ZuG dd deBZvG dd de	ZwG dd deBZxG dd de	ZyG dd deBZzG dd de	Z{G dd deBZ|G dd de	Z}G dd deBZ~G dd de	ZG dd deBZG dd de	ZG dd deBZejde%e&e eeefdd Zejde%g fe&dfe e fei fedfedffdd Zejde%g fe&dfe e ffdd ZG dd de	ZG dd deBZG dd de	Zdd ZG dd de	ZG dd deBZG dd de	ZG dd deBZG dd de	ZG dd deBZG dd de	ZG dd deB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 desZG dd deZG dd deBZG dd deBZG dd deBZG dd deBZG dd deZdd Zdd ZG dd de	ZG dd deZdd ZG dd de	ZG dd deZdd ZG d d deZdd ZG dd de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 Zejdg ddd Zejdg dd d! Zejdg d"d#d$ Zejdg d"d%d& Zejdd'efd(d)d*efd+gd,d- Zejdd'efd.d/d0d+gd1d2 Zejdd'efd.d/d0d3d+gd4d5 Zejdd6d7d8d9d:d;d<efd+gd=d> Zejdd?i fd@efdAddBifdCdDdEifd'efd+gdFdG ZejddHg fdIg dJfd@d'gd@d'gfdKgdfgdLdM ZejdNg dOg dPe fd'gee fd@d'gd@d'ge fdKgdgedQdRfdKgdKgedSdRfgdTdU ZejddHe fdIh dVfdWh dVfd@d'gd@d'hfdKgdfgdXdY ZejdNg dOh dZe fd'gee fd@d'gd@d'he fdKgdhedQdRfgd[d\ Zejdd]d^d_d`d@d'gdafdKgdfgdbdc Zejddg dOdPe e e gfd'gee gfd@d'gdae gfdKgdeedSdRgfdKgdfedQdRgfgdgdh Zejddidjdkefdld+gdmdn Zejddodpdqefdrefd+gdsdt ZdS (u  zTests for traitlets.traitlets.    N)TestCase   )expected_warnings)-	HasTraitsMetaHasTraits	TraitTypeAnyBoolCBytesDictEnumIntCIntLongCLongIntegerFloatCFloatComplexBytesUnicode
TraitErrorUnionCallableAll	UndefinedSetTypeThisInstance
TCPAddressListr   Tuple
ObjectNameDottedObjectNameCRegExplinkdirectional_linkForwardDeclaredTypeForwardDeclaredInstancevalidateobservedefaultobserve_compatBaseDescriptorHasDescriptorsCUnicodecast_unicodec                  G   s   d}t t|| S )N)nameoldnewownertype)dictzip)Zordered_valuesZchange_names r:   =lib/python3.9/site-packages/traitlets/tests/test_traitlets.pychange_dictC   s    r<   c                   @   s   e Zd Zdd ZdS )HasTraitsStubc                 C   s,   |d | _ |d | _|d | _|d | _d S )Nr3   r4   r5   r7   )_notify_name_notify_old_notify_newZ_notify_typeselfchanger:   r:   r;   notify_changeN   s    


zHasTraitsStub.notify_changeN)__name__
__module____qualname__rD   r:   r:   r:   r;   r=   L   s   r=   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)S )*TestTraitTypec                 C   s(   G dd dt }| }|jtu s$J d S )Nc                   @   s   e Zd ZeZdS )z+TestTraitType.test_get_undefined.<locals>.ANrE   rF   rG   r   ar:   r:   r:   r;   A]   s   rK   )r   rJ   r   rB   rK   rJ   r:   r:   r;   test_get_undefined\   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>.ANrI   r:   r:   r:   r;   rK   c   s   rK   
   rJ   )r=   rJ   assertEqualr>   r?   r   r@   rL   r:   r:   r;   test_setb   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 Nr:   )rB   instvaluer:   r:   r;   r*   o   s    z2TestTraitType.test_validate.<locals>.MyTT.validateNrE   rF   rG   r*   r:   r:   r:   r;   MyTTn   s   rV   c                       s   e Zd Z ZdS )z&TestTraitType.test_validate.<locals>.ANrE   rF   rG   ttr:   rV   r:   r;   rK   q   s   rK   rN   rR   )r   r=   rX   rO   rL   r:   rY   r;   test_validatem   s
    zTestTraitType.test_validatec                    sb   G dd dt  G  fdddt}| }| |jd G  fdddt}| tt| d 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)rB   objrT   r:   r:   r;   r*   z   s    
z=TestTraitType.test_default_validate.<locals>.MyIntTT.validateNrU   r:   r:   r:   r;   MyIntTTy   s   r`   c                       s   e Zd Z dZdS )z.TestTraitType.test_default_validate.<locals>.ArN   NrW   r:   r`   r:   r;   rK   ~   s   rK   rN   c                       s   e Zd Z dZdS )z.TestTraitType.test_default_validate.<locals>.Bbad defaultNrW   r:   ra   r:   r;   B   s   rc   rX   )r   r   rO   rX   assertRaisesr   getattr)rB   rK   rJ   rc   r:   ra   r;   test_default_validatex   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rE   rF   rG   r   rX   r:   r:   r:   r;   rK      s   rK   z	any value)r   rO   rX   inforL   r:   r:   r;   	test_info   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>.ANrg   r:   r:   r:   r;   rK      s   rK   rN   )r   rd   r   rX   r^   rL   r:   r:   r;   
test_error   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>.ArN   c                 S   s   dS N   r:   rB   r:   r:   r;   
_x_default   s    zGTestTraitType.test_deprecated_dynamic_initializer.<locals>.A._x_defaultN)rE   rF   rG   r   xrn   r:   r:   r:   r;   rK      s   rK   c                   @   s   e Zd ZedZdS )z<TestTraitType.test_deprecated_dynamic_initializer.<locals>.B   NrE   rF   rG   r   ro   r:   r:   r:   r;   rc      s   rc   c                   @   s   e Zd Zdd ZdS )z<TestTraitType.test_deprecated_dynamic_initializer.<locals>.Cc                 S   s   dS N   r:   rm   r:   r:   r;   rn      s    zGTestTraitType.test_deprecated_dynamic_initializer.<locals>.C._x_defaultN)rE   rF   rG   rn   r:   r:   r:   r;   C   s   rt   rl   ro   rp   rs   r   rO   Z_trait_valuesro   rB   rK   rc   rt   rJ   bcr:   r:   r;   #test_deprecated_dynamic_initializer   s&    z1TestTraitType.test_deprecated_dynamic_initializerc                 C   s   t g , G dd dt}| }d|_W d    n1 s:0    Y  |jdksRJ t ddg,}G dd dt}| }d|_W d    n1 s0    Y  |jdksJ d S )Nc                   @   sB   e Zd Ze Zeddd Zeddd Ze	ddd Z
dS )	zCTestTraitType.test_deprecated_method_warnings.<locals>.ShouldntWarnro   c                 S   s   dS NrN   r:   rm   r:   r:   r;   rn      s    zNTestTraitType.test_deprecated_method_warnings.<locals>.ShouldntWarn._x_defaultc                 S   s   |j S r[   rT   rB   proposalr:   r:   r;   _x_validate   s    zOTestTraitType.test_deprecated_method_warnings.<locals>.ShouldntWarn._x_validatec                 S   s   d S r[   r:   rA   r:   r:   r;   
_x_changed   s    zNTestTraitType.test_deprecated_method_warnings.<locals>.ShouldntWarn._x_changedN)rE   rF   rG   r   ro   r,   rn   r*   r~   r+   r   r:   r:   r:   r;   ShouldntWarn   s   

r      z	@validatez@observec                   @   s*   e Zd Ze Zdd Zdd Zdd ZdS )zATestTraitType.test_deprecated_method_warnings.<locals>.ShouldWarnc                 S   s   dS rz   r:   rm   r:   r:   r;   rn      s    zLTestTraitType.test_deprecated_method_warnings.<locals>.ShouldWarn._x_defaultc                 S   s   |S r[   r:   )rB   rT   _r:   r:   r;   r~      s    zMTestTraitType.test_deprecated_method_warnings.<locals>.ShouldWarn._x_validatec                 S   s   d S r[   r:   rm   r:   r:   r;   r      s    zLTestTraitType.test_deprecated_method_warnings.<locals>.ShouldWarn._x_changedN)rE   rF   rG   r   ro   rn   r~   r   r:   r:   r:   r;   
ShouldWarn   s   r   )r   r   ro   )rB   r   r_   wr   r:   r:   r;   test_deprecated_method_warnings   s    
$$z-TestTraitType.test_deprecated_method_warningsc                 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>.ArN   ro   c                 S   s   dS rk   r:   rm   r:   r:   r;   
_default_x   s    z<TestTraitType.test_dynamic_initializer.<locals>.A._default_xN)rE   rF   rG   r   ro   r,   r   r:   r:   r:   r;   rK      s   rK   c                   @   s   e Zd ZedZdS )z1TestTraitType.test_dynamic_initializer.<locals>.Brp   Nrq   r:   r:   r:   r;   rc      s   rc   c                   @   s   e Zd Zeddd ZdS )z1TestTraitType.test_dynamic_initializer.<locals>.Cro   c                 S   s   dS rr   r:   rm   r:   r:   r;   r      s    z<TestTraitType.test_dynamic_initializer.<locals>.C._default_xN)rE   rF   rG   r,   r   r:   r:   r:   r;   rt      s   rt   rl   ro   rp   rs   ru   rv   r:   r:   r;   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      rJ   rw   NrE   rF   rG   metadatar:   r:   r:   r;   r`      s   r`   rN         rw   rx   r   )rJ   rw   rx   )r   tagrO   r   )rB   r`   rJ   r:   r:   r;   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   r   r   Nr   r:   r:   r:   r;   r`     s   r`   rN   r   rx   )r   r   ZassertNotIn)rB   r`   rJ   rw   r:   r:   r;    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   )tar   rw   )r   tirJ   )r   N)rE   rF   rG   r   r   r   barr:   r:   r:   r;   Foo  s   r   r   r   r   rJ   r   rw   r   )r   rO   trait_metadatar   rB   r   foor:   r:   r;   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rE   rF   rG   r   r   r   r   r:   r:   r:   r;   r     s   r   r   r   rO   r   r   r:   r:   r;   test_union_default_value  s    z&TestTraitType.test_union_default_valuec                 C   s.   G dd dt }| }d|_| |jd d S )Nc                   @   s   e Zd Zee e gZdS )z9TestTraitType.test_union_validation_priority.<locals>.FooN)rE   rF   rG   r   r   r   r   r:   r:   r:   r;   r   $  s   r   1r   )r   r   rO   r   r:   r:   r;   test_union_validation_priority#  s    z,TestTraitType.test_union_validation_priorityc                 C   s$   G dd dt }| | ji  d S )Nc                   @   s   e Zd Zee e gZdS )z9TestTraitType.test_union_trait_default_value.<locals>.FooNr   r:   r:   r:   r;   r   ,  s   r   r   )rB   r   r:   r:   r;   test_union_trait_default_value+  s    z,TestTraitType.test_union_trait_default_valuec                 C   s   G dd dt }|d}tdgd & |dd |d}W d    n1 sR0    Y  | |d tdgd & |d	d
 |d	}W d    n1 s0    Y  | |d
 d S )Nc                   @   s   e Zd ZdddZdS )z>TestTraitType.test_deprecated_metadata_access.<locals>.MyIntTTr   r   r   Nr   r:   r:   r:   r;   r`   1  s   r`   rN   z.use the instance .metadata dictionary directlyr   keyrT   z&use the instance .help string directlyhelpz	some help)r   r   Zset_metadataZget_metadatarO   )rB   r`   rJ   vr:   r:   r;   test_deprecated_metadata_access0  s    ((z-TestTraitType.test_deprecated_metadata_accessc                 C   s>   t dg  G dd dt}W d    n1 s00    Y  d S )N#Traits should be given as instancesc                   @   s   e Zd ZeZdS )z4TestTraitType.test_trait_types_deprecated.<locals>.CN)rE   rF   rG   r   tr:   r:   r:   r;   rt   ?  s   rt   r   r   rB   rt   r:   r:   r;   test_trait_types_deprecated=  s    z)TestTraitType.test_trait_types_deprecatedc                 C   s>   t dg  G dd dt}W d    n1 s00    Y  d S )Nr   c                   @   s   e Zd ZeeZdS )z9TestTraitType.test_trait_types_list_deprecated.<locals>.CN)rE   rF   rG   r!   r   r   r:   r:   r:   r;   rt   D  s   rt   r   r   r:   r:   r;    test_trait_types_list_deprecatedB  s    z.TestTraitType.test_trait_types_list_deprecatedc                 C   s>   t dg  G dd dt}W d    n1 s00    Y  d S )Nr   c                   @   s   e Zd ZeeZdS )z:TestTraitType.test_trait_types_tuple_deprecated.<locals>.CN)rE   rF   rG   r"   r   r   r:   r:   r:   r;   rt   I  s   rt   r   r   r:   r:   r;   !test_trait_types_tuple_deprecatedG  s    z/TestTraitType.test_trait_types_tuple_deprecatedc                 C   s>   t dg  G dd dt}W d    n1 s00    Y  d S )Nr   c                   @   s   e Zd ZeeZdS )z9TestTraitType.test_trait_types_dict_deprecated.<locals>.CN)rE   rF   rG   r   r   r   r:   r:   r:   r;   rt   N  s   rt   r   r   r:   r:   r;    test_trait_types_dict_deprecatedL  s    z.TestTraitType.test_trait_types_dict_deprecatedN)rE   rF   rG   rM   rP   rZ   rf   ri   rj   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r:   r:   r:   r;   rH   Z   s(   (%	rH   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rE   rF   rG   r   rJ   r:   r:   r:   r;   rK   V  s   rK   r   rN   c                   @   s   e Zd Ze ZdS )z0TestHasDescriptorsMeta.test_metaclass.<locals>.BN)rE   rF   rG   r   rw   r:   r:   r:   r;   rc   _  s   rc   c                   @   s   e Zd ZedZdS )z0TestHasDescriptorsMeta.test_metaclass.<locals>.C   N)rE   rF   rG   r   rx   r:   r:   r:   r;   rt   g  s   rt   r   )rO   r7   r   r   	__class__rJ   rw   rx   )rB   rK   rJ   rc   rw   rt   rx   r:   r:   r;   test_metaclassS  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)rE   rF   rG   r   r   rX   r:   r:   r:   r;   rK   p  s   rK   c                   @   s   e Zd Ze Ze ZdS )z1TestHasDescriptorsMeta.test_this_class.<locals>.BN)rE   rF   rG   r   rX   tttr:   r:   r:   r;   rc   s  s   rc   )r   rO   r   Z
this_classrX   r   )rB   rK   rc   r:   r:   r;   test_this_classo  s    z&TestHasDescriptorsMeta.test_this_classN)rE   rF   rG   r   r   r:   r:   r:   r;   r   Q  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 r[   r   )rB   rS   r   r:   r:   r;   instance_init  s    zKTestHasDescriptors.test_setup_instance.<locals>.FooDescriptor.instance_initN)rE   rF   rG   r   r:   r:   r:   r;   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|i | d S )Nr   )getr   supersetup_instancerB   argskwargs)HasFooDescriptorsr   r:   r;   r     s    zPTestHasDescriptors.test_setup_instance.<locals>.HasFooDescriptors.setup_instance)rE   rF   rG   fdr   __classcell__r:   r   r   r   r;   r     s   r   r   r   )r.   r/   )rB   Zhfdr:   r   r;   test_setup_instance}  s    z&TestHasDescriptors.test_setup_instanceN)rE   rF   rG   r   r:   r:   r:   r;   r   {  s   r   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )TestHasTraitsNotifyc                 C   s   g | _ g | _d S r[   _notify1_notify2rm   r:   r:   r;   setUp  s    zTestHasTraitsNotify.setUpc                 C   s   | j |||f d S r[   r   appendrB   r3   r4   r5   r:   r:   r;   notify1  s    zTestHasTraitsNotify.notify1c                 C   s   | j |||f d S r[   r   r   r   r:   r:   r;   notify2  s    zTestHasTraitsNotify.notify2c                 C   s   G dd dt }| }|| j d|_| t| jd d|_| t| jd d|_| d| jv  d|_| d| jv  | 	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rE   rF   rG   r   rJ   r   rw   r:   r:   r:   r;   rK     s   rK   r           rN   rJ   r   rN         $@rw   r   r   rJ   
bad stringrw   Tremoverp         4@)r   on_trait_changer   rJ   rO   lenr   rw   
assertTruerd   r   setattrrL   r:   r:   r;   test_notify_all  s$    z#TestHasTraitsNotify.test_notify_allc                 C   sh   G dd dt }| }|| jd d|_| t| jd d|_| d| jv  | t	t
|dd d S )Nc                   @   s   e Zd Ze Ze ZdS )z.TestHasTraitsNotify.test_notify_one.<locals>.ANr   r:   r:   r:   r;   rK     s   rK   rJ   r   rN   r   r   )r   r   r   rJ   rO   r   r   r   rd   r   r   rL   r:   r:   r;   test_notify_one  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>.ANr   r:   r:   r:   r;   rK     s   rK   c                   @   s   e Zd Ze ZdS )z,TestHasTraitsNotify.test_subclass.<locals>.BNrE   rF   rG   r   rw   r:   r:   r:   r;   rc     s   rc   r   r   d         Y@r   rO   rJ   rw   rB   rK   rc   rw   r:   r:   r;   test_subclass  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v  | 
d| j	v  d S )Nc                   @   s   e Zd Ze ZdS )z3TestHasTraitsNotify.test_notify_subclass.<locals>.ANr   r:   r:   r:   r;   rK     s   rK   c                   @   s   e Zd Ze ZdS )z3TestHasTraitsNotify.test_notify_subclass.<locals>.BNr   r:   r:   r:   r;   rc     s   rc   rJ   rw   r   r   rN   r   r   r   )r   r   r   r   rJ   rw   rO   r   r   r   r   r   r:   r:   r;   test_notify_subclass  s    z(TestHasTraitsNotify.test_notify_subclassc                 C   s   G dd dt }| }d|_| t|jd d|_| d|jv  G dd d|}| }d|_d|_| d|jv  | d	|jv  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 r[   r   r   r:   r:   r;   
_a_changed  s    z<TestHasTraitsNotify.test_static_notify.<locals>.A._a_changedN)rE   rF   rG   r   rJ   r   r   r:   r:   r:   r;   rK     s   rK   r   rN   r   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 r[   r   r   r:   r:   r;   
_b_changed  s    z<TestHasTraitsNotify.test_static_notify.<locals>.B._b_changedN)rE   rF   rG   r   rw   r   r   r:   r:   r:   r;   rc     s   rc   r   r   )r   rJ   rO   r   r   r   rw   r   )rB   rK   rJ   rc   rw   r:   r:   r;   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 Nr:   cbr:   rm   r:   r;   	callback0  s    z7TestHasTraitsNotify.test_notify_args.<locals>.callback0c                    s   | f _ d S r[   r   )r3   rm   r:   r;   	callback1  s    z7TestHasTraitsNotify.test_notify_args.<locals>.callback1c                    s   | |f _ d S r[   r   )r3   r5   rm   r:   r;   	callback2  s    z7TestHasTraitsNotify.test_notify_args.<locals>.callback2c                    s   | ||f _ d S r[   r   r3   r4   r5   rm   r:   r;   	callback3  s    z7TestHasTraitsNotify.test_notify_args.<locals>.callback3c                    s   | |||f _ d S r[   r   )r3   r4   r5   r_   rm   r:   r;   	callback4	  s    z7TestHasTraitsNotify.test_notify_args.<locals>.callback4c                   @   s   e Zd Ze ZdS )z/TestHasTraitsNotify.test_notify_args.<locals>.ANr   r:   r:   r:   r;   rK     s   rK   rJ   rN   r:   Tr   r   rJ     )rJ   r   '  )rJ   r   r   i rC   r   r   )r   r   rJ   rO   r   r   _trait_notifiers)rB   r   r   r   r   r   rK   rJ   r:   rm   r;   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>.ArJ   r   c                    s*   t  | jf i | | | jdg d S NrJ   )r   __init__r   	listener1rB   r   rK   r   r:   r;   r   4  s    z=TestHasTraitsNotify.test_notify_only_once.<locals>.A.__init__c                 S   s   |  j d7  _ d S Nr   rw   r   r:   r:   r;   r   8  s    z>TestHasTraitsNotify.test_notify_only_once.<locals>.A.listener1
rE   rF   rG   Z	listen_tor   rJ   rw   r   r   r   r:   rK   r   r;   rK   .  s
   rK   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 i | | | j d S r[   )r   r   r   	listener2r   rc   r   r:   r;   r   @  s    z=TestHasTraitsNotify.test_notify_only_once.<locals>.B.__init__c                 S   s   |  j d7  _ d S r   rx   r   r:   r:   r;   r   D  s    z>TestHasTraitsNotify.test_notify_only_once.<locals>.B.listener2c                 S   s   |  j d7  _ d S r   dr   r:   r:   r;   r   G  s    z?TestHasTraitsNotify.test_notify_only_once.<locals>.B._a_changed)	rE   rF   rG   rx   r  r   r   r   r   r:   rc   r   r;   rc   ;  s
   rc   r   r   rJ   rO   rw   rx   r  rB   rw   r:   rK   rc   r;   test_notify_only_once,  s    z)TestHasTraitsNotify.test_notify_only_onceNrE   rF   rG   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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 r[   r   rm   r:   r:   r;   r   T  s    zTestObserveDecorator.setUpc                 C   s   | j | d S r[   r   rA   r:   r:   r;   r   X  s    zTestObserveDecorator.notify1c                 C   s   | j | d S r[   r   rA   r:   r:   r;   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v  d|_td	dd|d}| 	|| jv  | 
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>.ANr   r:   r:   r:   r;   rK   `  s   rK   r   r   rN   rJ   rC   r   rw   r   rp   r   )r   r+   r   rJ   rO   r   r   rw   r<   r   rd   r   r   	unobserverB   rK   rJ   rC   r:   r:   r;   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v  | 	t
t|dd d S )Nc                   @   s   e Zd Ze Ze ZdS )z/TestObserveDecorator.test_notify_one.<locals>.ANr   r:   r:   r:   r;   rK   z  s   rK   rJ   r   rN   rC   r   )r   r+   r   rJ   rO   r   r   r<   r   rd   r   r   r  r:   r:   r;   r   x  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>.ANr   r:   r:   r:   r;   rK     s   rK   c                   @   s   e Zd Ze ZdS )z-TestObserveDecorator.test_subclass.<locals>.BNr   r:   r:   r:   r;   rc     s   rc   r   r   r   r   r   r   r:   r:   r;   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v  t
ddd
|d}| || j	v  d S )Nc                   @   s   e Zd Ze ZdS )z4TestObserveDecorator.test_notify_subclass.<locals>.ANr   r:   r:   r:   r;   rK     s   rK   c                   @   s   e Zd Ze ZdS )z4TestObserveDecorator.test_notify_subclass.<locals>.BNr   r:   r:   r:   r;   rc     s   rc   rJ   rw   r   r   rN   r   rC   )r   r+   r   r   rJ   rw   rO   r   r   r   r<   r   )rB   rK   rc   rw   rC   r:   r:   r;   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v  d|_| t|jd td	dd|d}| ||jv  G d
d d|}| }d|_d|_tddd|d}| ||jv  td	dd|d}| ||j	v  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>.ArJ   c                 S   s   | j | d S r[   r   rA   r:   r:   r;   r     s    z=TestObserveDecorator.test_static_notify.<locals>.A._a_changedc                 S   s   | j | d S r[   )_notify_anyr   rA   r:   r:   r;   _any_changed  s    z?TestObserveDecorator.test_static_notify.<locals>.A._any_changedN)rE   rF   rG   r   rJ   rw   r   r  r+   r   r   r  r:   r:   r:   r;   rK     s   
rK   r   rN   rJ   rC   r   r   rw   c                   @   s&   e Zd Ze Zg Zeddd ZdS )z2TestObserveDecorator.test_static_notify.<locals>.Brw   c                 S   s   | j | d S r[   r   rA   r:   r:   r;   r     s    z=TestObserveDecorator.test_static_notify.<locals>.B._b_changedN)rE   rF   rG   r   rw   r   r+   r   r:   r:   r:   r;   rc     s   rc   r   r   )
r   rJ   rO   r   r   r<   r   rw   r  r   )rB   rK   rJ   rC   rc   rw   r:   r:   r;   r     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 r   r   r:   rm   r:   r;   r     s    z8TestObserveDecorator.test_notify_args.<locals>.callback0c                    s
   |  _ d S r[   r   rC   rm   r:   r;   r     s    z8TestObserveDecorator.test_notify_args.<locals>.callback1c                   @   s   e Zd Ze ZdS )z0TestObserveDecorator.test_notify_args.<locals>.ANr   r:   r:   r:   r;   rK     s   rK   rJ   rN   r:   r   rC   r   r   )
r   r   rJ   rO   r   r  r+   r<   r   r   )rB   r   r   rK   rJ   rC   r:   rm   r;   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>.ArJ   r   c                    s*   t  | jf i | | | jdg d S r   )r   r   r+   r   r   r   r:   r;   r     s    z>TestObserveDecorator.test_notify_only_once.<locals>.A.__init__c                 S   s   |  j d7  _ d S r   r   rA   r:   r:   r;   r     s    z?TestObserveDecorator.test_notify_only_once.<locals>.A.listener1r   r:   r   r   r;   rK     s
   rK   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 i | | | j d S r[   )r   r   r+   r   r   r  r:   r;   r     s    z>TestObserveDecorator.test_notify_only_once.<locals>.B.__init__c                 S   s   |  j d7  _ d S r   r  rA   r:   r:   r;   r     s    z?TestObserveDecorator.test_notify_only_once.<locals>.B.listener2rJ   c                 S   s   |  j d7  _ d S r   r  rA   r:   r:   r;   r     s    z@TestObserveDecorator.test_notify_only_once.<locals>.B._a_changed)
rE   rF   rG   rx   r  r   r   r+   r   r   r:   r  r   r;   rc     s   rc   r   r  r  r:   r  r;   r	    s    z*TestObserveDecorator.test_notify_only_onceNr
  r:   r:   r:   r;   r  R  s   *r  c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zd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rE   rF   rG   r   ir   fr:   r:   r:   r;   rK     s   rK   r  r  g)r   rO   sortedZtrait_namesZclass_trait_namesr   Z	has_traitassertFalserL   r:   r:   r;   test_trait_names  s    zTestHasTraits.test_trait_namesc                 C   sf   G dd dt }| }| |d | |d d|_|j | |d | |d d S )Nc                   @   s   e Zd Ze Ze ZdS )z-TestHasTraits.test_trait_has_value.<locals>.ANr  r:   r:   r:   r;   rK   %  s   rK   r  r  r   r  )r   r  Ztrait_has_valuer  r  r   rL   r:   r:   r;   test_trait_has_value$  s    z"TestHasTraits.test_trait_has_valuec                 C   sX   t dg  G dd dt}W d    n1 s00    Y  | }| |ddd d S )N1metadata 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rE   rF   rG   r   r  r:   r:   r:   r;   rK   2  s   rK   r  r  r  )r   r   rO   r   rL   r:   r:   r;   test_trait_metadata_deprecated0  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)rE   rF   rG   r   r   r  r:   r:   r:   r;   rK   8  s   rK   r  r  r  r   rO   r   rL   r:   r:   r;   test_trait_metadata7  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>.ANr  r:   r:   r:   r;   rK   >  s   rK   r  r  r,   r   rL   r:   r:   r;   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>.ANr  r:   r:   r:   r;   rK   E  s   rK   )r  r  )r   rO   traitsr8   r  r  Zclass_traitsrL   r:   r:   r;   test_traitsD  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  Zother_thingVALUE3r   N)	rE   rF   rG   r   r   r  r   r  jr:   r:   r:   r;   rK   M  s   rK   r  r  r)  r%  r&  r'  r  c                 S   s   dS NTr:   r   r:   r:   r;   <lambda>X      z4TestHasTraits.test_traits_metadata.<locals>.<lambda>r  )r   rO   r#  r8   r  r  r)  rB   rK   rJ   r#  r:   r:   r;   test_traits_metadataL  s     z"TestHasTraits.test_traits_metadatac                 C   s   t dgd   G dd dt}W d    n1 s40    Y  | }| | t|j|j|jd |jddd}| |t|jd	 |jd
d d}| |t|j|j|jd d S )Nr  r   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   N)rE   rF   rG   r   r  r   r  r)  r:   r:   r:   r;   rK   ]  s   rK   r*  r%  r&  r'  r+  c                 S   s   dS r,  r:   r-  r:   r:   r;   r.  h  r/  z?TestHasTraits.test_traits_metadata_deprecated.<locals>.<lambda>r  )r   r   rO   r#  r8   r  r  r)  r0  r:   r:   r;   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)rE   rF   rG   r   r  r   ro   r:   r:   r:   r;   rK   m  s   rK   r   r   )r  ro   )r   rO   r  ro   rL   r:   r:   r;   	test_initl  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 r[   )r   r   r  )rB   r  r   r:   r;   r   w  s    z6TestHasTraits.test_positional_args.<locals>.A.__init__)rE   rF   rG   r   r  r   r   r:   r   r   r;   rK   u  s   rK   r   )r   rO   r  rd   	TypeError)rB   rJ   r:   r   r;   test_positional_argst  s    z"TestHasTraits.test_positional_argsN)rE   rF   rG   r  r  r  r!  r"  r$  r1  r2  r3  r5  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 )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rE   rF   rG   r:   r:   r:   r;   rc     r/  rc   c                   @   s   e Zd ZeddZdS )z TestType.test_default.<locals>.AT
allow_noneNrE   rF   rG   r   klassr:   r:   r:   r;   rK     s   rK   r;  rN   objectr   rO   r;  rd   r   r   )rB   rc   rK   rJ   r:   r:   r;   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>.BNr7  r:   r:   r:   r;   rc     r/  rc   c                   @   s   e Zd ZdS )z(TestType.test_default_options.<locals>.CNr7  r:   r:   r:   r;   rt     r/  rt   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>.ANTr8  r;  )r   r;  r9  )r   r;  )
rE   rF   rG   r   k1k2k3k4k5k6r:   rc   rt   r:   r;   rK     s   
rK   )r=  r   assertIsr@  r   r;  rA  rB  rC  rD  rE  rL   r:   rF  r;   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>.BNr7  r:   r:   r:   r;   rc     r/  rc   c                   @   s   e Zd ZdS )zTestType.test_value.<locals>.CNr7  r:   r:   r:   r;   rt     r/  rt   c                       s   e Zd Ze ZdS )zTestType.test_value.<locals>.ANr:  r:   r  r:   r;   rK     s   rK   r;  r<  rB   rt   rK   rJ   r:   r  r;   
test_value  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>.BNr7  r:   r:   r:   r;   rc     r/  rc   c                   @   s   e Zd ZdS )z#TestType.test_allow_none.<locals>.CNr7  r:   r:   r:   r;   rt     r/  rt   c                       s   e Zd Ze ZdS )z#TestType.test_allow_none.<locals>.ANr:  r:   r  r:   r;   rK     s   rK   r;  r<  rI  r:   r  r;   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 )'TestType.test_validate_klass.<locals>.Azno strings allowedNr:  r:   r:   r:   r;   rK     s   rK   c                   @   s   e Zd ZedZdS )rL  zrub.adub.DuckNr:  r:   r:   r:   r;   rK     s   )r   rd   ImportError)rB   rK   r:   r:   r;   test_validate_klass  s    zTestType.test_validate_klassc                    sZ   G dd dt  G  fdddt}| t| G  fdddt}| tt| d d S )Nc                   @   s   e Zd ZdS )z)TestType.test_validate_default.<locals>.BNr7  r:   r:   r:   r;   rc     r/  rc   c                       s   e Zd Zed ZdS )z)TestType.test_validate_default.<locals>.Arb   Nr:  r:   r  r:   r;   rK     s   rK   c                       s   e Zd Zed ZdS )z)TestType.test_validate_default.<locals>.CNr:  r:   r  r:   r;   rt     s   rt   r;  )r=  r   rd   rM  r   re   )rB   rK   rt   r:   r  r;   test_validate_default  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>.Atraitlets.config.ConfigNr:  r:   r:   r:   r;   rK     s   rK   r   Configr;  rN   )r   traitlets.configrR  r;  rO   rd   r   r   )rB   rK   rR  rJ   r:   r:   r;   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>.ANr:  r:   r:   r:   r;   rK     s   rK   rP  r?  r   rQ  )r   rS  rR  rO   r;  )rB   rK   rJ   rR  r:   r:   r;   test_set_str_klass  s    
zTestType.test_set_str_klassN)rE   rF   rG   r>  rH  rJ  rK  rN  rO  rT  rU  r:   r:   r:   r;   r6    s   #r6  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 u    |_| 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>.FooNr7  r:   r:   r:   r;   r     r/  r   c                   @   s   e Zd ZdS )z$TestInstance.test_basic.<locals>.BarNr7  r:   r:   r:   r;   Bar  r/  rW  c                   @   s   e Zd ZdS )z$TestInstance.test_basic.<locals>.BahNr7  r:   r:   r:   r;   Bah  r/  rX  c                       s   e Zd Ze ddZdS )z"TestInstance.test_basic.<locals>.ATr8  NrE   rF   rG   r   rS   r:   r   r:   r;   rK     s   rK   rS   )r=  r   r   rS   r\   rd   r   r   rB   rW  rX  rK   rJ   r:   rZ  r;   
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 u    |_| 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>.FooNr7  r:   r:   r:   r;   r     r/  r   c                   @   s   e Zd ZdS )z,TestInstance.test_default_klass.<locals>.BarNr7  r:   r:   r:   r;   rW    r/  rW  c                   @   s   e Zd ZdS )z,TestInstance.test_default_klass.<locals>.BahNr7  r:   r:   r:   r;   rX    r/  rX  c                       s   e Zd Z ZdS )z4TestInstance.test_default_klass.<locals>.FooInstanceN)rE   rF   rG   r;  r:   rZ  r:   r;   FooInstance  s   r]  c                       s   e Zd Z ddZdS )z*TestInstance.test_default_klass.<locals>.ATr8  N)rE   rF   rG   rS   r:   )r]  r:   r;   rK     s   rK   rS   )	r=  r   r   r   rS   r\   rd   r   r   r[  r:   )r   r]  r;   test_default_klass  s    zTestInstance.test_default_klassc                    sF   G dd dt  G  fdddt}| }| }| |j|ju d S )Nc                   @   s   e Zd ZdS )z3TestInstance.test_unique_default_value.<locals>.FooNr7  r:   r:   r:   r;   r   *  r/  r   c                       s   e Zd Ze di ZdS )z1TestInstance.test_unique_default_value.<locals>.Ar:   NrY  r:   rZ  r:   r;   rK   +  s   rK   )r=  r   r   rS   rB   rK   rJ   rw   r:   rZ  r;   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 u  d S )Nc                   @   s   e Zd Zdd ZdS )z&TestInstance.test_args_kw.<locals>.Fooc                 S   s
   || _ d S r[   r  )rB   rx   r:   r:   r;   r   4  r/  z/TestInstance.test_args_kw.<locals>.Foo.__init__NrE   rF   rG   r   r:   r:   r:   r;   r   3  s   r   c                   @   s   e Zd ZdS )z&TestInstance.test_args_kw.<locals>.BarNr7  r:   r:   r:   r;   rW  5  r/  rW  c                   @   s   e Zd Zdd ZdS )z&TestInstance.test_args_kw.<locals>.Bahc                 S   s   || _ || _d S r[   )rx   r  )rB   rx   r  r:   r:   r;   r   7  s    z/TestInstance.test_args_kw.<locals>.Bah.__init__Nra  r:   r:   r:   r;   rX  6  s   rX  c                       s   e Zd Ze dZdS )z$TestInstance.test_args_kw.<locals>.ArN   NrY  r:   rZ  r:   r;   rK   :  s   rK   rN   c                       s    e Zd Ze dedddZdS )z$TestInstance.test_args_kw.<locals>.Brb  rp   r  )r   kwN)rE   rF   rG   r   r8   rS   r:   )rX  r:   r;   rc   ?  s   rc   rp   c                       s   e Zd Ze ddZdS )z$TestInstance.test_args_kw.<locals>.CTr8  NrY  r:   rZ  r:   r;   rt   E  s   rt   )r=  r   rO   rS   rx   r  r   )rB   rW  rK   rJ   rc   rw   rt   rx   r:   )rX  r   r;   test_args_kw2  s    zTestInstance.test_args_kwc                    s^   G dd dt  G  fdddt}| }| t |j W d    n1 sP0    Y  d S )Nc                   @   s   e Zd ZdS )z*TestInstance.test_bad_default.<locals>.FooNr7  r:   r:   r:   r;   r   K  r/  r   c                       s   e Zd Ze ZdS )z(TestInstance.test_bad_default.<locals>.ANrY  r:   rZ  r:   r;   rK   M  s   rK   )r=  r   rd   r   rS   rL   r:   rZ  r;   test_bad_defaultJ  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>.FooNr7  r:   r:   r:   r;   r   U  r/  r   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>.ANrY  r:   rZ  r:   r;   rK   X  s   rK   r   r   rZ  r:   r;   innerW  s    z)TestInstance.test_instance.<locals>.inner)r=  rd   r   )rB   rg  r:   rZ  r;   test_instanceT  s    zTestInstance.test_instanceN)	rE   rF   rG   r\  r^  r`  rd  re  rh  r:   r:   r:   r;   rV     s   	
rV  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rE   rF   rG   r   thisr:   r:   r:   r;   r   a  s   r   rk  rN   )r   rO   rk  rd   r   r   )rB   r   r  r  r:   r:   r;   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>.FooNrj  r:   r:   r:   r;   r   l  s   r   )r   rk  r   r\   )rB   r   r  r:   r:   r;   test_this_instk  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rE   rF   rG   r   r   r:   r:   r:   r;   r   t  s   r   c                   @   s   e Zd ZdS )z#TestThis.test_subclass.<locals>.BarNr7  r:   r:   r:   r;   rW  v  s   rW  )r   r   rO   rB   r   rW  r  rw   r:   r:   r;   r   s  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>.FooNrm  r:   r:   r:   r;   r     s   r   c                   @   s   e Zd Ze ZdS )z,TestThis.test_subclass_override.<locals>.BarNrm  r:   r:   r:   r;   rW    s   rW  r   )r   r   rO   rd   r   r   rn  r:   r:   r;   test_subclass_override  s    zTestThis.test_subclass_overridec                 C   sd   G dd dt }|d|dd|ddgd}| t dd	g|_W d    n1 sV0    Y  d S )
Nc                   @   s   e Zd Ze Zee ZdS )z-TestThis.test_this_in_container.<locals>.TreeN)rE   rF   rG   r   rT   r!   r   leavesr:   r:   r:   r;   Tree  s   rq  r   r   r{   Zbuzz)rT   rp  r   r   )r   rd   r   rp  )rB   rq  Ztreer:   r:   r;   test_this_in_container  s    zTestThis.test_this_in_containerN)rE   rF   rG   r   rl  r   ro  rr  r:   r:   r:   r;   ri  ^  s
   ri  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 r[   )r_   rT   rB   rT   r:   r:   r;   assign  s    zTraitTestBase.assignc                 C   s   |S r[   r:   rt  r:   r:   r;   coerce  s    zTraitTestBase.coercec                 C   s:   t | dr6| jD ]$}| | | | jj| | qd S )N_good_values)hasattrrw  ru  rO   r_   rT   rv  rt  r:   r:   r;   test_good_values  s    


zTraitTestBase.test_good_valuesc              	   C   sN   t | drJ| jD ]8}z| t| j| W q tyF   dsBJ |Y q0 qd S )N_bad_valuesF)rx  rz  rd   r   ru  AssertionErrorrt  r:   r:   r;   test_bad_values  s    

zTraitTestBase.test_bad_valuesc                 C   s    t | dr| | j| jj d S N_default_value)rx  rO   r~  r_   rT   rm   r:   r:   r;   test_default_value  s    
z TraitTestBase.test_default_valuec              	   C   s   t | drt | drd | jv r| j d }zRd|_| jd  | d  | | jjd  | 	  | 
  W d|_| jd  nd|_| jd  0 d S )Nrz  rw  rT   TF)rx  rz  r_   r#  r9  r   ru  rO   rT   ry  r|  r   )rB   traitr:   r:   r;   rK    s    

zTraitTestBase.test_allow_nonec                 C   s   t | dr| j| j_d S r}  )rx  r~  r_   rT   rm   r:   r:   r;   tearDown  s    
zTraitTestBase.tearDownN)rE   rF   rG   __doc__ru  rv  ry  r|  r  rK  r  r:   r:   r:   r;   rs    s   rs  c                   @   s   e Zd Ze ZdS )AnyTraitN)rE   rF   rG   r   rT   r:   r:   r:   r;   r    s   r  c                   @   s2   e Zd Ze ZdZdddgddidddgZg ZdS )AnyTraitTestNr   tenrN   rb                ?)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd Zee e gZdS )
UnionTraitN)rE   rF   rG   r   r   r	   rT   r:   r:   r:   r;   r    s   r  c                   @   s*   e Zd ZeddZeedgZg ddgZdS )UnionTraitTestrP  r{   Tr   r  N)	rE   rF   rG   r  r_   r]   floatrw  rz  r:   r:   r:   r;   r    s   

r  c                   @   s   e Zd Ze ZdS )CallableTraitN)rE   rF   rG   r   rT   r:   r:   r:   r;   r    s   r  c                   @   s2   e Zd Zedd dZeedd gZg ddgZdS )CallableTraitTestc                 C   s   t | S r[   )r7   ro   r:   r:   r;   r.    r/  zCallableTraitTest.<lambda>r{   c                 C   s   t | S r[   )printr  r:   r:   r;   r.    r/  r    N)	rE   rF   rG   r  r_   r]   r  rw  rz  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd Ze e B ZdS )OrTraitN)rE   rF   rG   r	   r   rT   r:   r:   r:   r;   r    s   r  c                   @   s$   e Zd Ze Zg dZg ddgZdS )OrTraitTest)TFr  r  r  N)rE   rF   rG   r  r_   rw  rz  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZedddZdS )IntTraitc   iminNrE   rF   rG   r   rT   r:   r:   r:   r;   r    s   r  c                   @   sF   e Zd Ze ZdZddgZddgddiddddd	d
ddddddgZdS )TestIntr  rN   r  rb  Nr  333333$@333333$10L-10L10.1-10.110-10i8)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZedZdS )	CIntTrait5NrE   rF   rG   r   rT   r:   r:   r:   r;   r    s   r  c                   @   s>   e Zd Ze ZdZg dZddgddiddddgZd	d
 ZdS )TestCIntr   r  r  rN   r   g      $r  r  rN   rb  Nr  r  c                 C   s   t |S r[   r]   rB   nr:   r:   r;   rv    s    zTestCInt.coerce)	rE   rF   rG   r  r_   r~  rw  rz  rv  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZedddZdS )MinBoundCIntTraitr  r   r  Nr  r:   r:   r:   r;   r    s   r  c                   @   s&   e Zd Ze ZdZg dZg dZdS )TestMinBoundCIntr   )r   g      @3)g@r   g      N)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZedZdS )	LongTraitr  NrE   rF   rG   r   rT   r:   r:   r:   r;   r    s   r  c                   @   sD   e Zd Ze ZdZddgZddgddiddddd	d
dddddgZdS )TestLongr  rN   r  r  rb  Nr  r  r  r  r  r  r  r  r  )rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r     s   r  c                   @   s   e Zd ZedddZdS )MinBoundLongTraitr  r   r  Nr  r:   r:   r:   r;   r  +  s   r  c                   @   s&   e Zd Ze ZdZddgZddgZdS )TestMinBoundLongr  r   rN   r   r  N)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r  .  s   r  c                   @   s   e Zd ZedddZdS )MaxBoundLongTraitr   rN   maxNr  r:   r:   r:   r;   r  6  s   r  c                   @   s&   e Zd Ze ZdZddgZddgZdS )TestMaxBoundLongr   rN   rl   rp   N)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r  9  s   r  c                   @   s   e Zd ZedZdS )
CLongTraitr  NrE   rF   rG   r   rT   r:   r:   r:   r;   r  A  s   r  c                   @   s>   e Zd Ze ZdZg dZddgddiddddgZd	d
 ZdS )	TestCLongr   r  r  rN   rb  Nr  r  c                 C   s   t |S r[   r  r  r:   r:   r;   rv  L  s    zTestCLong.coerce)	rE   rF   rG   r  r_   r~  rw  rz  rv  r:   r:   r:   r;   r  D  s   r  c                   @   s   e Zd ZedddZdS )MaxBoundCLongTraitr  rN   r  Nr  r:   r:   r:   r;   r  P  s   r  c                   @   s&   e Zd Ze ZdZg dZddgZdS )TestMaxBoundCLongr   )rN   r  g$@g      &@Z11N)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r  S  s   r  c                   @   s   e Zd ZedZdS )IntegerTraitr   NrE   rF   rG   r   rT   r:   r:   r:   r;   r  [  s   r  c                   @   s   e Zd Ze ZdZdd ZdS )TestIntegerr   c                 C   s   t |S r[   r  r  r:   r:   r;   rv  b  s    zTestInteger.coerceN)rE   rF   rG   r  r_   r~  rv  r:   r:   r:   r;   r  ^  s   r  c                   @   s   e Zd ZedddZdS )MinBoundIntegerTraitr   r   r  Nr  r:   r:   r:   r;   r  f  s   r  c                   @   s"   e Zd Ze ZdZdZddgZdS )TestMinBoundIntegerr   )r   rp   r   r  N)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r  i  s   r  c                   @   s   e Zd ZedddZdS )MaxBoundIntegerTraitr   r   r  Nr  r:   r:   r:   r;   r  q  s   r  c                   @   s"   e Zd Ze ZdZdZddgZdS )TestMaxBoundIntegerr   )r   r  r   rN   N)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r  t  s   r  c                   @   s   e Zd ZedddZdS )
FloatTrait     X@      i@r  N)rE   rF   rG   r   rT   r:   r:   r:   r;   r  |  s   r  c                   @   sB   e Zd Ze ZdZg dZddgddiddddd	d
ddddgZdS )	TestFloatr  )rN   r  r  r  r  rN   rb  Nr  r  r  r  r  r  r  g      i@)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZedddZdS )CFloatTraitz99.0r  r  N)rE   rF   rG   r   rT   r:   r:   r:   r;   r    s   r  c                   @   s@   e Zd Ze ZdZg dZddgddiddddd	gZd
d ZdS )
TestCFloatr  )rN   r   g      %@z10.0r  r  r  rN   rb  Nr  g33333i@z200.1c                 C   s   t |S r[   )r  rB   r   r:   r:   r;   rv    s    zTestCFloat.coerce)	rE   rF   rG   r  r_   r~  rw  rz  rv  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZedZdS )ComplexTrait     X@     XN)rE   rF   rG   r   rT   r:   r:   r:   r;   r    s   r  c                   @   s6   e Zd Ze ZdZg dZddddgddiddgZdS )	TestComplexr  )
rN   r  r  r  y              $@y      $@      $@y      $@      $y        333333$@y333333$@333333$@y333333$@333333$r  r  r  rN   rb  N)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZedZdS )
BytesTrait   stringN)rE   rF   rG   r   rT   r:   r:   r:   r;   r    s   r  c                   @   s@   e Zd Ze ZdZg dZddddddgdgddid	d
dgZd
S )	TestBytesr  )s   10s   -10s   10Ls   -10Ls   10.1s   -10.1r  rN   r  r  r  r  r  rb  Nstring)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZedZdS )UnicodeTraitunicodeN)rE   rF   rG   r   rT   r:   r:   r:   r;   r    s   r  c                
   @   sF   e Zd Ze ZdZg dZddddddgdgddid	d
g
Zdd Zd
S )TestUnicoder  )
r  r  r  r  r  r  r  r     €s
   bytestringrN   r  r  r  r  r  rb  Nc                 C   s   t |S r[   r1   r  r:   r:   r;   rv    s    zTestUnicode.coerce)	rE   rF   rG   r  r_   r~  rw  rz  rv  r:   r:   r:   r;   r    s   
r  c                   @   s   e Zd ZedZdS )ObjectNameTraitabcN)rE   rF   rG   r#   rT   r:   r:   r:   r;   r    s   r  c                   @   sH   e Zd Ze ZdZg dZddddddd	d
ddde egZe	d dS )TestObjectNamer  )rJ   ZghZg9Zg_Z_GZa345_r   r  r  Z9g!z#abczaj@a.bza()za[0]N   þ)
rE   rF   rG   r  r_   r~  rw  r=  rz  r   r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZedZdS )DottedObjectNameTraitr  N)rE   rF   rG   r$   rT   r:   r:   r:   r;   r    s   r  c                   @   s0   e Zd Ze ZdZg dZg dZed dS )TestDottedObjectNamer  )rK   zy.tzy765.__repr__zos.path.join)r   u   abc.€z_.@.z.abczabc.z.abc.Nu   t.þN)	rE   rF   rG   r  r_   r~  rw  rz  r   r:   r:   r:   r;   r    s
   r  c                   @   s   e Zd Ze ZdS )TCPAddressTraitN)rE   rF   rG   r    rT   r:   r:   r:   r;   r    s   r  c                   @   s&   e Zd Ze ZdZg dZg dZdS )TestTCPAddress)	127.0.0.1r   ))	localhostr   )z192.168.0.1r   )zwww.google.comP   ))r   r   )r  r   )r  rR   NN)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd Zee ZdS )	ListTraitNrE   rF   rG   r!   r   rT   r:   r:   r:   r;   r    s   r  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   rN   r   r   rJ   c                 C   s   |d urt |}|S r[   listrt  r:   r:   r;   rv    s    zTestList.coerceN)rE   rF   rG   r  r_   r~  r  rangerw  rz  rv  r:   r:   r:   r;   r    s
   r  c                   @   s   e Zd ZdS )r   Nr7  r:   r:   r:   r;   r     s   r   c                   @   s   e Zd ZeeeZdS )NoneInstanceListTraitN)rE   rF   rG   r!   r   r   rT   r:   r:   r:   r;   r    s   r  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)	rE   rF   rG   r  r_   r~  r   rw  rz  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd Zeee d ZdS )InstanceListTraitz.FooN)rE   rF   rG   r!   r   rT   r:   r:   r:   r;   r    s   r  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.rT   N)rG  r_   r#  _traitr;  r   rm   r:   r:   r;   
test_klass  s    zTestInstanceList.test_klassr   r   N)
rE   rF   rG   r  r_   r  r~  r   rw  rz  r:   r:   r:   r;   r    s
   r  c                   @   s   e Zd Zee e B ZdS )UnionListTraitN)rE   rF   rG   r!   r   r	   rT   r:   r:   r:   r;   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)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r  (  s   r  c                   @   s    e Zd Zee dgdddZdS )LenListTraitr   r   r   )ZminlenmaxlenNr  r:   r:   r:   r;   r  1  s   r  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   r   r  rN   rJ   r   c                 C   s   |d urt |}|S r[   r  rt  r:   r:   r;   rv  =  s    zTestLenList.coerceN)rE   rF   rG   r  r_   r~  rw  r  r  rz  rv  r:   r:   r:   r;   r  5  s
   r  c                   @   s   e Zd ZeeddddZdS )
TupleTraitTr8  r   r   N)rE   rF   rG   r"   r   rT   r:   r:   r:   r;   r  B  s   r  c                   @   s:   e Zd Ze ZdZdddggZg dZdd Zdd Z	d	S )
TestTupleTraitr  r  r   )rN   r  rJ   r:   Nc                 C   s   |d urt |}|S r[   tuplert  r:   r:   r;   rv  N  s    zTestTupleTrait.coercec                 C   s4   |  ttd | j ttdd tt t dd}d S Nr   hellor   )r   r   rd   r4  r"   r   r
   rB   r   r:   r:   r;   test_invalid_argsS  s    z TestTupleTrait.test_invalid_argsN)
rE   rF   rG   r  r_   r~  rw  rz  rv  r   r:   r:   r:   r;   r  F  s   r  c                   @   s   e Zd ZedZdS )LooseTupleTraitr   r   r   N)rE   rF   rG   r"   rT   r:   r:   r:   r;   r  X  s   r  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 )TestLooseTupleTraitr  r  r   r  r   r  )rJ   r   r:   rN   Nc                 C   s   |d urt |}|S r[   r  rt  r:   r:   r;   rv  d  s    zTestLooseTupleTrait.coercec                 C   s4   |  ttd | j ttdd tt t dd}d S r  r  r  r:   r:   r;   r   i  s    z%TestLooseTupleTrait.test_invalid_args)rE   rF   rG   r  r_   r~  r  r  rw  rz  rv  r   r:   r:   r:   r;   r  \  s    r  c                   @   s"   e Zd Zee e ddgdZdS )MultiTupleTraitr     bottlesr   N)rE   rF   rG   r"   r   r   rT   r:   r:   r:   r;   r  o  s   r  c                   @   s"   e Zd Ze ZdZddgZdZdS )TestMultiTuple)r  r  )r      a)r      b)r:   rN   r  )r   r  r   )r  r   )r   rJ   N)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r  s  s   r  Traitc                    sD   G  fdddt }| }|jd u s(J |d d}|jd u s@J d S )Nc                       s   e Zd Z dddZdS )z(test_allow_none_default_value.<locals>.CNT)r   r9  rE   rF   rG   r   r:   r	  r:   r;   rt     s   rt   r   )r   r   )r	  rt   rx   r:   r  r;   test_allow_none_default_value|  s
    
r  zTrait, default_valuer:   r  c                    sB   G  fdddt }| }t|jt|u s0J |j|ks>J d S )Nc                       s   e Zd Z  ZdS )ztest_default_value.<locals>.CNr
  r:   r  r:   r;   rt     s   rt   r   r7   r   r	  r   rt   rx   r:   r  r;   r    s    r  c                    sR   G dd d|  G  fdddt }| }t|jt|u s@J |j|ksNJ dS )zITest deprecated default_value=None behavior for Container subclass traitsc                       s   e Zd Zd fdd	Z  ZS )z2test_subclass_default_value.<locals>.SubclassTraitNc                    s   t  j|d d S )Nr   )r   r   )rB   r   r   r:   r;   r     s    z;test_subclass_default_value.<locals>.SubclassTrait.__init__)N)rE   rF   rG   r   r   r:   r:   r   r;   SubclassTrait  s   r  c                       s   e Zd Z  ZdS )z&test_subclass_default_value.<locals>.CNr
  r:   r  r:   r;   rt     s   rt   Nr  r  r:   r  r;   test_subclass_default_value  s
    r  c                   @   s   e Zd ZedZdS )CRegExpTraitr  N)rE   rF   rG   r%   rT   r:   r:   r:   r;   r    s   r  c                   @   s:   e Zd Zdd Ze ZedZdedgZ	g dZ
dS )TestCRegExpc                 C   s
   t |S r[   )recompilert  r:   r:   r;   rv    s    zTestCRegExp.coercer  z\d+)(Nr:   N)rE   rF   rG   rv  r  r_   r  r  r~  rw  rz  r:   r:   r:   r;   r    s
   
r  c                   @   s   e Zd Ze ZdS )	DictTraitN)rE   rF   rG   r   rT   r:   r:   r:   r;   r    s   r  c                  C   s:   t  } t }| |_d| d< | |jks(J |j| u s6J d S )Nr   rJ   )r8   r  rT   )r  rx   r:   r:   r;   test_dict_assignment  s    r  c                   @   s   e Zd Zee ddidZdS ) UniformlyValueValidatedDictTraitr   r   )r  r   NrE   rF   rG   r   r   rT   r:   r:   r:   r;   r    s   r  c                   @   s2   e Zd Ze ZddiZdddgZdddgZdS )'TestInstanceUniformlyValueValidatedDictr   r   0r   r   r   N)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r    s   r  c                   @   s"   e Zd Zede iddidZdS )#NonuniformlyValueValidatedDictTraitr   r   )r#  r   N)rE   rF   rG   r   r   rT   r:   r:   r:   r;   r    s   
r  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 )*TestInstanceNonuniformlyValueValidatedDictr   r   r   r   r  r  N)rE   rF   rG   r  r_   r~  rw  rz  r:   r:   r:   r;   r     s   r   c                   @   s   e Zd Zee ddidZdS )KeyValidatedDictTraitr   r   )	key_traitr   Nr  r:   r:   r:   r;   r!    s   r!  c                   @   s2   e Zd Ze ZddiZdddgZdddgZdS )TestInstanceKeyValidatedDictr   r   r  r  r   r   N)rE   rF   rG   r!  r_   r~  rw  rz  r:   r:   r:   r;   r#    s   r#  c                   @   s*   e Zd Zee e de iddidZdS )FullyValidatedDictTraitr   r   )r  r"  r#  r   N)rE   rF   rG   r   r   r   rT   r:   r:   r:   r;   r%    s
   r%  c                   @   sJ   e Zd Ze ZddiZddddddgZdddddddddgZd	S )
TestInstanceFullyValidatedDictr   r   r   r   r  2r  r$  N)rE   rF   rG   r%  r_   r~  rw  rz  r:   r:   r:   r;   r&    s   r&  c                  C   sF   G dd dt } |  }|ji ks$J |ji ks2J |j|jusBJ 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)rE   rF   rG   r   d1d2r:   r:   r:   r;   r     s   r   N)r   r(  r)  )r   r   r:   r:   r;   test_dict_default_value  s
    r*  c                   @   s   e Zd Zdd Zdd ZdS )TestValidationHookc                 C   sb   G dd dt }| }d|_d|_| t d|_W d   n1 sH0    Y  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evenr   rT   c                 S   sD   |d }| j dkr"|d r"td| j dkr@|d dkr@td|S )NrT   r-  r   zExpected an even numberr,  r   zExpected an odd number)parityr   )rB   r}   rT   r:   r:   r;   _value_validate   s    zDTestValidationHook.test_parity_trait.<locals>.Parity._value_validateN)	rE   rF   rG   r   rT   r   r.  r*   r/  r:   r:   r:   r;   Parity  s   r0  r,  r   r   Nr-  )r   r.  rT   rd   r   )rB   r0  ur:   r:   r;   test_parity_trait  s    $z$TestValidationHook.test_parity_traitc                 C   s   G dd dt }| }d|_| t d|_W d   n1 sB0    Y  d|_| t d|_W d   n1 sx0    Y  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,  rT   r   zodd should be oddr-  zeven should be even)r3   r   r|   r:   r:   r;   check_valid:  s    zFTestValidationHook.test_multiple_validate.<locals>.OddEven.check_validN)rE   rF   rG   r   r,  r-  r*   r3  r:   r:   r:   r;   OddEven5  s   r4  r   r   N)r   r,  rd   r   r-  )rB   r4  r1  r:   r:   r;   test_multiple_validate2  s    $z)TestValidationHook.test_multiple_validateN)rE   rF   rG   r2  r5  r:   r:   r:   r;   r+    s   r+  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	d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>.ANr  r:   r:   r:   r;   rK   R  s   rK   	   r{      rT   r      Nr   r&   rO   rT   rB   rK   rJ   rw   rx   r:   r:   r;   test_connect_sameN  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 )JVerify 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>.ANr  r:   r:   r:   r;   rK   g  s   rK   c                   @   s   e Zd Ze ZdS )z'TestLink.test_link_different.<locals>.BNrE   rF   rG   r   countr:   r:   r:   r;   rc   i  s   rc   r7  r{   r8  r?  rT   r?  r   r   N)r   r&   rO   rT   r?  rB   rK   rc   rJ   rw   rx   r:   r:   r;   test_link_differentc  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 |  | |j|j | jd	7  _| |j|j d
S )9Verify two linked traitlets can be unlinked and relinked.c                   @   s   e Zd Ze ZdS )z$TestLink.test_unlink_link.<locals>.ANr  r:   r:   r:   r;   rK   ~  s   rK   r7  r{   r8  rT   r   r   r   N)r   r&   rT   unlinkassertNotEqualrO   r;  r:   r:   r;   test_unlink_linkz  s    

zTestLink.test_unlink_linkc                    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>.ANr  r:   r:   r:   r;   rK     s   rK   c                   @   s   e Zd Ze ZdS )z"TestLink.test_callbacks.<locals>.BNr>  r:   r:   r:   r;   rc     s   rc   r7  r{   r8  r@  c                    s     d d S r   r   r   Zcallback_countr:   r;   
a_callback  s    z+TestLink.test_callbacks.<locals>.a_callbackrT   c                    s     d d S )Nrw   rG  r   rH  r:   r;   
b_callback  s    z+TestLink.test_callbacks.<locals>.b_callbackr?  r  rw   Nr   Zbar   ab)r   r   r&   rO   joinr?  rT   )rB   rK   rc   rJ   rw   rI  rJ  rx   r:   rH  r;   test_callbacks  s$    



zTestLink.test_callbacksc                 C   s   G dd dt }|dd}|dd}t|df|dfdd d	d fd
}| |jd|j  d|_| |jd d|_| |jd dS )Test transform link.c                   @   s   e Zd Ze ZdS )z!TestLink.test_tranform.<locals>.ANr  r:   r:   r:   r;   rK     s   rK   r7  r{   r8  rT   c                 S   s   d|  S Nr   r:   r  r:   r:   r;   r.    r/  z(TestLink.test_tranform.<locals>.<lambda>c                 S   s   t | d S )Ng       @r  r  r:   r:   r;   r.    r/  )Z	transformr   r   rN   r9  r   Nr:  r;  r:   r:   r;   test_tranform  s    

zTestLink.test_tranformc                 C   s>   G dd dt }| }t|df|df}| tt|dd d S )Nc                   @   s(   e Zd Ze Ze Zeddd ZdS )z4TestLink.test_link_broken_at_source.<locals>.MyClassr)  c                 S   s   |j d | _d S rO  )r5   r  rA   r:   r:   r;   another_update  s    zCTestLink.test_link_broken_at_source.<locals>.MyClass.another_updateNrE   rF   rG   r   r  r)  r+   rQ  r:   r:   r:   r;   MyClass  s   rS  r  r)  r   r   r&   rd   r   r   rB   rS  Zmclr:   r:   r;   test_link_broken_at_source  s    z#TestLink.test_link_broken_at_sourcec                 C   s>   G dd dt }| }t|df|df}| tt|dd d S )Nc                   @   s(   e Zd Ze Ze Zeddd ZdS )z4TestLink.test_link_broken_at_target.<locals>.MyClassr  c                 S   s   |j d | _d S rO  )r5   r)  rA   r:   r:   r;   rQ    s    zCTestLink.test_link_broken_at_target.<locals>.MyClass.another_updateNrR  r:   r:   r:   r;   rS    s   rS  r  r)  r   rT  rU  r:   r:   r;   test_link_broken_at_target  s    z#TestLink.test_link_broken_at_targetN)
rE   rF   rG   r<  rB  rF  rM  rP  rW  rX  r:   r:   r:   r;   r6  L  s   %r6  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>.ANr  r:   r:   r:   r;   rK     s   rK   r7  r{   r8  rT   r   r9  Nr   r'   rO   rT   r;  r:   r:   r;   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 )rN  c                   @   s   e Zd Ze ZdS )z,TestDirectionalLink.test_tranform.<locals>.ANr  r:   r:   r:   r;   rK     s   rK   r7  r{   r8  rT   c                 S   s   d|  S rO  r:   r  r:   r:   r;   r.    r/  z3TestDirectionalLink.test_tranform.<locals>.<lambda>r   r   rN   r9  NrZ  r;  r:   r:   r;   rP    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 )r=  c                   @   s   e Zd Ze ZdS )z2TestDirectionalLink.test_link_different.<locals>.ANr  r:   r:   r:   r;   rK     s   rK   c                   @   s   e Zd Ze ZdS )z2TestDirectionalLink.test_link_different.<locals>.BNr>  r:   r:   r:   r;   rc     s   rc   r7  r{   r8  r@  rT   r?  r   r9  N)r   r'   rO   rT   r?  rA  r:   r:   r;   rB    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 |  | |j|j | jd	7  _| |j|j d
S )rC  c                   @   s   e Zd Ze ZdS )z/TestDirectionalLink.test_unlink_link.<locals>.ANr  r:   r:   r:   r;   rK   0  s   rK   r7  r{   r8  rT   r   r   r   N)r   r'   rT   rD  rE  r&   rO   r;  r:   r:   r;   rF  ,  s    

z$TestDirectionalLink.test_unlink_linkN)rE   rF   rG   r<  rP  rB  rF  r:   r:   r:   r;   rY    s   rY  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 r[   r:   rA   r:   r:   r;   
_i_changedE  s    zPickleable._i_changedc                 C   s   |d S )NrT   r:   )rB   Zcommitr:   r:   r;   _i_validateG  s    zPickleable._i_validatec                 C   s@   |    d| _W d    n1 s$0    Y  | | jd d S )Nr   r  )hold_trait_notificationsr  r   r\  rm   r:   r:   r;   r   M  s    
$zPickleable.__init__N)rE   rF   rG   r   r  r+   r\  r*   r]  r)  r   r:   r:   r:   r;   r[  B  s   

r[  c                  C   s   t  } ttjd D ]:}t| |}t|}|j| jks>J |j| jksJ qd| _ttjd D ]:}t| |}t|}|j| jksJ |j| jksdJ qdd S )Nr   r   )r[  r  pickleZHIGHEST_PROTOCOLdumpsloadsr  r)  )rx   ZprotocolpZc2r:   r:   r;   test_pickle_hastraitsR  s    

rc  c               	      s  g  G  fdddt } |  }|  | 0 d|_|jdksFJ  g ksRJ W d    n1 sf0    Y  d|_|jdksJ | P d|_|jdksJ  g ksJ d|_|jdksJ  g ksJ W d    n1 s0    Y  d|_|jdksJ  g ksJ W d    n1 s&0    Y   dgks@J z4|  d|_W d    n1 sh0    Y  W n   Y n0 |jdksJ 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 r[   rG  r   Zchangesr:   r;   r   i  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   rB   rT   r  r:   r:   r;   _b_validatel  s    z7test_hold_trait_notifications.<locals>.Test._b_validateN)rE   rF   rG   r   rJ   rw   r   rg  r:   rd  r:   r;   Teste  s   rh  r   r   r   r   )r   r   r   )r   r^  rJ   rw   )rh  r   r:   rd  r;   test_hold_trait_notificationsb  s6    

*
*.
*ri  c                   @   s   e Zd Ze Zdd ZdS )RollBackc                 C   s   |rt d|S )NZfoobarre  rf  r:   r:   r;   _bar_validate  s    zRollBack._bar_validateN)rE   rF   rG   r   r   rk  r:   r:   r:   r;   rj    s   rj  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   r   )rj  r:   r:   r:   r;   assign_rollback  s    z4TestRollback.test_roll_back.<locals>.assign_rollback)rd   r   )rB   rn  r:   r:   r;   test_roll_back  s    zTestRollback.test_roll_backN)rE   rF   rG   ro  r:   r:   r:   r;   rl    s   rl  c                   @   s(   e Zd Ze Ze Zdd Zdd ZdS )CacheModificationc                 C   s
   || _ |S r[   r   rf  r:   r:   r;   rk    s    zCacheModification._bar_validatec                 C   s
   || _ |S r[   rm  rf  r:   r:   r;   _foo_validate  s    zCacheModification._foo_validateN)rE   rF   rG   r   r   r   rk  rq  r:   r:   r:   r;   rp    s   rp  c                   C   s   t dd t dd d S )Nr   r   rm  )rp  r:   r:   r:   r;   test_cache_modification  s    
rr  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 r:   )re   .0rx   rm   r:   r;   
<dictcomp>  s   z'OrderTraits._notify.<locals>.<dictcomp>abcdefghijklN)notifiedr   r:   rm   r;   _notify  s    
zOrderTraits._notifyc                    s&   |  | j tt| jf i | d S r[   )r   ry  r   rs  r   r   r   r:   r;   r     s    zOrderTraits.__init__)rE   rF   rG   r   rx  r   rJ   rw   rx   r  er  r  hr  r)  krV  ry  r   r   r:   r:   r   r;   rs    s   rs  c                     sT   dd dD  t  } | ji ks"J t f i  }  fdddD }| j|ksPJ d S )Nc                 S   s   i | ]
}||qS r:   r:   rt  r:   r:   r;   rv    r/  z+test_notification_order.<locals>.<dictcomp>rw  c                    s   i | ]
}| qS r:   r:   rt  r  r:   r;   rv    s   )rs  rx  )r_   Znotificationsr:   r  r;   test_notification_order  s    
r}  c                   @   s   e Zd ZedddZdS )ForwardDeclaredInstanceTraitForwardDeclaredBarTr8  N)rE   rF   rG   r)   rT   r:   r:   r:   r;   r~    s   r~  c                   @   s   e Zd ZedddZdS )ForwardDeclaredTypeTraitr  Tr8  N)rE   rF   rG   r(   rT   r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZeedZdS ) ForwardDeclaredInstanceListTraitr  N)rE   rF   rG   r!   r)   rT   r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZeedZdS )ForwardDeclaredTypeListTraitr  N)rE   rF   rG   r!   r(   rT   r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZdS )r  Nr7  r:   r:   r:   r;   r    s   r  c                   @   s   e Zd ZdS )ForwardDeclaredBarSubNr7  r:   r:   r:   r;   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 ) TestForwardDeclaredInstanceTraitNr   r   )
rE   rF   rG   r~  r_   r~  r  r  rw  rz  r:   r:   r:   r;   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 )TestForwardDeclaredTypeTraitNr   r   )
rE   rF   rG   r  r_   r~  r  r  rw  rz  r:   r:   r:   r;   r  	  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 r  rG  r_   r#  r  r;  r  rm   r:   r:   r;   r  	  s    z*TestForwardDeclaredInstanceList.test_klassr   Nr   )rE   rF   rG   r  r_   r  r~  r  r  rw  rz  r:   r:   r:   r;   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 r  r  rm   r:   r:   r;   r  -	  s    z&TestForwardDeclaredTypeList.test_klassr   r   N)rE   rF   rG   r  r_   r  r~  r  r  rw  rz  r:   r:   r:   r;   r  )	  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 r[   )r   rm   r:   r:   r;   r   E	  s    zTestDynamicTraits.setUpc                 C   s   | j |||f d S r[   r   r   r:   r:   r;   r   H	  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v  d|_| d| jv  | 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>.ANr7  r:   r:   r:   r;   rK   M	  s   rK   ro   yr  )r  r   r   rN   )ro   r   rN   r   )r  r   r   r   Tr   rp   r   )r   r   rx  Z
add_traitsr   r\   r   rO   r   rE   r   r   ro   r   r   r  rd   r   r   r_  r:   r:   r;   r   K	  s<    z!TestDynamicTraits.test_notify_allN)rE   rF   rG   r   r   r   r:   r:   r:   r;   r  C	  s   r  c                  C   s|   G dd dt } |  }d|_|jdks*J |  }tt |j}W d    n1 sV0    Y  | dd}|jdksxJ d S )Nc                   @   s   e Zd ZeddgZdS )ztest_enum_no_default.<locals>.CrJ   rw   N)rE   rF   rG   r   r   r:   r:   r:   r;   rt   y	  s   rt   rJ   rw   r  )r   r   pytestraisesr   )rt   rx   r   r:   r:   r;   test_enum_no_defaultx	  s    $
r  c                  C   sn   G dd dt } | j dks"J | j dks4J | j dksFJ | j dksXJ | j dksjJ 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)rE   rF   rG   r   r   r   t2r   r  r!   lisr   r  r:   r:   r:   r;   rt   	  s
   rt   z'traitlets.HasTraits'z'traitlets.traitlets.HasTraits'r  []{})r   r   Zdefault_value_reprr  r  r  r  )rt   r:   r:   r;   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 r[   )r  rm   r:   r:   r;   
_d_default	  s    zTransitionalClass._d_defaultFr   calls_superc                 C   s   dS rQ   r:   rm   r:   r:   r;   _calls_super_default	  s    z&TransitionalClass._calls_super_defaultc                 C   s
   || _ d S r[   )parent_superrA   r:   r:   r;   _calls_super_changed	  s    z&TransitionalClass._calls_super_changed	overridesc                 C   s
   || _ d S r[   )parent_overriderA   r:   r:   r;   _overrides_changed	  s    z$TransitionalClass._overrides_changedN)rE   rF   rG   r   r  r,   r  r  r   r  r  r+   r-   r  r  r  r  r:   r:   r:   r;   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 r[   )r  rm   r:   r:   r;   r  	  s    zSubClass._d_defaultFc                    s   d| _ tt| ||| d S r,  )subclass_superr   r  r  r   r   r:   r;   r  	  s    zSubClass._calls_super_changedc                 C   s
   d| _ d S r,  )subclass_overrider   r:   r:   r;   r  	  s    zSubClass._overrides_changed)	rE   rF   rG   r  r  r  r  r  r   r:   r:   r   r;   r  	  s
   r  c                  C   sL   t  } d| _| jsJ | js J d| _| js0J | jr:J | jt u sHJ d S Nr   )r  r  r  r  r  r  r  r  r_   r:   r:   r;   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 r,  )parent_calledrA   r:   r:   r;   handler	  s    zDefinesHandler.handlerN)rE   rF   rG   r  r   r  r+   r  r:   r:   r:   r;   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 r,  child_calledrA   r:   r:   r;   r  	  s    zOverridesHandler.handlerN)rE   rF   rG   r  r+   r  r:   r:   r:   r;   r  	  s   r  c                  C   s$   t  } d| _| jsJ | jr J d S r  )r  r  r  r  r  r:   r:   r;   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 r,  r  rA   r:   r:   r;   r  	  s    zDoesntRegisterHandler.handlerN)rE   rF   rG   r  r  r:   r:   r:   r;   r  	  s   r  c                  C   s$   t  } d| _| jrJ | jr J dS )zISubclass that overrides observer and doesn't re-register unregisters bothr   N)r  r  r  r  r  r:   r:   r;   %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 r,  r  rA   r:   r:   r;   child_handler	  s    zAddsHandler.child_handlerN)rE   rF   rG   r  r+   r  r:   r:   r:   r;   r  	  s   r  c                  C   s$   t  } d| _| jsJ | js J d S r  )r  r  r  r  r  r:   r:   r;   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sPJ  d	 jdksbJ d
|_ d	 jdkszJ  d	 jd
ksJ G dd dt}|j||ddhd d|_ d	 jdksJ  d	 jdksJ d|_ d	 jdksJ  d	 jdksJ d S )Nc                   @   s   e Zd Ze Ze ZdS )z!test_observe_iterables.<locals>.CN)rE   rF   rG   r   r  r   sr:   r:   r:   r;   rt   
  s   rt   c                    s   |  d< d S )NrC   r:   r  Zrecordedr:   r;   record

  s    z&test_observe_iterables.<locals>.recordr  r  )namesr   rC   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 r[   	container)rB   r  r:   r:   r;   r   
  s    z4test_observe_iterables.<locals>.MyContainer.__init__c                 S   s
   t | jS r[   )iterr  rm   r:   r:   r;   __iter__
  s    z4test_observe_iterables.<locals>.MyContainer.__iter__c                 S   s
   || j v S r[   r  )rB   r   r:   r:   r;   __contains__
  s    z8test_observe_iterables.<locals>.MyContainer.__contains__N)rE   rF   rG   r   r  r  r:   r:   r:   r;   MyContainer
  s   r  rN   ok)r   r+   r  r3   r5   r  r=  )rt   rx   r  r  r:   r  r;   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sBJ t|drPJ t|dr^J |jdkslJ |jdd	dksJ d S )Nc                   @   s   e Zd Zdd ZdS )z&test_super_args.<locals>.SuperRecorderc                 _   s   || _ || _d S r[   )
super_argssuper_kwargsr   r:   r:   r;   r   ,
  s    z/test_super_args.<locals>.SuperRecorder.__init__Nra  r:   r:   r:   r;   SuperRecorder+
  s   r  c                   @   s   e Zd Ze ZdS )z'test_super_args.<locals>.SuperHasTraitsN)rE   rF   rG   r   r  r:   r:   r:   r;   SuperHasTraits0
  s   r  a1a2rN   r   ro   )rw   r  rx   rw   rx   )r  r  r   )r=  r   r  rx  r  r  )r  r  r_   r:   r:   r;   test_super_args*
  s    r  c                  C   sj   G dd dt } dg}t| | ddd}W d    n1 s@0    Y  |jdksXJ t|drfJ d S )Nc                   @   s   e Zd Ze ZdS )z+test_super_bad_args.<locals>.SuperHasTraitsN)rE   rF   rG   r   rJ   r:   r:   r:   r;   r  ;
  s   r  zPassing unrecognized argumentsr   r   r   rw   )r   r   rJ   rx  )r  r   r_   r:   r:   r;   test_super_bad_args:
  s    
*r  c                  C   s   G dd dt } G dd d| }G dd d| }G dd d||}G d	d
 d
||}| jdksdJ | jdkstJ | jdksJ | jdksJ | jdksJ | jdksJ dS )z%Verify that default values follow mroc                   @   s   e Zd ZedZdZdS )ztest_default_mro.<locals>.BasebaseNrE   rF   rG   r   r  attrr:   r:   r:   r;   BaseG
  s   r  c                   @   s   e Zd ZdS )ztest_default_mro.<locals>.ANr7  r:   r:   r:   r;   rK   K
  s   rK   c                   @   s   e Zd ZedZdZdS )ztest_default_mro.<locals>.Brc   Nr  r:   r:   r:   r;   rc   N
  s   rc   c                   @   s   e Zd ZdS )ztest_default_mro.<locals>.ABNr7  r:   r:   r:   r;   ABR
  s   r  c                   @   s   e Zd ZdS )ztest_default_mro.<locals>.BANr7  r:   r:   r:   r;   BAU
  s   r  r  N)r   r  r  )r  rK   rc   r  r  r:   r:   r;   test_default_mroE
  s    r  c                  C   s    G dd dt } | d d d}d S )Nc                   @   s   e Zd Zdd ZdS )z!test_cls_self_argument.<locals>.Xc                 S   s   d S r[   r:   )Z_X__selfclsrB   r:   r:   r;   r   b
  s    z*test_cls_self_argument.<locals>.X.__init__Nra  r:   r:   r:   r;   Xa
  s   r  )r  rB   rf  )r  ro   r:   r:   r;   test_cls_self_argument`
  s    r  c                  C   s2   G dd dt } dd | _|  }|jdks.J d S )Nc                   @   s   e Zd ZedZdd ZdS )z test_override_default.<locals>.Chard defaultc                 S   s   dS Nzdefault methodr:   rm   r:   r:   r;   
_a_defaultk
  s    z+test_override_default.<locals>.C._a_defaultN)rE   rF   rG   r   rJ   r  r:   r:   r:   r;   rt   i
  s   rt   c                 S   s   dS N
overriddenr:   rm   r:   r:   r;   r.  n
  r/  z'test_override_default.<locals>.<lambda>r  r   r  rJ   rt   rx   r:   r:   r;   test_override_defaulth
  s    
r  c                  C   s2   G dd dt } dd | _|  }|jdks.J d S )Nc                   @   s$   e Zd ZedZeddd ZdS )z*test_override_default_decorator.<locals>.Cr  rJ   c                 S   s   dS r  r:   rm   r:   r:   r;   r  u
  s    z5test_override_default_decorator.<locals>.C._a_defaultNrE   rF   rG   r   rJ   r,   r  r:   r:   r:   r;   rt   s
  s   rt   c                 S   s   dS r  r:   rm   r:   r:   r;   r.  y
  r/  z1test_override_default_decorator.<locals>.<lambda>r  r  r  r:   r:   r;   test_override_default_decoratorr
  s    
r  c                  C   s2   G dd dt } |  }dd |_|jdks.J d S )Nc                   @   s$   e Zd ZedZeddd ZdS )z)test_override_default_instance.<locals>.Cr  rJ   c                 S   s   dS r  r:   rm   r:   r:   r;   r  
  s    z4test_override_default_instance.<locals>.C._a_defaultNr  r:   r:   r:   r;   rt   ~
  s   rt   c                 S   s   dS r  r:   rm   r:   r:   r;   r.  
  r/  z0test_override_default_instance.<locals>.<lambda>r  r  r  r:   r:   r;   test_override_default_instance}
  s    
r  c                  C   sb   ddl m }  G dd dt}|dd}|jdks4J | |}d|_|jdksPJ |jdks^J d S )Nr   )copyc                   @   s   e Zd Ze ZdS )ztest_copy_HasTraits.<locals>.CNr   r:   r:   r:   r;   rt   
  s   rt   r   r   r   )r  r   rJ   )r  rt   rx   Zccr:   r:   r;   test_copy_HasTraits
  s    
r  c                 C   s   t | tr| }n
| dd}t |tr,|j}n|j}t|tu rt|trt	|$ ||}|
d| W d   q1 s|0    Y  n||}||ksJ dS )zRun a test of trait.from_stringTr8  N)r\   r   r  Zfrom_string_listZfrom_stringr7   
issubclass	Exceptionr  r  r*   )Z	traittyper  expectedr  castrT   r:   r:   r;   _from_string_test
  s    


,r  zs, expected))xyzr  r   r   )z"xx"xx)z'abc'r  NoneNc                 C   s   t t| | d S r[   )r  r   r  r  r:   r:   r;   test_unicode_from_string
  s    r  c                 C   s   t t| | d S r[   )r  r0   r  r:   r:   r;   test_cunicode_from_string
  s    r  ))r  s   xyz)r      1)zb"xx"s   xx)zb'abc's   abcr  c                 C   s   t t| | d S r[   )r  r   r  r:   r:   r;   test_bytes_from_string
  s    r  c                 C   s   t t| | d S r[   )r  r
   r  r:   r:   r;   test_cbytes_from_string
  s    r  ro   )r   r   )Z123{   z2.0r  c                 C   s   t t| | d S r[   )r  r   r  r:   r:   r;   test_int_from_string
  s    r  )r   g      ?)z123.5g     ^@)z2.5g      @c                 C   s   t t| | d S r[   )r  r   r  r:   r:   r;   test_float_from_string
  s    r  )z1+2jy      ?       @c                 C   s   t t| | d S r[   )r  r   r  r:   r:   r;   test_complex_from_string
  s    r  )trueT)ZTRUET)r   T)r  F)FalseF)ZfalseFz1.0c                 C   s   t t| | d S r[   )r  r	   r  r:   r:   r;   test_bool_from_string
  s    r  r  r   z{1: 2}r   z{"key": "value"}r   rT   c                 C   s   t t| | d S r[   )r  r   r  r:   r:   r;   test_dict_from_string
  s    r  r  [1, 2, "x"]r   r   ro   r  c                 C   s   t t| | d S r[   r  r!   r  r:   r:   r;   test_list_from_string
  s    
r  zs, expected, value_trait)r   r'  r  r  Tr8  Fc                 C   s   t t|| | d S r[   r  r  r  Zvalue_traitr:   r:   r;   test_list_items_from_string  s    r  >   r   r   ro   z{1, 2, "x"}c                 C   s   t t| | d S r[   r  r   r  r:   r:   r;   test_set_from_string%  s    r  >   r   r   r   c                 C   s   t t|| | d S r[   r  r  r:   r:   r;   test_set_items_from_string3  s    
r  )r  r:   )z()r:   )r  r  )z(1, 2, "x")r  )r   ro   c                 C   s   t t| | d S r[   r  r"   r  r:   r:   r;   test_tuple_from_string@  s    r  zs, expected, value_traits)r  r[   c                 C   s   t t| | | d S r[   r  )r  r  Zvalue_traitsr:   r:   r;   test_tuple_items_from_stringO  s    r  )ro   ro   )
mod.submodr  znot an identifierr  c                 C   s   t t| | d S r[   )r  r$   r  r:   r:   r;   test_object_from_string]  s    r  )z127.0.0.1:8000)r  i@  )zhost.tld:80)zhost.tldr  zhost:notaportr  c                 C   s   t t| | d S r[   )r  r    r  r:   r:   r;   test_tcp_from_stringk  s    r   )r  r_  r  Zunittestr   r  	_warningsr   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.   r/   r0   Ztraitlets.utilsr2   r<   r=   rH   r   r   r   r  r  r6  rV  ri  rs  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  r  r  r  r  r  r  r  r=  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  ZmarkZparametrizer  setr  r  r  r  r  r  r  r  r  r   r!  r#  r%  r&  r*  r+  r6  rY  r[  rc  ri  rj  rl  rp  rr  rs  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  
ValueErrorr  r  r  r  r  r  r  r  r  r  r  r  r   r:   r:   r:   r;   <module>   s\  /	 x* E Gm{^:2




				
(


					6 [-
 
	5	(

	



	



