a
    ze                    @   s  d dl T d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZ d dlZd dl Z G dd	 d	eZG d
d dejZG dd dejZG dd dejZG dd dejZG dd dejZ G dd dejZ!G dd dejZ"G dd dejZ#G dd dejZ$G dd dejZ%G dd dejZ&G d d! d!ejZ'G d"d# d#ejZ(G d$d% d%ejZ)e*d&kre+  dS )'    )*N)Mock)
ClassVarAnyListUnionTupleDictGenericTypeVarOptionalProtocol)get_type_hints)dequeOrderedDict
namedtuple)total_orderingc                   @   s   e Zd ZdS )CustomErrorN__name__
__module____qualname__ r   r   +/usr/lib/python3.9/test/test_dataclasses.pyr          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)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<dudv Z=dwdx Z>dydz Z?d{d| Z@d}d~ ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dS )TestCasec                 C   s0   t G dd d}| }| tt|d d S )Nc                   @   s   e Zd ZdS )z"TestCase.test_no_fields.<locals>.CNr   r   r   r   r   C   s   r   r   	dataclassassertEquallenfieldsselfr   or   r   r   test_no_fields   s    zTestCase.test_no_fieldsc                 C   s0   t G dd d}| }| tt|d d S )Nc                   @   s   e Zd ZdZdS )z6TestCase.test_no_fields_but_member_variable.<locals>.Cr   N)r   r   r   ir   r   r   r   r   "   s   r   r   r   r"   r   r   r   "test_no_fields_but_member_variable!   s    z+TestCase.test_no_fields_but_member_variablec                 C   s,   t G dd d}|d}| |jd d S )Nc                   @   s   e Zd ZU eed< dS )z-TestCase.test_one_field_no_default.<locals>.CxNr   r   r   int__annotations__r   r   r   r   r   *   s   
r   *   r   r   r(   r"   r   r   r   test_one_field_no_default)   s    z"TestCase.test_one_field_no_defaultc                 C   sF   d}|  t|" tG dd d}W d    n1 s80    Y  d S )Nz/cannot specify both default and default_factoryc                   @   s"   e Zd ZU ededZeed< dS )z<TestCase.test_field_default_default_factory_error.<locals>.C   defaultdefault_factoryr(   N)r   r   r   fieldr*   r(   r+   r   r   r   r   r   4   s   
r   )assertRaisesRegex
ValueErrorr   )r#   msgr   r   r   r   (test_field_default_default_factory_error1   s    z1TestCase.test_field_default_default_factory_errorc                 C   s8   t dddd}d|_t|}dtd}| || d S )Nr/   TF)r1   initrepridz4Field(name='id',type=None,default=1,default_factory=zX,init=True,repr=False,hash=None,compare=True,metadata=mappingproxy({}),_field_type=None))r3   namer9   MISSINGr   )r#   Z	int_fieldZrepr_outputZexpected_outputr   r   r   test_field_repr8   s    zTestCase.test_field_reprc                 C   s.   t G dd d}|dd}| |jd d S )Nc                   @   s   e Zd ZU eed< dS )z*TestCase.test_named_init_params.<locals>.Cr(   Nr)   r   r   r   r   r   E   s   
r       r(   r-   r"   r   r   r   test_named_init_paramsD   s    
zTestCase.test_named_init_paramsc                 C   s  t G dd d}|d}| |j|jfd | td" t G dd d}W d    n1 sb0    Y  | td6 t G dd d}t G d	d d|}W d    n1 s0    Y  | td6 t G d
d d}t G dd d|}W d    n1 s0    Y  d S )Nc                   @   s"   e Zd ZU eed< dZeed< dS )/TestCase.test_two_fields_one_default.<locals>.Cr(   r   yNr   r   r   r*   r+   rB   r   r   r   r   r   M   s   
r      )rD   r   z1non-default argument 'y' follows default argumentc                   @   s"   e Zd ZU dZeed< eed< dS )rA   r   r(   rB   Nr   r   r   r(   r*   r+   r   r   r   r   r   Y   s   
c                   @   s   e Zd ZU dZeed< dS )/TestCase.test_two_fields_one_default.<locals>.Br   r(   NrE   r   r   r   r   Bb   s   
rG   c                   @   s   e Zd ZU eed< dS )rA   rB   Nr)   r   r   r   r   r   f   s   
c                   @   s   e Zd ZU eed< eed< dS )rF   r(   rB   Nr)   r   r   r   r   rG   o   s   
c                   @   s   e Zd ZU dZeed< dS )rA   r   r(   NrE   r   r   r   r   r   t   s   
)r   r   r(   rB   r4   	TypeError)r#   r   r$   rG   r   r   r   test_two_fields_one_defaultL   s.    .0z$TestCase.test_two_fields_one_defaultc                 C   s  t ddG dd d}| t|dd t ddG dd d}| t|dtd | td	( t dd
G dd d}W d    n1 s0    Y  t dd
G dd d}| t|dtd | td	( t dd
G dd d}W d    n1 s0    Y  d S )NTfrozenc                   @   s   e Zd ZU eed< dd ZdS )'TestCase.test_overwrite_hash.<locals>.Cr(   c                 S   s   dS N-  r   r#   r   r   r   __hash__~   s    0TestCase.test_overwrite_hash.<locals>.C.__hash__N)r   r   r   r*   r+   rP   r   r   r   r   r   {   s   
r   d   rN   c                   @   s   e Zd ZU eed< dd ZdS )rL   r(   c                 S   s   dS NFr   r#   otherr   r   r   __eq__   s    .TestCase.test_overwrite_hash.<locals>.C.__eq__Nr   r   r   r*   r+   rV   r   r   r   r   r      s   
)rR   #Cannot overwrite attribute __hash__unsafe_hashc                   @   s   e Zd Zdd ZdS )rL   c                 S   s   d S Nr   rO   r   r   r   rP      s    rQ   Nr   r   r   rP   r   r   r   r   r      s   c                   @   s   e Zd ZU eed< dd ZdS )rL   r(   c                 S   s   d S r\   r   rO   r   r   r   rV      s    rW   NrX   r   r   r   r   r      s   

   )r^   c                   @   s&   e Zd ZU eed< dd Zdd ZdS )rL   r(   c                 S   s   d S r\   r   rO   r   r   r   rV      s    rW   c                 S   s   d S r\   r   rO   r   r   r   rP      s    rQ   N)r   r   r   r*   r+   rV   rP   r   r   r   r   r      s   
)r   r   hashr4   rH   r#   r   r   r   r   test_overwrite_hashx   s&    .zTestCase.test_overwrite_hashc                 C   sp   t G dd d}t G dd d|}| }| t|d | }| t|d |dd}| t|d	 d S )
Nc                   @   s&   e Zd ZU dZeed< dZeed< dS )z=TestCase.test_overwrite_fields_in_derived_class.<locals>.Baseg      .@r(   r   rB   N)r   r   r   r(   r   r+   rB   r*   r   r   r   r   Base   s   
rb   c                   @   s&   e Zd ZU dZeed< dZeed< dS )z;TestCase.test_overwrite_fields_in_derived_class.<locals>.C1r^   z   r(   N)r   r   r   rc   r*   r+   r(   r   r   r   r   C1   s   
re   zJTestCase.test_overwrite_fields_in_derived_class.<locals>.Base(x=15.0, y=0)zLTestCase.test_overwrite_fields_in_derived_class.<locals>.C1(x=15, y=0, z=10)   r?   zKTestCase.test_overwrite_fields_in_derived_class.<locals>.C1(x=5, y=0, z=10)r   r   r9   )r#   rb   re   r$   r   r   r   &test_overwrite_fields_in_derived_class   s    
z/TestCase.test_overwrite_fields_in_derived_classc                 C   s   t G dd d}|d}| |jd t|j}tt|j}| 	d| t G dd d}t|j}tt|j}| d| d S )Nc                   @   s   e Zd ZU eed< dS ))TestCase.test_field_named_self.<locals>.Cr#   Nr   r   r   strr+   r   r   r   r   r      s   
r   foor#   c                   @   s   e Zd ZU eed< dS )ri   ZselfxNrj   r   r   r   r   r      s   
)
r   r   r#   inspect	signature__init__nextiter
parametersassertNotEqual)r#   r   csigfirstr   r   r   test_field_named_self   s    zTestCase.test_field_named_selfc                 C   s,   t G dd d}|d}| |jd d S )Nc                   @   s   e Zd ZU eed< dS )z+TestCase.test_field_named_object.<locals>.CobjectNrj   r   r   r   r   r      s   
r   rl   r   r   rx   r#   r   rt   r   r   r   test_field_named_object   s    z TestCase.test_field_named_objectc                 C   s2   t ddG dd d}|d}| |jd d S )NTrJ   c                   @   s   e Zd ZU eed< dS )z2TestCase.test_field_named_object_frozen.<locals>.Crx   Nrj   r   r   r   r   r      s   
r   rl   ry   rz   r   r   r   test_field_named_object_frozen   s    z'TestCase.test_field_named_object_frozenc                    sn   h d t  fddtj D }dd |D }td|}|dd |D  }|D ]}| t||| qRd S )N>   NoneTrueFalsec                 3   s$   | ]}| d s| vr|V  qdS __N
startswith.0bZ
exclusionsr   r   	<genexpr>   s   z9TestCase.test_field_named_like_builtin.<locals>.<genexpr>c                 S   s   g | ]}|t fqS r   rk   r   r;   r   r   r   
<listcomp>   r   z:TestCase.test_field_named_like_builtin.<locals>.<listcomp>r   c                 S   s   g | ]}|qS r   r   r   r   r   r   r      r   sortedbuiltins__dict__keysmake_dataclassr   getattrr#   Zbuiltins_namesZ
attributesr   rt   r;   r   r   r   test_field_named_like_builtin   s    
z&TestCase.test_field_named_like_builtinc                    sr   h d t  fddtj D }dd |D }td|dd}|d	d |D  }|D ]}| t||| qVd S )
N>   r}   r~   r   c                 3   s$   | ]}| d s| vr|V  qdS r   r   r   r   r   r   r      s   z@TestCase.test_field_named_like_builtin_frozen.<locals>.<genexpr>c                 S   s   g | ]}|t fqS r   r   r   r   r   r   r     r   zATestCase.test_field_named_like_builtin_frozen.<locals>.<listcomp>r   TrJ   c                 S   s   g | ]}|qS r   r   r   r   r   r   r     r   r   r   r   r   r   $test_field_named_like_builtin_frozen   s    z-TestCase.test_field_named_like_builtin_frozenc                 C   sT  t G dd d}t ddG dd d}||fD ]}| j|d | | |  tdd	 d
d	 dd	 dd	 gD ]\}}| j|d\ | td|j d|j d || |  W d    n1 s0    Y  W d    qt1 s0    Y  qtW d    q21 s0    Y  q2t ddG dd d}| | |  | | |  d S )Nc                   @   s   e Zd ZdS )z)TestCase.test_0_field_compare.<locals>.C0Nr   r   r   r   r   C0  s   r   Forderc                   @   s   e Zd ZdS )z)TestCase.test_0_field_compare.<locals>.C1Nr   r   r   r   r   re     s   re   clsc                 S   s   | |k S r\   r   ar   r   r   r   <lambda>  r   z/TestCase.test_0_field_compare.<locals>.<lambda>c                 S   s   | |kS r\   r   r   r   r   r   r     r   c                 S   s   | |kS r\   r   r   r   r   r   r     r   c                 S   s   | |kS r\   r   r   r   r   r   r     r   idx$not supported between instances of '' and ''Tc                   @   s   e Zd ZdS )z(TestCase.test_0_field_compare.<locals>.CNr   r   r   r   r   r      s   r   )	r   subTestr   	enumerater4   rH   r   assertLessEqualassertGreaterEqualr#   r   re   r   r   fnr   r   r   r   test_0_field_compare
  s*    nzTestCase.test_0_field_comparec                 C   s  t G dd d}t ddG dd d}||fD ]}| j|d | |d|d | |d	|d td
