
    4jD                         S SK r S SKJr  S SKJrJrJrJrJrJ	r	  S SK
r " S S\5      r " S S\5      rS rS	 r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      rg)    N)TestCase)StringIO	long_typebbinary_type	text_typePY3c                       \ rS rSrS rSrg)MisbehavingTextSubtype   c                     g)NzFAIL! selfs    Y/root/lseg-credit/backend/venv/lib/python3.13/site-packages/simplejson/tests/test_dump.py__str__MisbehavingTextSubtype.__str__   s        r   N)__name__
__module____qualname____firstlineno__r   __static_attributes__r   r   r   r   r      s    r   r   c                   *    \ rS rSrSS jrS rS rSrg)MisbehavingBytesSubtype
   Nc                     g)Nz
bad decoder   )r   encodings     r   decodeMisbehavingBytesSubtype.decode   s    r   c                     g)Nzbad __str__r   r   s    r   r   MisbehavingBytesSubtype.__str__   s    r   c                     [        S5      $ )Nzbad __bytes__r   r   s    r   	__bytes__!MisbehavingBytesSubtype.__bytes__   s    !!r   r   N)r   r   r   r   r   r   r%   r   r   r   r   r   r   
   s    "r   r   c                 h    [         (       a&  [        U [        5      (       a  U R                  S5      $ U $ )Nascii)r	   
