3
d
                 @   sv   d dl Z d dlmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZ G dd deZG dd deZG dd de jZdS )	    N)BytesDefaultValueFloat	HasTraitsInstanceIntListStr
TraitError	TraitTypeTypeUnionc               @   s   e Zd ZeZdS )CustomClassN)__name__
__module____qualname__r   value r   r   9/tmp/pip-build-7vycvbft/traits/traits/tests/test_union.pyr      s   r   c               @   s   e Zd ZejZdZdd ZdS )CustomStrTypeza string valuec             C   s    t |ts|S | j||| d S )N)
isinstancer	   error)selfobjnamer   r   r   r   validate   s    
zCustomStrType.validateN)r   r   r   r   constantZdefault_value_typedefault_valuer   r   r   r   r   r      s   r   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) 	TestUnionc          
   C   s8   | j t}tt d W d Q R X | jt|jd d S )NnoneziUnion trait declaration expects a trait type or an instance of trait type or None, but got 'none' instead)assertRaises
ValueErrorr   r	   assertEqualstr	exception)r   exception_contextr   r   r   test_union_incompatible_trait&   s
    z'TestUnion.test_union_incompatible_traitc             C   sl   G dd dt }|dd |dd | jt |dd W d Q R X | jt |tdd W d Q R X d S )Nc               @   s   e Zd ZeeeeZdS )z2TestUnion.test_list_trait_types.<locals>.TestClassN)r   r   r   r   r   r   r	   int_or_str_typer   r   r   r   	TestClass1   s   r(      )r'   z3.5g      @)r   r    r
   r   )r   r(   r   r   r   test_list_trait_types0   s    

zTestUnion.test_list_trait_typesc             C   sd   | j t  G dd dt}|dd W d Q R X | j t  G dd dt}|dd W d Q R X d S )Nc               @   s   e Zd ZeeeZdS )z7TestUnion.test_malformed_declaration.<locals>.TestClassN)r   r   r   r   intr   ar   r   r   r   r(   ?   s   r(   g333333@)r,   c               @   s   e Zd ZeddgeZdS )z7TestUnion.test_malformed_declaration.<locals>.TestClass      N)r   r   r   r   r   r,   r   r   r   r   r(   E   s   )r    r!   r   )r   r(   r   r   r   test_malformed_declaration=   s    z$TestUnion.test_malformed_declarationc             C   sp   G dd dt }|tdd |tdd | jt |td W d Q R X | jt |dd W d Q R X d S )Nc               @   s   e Zd ZeeeeeZdS )z6TestUnion.test_list_trait_instances.<locals>.TestClassN)r   r   r   r   r   r   r	   float_or_str_objr   r   r   r   r(   K   s   r(   g      @)r0   z3.5)r   r   r	   r    r
   )r   r(   r   r   r   test_list_trait_instancesJ   s    z#TestUnion.test_list_trait_instancesc             C   s   G dd dt }|d d d S )Nc               @   s   e Zd ZedeZdS )z1TestUnion.test_union_with_none.<locals>.TestClassN)r   r   r   r   r   int_or_noner   r   r   r   r(   X   s   r(   )r2   )r   )r   r(   r   r   r   test_union_with_noneW   s    zTestUnion.test_union_with_nonec             C   s   G dd dt }|d d d S )Nc               @   s   e Zd Ze ZdS )z=TestUnion.test_union_unspecified_arguments.<locals>.TestClassN)r   r   r   r   r   r   r   r   r   r(   ^   s   r(   )r   )r   )r   r(   r   r   r    test_union_unspecified_arguments]   s    z*TestUnion.test_union_unspecified_argumentsc             C   s   G dd dt }| j| jd G dd dt }| j| jd G dd dt }| j| jd  G dd dt }| j| jd  d S )Nc               @   s$   e Zd ZeedededZdS )z/TestUnion.test_default_value.<locals>.TestClassr)   gffffff@	SomethingN)r   r   r   r   r   r   r	   atrr   r   r   r   r(   c   s   r(   r)   c               @   s(   e Zd ZeedededddZdS )z/TestUnion.test_default_value.<locals>.TestClassr)   gffffff@r5   XYZ)r   N)r   r   r   r   r   r   r	   r6   r   r   r   r   r(   h   s   r7   c               @   s   e Zd Ze ZdS )z/TestUnion.test_default_value.<locals>.TestClassN)r   r   r   r   r6   r   r   r   r   r(   p   s   c               @   s   e Zd ZedZdS )z/TestUnion.test_default_value.<locals>.TestClassN)r   r   r   r   r6   r   r   r   r   r(   u   s   )r   r"   r6   )r   r(   r   r   r   test_default_valueb   s    zTestUnion.test_default_valuec             C   s>   | j t}tt t dd W d Q R X | jt|jd d S )Ng      ?)defaultzEUnion default value should be set via 'default_value', not 'default'.)r    r!   r   r   r   r"   r#   r$   )r   r%   r   r   r   test_default_raise_errorz   s
    z"TestUnion.test_default_raise_errorc             C   sb   G dd dt }| }|jdj\}}}| jt|jt | jt|jt | jt|jt d S )Nc               @   s   e Zd ZeeeeZdS )z.TestUnion.test_inner_traits.<locals>.TestClassN)r   r   r   r   r   r   r	   r6   r   r   r   r   r(      s   r(   r6   )	r   traitZinner_traitsr"   typeZ
trait_typer   r   r	   )r   r(   r   t1t2t3r   r   r   test_inner_traits   s    zTestUnion.test_inner_traitsc          
   C   sN   G dd dt }|tddd |dd | jt |td W d Q R X d S )Nc               @   s   e Zd ZeeeeZdS )z:TestUnion.test_union_user_defined_class.<locals>.TestClassN)r   r   r   r   r   r   r   r   r   r   r   r   r(      s   r(      )r   )r   )r   r   r    r
   )r   r(   r   r   r   test_union_user_defined_class   s
    
z'TestUnion.test_union_user_defined_classc             C   s   G dd dt }|dd d S )Nc               @   s   e Zd ZeeeZdS )z9TestUnion.test_union_user_defined_type.<locals>.TestClassN)r   r   r   r   r   r   
type_valuer   r   r   r   r(      s   r(   z
new string)rC   )r   )r   r(   r   r   r   test_union_user_defined_type   s    z&TestUnion.test_union_user_defined_typec             C   s2   G dd dt }|dd}d|_| j|jd d S )Nc               @   s    e Zd ZeeZdZdd ZdS )z.TestUnion.test_notification.<locals>.TestClassNc             S   s
   || _ d S )N)shadow_union_trait)r   newr   r   r   _union_attr_changed   s    zBTestUnion.test_notification.<locals>.TestClass._union_attr_changed)r   r   r   r   r   
