o
    g                     @   sT   d dl mZmZ G dd dZG dd dZG dd deeZG dd	 d	eeZd
S )    )PyTestCTestc                   @      e Zd ZdS )JSONTestObjectN__name__
__module____qualname__ r
   r
   S/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_json/test_recursion.pyr      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 )TestRecursionc                 C   s   g }| | z| | W n	 ty   Y nw | d g }|g}| | z| | W n	 ty7   Y nw | d g }||g}| | d S )Nz)didn't raise ValueError on list recursionz5didn't raise ValueError on alternating list recursion)appenddumps
ValueErrorfailselfxyr
   r
   r   test_listrecursion	   s(   



z TestRecursion.test_listrecursionc                 C   sT   i }||d< z|  | W n	 ty   Y nw | d i }||d}|  | d S )Ntestz)didn't raise ValueError on dict recursion)ab)r   r   r   r   r
   r
   r   test_dictrecursion    s   

z TestRecursion.test_dictrecursionc                 C   sd   G dd d| j j}| }| |td d|_z|t W n
 ty*   Y d S w | d d S )Nc                   @   s   e Zd ZdZdd ZdS )zATestRecursion.test_defaultrecursion.<locals>.RecursiveJSONEncoderFc                 S   s&   |t u r| jr
t gS dS | jj|S )Nr   )r   recursejsonJSONEncoderdefaultr   or
   r
   r   r   1   s
   zITestRecursion.test_defaultrecursion.<locals>.RecursiveJSONEncoder.defaultN)r   r   r	   r   r   r
   r
   r
   r   RecursiveJSONEncoder/   s    r    z"JSONTestObject"Tz,didn't raise ValueError on default recursion)r   r   ZassertEqualencoder   r   r   r   )r   r    encr
   r
   r   test_defaultrecursion.   s   
z#TestRecursion.test_defaultrecursionc                 C   s   |  t | dd d dd   W d    n1 sw   Y  |  t | dd d dd   W d    n1 s?w   Y  |  t | dd d dd   W d    d S 1 sbw   Y  d S )Nz{"a":順 1}z[1][])assertRaisesRecursionErrorloads)r   r
   r
   r   #test_highly_nested_objects_decodingD   s   "z1TestRecursion.test_highly_nested_objects_decodingc                 C   s   g i }}t dD ]
}|gd|i}}q	| t | | W d    n1 s)w   Y  | t | | W d    d S 1 sDw   Y  d S )Nr$   k)ranger)   r*   r   )r   ldr   r
   r
   r   #test_highly_nested_objects_encodingN   s   
"z1TestRecursion.test_highly_nested_objects_encodingc                 C   sT   G dd d| j j}| t |ddd W d    d S 1 s#w   Y  d S )Nc                   @   s   e Zd Zdd ZdS )z@TestRecursion.test_endless_recursion.<locals>.EndlessJSONEncoderc                 S   s   |gS )z?If check_circular is False, this will keep adding another list.Nr
   r   r
   r
   r   r   [   s   zHTestRecursion.test_endless_recursion.<locals>.EndlessJSONEncoder.defaultN)r   r   r	   r   r
   r
   r
   r   EndlessJSONEncoderZ   s    r2   F)Zcheck_circulary              @)r   r   r)   r*   r!   )r   r2   r
   r
   r   test_endless_recursionX   s   "z$TestRecursion.test_endless_recursionN)	r   r   r	   r   r   r#   r,   r1   r3   r
   r
   r
   r   r      s    

r   c                   @   r   )TestPyRecursionNr   r
   r
   r
   r   r4   c       r4   c                   @   r   )TestCRecursionNr   r
   r
   r
   r   r6   d   r5   r6   N)Ztest.test_jsonr   r   r   r   r4   r6   r
   r
   r
   r   <module>   s
    [