o
    KXh                     @   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                   @      e Zd ZdS )JSONTestObjectN__name__
__module____qualname__ r   r   G/opt/python-3.10.19/usr/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   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   sZ  |  t) t  | dd d dd   W d    n1 s"w   Y  W d    n1 s1w   Y  |  t) t  | dd d dd   W d    n1 sXw   Y  W d    n1 sgw   Y  |  t2 t  | dd d dd   W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nz{"a":順 1}z[1][])assertRaisesRecursionErrorr   infinite_recursionloads)r   r   r   r   #test_highly_nested_objects_decodingE   s&   


"z1TestRecursion.test_highly_nested_objects_decodingc              	   C   s   g i }}t dD ]
}|gd|i}}q	| t! t  | | W d    n1 s.w   Y  W d    n1 s=w   Y  | t* t  | | W d    n1 s\w   Y  W d    d S W d    d S 1 stw   Y  d S )Nr%   k)ranger*   r+   r   r,   r   )r   ldr   r   r   r   #test_highly_nested_objects_encodingR   s    


"z1TestRecursion.test_highly_nested_objects_encodingc              	   C   s   G dd d| j j}| t- t  |ddd W d    n1 s'w   Y  W d    d S 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.r   r   r   r   r   r   a   s   zHTestRecursion.test_endless_recursion.<locals>.EndlessJSONEncoder.defaultN)r   r	   r
   r   r   r   r   r   EndlessJSONEncoder`   s    r4   F)Zcheck_circulary              @)r   r   r*   r+   r   r,   r"   )r   r4   r   r   r   test_endless_recursion^   s   
"z$TestRecursion.test_endless_recursionN)	r   r	   r
   r   r   r$   r.   r3   r5   r   r   r   r   r   	   s    r   c                   @   r   )TestPyRecursionNr   r   r   r   r   r6   j       r6   c                   @   r   )TestCRecursionNr   r   r   r   r   r8   k   r7   r8   N)	r   r   Ztest.test_jsonr   r   r   r   r6   r8   r   r   r   r   <module>   s    a