isinstancebytesr   )ss    r   as_text_typer-      s'    
sz!U##xx  Hr   c                 &    U R                   " S5      $ )Niso-8859-15)r   r$   s    r   decode_iso_8859_15r0      s    88M""r   c                   h    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rSrg)TestDump   c                     [        5       n[        R                  " 0 U5        U R                  UR	                  5       S5        g N{})r   jsondumpassertEqualgetvalue)r   sios     r   	test_dumpTestDump.test_dump   s-    j		"c.r   c           	         S H  nU R                  [        R                  " [        R                  " U5      5      UL 5        U R                  [        R                  " [        R                  " U/5      5      S   UL 5        U R                  [        R                  " [        R                  " SU05      5      S   UL 5        M     g )N)NTFr   a)
assertTruer7   loadsdumps)r   cs     r   test_constantsTestDump.test_constants    s    $AOODJJtzz!}5:;OODJJtzz1#7:a?@OODJJtzz3(';<SAQFG %r   c                    [        S5      S4SSSSS[        S5      S4/nU H|  u  p#U R                  [        R                  " [        R
                  " X#05      5      X305        U R                  [        R                  " [        R
                  " X#0S	S
95      X305        M~     U R                  [        [        R
                  [        S05        0 SS0[        S5      SSS04 H  nS H  n[        U5      nSU[        '   [        S UR                  5        5       5      nU R                  [        R                  " [        R
                  " US	US95      U5        U R                  [        R                  " [        R
                  " SU0S	US95      SU05        U R                  [        R                  " [        R
                  " U/S	US95      U/5        M     M     g )Nr+   )g      ?z1.0)r   10)Ttrue)Ffalse)Nnulld   100T	sort_keys   otherderpherp   )FTc              3   @   #    U  H  u  p[        U5      U4v   M     g 7fr'   )r-   ).0keyvals      r   	<genexpr>.TestDump.test_stringify_key.<locals>.<genexpr>:   s     OYz<,c2Ys   skipkeysrN    )
r   r   r9   r7   rA   rB   assertRaises	TypeErrordictitems)r   r`   kexpectvrN   v0v1s           r   test_stringify_keyTestDump.test_stringify_key&   s   G*g&!C.%(* IA

4::qk23 " 

4::qkTBC "	  	)TZZ$;wlQvY61$=>A*	!W4OQWWYOO  JJtzz"tyQR   JJtzz2r(TYWXH   JJtzz2$STD + ?r   c                 P    U R                  [        R                  " 0 5      S5        g r5   r9   r7   rB   r   s    r   
test_dumpsTestDump.test_dumpsE       B.r   c                 f   U R                  [        R                  " SSS.SS9S5        U R                  [        R                  " [        R                  " SS0SS0S.5      5      S	S0S
S0S.5        U R                  [        R                  " SSS[	        S5      SS[	        S5      SSS0SS9S5        g )NFT)TFrM   z{"false": true, "true": false}   r   )k1k2rI   0rS         @g      @rO   r   7z3{"2": 3.0, "4.0": 5, "6": true, "7": 0, "false": 1})r9   r7   rB   rA   r   r   s    r   test_encode_truefalseTestDump.test_encode_truefalseH   s    d+t=1	3 	JJtzz%Aq6"BCDQ<Qx0	
 	JJCil1ta	
   B	Cr   c                     / SQn[         R                  " [         R                  " U5      5      nU R                  US5        g )N))onerO   )tworS   )three   )four   )fivern   z6{"one": 1, "two": 2, "three": 3, "four": 4, "five": 5})r7   rB   OrderedDictr9   )r   r`   r,   s      r   test_ordered_dictTestDump.test_ordered_dict\   s5    PJJt''./D	Fr   c                      " S S[         5      n[        R                  " / SQU" S5      S9nU R                  US5        g)a]  
A test against the regression mentioned at `github issue 29`_.

The indent parameter should accept any type which pretends to be
an instance of int or long when it comes to being multiplied by
strings, even if it is not actually an int or long, for
backwards compatibility.

.. _github issue 29:
   http://github.com/simplejson/simplejson/issue/29
c                   $    \ rS rSrSrS rS rSrg)@TestDump.test_indent_unknown_type_acceptance.<locals>.AwesomeIntq   z'An awesome reimplementation of integersc                 j    [        U5      S:  a$  [        US   [        5      (       a  US   U l        g g g )Nr   )lenr*   int_int)r   argskwargss      r   __init__ITestDump.test_indent_unknown_type_acceptance.<locals>.AwesomeInt.__init__t   s5    t9q=
 "$q'3//$(G	 0 !r   c                 X    [        U S5      (       a  U R                  U-  $ [        S5      e)Nr   zOTo do non-awesome things with this object, please construct it from an integer!)hasattrr   NotImplementedError)r   rP   s     r   __mul__HTestDump.test_indent_unknown_type_acceptance.<locals>.AwesomeInt.__mul__   s5     4((99u,,- /M N Nr   )r   N)r   r   r   r   __doc__r   r   r   r   r   r   
AwesomeIntr   q   s    9,Nr   r   )r   rO   rS   rz   )indentz[
   0,
   1,
   2
]N)objectr7   rB   r9   )r   r   r,   s      r   #test_indent_unknown_type_acceptance,TestDump.test_indent_unknown_type_acceptanced   s7    	N 	N0 JJyA767r   c                     S/S-  nU R                  [        R                  " [        R                  " U5      5      U5        g )Nr   i r9   r7   rA   rB   r   lsts     r   test_accumulatorTestDump.test_accumulator   s.    cFlDJJsO4c:r   c           	      l   [        SS5       H  n[        S [        U5       5       5      n[        5       n[        R                  " X#SS9  U R                  UR                  5       [        R                  " USS95        U R                  [        R                  " UR                  5       5      U5        M     g )NrS       c              3   <   #    U  H  n[        U5      U4v   M     g 7fr'   )str)rU   xs     r   rX   *TestDump.test_sort_keys.<locals>.<genexpr>   s     :/Qc!fa[/s   TrM   )	ranger_   r   r7   r8   r9   r:   rB   rA   )r   num_keyspr;   s       r   test_sort_keysTestDump.test_sort_keys   s{    aH:%/::A*CIIa-S\\^TZZT-JKTZZ7; %r   c                    SnU R                  [        R                  " [        U5      5      [        R                  " U5      5        U R                  [        R                  " [        U5      /5      [        R                  " U/5      5        U R                  [        R                  " [        U5      S05      [        R                  " US05      5        g )Nzthis is some text*   )r9   r7   rB   r   )r   texts     r   test_misbehaving_text_subtype&TestDump.test_misbehaving_text_subtype   s    "JJ-d34JJt	
 	JJ.t456JJv	
 	JJ.t4b9:JJbz"	
r   c                    [        S5      nU R                  [        R                  " [	        U5      5      [        R                  " U5      5        U R                  [        R                  " [	        U5      /5      [        R                  " U/5      5        U R                  [        R                  " [	        U5      S05      [        R                  " US05      5        g )Nu   this is some data â¬r   )r   r9   r7   rB   r   r   datas     r   test_misbehaving_bytes_subtype'TestDump.test_misbehaving_bytes_subtype   s    12JJ.t45JJt	
 	JJ/567JJv	
 	JJ/5r:;JJbz"	
r   c                    U R                  [        R                  " [        S5      5      S5        U R	                  [
        [        R                  [        S5      5        U R                  [        R                  " [        S5      SS9S5        U R                  [        R                  " [        S5      SS9S5        [        (       a  U R	                  [        [        R                  [        S5      S S9  U R	                  [        [        R                  [        S5      S S9  U R                  [        R                  " [        S5      S [        S9S5        g U R                  [        R                  " [        S5      S S9S5        U R	                  [
        [        R                  [        S5      S S9  U R	                  [
        [        R                  [        S5      S [        S9  g )	N   â¬z"\u20ac"   ¤
iso-8859-1r   z"\u00a4"r/   r   default	r9   r7   rB   r   r]   UnicodeDecodeErrorr	   r^   r0   r   s    r   test_bytes_toplevelTestDump.test_bytes_toplevel   sh   An$56D,djj!F)DAfIE$	&AfIF$	&3iQ~5F'+  -iQvY'+  -TZZ&	D0BD') TZZ.(9DI(*0$**ai'+  -0$**ai'+5G  Ir   c                    U R                  [        R                  " [        S5      /5      S5        U R	                  [
        [        R                  [        S5      /5        U R                  [        R                  " [        S5      /SS9S5        U R                  [        R                  " [        S5      /SS9S5        [        (       a  U R	                  [        [        R                  [        S5      /S S9  U R	                  [        [        R                  [        S5      /S S9  U R                  [        R                  " [        S5      /S [        S9S5        g U R                  [        R                  " [        S5      /S S9S5        U R	                  [
        [        R                  [        S5      /S S9  U R	                  [
        [        R                  [        S5      /S [        S9  g )	Nr   z
["\u20ac"]r   r   r   z
["\u00a4"]r/   r   r   r   s    r   test_bytes_nestedTestDump.test_bytes_nested   s   Q~%6$78-H,djj1V9+FQvYK,G&	(QvYK-H&	(3ia6G5H'+  -iai['+  -TZZ6d0BD*, TZZ>):(;dK*,0$**qyk'+  -0$**qyk'+5G  Ir   c                    U R                  [        R                  " [        S5      S05      S5        U R	                  [
        [        R                  [        S5      S05        U R                  [        R                  " [        S5      S0SS9S5        U R                  [        R                  " [        S5      S0SS9S5        [        (       a  U R	                  [        [        R                  [        S5      S0S S9  U R	                  [        [        R                  [        S5      S0S S9  U R	                  [        [        R                  [        S5      S0S [        S	9  U R                  [        R                  " [        S5      S0S S
S9S5        g U R                  [        R                  " [        S5      S0S S9S5        U R	                  [
        [        R                  [        S5      S0S S9  U R	                  [
        [        R                  [        S5      S0S [        S	9  U R	                  [
        [        R                  [        S5      S0S S
S9  g )Nr   r   z{"\u20ac": 42}r   r   r   z{"\u00a4": 42}r/   r   T)r   r[   r6   r   r   s    r   test_bytes_keyTestDump.test_bytes_key   s   Q~%6$;<>OP,djj1V9b/JQvYOlK*	,QvYOmL*	,3ia6G5L'+  -iai_'+  -iai_'+5G  ITZZ6B$157"$ TZZ>):B(?$O.00$**qy"o'+  -0$**qy"o'+5G  I0$**qy"o'+d  <r   r   N)r   r   r   r   r<   rD   rf   rj   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r2      sN    /
H>/C(F&8P;
<
 
I.I.<r   r2   c                   0    \ rS rSrSrS rS rS rS rSr	g)	TestFrozenDicti  z4Test encoding of frozendict (CPython 3.15+ PEP 814).c                      [           g ! [         a9    [        R                  S:  a  U R	                  S5        U R                  S5         g f = f)N)rz      z.frozendict should be available on Python 3.15+zfrozendict not available)
frozendict	NameErrorsysversion_infofailskipTestr   s    r   setUpTestFrozenDict.setUp  sA    	6 	67*		JKMM45	6s   	 A AAc           	      ^    U R                  [        R                  " [        SSS9SS9S5        g )NrO   rS   r   yTrM   z{"x": 1, "y": 2})r9   r7   rB   r   r   s    r   test_frozendict_toplevel'TestFrozenDict.test_frozendict_toplevel  s(    JJzA+t<	 r   c                 j    SS0[        SS9/nU R                  [        R                  " U5      S5        g )Nr   rO   rS   )r   z[{"x": 1}, {"y": 2}])r   r9   r7   rB   r   s     r   test_frozendict_in_list&TestFrozenDict.test_frozendict_in_list  s-    Qxa)C*@Ar   c                 t    [        SS9[        SS9S.nU R                  [        R                  " USS9S5        g )	NrO   )r?   rS   r$   r   TrM   z{"x": {"a": 1}, "y": {"b": 2}})r_   r   r9   r7   rB   r   s     r   test_frozendict_nested%TestFrozenDict.test_frozendict_nested  s3    AYZ!_5JJtt,,	.r   r   N)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    >6 
B.r   r   c                   r    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)TestDictEncodingPathsi  zVerify that the PyDict_Next fast path (unsorted exact dict) and the
iterator slow path (sorted, dict subclass, or non-dict mapping) produce
identical output for a variety of edge cases.c                     [         R                  " U40 UD6n[         R                  " U5      n[         R                  " [         R                  " U40 UD65      nU R                  XE5        U$ )z8Encode data and verify the result round-trips correctly.)r7   rB   rA   r9   )r   r   r   encodeddecodedexpecteds         r   _assert_same_output)TestDictEncodingPaths._assert_same_output$  sR    **T,V,**W%::djj889+r   c                     SSSS.n[         R                  " [         R                  " U5      5      nU R                  X!5        g)z'Fast path: exact dict, sort_keys=False.rS   rO   rz   r   r?   rC   Nr7   rA   rB   r9   r   dresults      r   test_exact_dict_unsorted.TestDictEncodingPaths.test_exact_dict_unsorted-  s2    !!$DJJqM*#r   c                 Z    SSSS.nU R                  [        R                  " USS9S5        g)	z&Slow path: exact dict, sort_keys=True.rS   rO   rz   r   TrM   z{"a": 1, "b": 2, "c": 3}Nri   r   r   s     r   test_exact_dict_sorted,TestDictEncodingPaths.test_exact_dict_sorted3  s-    !!$JJqD)&	(r   c                      " S S[         5      nU" SSSS9n[        R                  " [        R                  " U5      5      nU R	                  USSSS.5        g)	z5Slow path: dict subclass falls back to iterator path.c                       \ rS rSrSrg)ATestDictEncodingPaths.test_dict_subclass_unsorted.<locals>.MyDicti<  r   Nr   r   r   r   r   r   r   r   MyDictr   <      r   r   rS   rO   rz   r   )r?   r   rC   N)r_   r7   rA   rB   r9   )r   r   r   r   s       r   test_dict_subclass_unsorted1TestDictEncodingPaths.test_dict_subclass_unsorted:  sI    	T 	Q!q!DJJqM*qqq!9:r   c                      " S S[         5      nU" / SQ5      nU R                  [        R                  " USS9S5        g)z-Slow path: dict subclass with sort_keys=True.c                       \ rS rSrSrg)?TestDictEncodingPaths.test_dict_subclass_sorted.<locals>.MyDictiD  r   Nr   r   r   r   r   r   D  r   r   r   ))zr3   )r?   rO   )m   TrM   z{"a": 1, "m": 13, "z": 26}N)r_   r9   r7   rB   )r   r   r   s      r   test_dict_subclass_sorted/TestDictEncodingPaths.test_dict_subclass_sortedB  s8    	T 	34JJqD)(	*r   c                     SSSSS.n[         R                  " [         R                  " U5      5      nUR                  5        H  nU R	                  U/ SQ5        M     g)z4Fast path with non-string keys that get stringified.r   floatboolnone)rO   g      @TN)r   r   r  r  N)r7   rA   rB   valuesassertIn)r   r   r   rc   s       r   test_non_string_keys_fast_path4TestDictEncodingPaths.test_non_string_keys_fast_pathK  sE    G6@DJJqM*AMM!=> !r   c                 Z    SSSS.nU R                  [        R                  " USS9S5        g)	z+Slow path with non-string keys + sort_keys.r?   r   rC   rO   rS   rz   TrM   z{"1": "a", "2": "b", "3": "c"}Nri   r   s     r   test_non_string_keys_sorted1TestDictEncodingPaths.test_non_string_keys_sortedS  s-    $JJqD),	.r   c                     SS[         S0n[         R                  " USS9nU R                  [         R                  " U5      SS05        g)z+Fast path: skipkeys drops unencodable keys.okrO   badT)r[   N)r7   rB   r9   rA   r   s      r   test_skipkeys_fast_path-TestDictEncodingPaths.test_skipkeys_fast_pathZ  s=    1dE"A-F+dAY7r   c                 l    SS[         SSS0n[         R                  " USSS9nU R                  US5        g	)
z7Slow path: skipkeys + sort_keys drops unencodable keys.r  rO   r  also_okrS   TrZ   z{"also_ok": 2, "ok": 1}N)r7   rB   r9   r   s      r   test_skipkeys_slow_path-TestDictEncodingPaths.test_skipkeys_slow_path`  s7    1dE9a0A=!:;r   c                 P    U R                  [        R                  " 0 5      S5        g)z'Empty dict takes the early-return path.r6   Nri   r   s    r   test_empty_dict%TestDictEncodingPaths.test_empty_dictf  s    B.r   c                 T    U R                  [        R                  " SS05      S5        g)zSingle-key dict.r   rO   z{"x": 1}Nri   r   s    r   test_single_key%TestDictEncodingPaths.test_single_keyj  s    S!H-z:r   c                 `    SSSS000nU R                  [        R                  " U5      S5        g)z>Nested dicts exercise recursive encoding within the dict loop.r?   r   rC   rO   z{"a": {"b": {"c": 1}}}Nri   r   s     r   test_nested_dicts'TestDictEncodingPaths.test_nested_dictsn  s0    3a/"JJqM$	&r   c                     SSSSS/ SQSS0S.n[         R                  " [         R                  " USS	95      nU R                  X!5        g)
z$All JSON value types as dict values.hellor   gQ	@TNr  nested)r   r   r   r  rJ   listr_   rM   r   r   s      r   test_mixed_value_types,TestDictEncodingPaths.test_mixed_value_typesu  sN     t$
 DJJqD9:#r   c                     SSS.SSS.SSS./n[         R                  " [         R                  " U5      5      nU R                  X!5        g)	zdEncoding a list of dicts with the same keys exercises the
key_memo cache in encoder_encode_dict_key.Alice   )nameageBob   Carol#   Nr   )r   r`   r   s      r   test_key_memo_cache_hit-TestDictEncodingPaths.test_key_memo_cache_hit  sJ     ""-+!"-/ DJJu-.'r   c                     [        S5       Vs0 s H	  nSU-  U_M     nn[        R                  " [        R                  " U5      5      nU R	                  X25        gs  snf )z3Large dict stresses the PyDict_Next iteration path.  zkey_%dN)r   r7   rA   rB   r9   )r   ir   r   s       r   test_large_dict%TestDictEncodingPaths.test_large_dict  sK    &+Dk2kX\1_k2DJJqM*# 3s   Ar   N)r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r!  r,  r1  r   r   r   r   r   r     sR    5$(;*?.8</;&$($r   r   c                   N    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rSrg)TestListEncodingPathsi  zVerify that the indexed fast path (exact list/tuple) and the
iterator slow path (subclasses, other iterables) produce identical
output.c                     SSSSSSS/SS	0/nU R                  [        R                  " [        R                  " U5      5      U5        g)
z(Fast path: exact list iterates by index.rO   rx   rr   TNr|   rn   ra   rc   r   r   s     r   test_exact_list%TestListEncodingPaths.test_exact_list  s@    5#tTAq6C:>DJJt$45t<r   c                 R    SnU R                  [        R                  " USS9S5        g)z0Fast path: exact tuple when tuple_as_array=True.)rO   rx   rr   TNTtuple_as_arrayz[1, "two", 3.0, true, null]Nri   r   s     r   test_exact_tuple&TestListEncodingPaths.test_exact_tuple  s&    *JJtD1)	+r   c                      " S S[         5      nU" / SQ5      nU R                  [        R                  " U5      S5        g)z'Slow path: list subclass uses iterator.c                       \ rS rSrSrg)8TestListEncodingPaths.test_list_subclass.<locals>.MyListi  r   Nr   r   r   r   MyListr?    r   r   r@  r  	[1, 2, 3]N)r   r9   r7   rB   )r   r@  r   s      r   test_list_subclass(TestListEncodingPaths.test_list_subclass  s1    	T 	i D);7r   c                 |     " S S[         5      nU" S5      nU R                  [        R                  " USS9S5        g)z(Slow path: tuple subclass uses iterator.c                       \ rS rSrSrg):TestListEncodingPaths.test_tuple_subclass.<locals>.MyTuplei  r   Nr   r   r   r   MyTuplerF    r   r   rG  r  Tr9  rA  N)tupler9   r7   rB   )r   rG  r   s      r   test_tuple_subclass)TestListEncodingPaths.test_tuple_subclass  s7    	e 	y!JJtD1	r   c                 P    U R                  [        R                  " / 5      S5        g )N[]ri   r   s    r   test_empty_list%TestListEncodingPaths.test_empty_list  rl   r   c                 N    U R                  [        R                  " SSS9S5        g )Nr   Tr9  rL  ri   r   s    r   test_empty_tuple&TestListEncodingPaths.test_empty_tuple  s     JJr$/	7r   c                 R    U R                  [        R                  " S/5      S5        g )Nr   z[42]ri   r   s    r   test_single_element)TestListEncodingPaths.test_single_element  s    RD)62r   c                     SS/SSS///nU R                  [        R                  " [        R                  " U5      5      U5        g )NrO   rS   rz   r|   rn   r   r   s     r   test_nested_lists'TestListEncodingPaths.test_nested_lists  s:    AQF$DJJt$45t<r   c                     [        [        S5      5      nU R                  [        R                  " [        R
                  " U5      5      U5        g)z*Large list stresses the indexed fast path.r/  N)r   r   r9   r7   rA   rB   r   s     r   test_large_list%TestListEncodingPaths.test_large_list  s2    E$K DJJt$45t<r   r   N)r   r   r   r   r   r6  r;  rB  rI  rM  rP  rS  rV  rY  r   r   r   r   r4  r4    s4    =
+8/73==r   r4  )r   unittestr   simplejson.compatr   r   r   r   r   r	   
simplejsonr7   r   r   r-   r0   r2   r   r   r4  r   r   r   <module>r^     sl    
  Q Q Y "k "
#f<x f<R.X .8q$H q$h2=H 2=r   