d dd dd dd gD ]\}}| j|d` | td|j d|j d" ||d	|d	 W d    n1 s0    Y  W d    q1 s
0    Y  qW d    q21 s,0    Y  q2t ddG dd d}| |d	|d | 	|d	|d | 	|d|d | 
|d|d	 | |d|d	 | |d|d d S )Nc                   @   s   e Zd ZU eed< dS )z)TestCase.test_1_field_compare.<locals>.C0r(   Nr)   r   r   r   r   r   (  s   
r   Fr   c                   @   s   e Zd ZU eed< dS )z)TestCase.test_1_field_compare.<locals>.C1r(   Nr)   r   r   r   r   re   ,  s   
re   r   r/   r   c                 S   s   | |k S r\   r   r   r   r   r   r   4  r   z/TestCase.test_1_field_compare.<locals>.<lambda>c                 S   s   | |kS r\   r   r   r   r   r   r   5  r   c                 S   s   | |kS r\   r   r   r   r   r   r   6  r   c                 S   s   | |kS r\   r   r   r   r   r   r   7  r   r   r   r   r   Tc                   @   s   e Zd ZU eed< dS )z(TestCase.test_1_field_compare.<locals>.Cr(   Nr)   r   r   r   r   r   =  s   
r   )r   r   r   rs   r   r4   rH   r   
assertLessr   assertGreaterr   r   r   r   r   test_1_field_compare&  s4    tzTestCase.test_1_field_comparec                 C   sT  t G dd d}t ddG dd d}||fD ]B}| j|d | |dd|dd | |d	d
|d	d
 | |d	d|dd | |d	d|d	d	 tdd dd dd dd gD ]\}}| j|df | td|j d|j d& ||dd|dd W d    n1 s*0    Y  W d    q1 sJ0    Y  qW d    q21 sl0    Y  q2t ddG dd d}tdd dd dd gD ]T\}}| j|d, | ||dd|dd W d    n1 s0    Y  qtdd dd dd gD ]\}}| j|dd | ||dd|dd	 | ||dd	|d	d | ||d	d|d	d	 W d    n1 s0    Y  qtdd dd dd gD ]\}}| j|dd | ||dd	|dd | ||d	d|dd	 | ||d	d	|d	d W d    n1 sB0    Y  qd S ) Nc                   @   s   e Zd ZU eed< eed< dS )z(TestCase.test_simple_compare.<locals>.C0r(   rB   Nr)   r   r   r   r   r   I  s   
r   Fr   c                   @   s   e Zd ZU eed< eed< dS )z(TestCase.test_simple_compare.<locals>.C1r(   rB   Nr)   r   r   r   r   re   N  s   
re   r   r   r/      c                 S   s   | |k S r\   r   r   r   r   r   r   Y  r   z.TestCase.test_simple_compare.<locals>.<lambda>c                 S   s   | |kS r\   r   r   r   r   r   r   Z  r   c                 S   s   | |kS r\   r   r   r   r   r   r   [  r   c                 S   s   | |kS r\   r   r   r   r   r   r   \  r   r   r   r   r   Tc                   @   s   e Zd ZU eed< eed< dS )z'TestCase.test_simple_compare.<locals>.Cr(   rB   Nr)   r   r   r   r   r   b  s   
r   c                 S   s   | |kS r\   r   r   r   r   r   r   g  r   c                 S   s   | |kS r\   r   r   r   r   r   r   h  r   c                 S   s   | |kS r\   r   r   r   r   r   r   i  r   c                 S   s   | |k S r\   r   r   r   r   r   r   m  r   c                 S   s   | |kS r\   r   r   r   r   r   r   n  r   c                 S   s   | |kS r\   r   r   r   r   r   r   o  r   c                 S   s   | |kS r\   r   r   r   r   r   r   u  r   c                 S   s   | |kS r\   r   r   r   r   r   r   v  r   c                 S   s   | |kS r\   r   r   r   r   r   r   w  r   )	r   r   r   rs   r   r4   rH   r   
assertTruer   r   r   r   test_simple_compareG  sX    z@@zTestCase.test_simple_comparec              
   C   s2  t G dd d}t G dd d|}tdd dfdd d	fgD ]R\}\}}| j|d
* | ||d|d| W d    qB1 s0    Y  qBtdd dd dd dd gD ]v\}}| j|d
P | td" ||d|d W d    n1 s0    Y  W d    q1 s"0    Y  qd S )Nc                   @   s   e Zd ZU eed< dS )z+TestCase.test_compare_subclasses.<locals>.Br&   Nr)   r   r   r   r   rG     s   
rG   c                   @   s   e Zd ZdS )z+TestCase.test_compare_subclasses.<locals>.CNr   r   r   r   r   r     s   r   c                 S   s   | |kS r\   r   r   r   r   r   r     r   z2TestCase.test_compare_subclasses.<locals>.<lambda>Fc                 S   s   | |kS r\   r   r   r   r   r   r     r   Tr   r   c                 S   s   | |k S r\   r   r   r   r   r   r     r   c                 S   s   | |kS r\   r   r   r   r   r   r     r   c                 S   s   | |kS r\   r   r   r   r   r   r     r   c                 S   s   | |kS r\   r   r   r   r   r   r     r   z.not supported between instances of 'B' and 'C')r   r   r   r   r4   rH   )r#   rG   r   r   r   expectedr   r   r   test_compare_subclasses}  s&    
:z TestCase.test_compare_subclassesc              
   C   s  dD ]\}}}| j ||d |dkrt| td* t||dG dd d}W d    n1 sf0    Y  n"t||dG dd d}|dkr| d	|j | d
|j | d|j | d|j | d|j n|dkr0| d	|j | d
|j | d|j | d|j | d|j nf|dkr| d	|j | d
|j | d|j | d|j | d|j ndsJ d|W d    q1 s0    Y  qd S )N))FFneither)FT	exception)TFeq_only)TTboth)eqr   r   z eq must be true if order is truec                   @   s   e Zd ZdS z!TestCase.test_eq_order.<locals>.CNr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS r   r   r   r   r   r   r     s   r   rV   __lt____le____gt____ge__r   r   Funknown result )r   r4   r5   r   assertNotInr   assertIn)r#   r   r   resultr   r   r   r   test_eq_order  s6    
2


zTestCase.test_eq_orderc                 C   sZ   t G dd d}| |djd | td |  W d    n1 sL0    Y  d S )Nc                   @   s   e Zd ZU e Zeed< dS )z)TestCase.test_field_no_default.<locals>.Cr(   Nr   r   r   r3   r(   r*   r+   r   r   r   r   r     s   
r   rf   8__init__\(\) missing 1 required positional argument: 'x')r   r   r(   r4   rH   r`   r   r   r   test_field_no_default  s    zTestCase.test_field_no_defaultc                    sf   t   tG  fddd}| |j  |d}| |jd |`| |j  | | j  d S )Nc                       s    e Zd ZU e dZeed< dS )z&TestCase.test_field_default.<locals>.Cr1   r(   N)r   r   r   r3   r(   rx   r+   r   r   r   r   r     s   
r   r^   )rx   r   assertIsr(   r   rz   r   r   r   test_field_default  s    zTestCase.test_field_defaultc                 C   s   t G dd d}| t |  W d    n1 s80    Y  |d}| t|d t G dd d}|dd}| t|d d S )Nc                   @   s    e Zd ZU eddZeed< dS )$TestCase.test_not_in_repr.<locals>.CFr9   r(   Nr   r   r   r   r   r     s   
r   r^   z&TestCase.test_not_in_repr.<locals>.C()c                   @   s(   e Zd ZU eddZeed< eed< dS )r   Fr   r(   rB   Nr   r   r   r   r   r     s   
   z*TestCase.test_not_in_repr.<locals>.C(y=20))r   assertRaisesrH   r   r9   rz   r   r   r   test_not_in_repr  s    $
zTestCase.test_not_in_reprc                 C   sp   t G dd d}| | |dd | |dd|dd | |d|dd | |dd|dd d S )	Nc                   @   s.   e Zd ZU dZeed< edddZeed< dS )z'TestCase.test_not_in_compare.<locals>.Cr   r(   F   )comparer1   rB   N)r   r   r   r(   r*   r+   r3   rB   r   r   r   r   r     s   
r   r   r   r/   r^   rD   r   r   r   rs   r`   r   r   r   test_not_in_compare  s    zTestCase.test_not_in_comparec              	      s   dD ]\ }| j  d tddG  fddd}|dkr^| t|dtd	 n4|d
kr| t|dtd ndsJ d|W d    q1 s0    Y  qd S )N))TFr3   )TTr3   )FFabsent)FTr   )NFr   )NTr3   )r_   r   TrZ   c                       s$   e Zd ZU e ddZeed< dS )z)TestCase.test_hash_field_rules.<locals>.Crf   )r   r_   r1   r(   Nr   r   r   Zhash_r   r   r     s   
r   r3   rf   )rf   r   r   Fr   )r   r   r   r_   )r#   r   r   r   r   r   test_hash_field_rules  s    zTestCase.test_hash_field_rulesc                 C   sf   t G dd d}| d| j t G dd d}| d|dj | t|ddddd	 d S )
Nc                   @   s    e Zd ZU eddZeed< dS ).TestCase.test_init_false_no_default.<locals>.CFr8   r(   Nr   r   r   r   r   r     s   
r   r(   c                   @   s@   e Zd ZU eed< dZeed< eddZeed< dZeed< d	S )
r   r(   r   rB   Fr   rc   r^   tN)	r   r   r   r*   r+   rB   r3   rc   r   r   r   r   r   r     s   
rc   r   rf   r^   )r   r(   rB   )r   r   r   r   varsr`   r   r   r   test_init_false_no_default  s    z#TestCase.test_init_false_no_defaultc                 C   s`  t G dd d}t|}| |t |D ]$}| t|t | |j|j	 q*| 
t|d | 
|d jd | 
|d jt | t|d | |d j | |d j | 
|d jd | 
|d jt | t|d | |d j | |d j | 
|d jd	 | 
|d jt | t|d	 | |d j | |d j d S )
Nc                   @   s<   e Zd ZU eed< edddZeed< eddZeed< dS )z%TestCase.test_class_marker.<locals>.Cr(   FNr8   r1   rB   r   rc   )	r   r   r   r*   r+   r3   rB   rk   rc   r   r   r   r   r   $  s   
r   rD   r   r(   r/   rB   r   rc   )r   r!   assertIsInstancetupler   typeZFieldr   r;   r+   r   r    r*   assertFalsehasattrr   r8   r9   rk   assertIsNoner   )r#   r   Z
the_fieldsfr   r   r   test_class_marker#  s.    zTestCase.test_class_markerc                 C   s   t G dd d}t G dd d|}| dd t|D g d t G dd	 d	|}| d
d t|D g d t G dd d|}| dd t|D g d d S )Nc                   @   s2   e Zd ZU dZeed< dZeed< dZeed< dS )z$TestCase.test_field_order.<locals>.BB:ar   B:br   B:crt   N)r   r   r   r   rk   r+   r   rt   r   r   r   r   rG   E  s   
rG   c                   @   s   e Zd ZU dZeed< dS )z$TestCase.test_field_order.<locals>.CC:br   N)r   r   r   r   rk   r+   r   r   r   r   r   K  s   
r   c                 S   s   g | ]}|j |jfqS r   r;   r1   r   r   r   r   r   r   O  r   z-TestCase.test_field_order.<locals>.<listcomp>)r   r   )r   r   )rt   r   c                   @   s   e Zd ZU dZeed< dS )z$TestCase.test_field_order.<locals>.DD:crt   N)r   r   r   rt   rk   r+   r   r   r   r   DT  s   
r   c                 S   s   g | ]}|j |jfqS r   r   r   r   r   r   r   X  r   )r   r   r   rt   r   c                   @   s&   e Zd ZU dZeed< dZeed< dS )z$TestCase.test_field_order.<locals>.EE:ar   E:ddN)r   r   r   r   rk   r+   r   r   r   r   r   E]  s   
r   c                 S   s   g | ]}|j |jfqS r   r   r   r   r   r   r   b  r   ))r   r   r   r   )r   r   r   r   r!   )r#   rG   r   r   r   r   r   r   test_field_orderD  s"    zTestCase.test_field_orderc                    s\   t   tG  fddd}| t|d | t|d | |j  | |jd d S )Nc                       sF   e Zd ZU eed< eddZeed<  Zeed< eddZ	eed< d	S )
z$TestCase.test_class_attrs.<locals>.Cr(   Fr   rB   rc   rR   r   r   N)
r   r   r   r*   r+   r3   rB   rc   rx   r   r   r   r   r   r   l  s   
r   r(   rB   rR   )rx   r   r   r   r   rc   r   r   r`   r   r   r   test_class_attrsh  s    zTestCase.test_class_attrsc              
      s  t g dgfti ddiftt tdgffD ]V\| jd, | td d( tG fddd}W d    n1 s0    Y  | td d( tG fd	dd}W d    n1 s0    Y  G d
d d | td( tG  fddd}W d    n1 s*0    Y  tG fddd}tG  fddd}W d    q*1 sx0    Y  q*d S )Nr/   r   typzmutable default z for field x is not allowedc                       s   e Zd ZU  Zed< dS )8TestCase.test_disallowed_mutable_defaults.<locals>.Pointr(   N)r   r   r   r(   r+   r   )emptyr   r   r   Point  s   
r   z for field y is not allowedc                       s   e Zd ZU  Zed< dS )r   rB   N)r   r   r   rB   r+   r   )	non_emptyr   r   r   r     s   
c                   @   s   e Zd ZdS )z;TestCase.test_disallowed_mutable_defaults.<locals>.SubclassNr   r   r   r   r   Subclass  r   r   z7mutable default .*Subclass'> for field z is not allowedc                       s   e Zd ZU   Zed< dS )r   rc   N)r   r   r   rc   r+   r   r   r   r   r   r     s   
c                       s    e Zd ZU   Ze  ed< dS )4TestCase.test_disallowed_mutable_defaults.<locals>.Crc   N)r   r   r   rc   r   r+   r   r   r   r   r     s   
r   c                       s    e Zd ZU   Ze ed< dS )r   r(   N)r   r   r   r(   r   r+   r   r   r   r   r     s   
)listdictsetr   r4   r5   r   r#   r   r   r   )r   r   r   r   r    test_disallowed_mutable_defaultsx  s2    

4
46z)TestCase.test_disallowed_mutable_defaultsc                    s   G dd d t G  fddd}  }||}||}| || |jjddg | || | |jjddg | |j|j d S )Nc                   @   s   e Zd Zdd ZdS )z<TestCase.test_deliberately_mutable_defaults.<locals>.Mutablec                 S   s
   g | _ d S r\   lrO   r   r   r   ro     s    zETestCase.test_deliberately_mutable_defaults.<locals>.Mutable.__init__Nr   r   r   ro   r   r   r   r   Mutable  s   r  c                       s   e Zd ZU  ed< dS )z6TestCase.test_deliberately_mutable_defaults.<locals>.Cr(   Nr   r   r   r+   r   r  r   r   r     s   
r   r/   r   )r   r   r(   r  extendr   )r#   r   lstZo1Zo2r   r  r   "test_deliberately_mutable_defaults  s    z+TestCase.test_deliberately_mutable_defaultsc                 C   s*   t  G dd d}| |djd d S )Nc                   @   s   e Zd ZU eed< dS )z#TestCase.test_no_options.<locals>.Cr(   Nr)   r   r   r   r   r     s   
r   r,   r-   r`   r   r   r   test_no_options  s    zTestCase.test_no_optionsc                 C   sR   t G dd d}| |ddd t G dd d}| |dd|dd d S )	Nc                   @   s   e Zd ZU eed< eed< dS )z&TestCase.test_not_tuple.<locals>.Pointr(   rB   Nr)   r   r   r   r   r     s   
r   r/   r   r/   r   c                   @   s   e Zd ZU eed< eed< dS )z"TestCase.test_not_tuple.<locals>.Cr(   rB   Nr)   r   r   r   r   r     s   
r   rD   )r   rs   r   r   r   r   test_not_tuple  s    zTestCase.test_not_tuplec                 C   s   t G dd d}t G dd d}| |ddd|ddd | |dd	dd
 | td" |ddd\}}}W d    n1 s0    Y  t G dd d}| |ddd|  d S )Nc                   @   s&   e Zd ZU eed< eed< eed< dS )z2TestCase.test_not_other_dataclass.<locals>.Point3Dr(   rB   rc   Nr)   r   r   r   r   Point3D  s   
r  c                   @   s&   e Zd ZU eed< eed< eed< dS )z/TestCase.test_not_other_dataclass.<locals>.DateZyearZmonthZdayNr)   r   r   r   r   Date  s   
r  i     rD   r/   r   )r/   r   rD   unpackr   rf   c                   @   s2   e Zd ZU dZeed< dZeed< dZeed< dS )z4TestCase.test_not_other_dataclass.<locals>.Point3Dv1r   r(   rB   rc   N)r   r   r   r(   r*   r+   rB   rc   r   r   r   r   	Point3Dv1  s   
r  r   )r   rs   r4   rH   )r#   r  r  r(   rB   rc   r  r   r   r   test_not_other_dataclass  s    0z!TestCase.test_not_other_dataclassc                    sn   G dd d    fdd}t G  fddd}|| t dddG  fd	dd}|| d S )
Nc                   @   s   e Zd ZdS )z-TestCase.test_function_annotations.<locals>.FNr   r   r   r   r   F  s   r  c                    s   | jd t  | jd t  | jd    | jd t  | jd t t| j}	|j
d  t|j }t|} |jd t|} |jd 	|jt  |jtjj  |jtjj t|} |jd 	|jt  |jtjj  |jtjj t|} |jd 	|j   |jtjj t|} |jd 	|jt  |jtjj tt| d S )Nr&   jkr  rc   r#   )r   r+   r*   rk   floatcomplexrm   rn   ro   r   Zreturn_annotationrq   rr   valuesrp   r;   
annotationr1   Z	Parameterr   kindZPOSITIONAL_OR_KEYWORDr   StopIteration)r   rn   paramsZparam)r  r#   r   r   validate_class  s:    z:TestCase.test_function_annotations.<locals>.validate_classc                       sP   e Zd ZU eed< eed< Z ed< eddZe	ed< eddd	Z
eed
< dS z-TestCase.test_function_annotations.<locals>.Cr&   r  r  Nr   r  y      @      @Fr1   r8   rc   r   r   r   r*   r+   rk   r  r3   r  r  rc   r  r   r  r   r   r   r   !  s
   