union_attrrE   rG   r   r   r   r   r(      s   r(   r-   )rH   )r   rH   r"   rE   )r   r(   r   r   r   r   test_notification   s    
zTestUnion.test_notificationc                s2   G dd dt  G  fdddt}|dd d S )Nc                   s   e Zd Z fddZ  ZS )z;TestUnion.test_extending_union_trait.<locals>.UnionAllowStrc                s   t |tr|S t j|||S )N)r   r#   superr   )r   r   r   r   )	__class__r   r   r      s    
zDTestUnion.test_extending_union_trait.<locals>.UnionAllowStr.validate)r   r   r   r   __classcell__r   r   )rL   r   UnionAllowStr   s   rN   c                   s   e Zd Z eeZdS )z7TestUnion.test_extending_union_trait.<locals>.TestClassN)r   r   r   r   r   sr   )rN   r   r   r(      s   r(   Zsdf)rO   )r   r   )r   r(   r   )rN   r   test_extending_union_trait   s    z$TestUnion.test_extending_union_traitc          	   C   sL   G dd dt }| }|j}| j|t | jt |jd W d Q R X d S )Nc               @   s   e Zd ZeeeeZdS )zBTestUnion.test_list_inside_union_default.<locals>.HasUnionWithListN)r   r   r   r   r   r   r	   foor   r   r   r   HasUnionWithList   s   rR   znot an integer)r   rQ   ZassertIsInstancelistr    r
   append)r   rR   	has_unionr   r   r   r   test_list_inside_union_default   s    z(TestUnion.test_list_inside_union_defaultc             C   sd   G dd dt }| }|j}| j|d | j|jdj tjdf | j|jdj tjdf d S )Nc               @   s:   e Zd ZeedeZeee e ee e dZ	dS )z9TestUnion.test_constant_default.<locals>.HasUnionWithList   N)
r   r   r   r   r   r   rQ   r	   r   nestedr   r   r   r   rR      s   rR   rW   rQ   rX    )r   rQ   r"   r;   r   r   r   )r   rR   rU   r   r   r   r   test_constant_default   s    zTestUnion.test_constant_defaultN)r   r   r   r&   r*   r/   r1   r3   r4   r8   r:   r@   rB   rD   rJ   rP   rV   rZ   r   r   r   r   r   $   s   


r   )ZunittestZ
traits.apir   r   r   r   r   r   r   r	   r
   r   r   r   r   r   ZTestCaser   r   r   r   r   <module>   s   8