
    <e                         d dl mZ d dlmZmZ  G d d          Z G d d          Z G d dee          Z G d	 d
ee          ZdS )    )support)PyTestCTestc                       e Zd ZdS )JSONTestObjectN__name__
__module____qualname__     4/usr/lib/python3.11/test/test_json/test_recursion.pyr   r      s        Dr   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestRecursionc                    g }|                     |           	 |                     |           |                     d           n# t          $ r Y nw xY wg }|g}|                     |           	 |                     |           |                     d           n# t          $ r Y nw xY wg }||g}|                     |           d S )Nz)didn't raise ValueError on list recursionz5didn't raise ValueError on alternating list recursion)appenddumpsfail
ValueErrorselfxys      r   test_listrecursionz TestRecursion.test_listrecursion
   s    		CJJqMMM IIABBBB  	 	 	D	 C		OJJqMMM IIMNNNN  	 	 	D	 F

1s#   A 
AA/B 
B'&B'c                     i }||d<   	 |                      |           |                     d           n# t          $ r Y nw xY wi }||d}|                      |           d S )Ntestz)didn't raise ValueError on dict recursion)ab)r   r   r   r   s      r   test_dictrecursionz TestRecursion.test_dictrecursion!   s    &		CJJqMMM IIABBBB  	 	 	D	 !

1s   4 
A Ac                 6    G d d| j         j                  } |            }|                     |                    t                    d           d|_        	 |                    t                     |                     d           d S # t          $ r Y d S w xY w)Nc                       e Zd ZdZd ZdS )ATestRecursion.test_defaultrecursion.<locals>.RecursiveJSONEncoderFc                 t    |t           u r| j        rt           gS dS | j        j                            |          S )Nr   )r   recursejsonJSONEncoderdefaultr   os     r   r'   zITestRecursion.test_defaultrecursion.<locals>.RecursiveJSONEncoder.default2   s?    &&| 0 .////y,44Q777r   N)r	   r
   r   r$   r'   r   r   r   RecursiveJSONEncoderr"   0   s(        G8 8 8 8 8r   r*   z"JSONTestObject"Tz,didn't raise ValueError on default recursion)r%   r&   assertEqualencoder   r$   r   r   )r   r*   encs      r   test_defaultrecursionz#TestRecursion.test_defaultrecursion/   s    	8 	8 	8 	8 	849#8 	8 	8 	8 #"$$N335GHHH	FJJ~&&& IIDEEEEE  	 	 	DD	s   B
 

BBc                    |                      t                    5  t          j                    5  |                     ddz  dz   ddz  z              d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                      t                    5  t          j                    5  |                     ddz  dz   ddz  z              d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                      t                    5  t          j                    5  |                     ddz  dz   ddz  z              d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz{"a":順 1}z[1][])assertRaisesRecursionErrorr   infinite_recursionloads)r   s    r   #test_highly_nested_objects_decodingz1TestRecursion.test_highly_nested_objects_decodingE   s0    ~.. 	B 	B+-- B B

7V+c1C&L@AAAB B B B B B B B B B B B B B B	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B ~.. 	D 	D+-- D D

7V+e3cFlBCCCD D D D D D D D D D D D D D D	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D ~.. 	> 	>+-- > >

3<#-f<===> > > > > > > > > > > > > > >	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   A4"AA4A!	!A4$A!	%A44A8;A8C2-"CC2C	C2"C	#C22C69C6E1+"EE1E	E1 E	!E11E58E5c                 
   g i }}t          d          D ]	}|gd|i}}
|                     t                    5  t          j                    5  |                     |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t                    5  t          j                    5  |                     |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr0   k)ranger5   r6   r   r7   r   )r   ldr   s       r   #test_highly_nested_objects_encodingz1TestRecursion.test_highly_nested_objects_encodingR   s   21v 	  	 A3QqAA~.. 	 	+--  

1              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ~.. 	 	+--  

1              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sk   BA."B.A2	2B5A2	6BB	B	*C8>C C8 C$	$C8'C$	(C88C<?C<c                 0    G d d| j         j                  }|                     t                    5  t	          j                    5   |d                              d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )@TestRecursion.test_endless_recursion.<locals>.EndlessJSONEncoderc                     |gS )z?If check_circular is False, this will keep adding another list.r   r(   s     r   r'   zHTestRecursion.test_endless_recursion.<locals>.EndlessJSONEncoder.defaulta   s	    s
r   N)r	   r
   r   r'   r   r   r   EndlessJSONEncoderrB   `   s#            r   rD   F)check_circulary              @)r%   r&   r5   r6   r   r7   r,   )r   rD   s     r   test_endless_recursionz$TestRecursion.test_endless_recursion^   sV   	 	 	 	 	!6 	 	 	
 ~.. 	D 	D+-- D D""%888??CCCD D D D D D D D D D D D D D D	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds5   B A3'B3A7	7B:A7	;BBBN)	r	   r
   r   r   r   r.   r9   r?   rF   r   r   r   r   r   	   sv          .  F F F,> > >
 
 
	D 	D 	D 	D 	Dr   r   c                       e Zd ZdS )TestPyRecursionNr   r   r   r   rH   rH   j             r   rH   c                       e Zd ZdS )TestCRecursionNr   r   r   r   rK   rK   k   rI   r   rK   N)	r   r   test.test_jsonr   r   r   r   rH   rK   r   r   r   <module>rM      s          ( ( ( ( ( ( ( (	 	 	 	 	 	 	 	^D ^D ^D ^D ^D ^D ^D ^DB 3 2 2 2 2mV 2 2 2 0 0 0 0 0]E 0 0 0 0 0r   