r   T)rK   r[   c                       sP   e Zd ZU eed< eed< Z ed< eddZe	ed< eddd	Z
eed
< dS r  r   r   r!  r   r   r   ,  s
   
)r   )r#   r  r   r   )r  r   r#   r   test_function_annotations  s    +
z"TestCase.test_function_annotationsc                 C   s   t G dd d}| td |  W d    n1 s:0    Y  | d|j t G dd d}| td |  W d    n1 s0    Y  | d|j d S )Nc                   @   s    e Zd ZU eedZeed< dS )z(TestCase.test_missing_default.<locals>.Cr   r(   Nr   r   r   r3   r<   r(   r*   r+   r   r   r   r   r   9  s   
r   3__init__\(\) missing 1 required positional argumentr(   c                   @   s   e Zd ZU eed< dS )z(TestCase.test_missing_default.<locals>.Dr(   Nr)   r   r   r   r   r   B  s   
r   r   r4   rH   r   r   r#   r   r   r   r   r   test_missing_default6  s    $$zTestCase.test_missing_defaultc                 C   s   t G dd d}| td |  W d    n1 s:0    Y  | d|j t G dd d}| td |  W d    n1 s0    Y  | d|j d S )Nc                   @   s    e Zd ZU eedZeed< dS )z0TestCase.test_missing_default_factory.<locals>.Cr2   r(   Nr#  r   r   r   r   r   O  s   
r   r$  r(   c                   @   s"   e Zd ZU eeedZeed< dS )z0TestCase.test_missing_default_factory.<locals>.Dr0   r(   Nr#  r   r   r   r   r   X  s   
r   r%  r&  r   r   r   test_missing_default_factoryK  s    $$z%TestCase.test_missing_default_factoryc                 C   s   |  dtt d S )NzMISSING_TYPE object)r   r9   r<   rO   r   r   r   test_missing_repra  s    zTestCase.test_missing_reprc                 C   sb   t G dd d}| t|jdg | |d d | |djd | |djd d S )Nc                   @   s6   e Zd ZU eed< edddZeedddZdS )z7TestCase.test_dont_include_other_annotations.<locals>.Cr&   )returnc                 S   s   dS Nr   r   rO   r   r   r   rl   h  s    z;TestCase.test_dont_include_other_annotations.<locals>.C.fooc                 S   s   dS Nrf   r   rO   r   r   r   barj  s    z;TestCase.test_dont_include_other_annotations.<locals>.C.barN)r   r   r   r*   r+   rl   propertyr.  r   r   r   r   r   e  s   
r   r&   r^   r   rf   )r   r   r   r+   rl   r.  r&   r`   r   r   r   #test_dont_include_other_annotationsd  s    z,TestCase.test_dont_include_other_annotationsc                 C   s,  t G dd d}| t |  W d    n1 s80    Y  t G dd d}| t |  W d    n1 sz0    Y  |d t ddG dd d}|  t G dd d}| | jd	 | |d
jd t ddG dd d}| t |  W d    n1 s0    Y  d S )Nc                   @   s   e Zd Zdd ZdS )"TestCase.test_post_init.<locals>.Cc                 S   s
   t  d S r\   r   rO   r   r   r   __post_init__v  s    0TestCase.test_post_init.<locals>.C.__post_init__Nr   r   r   r3  r   r   r   r   r   t  s   r   c                   @   s"   e Zd ZU dZeed< dd ZdS )r1  r^   r&   c                 S   s   | j dkrt d S Nr^   )r&   r   rO   r   r   r   r3  ~  s    
r4  N)r   r   r   r&   r*   r+   r3  r   r   r   r   r   {  s   
rf   Fr   c                   @   s   e Zd Zdd ZdS )r1  c                 S   s
   t  d S r\   r2  rO   r   r   r   r3    s    r4  Nr5  r   r   r   r   r     s   c                   @   s"   e Zd ZU dZeed< dd ZdS )r1  r   r(   c                 S   s   |  j d9  _ d S Nr   r?   rO   r   r   r   r3    s    r4  Nr   r   r   r(   r*   r+   r3  r   r   r   r   r     s   
r   r   r   TrJ   c                   @   s"   e Zd ZU dZeed< dd ZdS )r1  r   r(   c                 S   s   |  j d9  _ d S r7  r?   rO   r   r   r   r3    s    r4  Nr8  r   r   r   r   r     s   
)r   r   r   r   r(   FrozenInstanceErrorr`   r   r   r   test_post_initr  s(    $$zTestCase.test_post_initc                 C   s   G dd d}t G dd d|}| | jd t G dd d|}| t |  W d    n1 sl0    Y  t G dd d|}| t |  W d    n1 s0    Y  d S )Nc                   @   s   e Zd Zdd ZdS )z(TestCase.test_post_init_super.<locals>.Bc                 S   s
   t  d S r\   r2  rO   r   r   r   r3    s    z6TestCase.test_post_init_super.<locals>.B.__post_init__Nr5  r   r   r   r   rG     s   rG   c                   @   s   e Zd Zdd ZdS )(TestCase.test_post_init_super.<locals>.Cc                 S   s
   d| _ d S r-  r?   rO   r   r   r   r3    s    6TestCase.test_post_init_super.<locals>.C.__post_init__Nr5  r   r   r   r   r     s   r   rf   c                       s   e Zd Z fddZ  ZS )r;  c                    s   t    d S r\   )superr3  rO   	__class__r   r   r3    s    r<  )r   r   r   r3  __classcell__r   r   r>  r   r     s   c                   @   s   e Zd ZdS )r;  Nr   r   r   r   r   r     s   )r   r   r(   r   r   r#   rG   r   r   r   r   test_post_init_super  s    $zTestCase.test_post_init_superc                    sP   d t G  fddd}|   |dd}| |j|jfd |   d S )NFc                       s.   e Zd ZU eed< eed< e fddZdS )z/TestCase.test_post_init_staticmethod.<locals>.Cr(   rB   c                      s   d d S NTr   r   flagr   r   r3    s    z=TestCase.test_post_init_staticmethod.<locals>.C.__post_init__N)r   r   r   r*   r+   staticmethodr3  r   rD  r   r   r     s   
r   rD   r   rD   r   )r   r   r   r(   rB   r   rz   r   rD  r   test_post_init_staticmethod  s    

z$TestCase.test_post_init_staticmethodc                 C   sL   t G dd d}| |j |dd}| |j|jfd | |j d S )Nc                   @   s.   e Zd ZU dZeed< eed< edd ZdS )z.TestCase.test_post_init_classmethod.<locals>.CFr(   rB   c                 S   s
   d| _ d S rC  rD  r   r   r   r   r3    s    z<TestCase.test_post_init_classmethod.<locals>.C.__post_init__N)r   r   r   rE  r*   r+   classmethodr3  r   r   r   r   r     s
   
r   rD   r   rG  )r   r   rE  r   r(   rB   r   rz   r   r   r   test_post_init_classmethod  s    
z#TestCase.test_post_init_classmethodc                 C   s   t G dd d}|d}| t|d | tt|d | t|jd | |jd | |jd | |jd	 | |j	d
 | jd7  _| |jd |d}| |j
|jfd | |jd | |jd | |jd	 | |j	d
 d S )Nc                   @   s^   e Zd ZU eed< dZeed< dZee ed< dZee ed< dZ	ee ed	< d
Z
eed< dS )z"TestCase.test_class_var.<locals>.Cr(   r^   rB     rc     w  r     sN)r   r   r   r*   r+   rB   rc   r   rM  r   rP  r   r   r   r   r     s   
r   rf   z-TestCase.test_class_var.<locals>.C(x=5, y=10)r   r  rK  rL  rN  rO  r/     r   r   r^   )r   r   r9   r    r!   r+   rc   rM  r   rP  r(   rB   rz   r   r   r   test_class_var  s$    zTestCase.test_class_varc                 C   s$   t G dd d}| d|j d S )Nc                   @   s   e Zd ZU ee ed< dS )z-TestCase.test_class_var_no_default.<locals>.Cr(   N)r   r   r   r   r*   r+   r   r   r   r   r     s   
r   r(   r   r   r   r`   r   r   r   test_class_var_no_default  s    z"TestCase.test_class_var_no_defaultc                 C   sP   |  td0 tG dd d}| d|j W d    n1 sB0    Y  d S )Ncannot have a default factoryc                   @   s$   e Zd ZU eedZee ed< dS )z2TestCase.test_class_var_default_factory.<locals>.Cr(  r(   Nr   r   r   r3   r*   r(   r   r+   r   r   r   r   r     s   
r   r(   r4   rH   r   r   r   r`   r   r   r   test_class_var_default_factory  s    z'TestCase.test_class_var_default_factoryc                 C   sD   t G dd d}| |jd t G dd d}| |jd d S )Nc                   @   s   e Zd ZU dZee ed< dS )/TestCase.test_class_var_with_default.<locals>.Cr^   r(   N)r   r   r   r(   r   r*   r+   r   r   r   r   r     s   
r   r^   c                   @   s$   e Zd ZU eddZee ed< dS )rZ  r^   r   r(   N)r   r   r   r3   r(   r   r*   r+   r   r   r   r   r     s   
r-   r`   r   r   r   test_class_var_with_default  s    z$TestCase.test_class_var_with_defaultc                 C   s   t ddG dd d}|d}| t|dd | tt|d | t|jd | |jd | |jd	 | |jd
 | jd7  _| |jd |d}| |j	|j
fd | |jd | |jd	 | |jd
 d S )NTrJ   c                   @   sR   e Zd ZU eed< dZeed< dZee ed< dZee ed< dZ	ee ed	< d
S )z)TestCase.test_class_var_frozen.<locals>.Cr(   r^   rB   rK  rc   rL  rM  rN  r   N)
r   r   r   r*   r+   rB   rc   r   rM  r   r   r   r   r   r     s
   
r   rf   z4TestCase.test_class_var_frozen.<locals>.C(x=5, y=10)r   rK  rL  rN  r/   rQ  r   rR  )r   r   r9   r    r!   r+   rc   rM  r   r(   rB   rz   r   r   r   test_class_var_frozen  s     zTestCase.test_class_var_frozenc                 C   s$   t G dd d}| d|j d S )Nc                   @   s   e Zd ZU ee ed< dS )z,TestCase.test_init_var_no_default.<locals>.Cr(   N)r   r   r   InitVarr*   r+   r   r   r   r   r   7  s   
r   r(   rT  r`   r   r   r   test_init_var_no_default5  s    z!TestCase.test_init_var_no_defaultc                 C   sP   |  td0 tG dd d}| d|j W d    n1 sB0    Y  d S )NrV  c                   @   s$   e Zd ZU eedZee ed< dS )z1TestCase.test_init_var_default_factory.<locals>.Cr(  r(   N)r   r   r   r3   r*   r(   r]  r+   r   r   r   r   r   B  s   
r   r(   rX  r`   r   r   r   test_init_var_default_factory=  s    z&TestCase.test_init_var_default_factoryc                 C   sD   t G dd d}| |jd t G dd d}| |jd d S )Nc                   @   s   e Zd ZU dZee ed< dS ).TestCase.test_init_var_with_default.<locals>.Cr^   r(   N)r   r   r   r(   r]  r*   r+   r   r   r   r   r   J  s   
r   r^   c                   @   s$   e Zd ZU eddZee ed< dS )r`  r^   r   r(   N)r   r   r   r3   r(   r]  r*   r+   r   r   r   r   r   O  s   
r-   r`   r   r   r   test_init_var_with_defaultH  s    z#TestCase.test_init_var_with_defaultc                 C   s.   t G dd d}|dd}| |jd d S )Nc                   @   s2   e Zd ZU dZeed< dZee ed< dd ZdS )z!TestCase.test_init_var.<locals>.CNr(   
init_paramc                 S   s   | j d u r|d | _ d S r7  r?   )r#   rb  r   r   r   r3  Z  s    
z/TestCase.test_init_var.<locals>.C.__post_init__)	r   r   r   r(   r*   r+   rb  r]  r3  r   r   r   r   r   U  s   
r   r^   )rb  r   r-   rz   r   r   r   test_init_varT  s    
zTestCase.test_init_varc                 C   sZ   |  tt jt |  ttt d |  tttt  d |  tttt  d d S )Ndataclasses.InitVar[int]z%dataclasses.InitVar[typing.List[int]]zdataclasses.InitVar[list[int]])r   r]  r*   r   r9   r   r   rO   r   r   r   test_init_var_preserve_typea  s    z$TestCase.test_init_var_preserve_typec                 C   sl   t G dd d}|dd}| t|ddi t G dd d|}|ddd	d
}| t|ddd d S )Nc                   @   s"   e Zd ZU eed< ee ed< dS )z0TestCase.test_init_var_inheritance.<locals>.Baser(   	init_baseN)r   r   r   r*   r+   r]  r   r   r   r   rb   o  s   
rb   r   r^   r(   c                   @   s*   e Zd ZU eed< ee ed< dd ZdS )z-TestCase.test_init_var_inheritance.<locals>.CrB   init_derivedc                 S   s   | j | | _ | j| | _d S r\   r(   rB   )r#   rf  rg  r   r   r   r3  ~  s    z;TestCase.test_init_var_inheritance.<locals>.C.__post_init__Nr   r   r   r*   r+   r]  r3  r   r   r   r   r   y  s   
r      2   3      e   rh  )r   r   r   )r#   rb   r   r   rt   r   r   r   test_init_var_inheritancek  s    
z"TestCase.test_init_var_inheritancec                    s  t G dd d}|d}|d}| |jd | |jg  | || | |j|j | t|ddgddgf g  t G  fddd}|d}|d}| |jd | |jg  | || | |j|j | t|ddgddgf t G dd d}| t| d | | jg  t d	d
G dd d}| t| g f | t| td t G dd d}| t| g f t G dd d}| | |dg d S )Nc                   @   s(   e Zd ZU eed< eedZeed< dS )(TestCase.test_default_factory.<locals>.Cr(   r(  rB   N)r   r   r   r*   r+   r3   r   rB   r   r   r   r   r     s   
r   rD   rf   r/   c                       s0   e Zd ZU eed< e fdddZeed< dS )rp  r(   c                      s    S r\   r   r   r  r   r   r     r   z1TestCase.test_default_factory.<locals>.C.<lambda>r(  rB   N)r   r   r   r*   r+   r3   rB   r   r   r  r   r   r     s   
c                   @   s"   e Zd ZU eeddZeed< dS )rp  F)r2   r9   r(   Nr   r   r   r3   r   r(   r+   r   r   r   r   r     s   
z*TestCase.test_default_factory.<locals>.C()TrZ   c                   @   s"   e Zd ZU eeddZeed< dS )rp  F)r2   r_   r(   Nrq  r   r   r   r   r     s   
r   c                   @   s"   e Zd ZU eeddZeed< dS )rp  Fr2   r8   r(   Nrq  r   r   r   r   r     s   
c                   @   s"   e Zd ZU eeddZeed< dS )rp  F)r2   r   r(   Nrq  r   r   r   r   r     s   
)	r   r   r(   rB   assertIsNotastupler   r9   r_   )r#   r   Zc0c1r   r  r   test_default_factory  sB    zTestCase.test_default_factoryc                    sL   t   tG  fddd}| j |  jd | j |  jd d S )Nc                       s"   e Zd ZU e ddZeed< dS )z5TestCase.test_default_factory_with_no_init.<locals>.CFrr  r(   N)r   r   r   r3   r(   r   r+   r   factoryr   r   r     s   
r   r/   r   r   r   r(   r   
call_countr`   r   rw  r   !test_default_factory_with_no_init  s    z*TestCase.test_default_factory_with_no_initc                    sl   t   tG  fddd}| j |  jd | |djd |  jd | j |  jd d S )Nc                       s    e Zd ZU e dZeed< dS )zBTestCase.test_default_factory_not_called_if_value_given.<locals>.Cr(  r(   Nr   r   rw  r   r   r     s   
r   r/   r^   r   ry  r`   r   rw  r   .test_default_factory_not_called_if_value_given  s    z7TestCase.test_default_factory_not_called_if_value_givenc                 C   s~   t G dd d}t G dd d|}| | ji  | | ji  | | jd t G dd d|}| | ji  d S )Nc                   @   s    e Zd ZU eedZeed< dS )z2TestCase.test_default_factory_derived.<locals>.Foor(  r(   N)r   r   r   r3   r   r(   r+   r   r   r   r   Foo  s   
r}  c                   @   s   e Zd ZU dZeed< dS )z2TestCase.test_default_factory_derived.<locals>.Barr/   rB   Nr   r   r   rB   r*   r+   r   r   r   r   Bar  s   
r  r/   c                   @   s   e Zd ZdS )z2TestCase.test_default_factory_derived.<locals>.BazNr   r   r   r   r   Baz  s   r  )r   r   r(   rB   )r#   r}  r  r  r   r   r   test_default_factory_derived  s    z%TestCase.test_default_factory_derivedc                 C   s   t G dd d}G dd d|}t G dd d|}|dd}| |j|jfd	 | td
 |j W d    n1 s|0    Y  G dd d|}|dd}| |j|jfd d S )Nc                   @   s   e Zd ZU eed< dS )z3TestCase.test_intermediate_non_dataclass.<locals>.Ar(   Nr)   r   r   r   r   A  s   
r  c                   @   s   e Zd ZU eed< dS )z3TestCase.test_intermediate_non_dataclass.<locals>.BrB   Nr)   r   r   r   r   rG     s   
rG   c                   @   s   e Zd ZU eed< dS )z3TestCase.test_intermediate_non_dataclass.<locals>.Crc   Nr)   r   r   r   r   r     s   
r   r/   rD   )r/   rD   zobject has no attributec                   @   s   e Zd ZU eed< dS )z3TestCase.test_intermediate_non_dataclass.<locals>.Dr   Nr)   r   r   r   r   r     s   
r   r   rf   )r   rf   )r   r   r(   rc   r4   AttributeErrorrB   )r#   r  rG   r   rt   r   r   r   r   r   test_intermediate_non_dataclass  s    
$
z(TestCase.test_intermediate_non_dataclassc                 C   sB   |  td" tG dd d}W d    n1 s40    Y  d S )NrV  c                   @   s$   e Zd ZU eedZee ed< dS )z1TestCase.test_classvar_default_factory.<locals>.Cr(  r(   NrW  r   r   r   r   r     s   
r   r4   rH   r   r`   r   r   r   test_classvar_default_factory  s
    z&TestCase.test_classvar_default_factoryc                    s   G dd d}|  td |  tt |  t| |  t|  tG dd d tG  fddd} d}||d	}| t  | t| |  t|j | t|j |  t|j d S )
