a
    "h                     @   s`   d dl mZ 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 )    )support)PyTestCTestc                   @   s   e Zd ZdS )JSONTestObjectN__name__
__module____qualname__ r
   r
   E/opt/python-3.9.21/usr/lib/python3.9/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0 | d g }|g}| | z| | W n tyn   Y n0 | 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0 | 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   sb   G dd d| j j}| }| |td d|_z|t W n tyR   Y n0 | 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   2   s
    zITestRecursion.test_defaultrecursion.<locals>.RecursiveJSONEncoder.defaultN)r   r   r	   r   r   r
   r
   r
   r   RecursiveJSONEncoder0   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   sL  |  tR t * | dd d dd   W d    n1 sD0    Y  W d    n1 sb0    Y  |  tR t * | dd d dd   W d    n1 s0    Y  W d    n1 s0    Y  |  tT t * | dd d dd   W d    n1 s0    Y  W d    n1 s>0    Y  d S )Nz{"a":順 1}z[1][])assertRaisesRecursionErrorr   infinite_recursionloads)r   r
   r
   r   #test_highly_nested_objects_decodingE   s    
V
V
z1TestRecursion.test_highly_nested_objects_decodingc              	   C   s   g i  }}t dD ]}|gd|i }}q| tB t  | | W d    n1 s\0    Y  W d    n1 sz0    Y  | tB t  | | W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr$   k)ranger)   r*   r   r+   r   )r   ldr   r
   r
   r   #test_highly_nested_objects_encodingR   s    

F
z1TestRecursion.test_highly_nested_objects_encodingc              	   C   sz   G dd d| j j}| tH t   |ddd W d    n1 sN0    Y  W d    n1 sl0    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 )Nr
   r   r
   r
   r   r   a   s    zHTestRecursion.test_endless_recursion.<locals>.EndlessJSONEncoder.defaultN)r   r   r	   r   r
   r
   r
   r   EndlessJSONEncoder`   s   r3   F)Zcheck_circulary              @)r   r   r)   r*   r   r+   r!   )r   r3   r
   r
   r   test_endless_recursion^   s    
z$TestRecursion.test_endless_recursionN)	r   r   r	   r   r   r#   r-   r2   r4   r
   r
   r
   r   r   	   s   r   c                   @   s   e Zd ZdS )TestPyRecursionNr   r
   r
   r
   r   r5   j       r5   c                   @   s   e Zd ZdS )TestCRecursionNr   r
   r
   r
   r   r7   k   r6   r7   N)	r   r   Ztest.test_jsonr   r   r   r   r5   r7   r
   r
   r
   r   <module>   s
   a