Nc                   @   s   e Zd ZdS )z0TestCase.test_is_dataclass.<locals>.NotDataClassNr   r   r   r   r   NotDataClass  s   r  r   c                   @   s   e Zd ZU eed< dS )z%TestCase.test_is_dataclass.<locals>.Cr(   Nr)   r   r   r   r   r     s   
r   c                       s   e Zd ZU  ed< eed< dS )z%TestCase.test_is_dataclass.<locals>.Dr   eNr   r   r   r+   r*   r   r   r   r   r   "  s   
r   r^   r   )r   is_dataclassr*   r   r   r(   r   r  )r#   r  r   rt   r   r   r  r   test_is_dataclass  s     
zTestCase.test_is_dataclassc              
   C   s*  G dd d}|  t| | }G dd d}| }g |_||fD ]}| j|d |  t| | td t| W d    n1 s0    Y  | td t| W d    n1 s0    Y  | td t|dd W d    n1 s0    Y  W d    qD1 s0    Y  qDd S )	Nc                   @   s   e Zd Zdd ZdS )zATestCase.test_is_dataclass_when_getattr_always_returns.<locals>.Ac                 S   s   dS Nr   r   )r#   keyr   r   r   __getattr__3  s    zMTestCase.test_is_dataclass_when_getattr_always_returns.<locals>.A.__getattr__N)r   r   r   r  r   r   r   r   r  2  s   r  c                   @   s   e Zd ZdS )zATestCase.test_is_dataclass_when_getattr_always_returns.<locals>.BNr   r   r   r   r   rG   9  s   rG   )objz'should be called on dataclass instancesr   r?   )	r   r  Z__dataclass_fields__r   r4   rH   asdictrt  replace)r#   r  r   rG   r   r  r   r   r   -test_is_dataclass_when_getattr_always_returns0  s    &&z6TestCase.test_is_dataclass_when_getattr_always_returnsc                 C   sR   t G dd dtj}| t| |tt}| tt| | t| d S )Nc                   @   s   e Zd ZU eed< eed< dS )z2TestCase.test_is_dataclass_genericalias.<locals>.AoriginargsN)r   r   r   r   r+   r   r   r   r   r  K  s   
r  )r   typesGenericAliasr   r  r   r*   r   )r#   r  r   r   r   r   test_is_dataclass_genericaliasJ  s    
z'TestCase.test_is_dataclass_genericaliasc                 C   s0   t G dd d}| t|t|dd d S )Nc                   @   s   e Zd ZU eed< eed< dS )z:TestCase.test_helper_fields_with_class_instance.<locals>.Cr(   rB   N)r   r   r   r*   r+   r  r   r   r   r   r   X  s   
r   r   g        r   r`   r   r   r   &test_helper_fields_with_class_instanceU  s    z/TestCase.test_helper_fields_with_class_instancec                 C   s   |  td td W d    n1 s*0    Y  G dd d}|  td t| W d    n1 sl0    Y  |  td t|  W d    n1 s0    Y  d S )Nzdataclass type or instancer   c                   @   s   e Zd ZdS )z0TestCase.test_helper_fields_exception.<locals>.CNr   r   r   r   r   r   e  r   r   )r4   rH   r!   r`   r   r   r   test_helper_fields_exception_  s    &&z%TestCase.test_helper_fields_exceptionc                 C   s   t G dd d}|dd}| t|ddd | t|t| | t|t| d|_| t|ddd | tt|t d S )Nc                   @   s   e Zd ZU eed< eed< dS )z&TestCase.test_helper_asdict.<locals>.Cr(   rB   Nr)   r   r   r   r   r   m  s   
r   r/   r   rh  r,   )r   r   r  rs  r(   r   r   r   rz   r   r   r   test_helper_asdictk  s    
zTestCase.test_helper_asdictc                 C   s~   t G dd d}| td t| W d    n1 s<0    Y  | td tt W d    n1 sp0    Y  d S )Nc                   @   s   e Zd ZU eed< eed< dS )z8TestCase.test_helper_asdict_raises_on_classes.<locals>.Cr(   rB   Nr)   r   r   r   r   r   |  s   
r   dataclass instance)r   r4   rH   r  r*   r`   r   r   r   $test_helper_asdict_raises_on_classesz  s    &z-TestCase.test_helper_asdict_raises_on_classesc                 C   sx   t G dd d}g }|d|}t|}| |d | | |d | |d}t|}|d d | |jg  d S )Nc                   @   s,   e Zd ZU eed< eedZee ed< dS )z2TestCase.test_helper_asdict_copy_values.<locals>.Cr(   r(  rB   N	r   r   r   r*   r+   r3   r   rB   r   r   r   r   r   r     s   
r   r/   rB   )r   r  r   rs  appendrB   )r#   r   initialrt   r   r   r   r   test_helper_asdict_copy_values  s    
z'TestCase.test_helper_asdict_copy_valuesc                    s   t G dd d t G  fddd}|d dd}t|}| |ddddd	 | t|t| d
|j_| t|ddd
dd	 d S )Nc                   @   s   e Zd ZU eed< eed< dS )z2TestCase.test_helper_asdict_nested.<locals>.UserIdtokengroupNr)   r   r   r   r   UserId  s   
r  c                       s   e Zd ZU eed<  ed< dS )z0TestCase.test_helper_asdict_nested.<locals>.Userr;   r:   Nrj   r   r  r   r   User  s   
r  Joe{   r/   )r  r  r;   r:   r   )r   r  r   rs  r:   r  )r#   r  ur   r   r  r   test_helper_asdict_nested  s    z"TestCase.test_helper_asdict_nestedc           	         s  t G dd d t G  fddd}t G  fddd}t G  fddd} d	d
} dd}|d||g}|d||f}|d||d}| t|dd	d
ddddgd | t|dd	d
ddddfd | t|dd	d
dddddd d S )Nc                   @   s   e Zd ZU eed< eed< dS )z<TestCase.test_helper_asdict_builtin_containers.<locals>.Userr;   r:   Nr   r   r   rk   r+   r*   r   r   r   r   r    s   
r  c                       s"   e Zd ZU eed< e  ed< dS )zATestCase.test_helper_asdict_builtin_containers.<locals>.GroupListr:   usersNr   r   r   r*   r+   r   r   r  r   r   	GroupList  s   
r  c                       s&   e Zd ZU eed< e df ed< dS )zBTestCase.test_helper_asdict_builtin_containers.<locals>.GroupTupler:   .r  Nr   r   r   r*   r+   r   r   r  r   r   
GroupTuple  s   
r  c                       s&   e Zd ZU eed< ee f ed< dS )zATestCase.test_helper_asdict_builtin_containers.<locals>.GroupDictr:   r  Nr   r   r   r*   r+   r	   rk   r   r  r   r   	GroupDict  s   
r  Alicer/   Bobr   r   rv   secondr  )r:   r  r   r   r  	r#   r  r  r  r   r   glgtgdr   r  r   %test_helper_asdict_builtin_containers  s,    



z.TestCase.test_helper_asdict_builtin_containersc                    sx   t G dd d t G  fddd}| t| dgdddgii | t| ddiddddiii d S )	Nc                   @   s   e Zd ZU eed< dS )zDTestCase.test_helper_asdict_builtin_object_containers.<locals>.Childr   Nr   r   r   rx   r+   r   r   r   r   Child  s   
r  c                       s   e Zd ZU  ed< dS )zETestCase.test_helper_asdict_builtin_object_containers.<locals>.ParentchildNr  r   r  r   r   Parent  s   
r  r/   r  r   r   r  r#   r  r   r  r   ,test_helper_asdict_builtin_object_containers  s    $z5TestCase.test_helper_asdict_builtin_object_containersc                 C   s   t G dd d}|dd}t|td}| |tddg | |t|td d|_t|td}| |td	dg | t|t d S )
Nc                   @   s   e Zd ZU eed< eed< dS )z.TestCase.test_helper_asdict_factory.<locals>.Cr(   rB   Nr)   r   r   r   r   r     s   
r   r/   r   Zdict_factory)r(   r/   )rB   r   r,   )r(   r,   )r   r  r   r   rs  r(   r   r   r#   r   rt   r   r   r   r   test_helper_asdict_factory  s    
z#TestCase.test_helper_asdict_factoryc                    s   t dd tG  fddd}|d d|d dd	d
d}t|}| |d dd dd	d
ddd t|td}| |d dd dd	d
ddd | t|t | t|d d t d S )NTa b cc                       s   e Zd ZU eed<  ed< dS )z1TestCase.test_helper_asdict_namedtuple.<locals>.Cr(   rB   Nrj   r   r  r   r   r     s   
r   outerr/   innerrj        r   rh  r  rB   )r   r   r  r   r   r   r   r  r   r  r   test_helper_asdict_namedtuple  s0    
 

	z&TestCase.test_helper_asdict_namedtuplec                 C   sN   t G dd d}tdd}||ddi}| t|d|dddii d S )	Nc                   @   s   e Zd ZU eed< dS )z5TestCase.test_helper_asdict_namedtuple_key.<locals>.Cr   N)r   r   r   r   r+   r   r   r   r   r     s   
r   r  r   zan ar   r   r   )r   r   r   r  )r#   r   r  rt   r   r   r   !test_helper_asdict_namedtuple_key  s
    
z*TestCase.test_helper_asdict_namedtuple_keyc                    s   G dd dt dd tG  fddd} d}||}t|}| |d dd	i | |d | | |d  d d S )
Nc                   @   s   e Zd Zdd ZdS )z9TestCase.test_helper_asdict_namedtuple_derived.<locals>.Tc                 S   s   | j S r\   r  rO   r   r   r   my_a  s    z>TestCase.test_helper_asdict_namedtuple_derived.<locals>.T.my_aN)r   r   r   r  r   r   r   r   r    s   r  ZTbaser   c                       s   e Zd ZU  ed< dS )z9TestCase.test_helper_asdict_namedtuple_derived.<locals>.Cr   Nr  r   r  r   r   r     s   
r   r  r   r  )r   r   r  r   rs  r  )r#   r   r   rt   r   r   r  r   %test_helper_asdict_namedtuple_derived
  s    z.TestCase.test_helper_asdict_namedtuple_derivedc                 C   s   t G dd d}|d}| t|d | t|t| | t|t| d|_| t|d | tt|t d S )Nc                   @   s"   e Zd ZU eed< dZeed< dS )z'TestCase.test_helper_astuple.<locals>.Cr(   r   rB   NrC   r   r   r   r   r     s   
r   r/   )r/   r   r,   )r/   r,   )r   r   rt  rs  rB   r   r   r   rz   r   r   r   test_helper_astuple  s    zTestCase.test_helper_astuplec                 C   s~   t G dd d}| td t| W d    n1 s<0    Y  | td tt W d    n1 sp0    Y  d S )Nc                   @   s   e Zd ZU eed< eed< dS )z9TestCase.test_helper_astuple_raises_on_classes.<locals>.Cr(   rB   Nr)   r   r   r   r   r   -  s   
r   r  )r   r4   rH   rt  r*   r`   r   r   r   %test_helper_astuple_raises_on_classes+  s    &z.TestCase.test_helper_astuple_raises_on_classesc                 C   sx   t G dd d}g }|d|}t|}| |d | | |d | |d}t|}|d d | |jg  d S )Nc                   @   s,   e Zd ZU eed< eedZee ed< dS )z3TestCase.test_helper_astuple_copy_values.<locals>.Cr(   r(  rB   Nr  r   r   r   r   r   7  s   
r   r/   )r   rt  r   rs  r  rB   )r#   r   r  rt   r   r   r   r   test_helper_astuple_copy_values6  s    
z(TestCase.test_helper_astuple_copy_valuesc                    s|   t G dd d t G  fddd}|d dd}t|}| |d | t|t| d	|j_| t|d
 d S )Nc                   @   s   e Zd ZU eed< eed< dS )z3TestCase.test_helper_astuple_nested.<locals>.UserIdr  r  Nr)   r   r   r   r   r  F  s   
r  c                       s   e Zd ZU eed<  ed< dS )z1TestCase.test_helper_astuple_nested.<locals>.Userr;   r:   Nrj   r   r  r   r   r  J  s   
r  r  r  r/   )r  )r  r/   r   )r  )r  r   )r   rt  r   rs  r:   r  )r#   r  r  r   r   r  r   test_helper_astuple_nestedE  s    z#TestCase.test_helper_astuple_nestedc           	         s   t G dd d t G  fddd}t G  fddd}t G  fddd} d	d
} dd}|d||g}|d||f}|d||d}| t|dddgf | t|d | t|ddddf d S )Nc                   @   s   e Zd ZU eed< eed< dS )z=TestCase.test_helper_astuple_builtin_containers.<locals>.Userr;   r:   Nr  r   r   r   r   r  V  s   
r  c                       s"   e Zd ZU eed< e  ed< dS )zBTestCase.test_helper_astuple_builtin_containers.<locals>.GroupListr:   r  Nr  r   r  r   r   r  Z  s   
r  c                       s&   e Zd ZU eed< e df ed< dS )zCTestCase.test_helper_astuple_builtin_containers.<locals>.GroupTupler:   .r  Nr  r   r  r   r   r  ^  s   
r  c                       s&   e Zd ZU eed< ee f ed< dS )zBTestCase.test_helper_astuple_builtin_containers.<locals>.GroupDictr:   r  Nr  r   r  r   r   r  b  s   
r  r  r/   r  r   r   r  r  r/   r  r   )r   )r  r  r   r   rt  r  r   r  r   &test_helper_astuple_builtin_containersU  s     

z/TestCase.test_helper_astuple_builtin_containersc                    sp   t G dd d t G  fddd}| t| dgdgff | t| ddiddiff d S )Nc                   @   s   e Zd ZU eed< dS )zETestCase.test_helper_astuple_builtin_object_containers.<locals>.Childr   Nr  r   r   r   r   r  p  s   
r  c                       s   e Zd ZU  ed< dS )zFTestCase.test_helper_astuple_builtin_object_containers.<locals>.Parentr  Nr  r   r  r   r   r  t  s   
r  r/   r   r  r  r   r  r   -test_helper_astuple_builtin_object_containerso  s     z6TestCase.test_helper_astuple_builtin_object_containersc                    s   t G dd d}tdd  fdd}|dd}t||d	}| | dd | |t||d	 d
|_t||d	}| | d
d | t|  d S )Nc                   @   s   e Zd ZU eed< eed< dS )z/TestCase.test_helper_astuple_factory.<locals>.Cr(   rB   Nr)   r   r   r   r   r   |  s   
r   NTzx yc                    s    |  S r\   r   )r  r  r   r   nt  s    z0TestCase.test_helper_astuple_factory.<locals>.ntr/   r   Ztuple_factoryr,   )r   r   rt  r   rs  r(   r   r   )r#   r   r  rt   r   r   r  r   test_helper_astuple_factory{  s    

z$TestCase.test_helper_astuple_factoryc                    s   t dd tG  fddd}|d d|d dd	d
d}t|}| |d dddf t|td}| |d dd dd	d
gdg d S )Nr  r  c                       s   e Zd ZU eed<  ed< dS )z2TestCase.test_helper_astuple_namedtuple.<locals>.Cr(   rB   Nrj   r   r  r   r   r     s   
r   r  r/   r  rj  r  r  r   )r  )rj  r  r  r  )r   r   rt  r   r   )r#   r   rt   r   r   r  r   test_helper_astuple_namedtuple  s    
 z'TestCase.test_helper_astuple_namedtuplec                 C   sN   dt t di}tdd|}t|}| || | t|ddddd d S )Nr+   rh  r   r   r/   r   )r*   r   r   r   r  r#   Zcls_dictr   Zcls1r   r   r   test_dynamic_class_creation  s
    z$TestCase.test_dynamic_class_creationc                 C   sT   t t dtddd}tdd|}t|}| || | t|dddd d S )Nrh  rf   r   )r+   rB   r   r   r/   )r*   r3   r   r   r   r  r  r   r   r   'test_dynamic_class_creation_using_field  s    z0TestCase.test_dynamic_class_creation_using_fieldc                    s   t G dd d}g   fdd}||_|dd}| d d  | d d  | d	g f d
  | dg f d  | d  | d d  d S )Nc                   @   sj   e Zd ZU eed< e Zeed< eeddZeed< eedZ	eed< eddd	Z
eed
< dZeed< dS )z&TestCase.test_init_in_order.<locals>.Cr   r   Frr  rt   r(  r   r   r  r  r   N)r   r   r   r*   r+   r3   r   r   rt   r   r  r   r   r   r   r   r     s   
r   c                    s     ||f d S r\   )r  r#   r;   valueZcallsr   r   setattr  s    z,TestCase.test_init_in_order.<locals>.setattrr   r/   )r   r   )r   r/   rt   r   r   rD   )r  r   )r   r   r   )r   __setattr__r   r   )r#   r   r  rt   r   r  r   test_init_in_order  s    
zTestCase.test_init_in_orderc                 C   s   t G dd d}|d}| d|j | d|j | d|j | d|j | |jd | d	|j | |jd | d|j | |jd | d|j | |jg  | d|j | |j	g  | d|j | d	|j | |jd d S )
Nc                   @   s\   e Zd ZU eed< eeddZeed< eedZeed< edddZ	eed	< d
Z
eed< dS )z'TestCase.test_items_in_dicts.<locals>.Cr   Frr  r   r(  rt   r   r  r   r   r  N)r   r   r   r*   r+   r3   r   r   rt   r   r  r   r   r   r   r     s
   
r   r   r   r   rt   r   r   r  )
r   r   r   r   r   r   r  r   r   rt   rz   r   r   r   test_items_in_dicts  s&    zTestCase.test_items_in_dictsc                 C   s*   t G dd d}| |djd d S )Nc                   @   s"   e Zd ZU eed< edd ZdS )z:TestCase.test_alternate_classmethod_constructor.<locals>.Cr(   c                 S   s   d}| |S )Nr   r   )r   filenameZvalue_in_filer   r   r   	from_file  s    zDTestCase.test_alternate_classmethod_constructor.<locals>.C.from_fileN)r   r   r   r*   r+   rI  r  r   r   r   r   r     s   
r   r  r   )r   r   r  r(   r`   r   r   r   &test_alternate_classmethod_constructor  s    	z/TestCase.test_alternate_classmethod_constructorc                 C   s   t G dd d}| t|d j | tt|d jd | td" dt|d jd< W d    n1 st0    Y  d S )Nc                   @   s   e Zd ZU eed< dS )z/TestCase.test_field_metadata_default.<locals>.Cr&   Nr)   r   r   r   r   r     s   
r   r    does not support item assignmentrD   test)r   r   r!   metadatar   r    r4   rH   r`   r   r   r   test_field_metadata_default  s    z$TestCase.test_field_metadata_defaultc                    sF  |  t" tG dd d}W d    n1 s20    Y  i  tG  fddd}| t|d j | tt|d jd d d< | tt|d jd | t|d jd d | td" dt|d jd	< W d    n1 s0    Y  d
ddd tG  fddd}| tt|d jd | t|d jd	 d
 | t|d jd d | t|d jd d d d< | tt|d jd | t|d jd d |  t	" t|d jd  W d    n1 s0    Y  | td" dt|d jd	< W d    n1 s80    Y  d S )Nc                   @   s    e Zd ZU eddZeed< dS )/TestCase.test_field_metadata_mapping.<locals>.Cr   r  r&   Nr   r   r   r3   r&   r*   r+   r   r   r   r   r     s   
r   c                       s    e Zd ZU e dZeed< dS r  r  r&   Nr  r   r   r   r   r     s   
r   r/   rl   r  rD   r  r^   Z42Zthree)r  r.  rD   c                       s    e Zd ZU e dZeed< dS r  r  r   r  r   r   r      s   
r.  r   Zbaz)
r   rH   r   r   r!   r  r   r    r4   KeyErrorr`   r   r  r   test_field_metadata_mapping  s>    .02z$TestCase.test_field_metadata_mappingc                    s   G dd d t G  fddd}| tt|d jd | t|d jd d | t" t|d jd	  W d    n1 s0    Y  | t|d jd
 d d S )Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )zDTestCase.test_field_metadata_custom_mapping.<locals>.SimpleNameSpacec                 [   s   | j | d S r\   )r   update)r#   kwr   r   r   ro   5  s    zMTestCase.test_field_metadata_custom_mapping.<locals>.SimpleNameSpace.__init__c                 S   s   |dkrdS t | |S )Nxyzzyplugh)r   )r#   itemr   r   r   __getitem__8  s    zPTestCase.test_field_metadata_custom_mapping.<locals>.SimpleNameSpace.__getitem__c                 S   s
   | j  S r\   )r   __len__rO   r   r   r   r  =  s    zLTestCase.test_field_metadata_custom_mapping.<locals>.SimpleNameSpace.__len__N)r   r   r   ro   r  r  r   r   r   r   SimpleNameSpace4  s   r  c                       s&   e Zd ZU e dddZeed< dS )z6TestCase.test_field_metadata_custom_mapping.<locals>.Cr^   r  r  r&   Nr  r   r  r   r   r   @  s   
r   r   r/   r   r^   r   r  r  )r   r   r    r!   r  r   r  r`   r   r  r   "test_field_metadata_custom_mapping2  s    0z+TestCase.test_field_metadata_custom_mappingc                    sX   t d tG  fdddt  }|d}| |jd | |jd t|t  }d S )Nr  c                       s"   e Zd ZU  ed< dZeed< dS )z5TestCase.test_generic_dataclasses.<locals>.LabeledBoxcontent	<unknown>labelN)r   r   r   r+   r  rk   r   r  r   r   
LabeledBoxN  s   
r	  r,   r  )r   r   r
   r   r  r  r   r*   )r#   r	  ZboxAliasr   r  r   test_generic_dataclassesK  s    z!TestCase.test_generic_dataclassesc                    s   t d t dtG  fdddt f }tG dd d|tf }|t }|ddd	}| t|d
 G dd d|tf }|t }|dd}| | d d S )NSr  c                       s   e Zd ZU ed<  ed< dS )z-TestCase.test_generic_extending.<locals>.Baser(   rB   Nr  r   r  r  r   r   rb   ^  s   
rb   c                   @   s   e Zd ZU eed< dS )z4TestCase.test_generic_extending.<locals>.DataDerivedZ	new_fieldNrj   r   r   r   r   DataDerivedc  s   
r  r   test1test2)r   r  r  c                   @   s   e Zd Zdd ZdS )z7TestCase.test_generic_extending.<locals>.NonDataDerivedc                 S   s   | j S r\   rB   rO   r   r   r   
new_methodk  s    zBTestCase.test_generic_extending.<locals>.NonDataDerived.new_methodN)r   r   r   r  r   r   r   r   NonDataDerivedj  s   r  r^         ?)	r   r   r
   r*   rk   r   rt  r  r  )r#   rb   r  r
  rt   r  r   r  r   test_generic_extendingZ  s     
zTestCase.test_generic_extendingc                    s   t d tG  fdddt  }tdd fdt  d fg|t t  fddid	}| |t d
djd  | |t d
ddjd | |t d
ddj	d |  }| |t d
dj
d
 | |j||ttf d S )Nr  c                       s   e Zd ZU  ed< dS )z-TestCase.test_generic_dynamic.<locals>.Parentr(   Nr  r   r  r   r   r  t  s   
r  r  rB   rc   rU   r,   )bases	namespacer/   r   rD   )r   r   r
   r   r   r*   r   rc   r   rU   r(   __mro__rx   )r#   r  r  r
  r   r  r   test_generic_dynamicq  s    zTestCase.test_generic_dynamicc              
   C   s8  t G dd dat G dd dat G dd datd}d|_tdtddtd|tdtdg d	g}|D ]}ttjd D ]}| j||d
 t	t
||}| |j|j | |j|j | || d|_t	t
||}| |j|j | |j|j W d    q1 s&0    Y  qqtd S )Nc                   @   s"   e Zd ZU eed< dZeed< dS )Pr(   r   rB   NrC   r   r   r   r   r    s   
r  c                   @   s*   e Zd ZU eed< edddZeed< dS )Qr(   r   Fr  rB   Nr   r   r   r*   r+   r3   rB   r   r   r   r   r    s   
r  c                   @   s,   e Zd ZU eed< eedZee ed< dS )Rr(   r(  rB   Nr  r   r   r   r   r    s   
r  r/   r   )r   rD   r   )sampleprotor,   )r   r  r  r  rB   rangepickleHIGHEST_PROTOCOLr   loadsdumpsr   r(   rs  )r#   qZsamplesr  r  Z
new_sampleZanother_new_sampler   r   r   test_dataclassses_pickleable  s(    ,z%TestCase.test_dataclassses_pickleableN)ar   r   r   r%   r'   r.   r7   r=   r@   rI   ra   rh   rw   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  r:  rB  rH  rJ  rS  rU  rY  r[  r\  r^  r_  ra  rc  re  ro  rv  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      s   ,5!6(!$-F/
9
!+r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestFieldNoAnnotationc                 C   sB   |  td" tG dd d}W d    n1 s40    Y  d S )N)'f' is a field but has no type annotationc                   @   s   e Zd Ze ZdS )z>TestFieldNoAnnotation.test_field_without_annotation.<locals>.CNr   r   r   r3   r   r   r   r   r   r     s   r   r  r`   r   r   r   test_field_without_annotation  s
    z3TestFieldNoAnnotation.test_field_without_annotationc                 C   sV   t G dd d}| td$ t G dd d|}W d    n1 sH0    Y  d S )Nc                   @   s   e Zd ZU eed< dS )zUTestFieldNoAnnotation.test_field_without_annotation_but_annotation_in_base.<locals>.Br   Nr)   r   r   r   r   rG     s   
rG   r(  c                   @   s   e Zd Ze ZdS )zUTestFieldNoAnnotation.test_field_without_annotation_but_annotation_in_base.<locals>.CNr)  r   r   r   r   r     s   r   r   r4   rH   rA  r   r   r   4test_field_without_annotation_but_annotation_in_base  s    zJTestFieldNoAnnotation.test_field_without_annotation_but_annotation_in_basec                 C   sR   G dd d}|  td$ tG dd d|}W d    n1 sD0    Y  d S )Nc                   @   s   e Zd ZU eed< dS )zcTestFieldNoAnnotation.test_field_without_annotation_but_annotation_in_base_not_dataclass.<locals>.Br   Nr)   r   r   r   r   rG     s   
rG   r(  c                   @   s   e Zd Ze ZdS )zcTestFieldNoAnnotation.test_field_without_annotation_but_annotation_in_base_not_dataclass.<locals>.CNr)  r   r   r   r   r     s   r   r  rA  r   r   r   Btest_field_without_annotation_but_annotation_in_base_not_dataclass  s    zXTestFieldNoAnnotation.test_field_without_annotation_but_annotation_in_base_not_dataclassN)r   r   r   r*  r,  r-  r   r   r   r   r'    s   r'  c                   @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )TestDocStringc                 C   s    |  |dd|dd d S )N  )r   r  )r#   r   r   r   r   r   assertDocStrEqual  s    zTestDocString.assertDocStrEqualc                 C   s$   t G dd d}| |jd d S )Nc                   @   s   e Zd ZU dZeed< dS )z?TestDocString.test_existing_docstring_not_overridden.<locals>.CLorem ipsumr(   N)r   r   r   __doc__r*   r+   r   r   r   r   r     s   
r   r2  )r   r   r3  r`   r   r   r   &test_existing_docstring_not_overridden  s    z4TestDocString.test_existing_docstring_not_overriddenc                 C   s$   t G dd d}| |jd d S )Nc                   @   s   e Zd ZdS )z1TestDocString.test_docstring_no_fields.<locals>.CNr   r   r   r   r   r     s   r   zC()r   r1  r3  r`   r   r   r   test_docstring_no_fields  s    z&TestDocString.test_docstring_no_fieldsc                 C   s$   t G dd d}| |jd d S )Nc                   @   s   e Zd ZU eed< dS )z1TestDocString.test_docstring_one_field.<locals>.Cr(   Nr)   r   r   r   r   r     s   
r   zC(x:int)r5  r`   r   r   r   test_docstring_one_field  s    z&TestDocString.test_docstring_one_fieldc                 C   s$   t G dd d}| |jd d S )Nc                   @   s   e Zd ZU eed< eed< dS )z2TestDocString.test_docstring_two_fields.<locals>.Cr(   rB   Nr)   r   r   r   r   r     s   
r   zC(x:int, y:int)r5  r`   r   r   r   test_docstring_two_fields  s    z'TestDocString.test_docstring_two_fieldsc                 C   s$   t G dd d}| |jd d S )Nc                   @   s&   e Zd ZU eed< eed< eed< dS )z4TestDocString.test_docstring_three_fields.<locals>.Cr(   rB   rc   Nr   r   r   r*   r+   rk   r   r   r   r   r     s   
r   zC(x:int, y:int, z:str)r5  r`   r   r   r   test_docstring_three_fields  s    z)TestDocString.test_docstring_three_fieldsc                 C   s$   t G dd d}| |jd d S )Nc                   @   s   e Zd ZU dZeed< dS )z>TestDocString.test_docstring_one_field_with_default.<locals>.CrD   r(   NrE   r   r   r   r   r     s   
r   z
C(x:int=3)r5  r`   r   r   r   %test_docstring_one_field_with_default  s    z3TestDocString.test_docstring_one_field_with_defaultc                 C   s$   t G dd d}| |jd d S )Nc                   @   s&   e Zd ZU dZeeedf ed< dS )zCTestDocString.test_docstring_one_field_with_default_none.<locals>.CNr(   )r   r   r   r(   r   r*   r   r+   r   r   r   r   r     s   
r   zC(x:Optional[int]=None)r5  r`   r   r   r   *test_docstring_one_field_with_default_none  s    z8TestDocString.test_docstring_one_field_with_default_nonec                 C   s$   t G dd d}| |jd d S )Nc                   @   s   e Zd ZU ee ed< dS )z2TestDocString.test_docstring_list_field.<locals>.Cr(   N)r   r   r   r   r*   r+   r   r   r   r   r      s   
r   zC(x:List[int])r5  r`   r   r   r   test_docstring_list_field  s    z'TestDocString.test_docstring_list_fieldc                 C   s$   t G dd d}| |jd d S )Nc                   @   s$   e Zd ZU eedZee ed< dS )zGTestDocString.test_docstring_list_field_with_default_factory.<locals>.Cr(  r(   N)	r   r   r   r3   r   r(   r   r*   r+   r   r   r   r   r     s   
r   zC(x:List[int]=<factory>)r5  r`   r   r   r   .test_docstring_list_field_with_default_factory  s    z<TestDocString.test_docstring_list_field_with_default_factoryc                 C   s$   t G dd d}| |jd d S )Nc                   @   s   e Zd ZU eed< dS )z3TestDocString.test_docstring_deque_field.<locals>.Cr(   N)r   r   r   r   r+   r   r   r   r   r     s   
r   zC(x:collections.deque)r5  r`   r   r   r   test_docstring_deque_field  s    z(TestDocString.test_docstring_deque_fieldc                 C   s$   t G dd d}| |jd d S )Nc                   @   s    e Zd ZU eedZeed< dS )zHTestDocString.test_docstring_deque_field_with_default_factory.<locals>.Cr(  r(   N)r   r   r   r3   r   r(   r+   r   r   r   r   r     s   
r   z C(x:collections.deque=<factory>)r5  r`   r   r   r   /test_docstring_deque_field_with_default_factory  s    z=TestDocString.test_docstring_deque_field_with_default_factoryN)r   r   r   r1  r4  r6  r7  r8  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	S )
TestInitc                 C   s   G dd d}t G dd d|}|d}| |jd | dt| t ddG d	d d|}| }| |jd | |jd
 d S )Nc                   @   s   e Zd Zdd ZdS )z&TestInit.test_base_has_init.<locals>.Bc                 S   s
   d| _ d S )NrR   rc   rO   r   r   r   ro     s    z/TestInit.test_base_has_init.<locals>.B.__init__Nr  r   r   r   r   rG     s   rG   c                   @   s   e Zd ZU dZeed< dS )&TestInit.test_base_has_init.<locals>.Cr   r(   NrE   r   r   r   r   r   '  s   
r   r^   rc   Fr   c                   @   s   e Zd ZU dZeed< dS )rC  r^   r(   NrE   r   r   r   r   r   0  s   
rR   )r   r   r(   r   r   rc   )r#   rG   r   rt   r   r   r   test_base_has_init  s    	zTestInit.test_base_has_initc                 C   sT   t dd G dd d}| | jd t dd G dd d}| | jd d S )NFr   c                   @   s   e Zd ZU dZeed< dS ) TestInit.test_no_init.<locals>.Cr   r&   N)r   r   r   r&   r*   r+   r   r   r   r   r   9  s   
r   r   c                   @   s"   e Zd ZU dZeed< dd ZdS )rE  r   r&   c                 S   s
   d| _ d S NrD   r&   rO   r   r   r   ro   @  s    z)TestInit.test_no_init.<locals>.C.__init__N)r   r   r   r&   r*   r+   ro   r   r   r   r   r   >  s   
rD   )r   r   r&   r`   r   r   r   test_no_init7  s    

zTestInit.test_no_initc                 C   s|   t G dd d}| |djd t ddG dd d}| |djd	 t d
dG dd d}| |djd d S )Nc                   @   s   e Zd ZU eed< dd ZdS ))TestInit.test_overwriting_init.<locals>.Cr(   c                 S   s   d| | _ d S r7  r?   r#   r(   r   r   r   ro   K  s    2TestInit.test_overwriting_init.<locals>.C.__init__Nr   r   r   r*   r+   ro   r   r   r   r   r   H  s   
r   rD   r  Tr   c                   @   s   e Zd ZU eed< dd ZdS )rI  r(   c                 S   s   d| | _ d S r7  r?   rJ  r   r   r   ro   R  s    rK  NrL  r   r   r   r   r   O  s   
r      Fc                   @   s   e Zd ZU eed< dd ZdS )rI  r(   c                 S   s   d| | _ d S r7  r?   rJ  r   r   r   ro   Y  s    rK  NrL  r   r   r   r   r   V  s   
rf   r^   r-   r`   r   r   r   test_overwriting_initD  s    zTestInit.test_overwriting_initc                 C   s`   G dd dt }tG dd d|}| |djd tG dd d|}| |djd d S )	Nc                   @   s   e Zd ZU eed< dS )z.TestInit.test_inherit_from_protocol.<locals>.Pr   Nr)   r   r   r   r   r  a  s   
r  c                   @   s   e Zd ZU eed< dS )z.TestInit.test_inherit_from_protocol.<locals>.Cr   Nr)   r   r   r   r   r   d  s   
r   rf   c                   @   s   e Zd Zdd ZdS )z.TestInit.test_inherit_from_protocol.<locals>.Dc                 S   s   |d | _ d S r7  r  )r#   r   r   r   r   ro   l  s    z7TestInit.test_inherit_from_protocol.<locals>.D.__init__Nr  r   r   r   r   r   j  s   r   r^   )r   r   r   r   )r#   r  r   r   r   r   r   test_inherit_from_protocol]  s    z#TestInit.test_inherit_from_protocolN)r   r   r   rD  rH  rN  rO  r   r   r   r   rA    s   rA  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestReprc                 C   s   t G dd d}t G dd d|}|d}| t|d t G dd d|}| t| d	 t G d
d d}| t|dd | t| d d S )Nc                   @   s   e Zd ZU eed< dS )zTestRepr.test_repr.<locals>.Br(   Nr)   r   r   r   r   rG   t  s   
rG   c                   @   s   e Zd ZU dZeed< dS )TestRepr.test_repr.<locals>.Cr^   rB   Nr~  r   r   r   r   r   x  s   
r   r   z(TestRepr.test_repr.<locals>.C(x=4, y=10)c                   @   s   e Zd ZU dZeed< dS )zTestRepr.test_repr.<locals>.Dr   r(   NrE   r   r   r   r   r     s   
r   z)TestRepr.test_repr.<locals>.D(x=20, y=10)c                   @   s0   e Zd ZeG dd dZeG dd dZdS )rQ  c                   @   s   e Zd ZU eed< dS )zTestRepr.test_repr.<locals>.C.Dr&   Nr)   r   r   r   r   r     s   
r   c                   @   s   e Zd ZdS )zTestRepr.test_repr.<locals>.C.ENr   r   r   r   r   r     s   r   N)r   r   r   r   r   r   r   r   r   r   r     s   r   z$TestRepr.test_repr.<locals>.C.D(i=0)z!TestRepr.test_repr.<locals>.C.E())r   r   r9   r   r   )r#   rG   r   r$   r   r   r   r   	test_reprs  s    zTestRepr.test_reprc                 C   sb   t ddG dd d}| t dt|d t ddG dd d}| t|dd d S )	NFr   c                   @   s   e Zd ZU eed< dS ) TestRepr.test_no_repr.<locals>.Cr(   Nr)   r   r   r   r   r     s   
r   z+.TestRepr.test_no_repr.<locals>.C object atrD   c                   @   s   e Zd ZU eed< dd ZdS )rS  r(   c                 S   s   dS )NC-classr   rO   r   r   r   __repr__  s    z)TestRepr.test_no_repr.<locals>.C.__repr__Nr   r   r   r*   r+   rU  r   r   r   r   r     s   
rT  )r   r   r   r9   r   r`   r   r   r   test_no_repr  s    
zTestRepr.test_no_reprc                 C   s   t G dd d}| t|dd t ddG dd d}| t|dd t ddG d	d d}| t|dd d S )
Nc                   @   s   e Zd ZU eed< dd ZdS ))TestRepr.test_overwriting_repr.<locals>.Cr(   c                 S   s   dS Nr(   r   rO   r   r   r   rU    s    2TestRepr.test_overwriting_repr.<locals>.C.__repr__NrV  r   r   r   r   r     s   
r   r   r(   Tr   c                   @   s   e Zd ZU eed< dd ZdS )rX  r(   c                 S   s   dS rY  r   rO   r   r   r   rU    s    rZ  NrV  r   r   r   r   r     s   
Fc                   @   s   e Zd ZU eed< dd ZdS )rX  r(   c                 S   s   dS rY  r   rO   r   r   r   rU    s    rZ  NrV  r   r   r   r   r     s   
rg   r`   r   r   r   test_overwriting_repr  s    zTestRepr.test_overwriting_reprN)r   r   r   rR  rW  r[  r   r   r   r   rP  r  s   rP  c                   @   s   e Zd Zdd Zdd ZdS )TestEqc                 C   sl   t ddG dd d}| |d|d |d}| || t ddG dd d}| |dd d S )	NFr   c                   @   s   e Zd ZU eed< dS )TestEq.test_no_eq.<locals>.Cr(   Nr)   r   r   r   r   r     s   
r   r   rD   c                   @   s   e Zd ZU eed< dd ZdS )r^  r(   c                 S   s   |dkS r6  r   rT   r   r   r   rV     s    z#TestEq.test_no_eq.<locals>.C.__eq__NrX   r   r   r   r   r     s   
r^   )r   rs   r   rz   r   r   r   
test_no_eq  s    zTestEq.test_no_eqc                 C   s   t G dd d}| |dd | |dd t ddG dd d}| |dd | |dd t d	dG d
d d}| |dd | |dd d S )Nc                   @   s   e Zd ZU eed< dd ZdS )%TestEq.test_overwriting_eq.<locals>.Cr(   c                 S   s   |dkS rF  r   rT   r   r   r   rV     s    ,TestEq.test_overwriting_eq.<locals>.C.__eq__NrX   r   r   r   r   r     s   
r   r/   rD   Tr]  c                   @   s   e Zd ZU eed< dd ZdS )r`  r(   c                 S   s   |dkS r,  r   rT   r   r   r   rV     s    ra  NrX   r   r   r   r   r     s   
r   Fc                   @   s   e Zd ZU eed< dd ZdS )r`  r(   c                 S   s   |dkS r-  r   rT   r   r   r   rV     s    ra  NrX   r   r   r   r   r     s   
rf   r   r`   r   r   r   test_overwriting_eq  s    zTestEq.test_overwriting_eqN)r   r   r   r_  rb  r   r   r   r   r\    s   r\  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestOrderingc                 C   sZ   t tG dd d}| |dd | |dd | |dd | |dd d S )Nc                   @   s   e Zd ZU eed< dd ZdS )z5TestOrdering.test_functools_total_ordering.<locals>.Cr(   c                 S   s
   | j |kS r\   r?   rT   r   r   r   r     s    z<TestOrdering.test_functools_total_ordering.<locals>.C.__lt__Nr   r   r   r*   r+   r   r   r   r   r   r     s   
r   r   r/   )r   r   r   r   r   r   r`   r   r   r   test_functools_total_ordering  s    z*TestOrdering.test_functools_total_orderingc                 C   s   t ddG dd d}| d|j | d|j | d|j | d|j t ddG d	d d}| d|j | d|j | d|j d S )
NFr   c                   @   s   e Zd ZU eed< dS )%TestOrdering.test_no_order.<locals>.Cr(   Nr)   r   r   r   r   r     s   
r   r   r   r   r   c                   @   s   e Zd ZU eed< dd ZdS )rg  r(   c                 S   s   dS rS   r   rT   r   r   r   r   	  s    z,TestOrdering.test_no_order.<locals>.C.__lt__Nrd  r   r   r   r   r   	  s   
rT  r`   r   r   r   test_no_order  s    zTestOrdering.test_no_orderc                 C   s  |  td( tddG dd d}W d    n1 s:0    Y  |  td( tddG dd d}W d    n1 s~0    Y  |  td( tddG d	d d}W d    n1 s0    Y  |  td
( tddG dd d}W d    n1 s0    Y  d S )NzACannot overwrite attribute __lt__.*using functools.total_orderingTr   c                   @   s   e Zd ZU eed< dd ZdS ).TestOrdering.test_overwriting_order.<locals>.Cr(   c                 S   s   d S r\   r   rO   r   r   r   r   	  s    z5TestOrdering.test_overwriting_order.<locals>.C.__lt__Nrd  r   r   r   r   r   	  s   
r   zACannot overwrite attribute __le__.*using functools.total_orderingc                   @   s   e Zd ZU eed< dd ZdS )ri  r(   c                 S   s   d S r\   r   rO   r   r   r   r   	  s    z5TestOrdering.test_overwriting_order.<locals>.C.__le__N)r   r   r   r*   r+   r   r   r   r   r   r   	  s   
zACannot overwrite attribute __gt__.*using functools.total_orderingc                   @   s   e Zd ZU eed< dd ZdS )ri  r(   c                 S   s   d S r\   r   rO   r   r   r   r   (	  s    z5TestOrdering.test_overwriting_order.<locals>.C.__gt__N)r   r   r   r*   r+   r   r   r   r   r   r   %	  s   
zACannot overwrite attribute __ge__.*using functools.total_orderingc                   @   s   e Zd ZU eed< dd ZdS )ri  r(   c                 S   s   d S r\   r   rO   r   r   r   r   1	  s    z5TestOrdering.test_overwriting_order.<locals>.C.__ge__N)r   r   r   r*   r+   r   r   r   r   r   r   .	  s   
r  r`   r   r   r   test_overwriting_order	  s(    ...z#TestOrdering.test_overwriting_orderN)r   r   r   rf  rh  rj  r   r   r   r   rc    s   rc  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 )TestHashc                 C   s6   t ddG dd d}| t|ddtd d S )NTrZ   c                   @   s   e Zd ZU eed< eed< dS )z$TestHash.test_unsafe_hash.<locals>.Cr(   rB   Nr9  r   r   r   r   r   6	  s   
r   r/   rl   )r/   rl   r   r   r_   r`   r   r   r   test_unsafe_hash5	  s    zTestHash.test_unsafe_hashc           	         s   dd } fdd}t g ddD ]r\}\}}}}}|||||d| |||||d| ||||||||d| ||||||||d| q"d S )	Nc                 S   s   | d u rd S | rdS dS )N)rD   r   r   )r  r   r   r   non_bool=	  s
    z*TestHash.test_hash_rules.<locals>.non_boolc              	      s^   j | |||d4 |dkr\|r@t|||dG dd d}nt|||dG dd d}|dkr d|j  |jd  n|d	kr|s d|j n|d
krȈ d|j  |jd  nr|dkr&|sJ  td, t|||dG dd d}W d    n1 s0    Y  nds:J d|W d    n1 sP0    Y  d S )N)caser[   r   rK   r   )r[   r   rK   c                   @   s   e Zd Zdd ZdS )1TestHash.test_hash_rules.<locals>.test.<locals>.Cc                 S   s   dS r  r   rO   r   r   r   rP   L	  s    :TestHash.test_hash_rules.<locals>.test.<locals>.C.__hash__Nr]   r   r   r   r   r   J	  s   r   c                   @   s   e Zd ZdS )rp  Nr   r   r   r   r   r   O	  s   r   rP   r0  nonerY   c                   @   s   e Zd Zdd ZdS )rp  c                 S   s   dS r  r   rO   r   r   r   rP   j	  s    rq  Nr]   r   r   r   r   r   h	  s   Fr   )	r   r   r   r   ZassertIsNotNoner   r   r4   rH   )ro  r[   r   rK   Z	with_hashr   r   rO   r   r   r  E	  s0    


2z&TestHash.test_hash_rules.<locals>.test))FFFr0  r0  )FFTr0  r0  )FTFrr  r0  )FTTr   r0  )TFFr   r   )TFTr   r   )TTFr   r   )TTTr   r   r/   FT)r   )	r#   rn  r  ro  r[   r   rK   Zres_no_defined_hashZres_defined_hashr   rO   r   test_hash_rules<	  s    1	
zTestHash.test_hash_rulesc                 C   s   t G dd d}| |d|d | |d|d t ddG dd d}| |d|d | t|dt|d t ddd	G d
d d}| |d|d | |d|d | t|dt|d d S )Nc                   @   s   e Zd ZU eed< dd ZdS ) TestHash.test_eq_only.<locals>.Cr&   c                 S   s   | j |j kS r\   rG  rT   r   r   r   rV   	  s    'TestHash.test_eq_only.<locals>.C.__eq__NrX   r   r   r   r   r   	  s   
r   r/   r   TrZ   c                   @   s   e Zd ZU eed< dd ZdS )rt  r&   c                 S   s   | j |j kS r\   rG  rT   r   r   r   rV   	  s    ru  NrX   r   r   r   r   r   	  s   
r  )r[   r   c                   @   s   e Zd ZU eed< dd ZdS )rt  r&   c                 S   s   | j dko| j |j kS rF  rG  rT   r   r   r   rV   	  s    ru  NrX   r   r   r   r   r   	  s   
rD   )r   r   rs   r_   r`   r   r   r   test_eq_only	  s    
zTestHash.test_eq_onlyc                 C   s`   t ddG dd d}| t| td t ddG dd d}| t| td d S )NTrJ   c                   @   s   e Zd ZdS z%TestHash.test_0_field_hash.<locals>.CNr   r   r   r   r   r   	  s   r   r   rZ   c                   @   s   e Zd ZdS rw  r   r   r   r   r   r   	  s   rl  r`   r   r   r   test_0_field_hash	  s    zTestHash.test_0_field_hashc                 C   s   t ddG dd d}| t|dtd | t|dtd t dd	G d
d d}| t|dtd | t|dtd d S )NTrJ   c                   @   s   e Zd ZU eed< dS z%TestHash.test_1_field_hash.<locals>.Cr(   Nr)   r   r   r   r   r   	  s   
r   r   )r   r,   r,   rZ   c                   @   s   e Zd ZU eed< dS ry  r)   r   r   r   r   r   	  s   
rl  r`   r   r   r   test_1_field_hash	  s    zTestHash.test_1_field_hashc                 C   s`  G dd d}d d t dfd d |dfd dt dfd d|dfd dt dfd d|dfdd t dfdd |dfddt dfdd|dfddt dfdd|dfdd t dfdd |dfddt dfdd|dfddt dfdd|dffD ]\}}}}| j||||d	` |d u r|d u rtG d
d d|}nh|d u r:t|dG dd d|}nB|d u r`t|dG dd d|}nt||dG dd d|}|dkr|d}| td t| W d    n1 s0    Y  nt|dkr| t|dd nT|dkr| |jt j n8|dkr&| t|dtd nds:J d|W d    q1 sP0    Y  qd S )Nc                   @   s   e Zd Zdd ZdS )z(TestHash.test_hash_no_args.<locals>.Basec                 S   s   dS rM   r   rO   r   r   r   rP   	  s    z1TestHash.test_hash_no_args.<locals>.Base.__hash__Nr]   r   r   r   r   rb   	  s   rb   Z
unhashableFrx   baseTr   )rK   r   r|  r   c                   @   s   e Zd ZU eed< dS z%TestHash.test_hash_no_args.<locals>.Cr&   Nr)   r   r   r   r   r   	  s   
r   r]  c                   @   s   e Zd ZU eed< dS r}  r)   r   r   r   r   r   	  s   
rJ   c                   @   s   e Zd ZU eed< dS r}  r)   r   r   r   r   r   	  s   
)rK   r   c                   @   s   e Zd ZU eed< dS r}  r)   r   r   r   r   r   	  s   
r^   unhashable typerN   r,   rz  zunknown value for expected=)	rx   r   r   r4   rH   r_   r   r   rP   )r#   rb   rK   r   r|  r   r   rt   r   r   r   test_hash_no_args	  sV    





















*


zTestHash.test_hash_no_argsN)	r   r   r   rm  rs  rv  rx  r{  r  r   r   r   r   rk  4	  s   N#rk  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 )
TestFrozenc                 C   sp   t ddG dd d}|d}| |jd | t d|_W d    n1 sT0    Y  | |jd d S )NTrJ   c                   @   s   e Zd ZU eed< dS )z!TestFrozen.test_frozen.<locals>.Cr&   Nr)   r   r   r   r   r   
  s   
r   r^   rf   )r   r   r&   r   r9  rz   r   r   r   test_frozen
  s    $zTestFrozen.test_frozenc                 C   s   t ddG dd d}t ddG dd d|}|dd}| t d	|_W d    n1 sb0    Y  | t d
|_W d    n1 s0    Y  | |jd | |jd d S )NTrJ   c                   @   s   e Zd ZU eed< dS )z"TestFrozen.test_inherit.<locals>.Cr&   Nr)   r   r   r   r   r   
  s   
r   c                   @   s   e Zd ZU eed< dS )z"TestFrozen.test_inherit.<locals>.Dr  Nr)   r   r   r   r   r   !
  s   
r   r   r^   rf   r  )r   r   r9  r&   r  r   r#   r   r   r   r   r   r   test_inherit
  s    
$$zTestFrozen.test_inheritc                 C   s\   t ddG dd d}| td$ t G dd d|}W d    n1 sN0    Y  d S )NTrJ   c                   @   s   e Zd ZdS )z>TestFrozen.test_inherit_nonfrozen_from_empty_frozen.<locals>.CNr   r   r   r   r   r   .
  s   r   5cannot inherit non-frozen dataclass from a frozen onec                   @   s   e Zd ZU eed< dS )z>TestFrozen.test_inherit_nonfrozen_from_empty_frozen.<locals>.Dr  Nr)   r   r   r   r   r   4
  s   
r   r+  r&  r   r   r   (test_inherit_nonfrozen_from_empty_frozen-
  s    z3TestFrozen.test_inherit_nonfrozen_from_empty_frozenc                 C   sL   t G dd d}t G dd d|}|d}| |jd | || d S )Nc                   @   s   e Zd ZdS )z7TestFrozen.test_inherit_nonfrozen_from_empty.<locals>.CNr   r   r   r   r   r   9
  s   r   c                   @   s   e Zd ZU eed< dS )z7TestFrozen.test_inherit_nonfrozen_from_empty.<locals>.Dr  Nr)   r   r   r   r   r   =
  s   
r   rD   )r   r   r  r   r  r   r   r   !test_inherit_nonfrozen_from_empty8
  s    z,TestFrozen.test_inherit_nonfrozen_from_emptyc              
   C   s   dD ]}| j |d tddG dd d}|rDG dd d|}n|}| td	$ tG d
d d|}W d    n1 s~0    Y  W d    q1 s0    Y  qd S )NTFintermediate_classTrJ   c                   @   s   e Zd ZU eed< dS )z8TestFrozen.test_inherit_nonfrozen_from_frozen.<locals>.Cr&   Nr)   r   r   r   r   r   J
  s   
r   c                   @   s   e Zd ZdS )z8TestFrozen.test_inherit_nonfrozen_from_frozen.<locals>.INr   r   r   r   r   IO
  r   r  r  c                   @   s   e Zd ZdS )z8TestFrozen.test_inherit_nonfrozen_from_frozen.<locals>.DNr   r   r   r   r   r   U
  s   r   r   r   r4   rH   r#   r  r   r  r   r   r   r   "test_inherit_nonfrozen_from_frozenG
  s    z-TestFrozen.test_inherit_nonfrozen_from_frozenc              
   C   s   dD ]}| j |d tG dd d}|r>G dd d|}n|}| td* tdd	G d
d d|}W d    n1 s~0    Y  W d    q1 s0    Y  qd S )Nr  r  c                   @   s   e Zd ZU eed< dS )z8TestFrozen.test_inherit_frozen_from_nonfrozen.<locals>.Cr&   Nr)   r   r   r   r   r   \
  s   
r   c                   @   s   e Zd ZdS )z8TestFrozen.test_inherit_frozen_from_nonfrozen.<locals>.INr   r   r   r   r   r  a
  r   r  z5cannot inherit frozen dataclass from a non-frozen oneTrJ   c                   @   s   e Zd ZdS )z8TestFrozen.test_inherit_frozen_from_nonfrozen.<locals>.DNr   r   r   r   r   r   g
  s   r   r  r  r   r   r   "test_inherit_frozen_from_nonfrozenY
  s    z-TestFrozen.test_inherit_frozen_from_nonfrozenc              	   C   s   dD ]}| j |dR G dd d}|r:G dd d|}n|}tddG d	d
 d
|}W d    n1 sl0    Y  |d}| t d|_W d    q1 s0    Y  qd S )Nr  r  c                   @   s   e Zd ZdS )z4TestFrozen.test_inherit_from_normal_class.<locals>.CNr   r   r   r   r   r   n
  s   r   c                   @   s   e Zd ZdS )z4TestFrozen.test_inherit_from_normal_class.<locals>.INr   r   r   r   r   r  r
  r   r  TrJ   c                   @   s   e Zd ZU eed< dS )z4TestFrozen.test_inherit_from_normal_class.<locals>.Dr&   Nr)   r   r   r   r   r   v
  s   
r   r^   rf   )r   r   r   r9  r&   )r#   r  r   r  r   r   r   r   r   test_inherit_from_normal_classk
  s    0z)TestFrozen.test_inherit_from_normal_classc                 C   s   t ddG dd d}G dd d|}|d}| |jd | |jd d|_| t d	|_W d    n1 sx0    Y  | t d	|_W d    n1 s0    Y  | |jd | |jd | |jd d S )
NTrJ   c                   @   s"   e Zd ZU eed< dZeed< dS )z4TestFrozen.test_non_frozen_normal_derived.<locals>.Dr(   r^   rB   NrC   r   r   r   r   r   
  s   
r   c                   @   s   e Zd ZdS )z4TestFrozen.test_non_frozen_normal_derived.<locals>.SNr   r   r   r   r   r  
  s   r  rD   r^   rf   )r   r   r(   rB   cachedr   r9  )r#   r   r  rP  r   r   r   test_non_frozen_normal_derived~
  s    $$z)TestFrozen.test_non_frozen_normal_derivedc                 C   s   |  td( tddG dd d}W d    n1 s:0    Y  |  td( tddG dd d}W d    n1 s~0    Y  tddG d	d d}| |d
jd d S )Nz&Cannot overwrite attribute __setattr__TrJ   c                   @   s   e Zd ZU eed< dd ZdS )-TestFrozen.test_overwriting_frozen.<locals>.Cr(   c                 S   s   d S r\   r   rO   r   r   r   r  
  s    9TestFrozen.test_overwriting_frozen.<locals>.C.__setattr__Nr   r   r   r*   r+   r  r   r   r   r   r   
  s   
r   z&Cannot overwrite attribute __delattr__c                   @   s   e Zd ZU eed< dd ZdS )r  r(   c                 S   s   d S r\   r   rO   r   r   r   __delattr__
  s    z9TestFrozen.test_overwriting_frozen.<locals>.C.__delattr__N)r   r   r   r*   r+   r  r   r   r   r   r   
  s   
Fc                   @   s   e Zd ZU eed< dd ZdS )r  r(   c                 S   s   |d | j d< d S )Nr   r(   )r   r  r   r   r   r  
  s    r  Nr  r   r   r   r   r   
  s   
r^   r   )r4   rH   r   r   r(   r`   r   r   r   test_overwriting_frozen
  s    ..z"TestFrozen.test_overwriting_frozenc                 C   s`   t ddG dd d}t|d | td t|i  W d    n1 sR0    Y  d S )NTrJ   c                   @   s   e Zd ZU eed< dS )z&TestFrozen.test_frozen_hash.<locals>.Cr(   N)r   r   r   r   r+   r   r   r   r   r   
  s   
r   rD   r~  )r   r_   r4   rH   r`   r   r   r   test_frozen_hash
  s
    zTestFrozen.test_frozen_hashN)r   r   r   r  r  r  r  r  r  r  r  r  r  r   r   r   r   r  
  s   r  c                   @   s   e Zd Zdd Zdd ZdS )	TestSlotsc                 C   s   t G dd d}| td |  W d    n1 s:0    Y  |d}| |jd d|_| |jd | td d|_W d    n1 s0    Y  d S )Nc                   @   s   e Zd ZU dZeed< dS )z TestSlots.test_simple.<locals>.Cr?   r(   Nr   r   r   	__slots__r   r+   r   r   r   r   r   
  s   
r   r   r^   rf   z'C' object has no attribute 'y')r   r4   rH   r   r(   r  rB   rz   r   r   r   test_simple
  s    $zTestSlots.test_simplec                 C   sN   t G dd d}t G dd d|}|dd}| |j|jfd d|_d S )	Nc                   @   s   e Zd ZU dZeed< dS )z0TestSlots.test_derived_added_field.<locals>.Baser?   r(   Nr  r   r   r   r   rb   
  s   
rb   c                   @   s   e Zd ZU eed< eed< dS )z3TestSlots.test_derived_added_field.<locals>.Derivedr(   rB   Nr)   r   r   r   r   Derived
  s   
r  r/   r   r  r^   )r   r   r(   rB   rc   )r#   rb   r  r   r   r   r   test_derived_added_field
  s    
z"TestSlots.test_derived_added_fieldN)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	S )
TestDescriptorsc                    sn   G dd d t G  fddd}| |jjd t G  fddd}| |jjd | | jd d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z(TestDescriptors.test_set_name.<locals>.Dc                 S   s   |d | _ d S rY  r;   r#   ownerr;   r   r   r   __set_name__
  s    z5TestDescriptors.test_set_name.<locals>.D.__set_name__c                 S   s   |d urdS | S Nr/   r   )r#   instancer  r   r   r   __get__
  s    z0TestDescriptors.test_set_name.<locals>.D.__get__N)r   r   r   r  r  r   r   r   r   r   
  s   r   c                       s   e Zd ZU   Zeed< dS )(TestDescriptors.test_set_name.<locals>.Crt   N)r   r   r   rt   r*   r+   r   r   r   r   r   
  s   
r   cxc                       s$   e Zd ZU e  ddZeed< dS )r  Fr  rt   Nr   r   r   r3   rt   r*   r+   r   r  r   r   r   
  s   
r/   r   r   rt   r;   r`   r   r  r   test_set_name
  s    
zTestDescriptors.test_set_namec                    s8   G dd d t G  fddd}| |jjd d S )Nc                   @   s   e Zd Zdd ZdS )z.TestDescriptors.test_non_descriptor.<locals>.Dc                 S   s   |d | _ d S rY  r  r  r   r   r   r  
  s    z;TestDescriptors.test_non_descriptor.<locals>.D.__set_name__N)r   r   r   r  r   r   r   r   r   	  s   r   c                       s$   e Zd ZU e  ddZeed< dS )z.TestDescriptors.test_non_descriptor.<locals>.CFr  rt   Nr  r   r  r   r   r     s   
r   r  r  r`   r   r  r   test_non_descriptor  s    z#TestDescriptors.test_non_descriptorc                    sF   G dd d}|  t   _tG  fddd}|  jjd d S )Nc                   @   s   e Zd ZdS )z2TestDescriptors.test_lookup_on_instance.<locals>.DNr   r   r   r   r   r     s   r   c                       s"   e Zd ZU e ddZeed< dS )z2TestDescriptors.test_lookup_on_instance.<locals>.CFr  r&   Nr  r   r  r   r   r     s   
r   r   r   r  r   r   rz  )r#   r   r   r   r  r   test_lookup_on_instance  s    z'TestDescriptors.test_lookup_on_instancec                    s@   G dd d t   _tG  fddd}|  jjd d S )Nc                   @   s   e Zd ZdS )z/TestDescriptors.test_lookup_on_class.<locals>.DNr   r   r   r   r   r   $  s   r   c                       s$   e Zd ZU e  ddZeed< dS )z/TestDescriptors.test_lookup_on_class.<locals>.CFr  r&   Nr  r   r  r   r   r   )  s   
r   r/   r  r`   r   r  r   test_lookup_on_class"  s
    z$TestDescriptors.test_lookup_on_classN)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S )TestStringAnnotationsc              	      sd   dD ]Z | j  d: tG  fddd}|  | d|j W d    q1 sT0    Y  qd S )N)zClassVar[int]zClassVar [int] ClassVar [int]r   z
 ClassVar ztyping.ClassVar[int]ztyping.ClassVar[str]z typing.ClassVar[str]ztyping .ClassVar[str]ztyping. ClassVar[str]ztyping.ClassVar [str]ztyping.ClassVar [ str]ztyping.ClassVar.[int]ztyping.ClassVar+Ztypestrc                       s   e Zd ZU  ed< dS )z.TestStringAnnotations.test_classvar.<locals>.Cr(   Nr  r   r  r   r   r   J  s   
r   r(   )r   r   r   r   r`   r   r  r   test_classvar1  s    z#TestStringAnnotations.test_classvarc              	      sb   dD ]X | j  d8 tG  fddd}| |djd W d    q1 sR0    Y  qd S )N)
CVz
t.ClassVarzt.ClassVar[int]ztyping..ClassVar[int]ZClassvarzClassvar[int]ztyping.ClassVarx[int]ztypong.ClassVar[int]zdataclasses.ClassVar[int]ztypingxClassVar[str]r  c                       s   e Zd ZU  ed< dS )z3TestStringAnnotations.test_isnt_classvar.<locals>.Cr(   Nr  r   r  r   r   r   b  s   
r   r^   r   r   r   r(   r`   r   r  r   test_isnt_classvarU  s
    z(TestStringAnnotations.test_isnt_classvarc              
      s   dD ]| | j  d\ tG  fddd}| td |dj W d    n1 sX0    Y  W d    q1 sv0    Y  qd S )N)zInitVar[int]zInitVar [int] InitVar [int]r]  z	 InitVar rd  zdataclasses.InitVar[str]z dataclasses.InitVar[str]zdataclasses .InitVar[str]zdataclasses. InitVar[str]zdataclasses.InitVar [str]zdataclasses.InitVar [ str]zdataclasses.InitVar.[int]zdataclasses.InitVar+r  c                       s   e Zd ZU  ed< dS )z-TestStringAnnotations.test_initvar.<locals>.Cr(   Nr  r   r  r   r   r     s   
r   zobject has no attribute 'x'r/   )r   r   r4   r  r(   r`   r   r  r   test_initvari  s    z"TestStringAnnotations.test_initvarc              	      sb   dD ]X | j  d8 tG  fddd}| |djd W d    q1 sR0    Y  qd S )N)IVz
dc.InitVarzxdataclasses.xInitVarztyping.xInitVar[int]r  c                       s   e Zd ZU  ed< dS )z2TestStringAnnotations.test_isnt_initvar.<locals>.Cr(   Nr  r   r  r   r   r     s   
r   r^   r  r`   r   r  r   test_isnt_initvar  s
    z'TestStringAnnotations.test_isnt_initvarc                 C   sX  ddl m} ddl m} ddl m} ddl m} ||||fD ]}| j|d |jrb|d}n| }| |j	d |
dd	d
dd}dD ]n}| j|dN | td| d t|| W d    n1 s0    Y  W d    q1 s0    Y  q|jr$| d|j | |jd n| d|j W d    q<1 sH0    Y  q<d S )Nr   )dataclass_module_1)dataclass_module_1_str)dataclass_module_2)dataclass_module_2_str)mr^   r   r/   r   rD   r   )Ziv0Ziv1Ziv2Ziv3)
field_namezobject has no attribute 'r   not_iv4)r  r  r  r  r  r   ZUSING_STRINGSr  r   Zcv0r  r4   r  r   r   r   r  r   )r#   r  r  r  r  r  rt   r  r   r   r   !test_classvar_module_level_import  s*    
Hz7TestStringAnnotations.test_classvar_module_level_importc                 C   sH   ddl m} | t|jd|ji | t|jj|jtd d d S )Nr   )dataclass_textannorl   )rl   r+  )r  r  r   r   r  r}  ro   r   )r#   r  r   r   r   test_text_annotations  s    
z+TestStringAnnotations.test_text_annotationsN)	r   r   r   r  r  r  r  r  r  r   r   r   r   r  0  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S )TestMakeDataclassc                 C   sZ   t ddtfdttddfgddd id	}|d
}| |j|jfd | | d d S )Nr   r(   rB   rf   r   add_onec                 S   s
   | j d S r  r?   rO   r   r   r   r     r   z/TestMakeDataclass.test_simple.<locals>.<lambda>r  r^   )r^   rf   rj  )r   r*   r3   r   r(   rB   r  rz   r   r   r   r    s    
zTestMakeDataclass.test_simplec                 C   s6   i }t ddtfdttddfg|d}| |i  d S )Nr   r(   rB   rf   r   r  )r   r*   r3   r   )r#   nsr   r   r   r   test_no_mutate_namespace  s    z*TestMakeDataclass.test_no_mutate_namespacec                 C   sd   G dd d}G dd d}t ddtfg||fd}|d}| || | || | || d S )	Nc                   @   s   e Zd ZdS )z*TestMakeDataclass.test_base.<locals>.Base1Nr   r   r   r   r   Base1  s   r  c                   @   s   e Zd ZdS )z*TestMakeDataclass.test_base.<locals>.Base2Nr   r   r   r   r   Base2  s   r  r   r(   r  r   )r   r*   r   r#   r  r  r   rt   r   r   r   	test_base  s    zTestMakeDataclass.test_basec                 C   s   t G dd d}G dd d}tddtfg||fd}| td |d	}W d    n1 sb0    Y  |d
d	}| || | || | || | |j|jfd d S )Nc                   @   s   e Zd ZU eed< dS )z4TestMakeDataclass.test_base_dataclass.<locals>.Base1r(   Nr)   r   r   r   r   r    s   
r  c                   @   s   e Zd ZdS )z4TestMakeDataclass.test_base_dataclass.<locals>.Base2Nr   r   r   r   r   r    s   r  r   rB   r  zrequired positionalr   r/   r  )	r   r   r*   r4   rH   r   r   r(   rB   r  r   r   r   test_base_dataclass  s    &
z%TestMakeDataclass.test_base_dataclassc                 C   s`   dd }t ddtfdtt fgd|id}|dd	}| t|dd
i | tt|d d S )Nc                 S   s   |  j |9  _ d S r\   r?   r#   rB   r   r   r   	post_init  s    z2TestMakeDataclass.test_init_var.<locals>.post_initr   r(   rB   r3  r  r   rD   r  r/   )r   r*   r]  r   r   r    r!   )r#   r  r   rt   r   r   r   rc    s    

zTestMakeDataclass.test_init_varc              	   C   s~   t ddtfdtt dfdtt tddfg}|d}| t|ddi | tt|d | |jd | |j	d d S )	Nr   r(   rB   r^   rc   r   r   r/   )
r   r*   r   r3   r   r   r    r!   rB   rc   rz   r   r   r   rS    s    z TestMakeDataclass.test_class_varc              	   C   s   t ddtfdtt dfdtt tddfgdd	}| d
t| | dt| | td t dg dd}W d    n1 s0    Y  d S )Nr   r(   rB   r^   rc   r   r   Fr   ro   rU  zunexpected keyword argument)Zxxinit)	r   r*   r   r3   r   r   r   r4   rH   r`   r   r   r   test_other_params  s    z#TestMakeDataclass.test_other_paramsc                 C   s   t dg d}|ddd}| t|dddd | |jdddd t dddtfd	g}|ddd}| t|dddd | |jdtdd d S )
Nr   r(   rB   rc   r/   r   rD   z
typing.Anyr(   rB   rc   )r   r   r   r+   r*   rz   r   r   r   test_no_types)  s    

zTestMakeDataclass.test_no_typesc              
   C   s   dD ]j}| j |dJ | td tdd|g W d    n1 sF0    Y  W d    q1 sd0    Y  qtdd fD ]j}| j |dJ | td tdd|g W d    n1 s0    Y  W d    q|1 s0    Y  q|d S )	N)r   )r/   r   rD   r   )	bad_fieldzInvalid field: r   r   c                 S   s   | S r\   r   r?   r   r   r   r   B  r   zCTestMakeDataclass.test_invalid_type_specification.<locals>.<lambda>zhas no len\(\))r   r4   rH   r   r  )r#   r  r   r   r   test_invalid_type_specification8  s    Lz1TestMakeDataclass.test_invalid_type_specificationc              
   C   sv   dD ]l}| j |dL | td  td|d|g W d    n1 sH0    Y  W d    q1 sf0    Y  qd S )N)r   abr3   zField name duplicatedr   r   r   r4   rH   r   r#   r3   r   r   r   test_duplicate_field_namesH  s    z,TestMakeDataclass.test_duplicate_field_namesc              
   C   s   dD ]}| j |d | td tdd|g W d    n1 sF0    Y  | td td|g W d    n1 s~0    Y  | td td|dg W d    n1 s0    Y  W d    q1 s0    Y  qd S )N)forasyncawaitasr  zmust not be keywordsr   r   r  r  r   r   r   test_keyword_field_namesN  s    ,*z*TestMakeDataclass.test_keyword_field_namesc              
   C   s   dD ]}| j |d | td tdd|g W d    n1 sF0    Y  | td td|g W d    n1 s~0    Y  | td td|dg W d    n1 s0    Y  W d    q1 s0    Y  qd S )N)()x,yr   2@3r0  zlittle johnny tablesr  zmust be valid identifiersr   r   r  r  r   r   r   test_non_identifier_field_namesX  s    ,*z1TestMakeDataclass.test_non_identifier_field_namesc                 C   s   t dg d d S )Nr   )_Z_aZa_aZa_)r   rO   r   r   r   test_underscore_field_namesb  s    z-TestMakeDataclass.test_underscore_field_namesc              	   C   sV   dD ]L}| j |d, t|ddg}| |j| W d    q1 sF0    Y  qd S )N)r  r  r   r  r0  )	classnamer   r   )r   r   r   r   )r#   r  r   r   r   r   test_funny_class_names_namesg  s    z.TestMakeDataclass.test_funny_class_names_namesN)r   r   r   r  r  r  r  rc  rS  r  r  r  r  r  r  r  r  r   r   r   r   r    s   
	

r  c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestReplacec                 C   sN   t ddG dd d}|dd}t|dd}| |jd | |jd d S )	NTrJ   c                   @   s   e Zd ZU eed< eed< dS )zTestReplace.test.<locals>.Cr(   rB   Nr)   r   r   r   r   r   q  s   
r   r/   r   rD   r?   )r   r  r   r(   rB   r#   r   rt   ru  r   r   r   r  p  s    
zTestReplace.testc                 C   s^  t ddG dd d}|dd}t|dd}| |j|j|j|jfd	 | |j|j|j|jfd
 | td  t|dddd W d    n1 s0    Y  | td, t|dd t|dddd W d    n1 s0    Y  | t	d d|_W d    n1 s0    Y  | t
d t|ddd}W d    n1 sP0    Y  d S )NTrJ   c                   @   sF   e Zd ZU eed< eed< edddZeed< edddZeed< d	S )
z"TestReplace.test_frozen.<locals>.Cr(   rB   Fr^   r   rc   rR   r   N)r   r   r   r*   r+   r3   rc   r   r   r   r   r   r   |  s   
r   r/   r   rD   r?   )r/   r   r^   rR   )rD   r   r^   rR   
init=Falser   rk  )r(   rc   r   rB  zcannot assign to field 'x'z3__init__\(\) got an unexpected keyword argument 'a'rf   )r(   r   )r   r  r   r(   rB   rc   r   r4   r5   r9  rH   r  r   r   r   r  {  s    
..&zTestReplace.test_frozenc                 C   s^   t ddG dd d}|dd}| td t|dd	}W d    n1 sP0    Y  d S )
NTrJ   c                   @   s   e Zd ZU eed< eed< dS )z.TestReplace.test_invalid_field_name.<locals>.Cr(   rB   Nr)   r   r   r   r   r     s   
r   r/   r   z3__init__\(\) got an unexpected keyword argument 'z'rD   rB  r   r4   rH   r  r  r   r   r   test_invalid_field_name  s
    
z#TestReplace.test_invalid_field_namec                 C   s   t ddG dd d}| td t|dd W d    n1 sF0    Y  | td tddd W d    n1 s~0    Y  d S )	NTrJ   c                   @   s   e Zd ZU eed< eed< dS )z*TestReplace.test_invalid_object.<locals>.Cr(   rB   Nr)   r   r   r   r   r     s   
r   r  rD   r?   r   r  r`   r   r   r   test_invalid_object  s    *zTestReplace.test_invalid_objectc                 C   s   t G dd d}|d}d|_t|dd}| |j|jfd | td t|d	d
d W d    n1 sp0    Y  | td t|d
d W d    n1 s0    Y  d S )Nc                   @   s*   e Zd ZU eed< edddZeed< dS )z#TestReplace.test_no_init.<locals>.Cr(   Fr^   r   rB   Nr  r   r   r   r   r     s   
r   r/   r   rf   r?   )rf   r^   r  r      rh  r  )r   rB   r  r   r(   r4   r5   r  r   r   r   rH    s    ,zTestReplace.test_no_initc                 C   s   t G dd d}|d}|d}| |j|j | |jd | td t|dd W d    n1 sn0    Y  t|d	d
 d S )Nc                   @   s&   e Zd ZU eed< dZee ed< dS )z$TestReplace.test_classvar.<locals>.Cr(   rK  rB   N)r   r   r   r*   r+   rB   r   r   r   r   r   r     s   
r   r/   r   rK  z3__init__\(\) got an unexpected keyword argument 'y'r  r  rf   r?   )r   r   rB   r   r4   rH   r  r  r   r   r   r    s    *zTestReplace.test_classvarc                 C   s   t G dd d}|dd}| |jd | td t|dd W d    n1 sX0    Y  t|ddd	}| |jd
 d S )Nc                   @   s*   e Zd ZU eed< ee ed< dd ZdS )z0TestReplace.test_initvar_is_specified.<locals>.Cr(   rB   c                 S   s   |  j |9  _ d S r\   r?   r  r   r   r   r3    s    z>TestReplace.test_initvar_is_specified.<locals>.C.__post_init__Nri  r   r   r   r   r     s   
r   r/   r^   z,InitVar 'y' must be specified with replace()rD   r?   rf   rh  rd   )r   r   r(   r4   r5   r  rz   r   r   r   test_initvar_is_specified  s    
*z%TestReplace.test_initvar_is_specifiedc                 C   sx   t G dd d}|dddd}| t||dd | t|dd	|ddd
d | t|ddd|dddd d S )Nc                   @   s>   e Zd ZU eed< dZee ed< dZee ed< dd ZdS )z6TestReplace.test_initvar_with_default_value.<locals>.Cr(   NrB   r,   rc   c                 S   s0   |d ur|  j |7  _ |d ur,|  j |7  _ d S r\   r?   )r#   rB   rc   r   r   r   r3    s    zDTestReplace.test_initvar_with_default_value.<locals>.C.__post_init__)	r   r   r   r*   r+   rB   r]  rc   r3  r   r   r   r   r     s   
r   r/   r^   r  r  r?   r   r  r,   )rB   rc   )r   r   r  rz   r   r   r   test_initvar_with_default_value  s    z+TestReplace.test_initvar_with_default_valuec                 C   s4   t G dd d}|d }||_| t|d d S )Nc                   @   s   e Zd ZU ded< dS )z*TestReplace.test_recursive_repr.<locals>.Cr   r   Nr  r   r   r   r   r     s   
r   z1TestReplace.test_recursive_repr.<locals>.C(f=...)r   r   r   r9   rz   r   r   r   test_recursive_repr  s
    zTestReplace.test_recursive_reprc                 C   s<   t G dd d}|d d }||_||_| t|d d S )Nc                   @   s   e Zd ZU ded< ded< dS )z4TestReplace.test_recursive_repr_two_attrs.<locals>.Cr   r   gNr  r   r   r   r   r     s   
r   zBTestReplace.test_recursive_repr_two_attrs.<locals>.C(f=..., g=...))r   r   r  r   r9   rz   r   r   r   test_recursive_repr_two_attrs  s    
z)TestReplace.test_recursive_repr_two_attrsc                 C   sT   t G dd d}t G dd d}|d }|d }||_||_| t|d d S )Nc                   @   s   e Zd ZU ded< dS )z6TestReplace.test_recursive_repr_indirection.<locals>.Cr   r   Nr  r   r   r   r   r     s   
r   c                   @   s   e Zd ZU ded< dS )z6TestReplace.test_recursive_repr_indirection.<locals>.Dr   r   Nr  r   r   r   r   r     s   
r   zwTestReplace.test_recursive_repr_indirection.<locals>.C(f=TestReplace.test_recursive_repr_indirection.<locals>.D(f=...))r  )r#   r   r   rt   r   r   r   r   test_recursive_repr_indirection  s    z+TestReplace.test_recursive_repr_indirectionc                 C   st   t G dd d}t G dd d}t G dd d}|d }|d }|d }||_||_||_| t|d d S )Nc                   @   s   e Zd ZU ded< dS )z:TestReplace.test_recursive_repr_indirection_two.<locals>.Cr   r   Nr  r   r   r   r   r   #  s   
r   c                   @   s   e Zd ZU ded< dS )z:TestReplace.test_recursive_repr_indirection_two.<locals>.Dr   r   Nr  r   r   r   r   r   '  s   
r   c                   @   s   e Zd ZU ded< dS )z:TestReplace.test_recursive_repr_indirection_two.<locals>.Er   r   Nr  r   r   r   r   r   +  s   
r   zTestReplace.test_recursive_repr_indirection_two.<locals>.C(f=TestReplace.test_recursive_repr_indirection_two.<locals>.D(f=TestReplace.test_recursive_repr_indirection_two.<locals>.E(f=...)))r  )r#   r   r   r   rt   r   r  r   r   r   #test_recursive_repr_indirection_two"  s    z/TestReplace.test_recursive_repr_indirection_twoc                 C   s6   t G dd d}|d d}||_| t|d d S )Nc                   @   s   e Zd ZU ded< eed< dS )z5TestReplace.test_recursive_repr_misc_attrs.<locals>.Cr   r   r  Nr  r   r   r   r   r   ;  s   
r   r/   zATestReplace.test_recursive_repr_misc_attrs.<locals>.C(f=..., g=1)r  rz   r   r   r   test_recursive_repr_misc_attrs:  s
    
z*TestReplace.test_recursive_repr_misc_attrsN)r   r   r   r  r  r  r  rH  r  r  r  r  r  r  r  r  r   r   r   r   r  o  s    	r  __main__),Zdataclassesr!  rm   r   r  ZunittestZunittest.mockr   typingr   r   r   r   r   r	   r
   r   r   r   r   collectionsr   r   r   	functoolsr   	Exceptionr   r   r'  r.  rA  rP  r\  rc  rk  r  r  r  r  r  r  r   mainr   r   r   r   <module>   sb   0               #YVG/L ] /*H  % f
