
    wi              
          d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ ej        Z G d dej                  Z	 edk    r ej                     	 ej                            d e ed	d
                              d             Zej                            d e edd                              ej                            d e edd                              d                         Zd Zej                            dg d          d             Zej                            dg d          d             ZdS )    N)StringIO)Path)ujsonc                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdD ZFdE ZGdF ZHdG ZIdH ZJdI ZKdJ ZLdK ZMdL ZNdM ZOdN ZPdO ZQdP ZRdQ ZSdR ZTdS ZUdT ZVdU ZWdV ZXdW ZYdX ZZdY Z[dZ Z\d[ Z]d\ Z^d] Z_d^ Z`d_ Zad` Zbda Zcdb Zddc Zedd Zfde Zgdf Zhdg Zidh Zjdi Zkdj Zldk Zmdl Zndm Zodn Zpdo Zqdp Zrdq Zsdr Ztds Zudt Zvdu Zwdv Zxdw Zydx Zzdy Z{ e|j}         e~edz          d{k     d|}          d~             Z e|j}         e~edz          d{k     d|}          d             Z e|j}         e~edz          d{k     d|}          d             Z e|j}         e~edz          d{k     d|}          d             Z e|j}         e~edz          d{k     d|}          d             Z e|j}         e~edz          d{k     d|}          d             ZdS )UltraJSONTestsc                     t          j        d          }t          j        |          }t          j        |          }|                     |d           d S )Nz	1337.1337g@)decimalDecimalr   encodedecodeassertEqualselfsutencodeddecodeds       l/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/srsly/tests/ujson/test_ujson.pytest_encodeDecimalz!UltraJSONTests.test_encodeDecimal   sK    ok**,s##,w''),,,,,    c                      dd}d}d} fd} ||d            ||d            ||dd	            ||dd	            ||dd	            ||dd	            ||d
           d S )Nz"A string \ /   
  	 </script> &z,"A string \\ \/ \b \f \n \r \t <\/script> &"z;"A string \\ \/ \b \f \n \r \t \u003c\/script\u003e \u0026"z*"A string \\ / \b \f \n \r \t </script> &"c                 (   t          j        fi |}                    ||            |                    dd          rR                    t	          j        |                                         t          j        |                     d S d S )Nescape_forward_slashesT)r   r   r   getjsonloadsr   )expected_outputencode_kwargsoutputinputr   s      r   helperz:UltraJSONTests.test_encodeStringConversion.<locals>.helper   s    \%99=99FV_555  !94@@ >  
6(:(:;;;  V(<(<=====> >r   Tensure_asciiF)r"   encode_html_chars)r    )r   not_html_encodedhtml_encodednot_slashes_escapedr    r   s   `    @r   test_encodeStringConversionz*UltraJSONTests.test_encodeStringConversion   s    :RU 	 R	> 	> 	> 	> 	> 	> 	d3333e4444 	deLLLLeuMMMM 	|$$GGGG|%4HHHH 	"5AAAAAAr   c                 Z    |                      dt          j        dd                     d S )Nz$"\u003cimg src='\u0026amp;'\/\u003e"z<img src='&amp;'/>T)r#   r   r   dumpsr   s    r   testWriteEscapedStringz%UltraJSONTests.testWriteEscapedString4   s:    8K,EEE	
 	
 	
 	
 	
r   c                    ddi}t          j        |          }t          j        |          }|                     ||           t	          j        |          }t	          j        |          }|                     ||           d S )NalZ:`7{ r   r+   r   r   r   r   r   r   s       r   test_doubleLongIssuez#UltraJSONTests.test_doubleLongIssue:   sy    %&*S//*W%%g&&&,s##,w''g&&&&&r   c                    ddi}t          j        |          }t          j        |          }|                     ||           t	          j        |          }t	          j        |          }|                     ||           d S )Nr/   g#_tr0   r   s       r   test_doubleLongDecimalIssuez*UltraJSONTests.test_doubleLongDecimalIssueC   sy    ,-*S//*W%%g&&&,s##,w''g&&&&&r   c                 ^    ddi}t          j        |          }t          j        |           d S )Nr/   gԟpA)r   r+   r   )r   r   r   s      r   test_encodeDecodeLongDecimalz+UltraJSONTests.test_encodeDecodeLongDecimalL   s2    &'+c""Wr   c                     ddi}t          j        |          }t          j        |          }|                     |d         |d                    d S )Nr/   g=
ףp=@)r   r   r   assertAlmostEqualr   s       r   test_decimalDecodeTestz%UltraJSONTests.test_decimalDecodeTestQ   sM    Dk,s##,w''s4y'$-88888r   c                 |    ddddddd}t          j        |           dddddddd}t          j        |           d S )Nvalue1)key1r;   r;   r;   r;   r;   )   بنr<   r<   r<   r<   r<   r<   r   r   r   r   s     r   test_encodeDictWithUnicodeKeysz-UltraJSONTests.test_encodeDictWithUnicodeKeysW   sm    
 
 	U 
 
 	Ur   c                 V   t           j        }t          j        |          }|                     t          |d          t          t          j        |          d                     |                     t          |d          t          t          j        |          d                     d S N   	mathpir   r   r   roundr   r   r   r   r   r   s      r   test_encodeDoubleConversionz*UltraJSONTests.test_encodeDoubleConversionm   s    e$$ua%
60B0BA*F*FGGGua%V0D0Da*H*HIIIIIr   c                 ^    d}t          j        |          }|                     |d           d S )Ng      ?z1.0)r   r   r   rG   s      r   test_encodeWithDecimalz%UltraJSONTests.test_encodeWithDecimals   s2    e$$'''''r   c                 X   t           j         }t          j        |          }|                     t          |d          t          t          j        |          d                     |                     t          |d          t          t          j        |          d                     d S rA   rC   rG   s      r   test_encodeDoubleNegConversionz-UltraJSONTests.test_encodeDoubleNegConversionx   s    e$$ua%
60B0BA*F*FGGGua%V0D0Da*H*HIIIIIr   c                     g gggdz  }t          j        |          }|                     |t          j        |                     |                     |t          j        |                     d S )N   r   r   r   r   r   r   rG   s      r   test_encodeArrayOfNestedArraysz-UltraJSONTests.test_encodeArrayOfNestedArrays   sf    $2e$$
6 2 2333V 4 455555r   c                     g ddz  }t          j        |          }|                     |t          j        |                     |                     |t          j        |                     d S )N)cAT@rR   rR   rR   
   rO   rG   s      r   test_encodeArrayOfDoublesz(UltraJSONTests.test_encodeArrayOfDoubles   sg    DDDrIe$$
6 2 2333V 4 455555r   c                     d}t          j        |          }|                     |t          j        |                     |                     |d           |                     |t          j        |                     d S )NzA string \ /   
  	z"A string \\ \/ \b \f \n \r \t"rO   rG   s      r   test_encodeStringConversion2z+UltraJSONTests.test_encodeStringConversion2   ss    .e$$
6 2 2333!JKKKV 4 455555r   c                     d S Nr$   r,   s    r   test_decodeUnicodeConversionz+UltraJSONTests.test_decodeUnicodeConversion   s    r   c                     d}t          j        |          }t          j        |          }|                     |t	          |                     |                     |t          j        |                     d S )Nu@   Räksmörgås اسامة بن محمد بن عوض بن لادنr   r   r   r   json_unicoder   r   r   r   encdecs       r   test_encodeUnicodeConversion1z,UltraJSONTests.test_encodeUnicodeConversion1   sg    Rl5!!l3l511222djoo.....r   c                     d}t          j        |          }t          j        |          }|                     ||           |                     |t	          |                     d S )N)r   r   r   r   r\   r]   s       r   test_encodeControlEscapingz)UltraJSONTests.test_encodeControlEscaping   s_    l5!!l3$$$l51122222r   c                     d}t          j        |          }t          j        |          }|                     |t	          |                     |                     |t          j        |                     d S )Nu
   æ¥Ñr[   r]   s       r   test_encodeUnicodeConversion2z,UltraJSONTests.test_encodeUnicodeConversion2   sg    &l5!!l3l511222djoo.....r   c                     d}t          j        |          }t          j        |          }|                     |t	          |                     |                     |t          j        |                     d S )Nu   ðr[   r]   s       r   test_encodeUnicodeSurrogatePairz.UltraJSONTests.test_encodeUnicodeSurrogatePair   sg    "l5!!l3l511222djoo.....r   c                     d}t          j        |          }t          j        |          }|                     |t	          |                     |                     |t          j        |                     d S )Nu   ð°TRAILINGNORMALr[   r]   s       r   test_encodeUnicode4BytesUTF8z+UltraJSONTests.test_encodeUnicode4BytesUTF8   g    0l5!!l3l511222djoo.....r   c                     d}t          j        |          }t          j        |          }|                     |t	          |                     |                     |t          j        |                     d S )Nu   ó¿¿¿TRAILINGNORMALr[   r]   s       r   #test_encodeUnicode4BytesUTF8Highestz2UltraJSONTests.test_encodeUnicode4BytesUTF8Highest   rj   r   c                    d}t          j        |          }t          j        |          }t          |          dk    r7|                     t          |          t          |          dz  dz              n6|                     t          |          t          |          dz  dz              |                     ||           t          j        |          }|                     ||           t          j        |d          }t          j        |d          }|                     t          |          t          |          dz              |                     ||           t          j        |          }|                     ||           d S )Nu   🐮🐮🐭🐭            Fr!   )r   r+   r   lenr   r   r   sr   encoded_jsonr   s        r   testEncodeUnicodeBMPz#UltraJSONTests.testEncodeUnicodeBMP   sS   6+a..z!}}q66Q;;S\\3q66B;?;;;;S\\3q66A:>:::,///+g&&G$$$ +ae444z!%888Ws1vvz222,///+g&&G$$$$$r   c                    d}t          j        |          }t          j        |          }|                     t	          |          t	          |          dz  dz              |                     ||           t          j        |          }|                     ||           t          j        |d          }t          j        |d          }|                     t	          |          t	          |          dz              |                     ||           t          j        |          }|                     ||           d S )Nu	   ✿♡✿rq   rp   Fr!   )r   r+   r   r   rr   r   rs   s        r   testEncodeSymbolsz UltraJSONTests.testEncodeSymbols   s    +a..z!}}Ws1vvzA~666,///+g&&G$$$ +ae444z!%888Ws1vvz222,///+g&&G$$$$$r   c                 (   g ggg}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     |                     |t          j        |                     d S rX   r   r   r   r   r   r+   r   rG   s      r   test_encodeArrayInArrayz&UltraJSONTests.test_encodeArrayInArray   s    $e$$
6 2 2333E!2!2333V 4 455555r   c                 "   d}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     |                     |t          j        |                     d S )Niz  rz   rG   s      r   test_encodeIntConversionz'UltraJSONTests.test_encodeIntConversion   |    e$$
6 2 2333E!2!2333V 4 455555r   c                 "   d}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     |                     |t          j        |                     d S )N闅rz   rG   s      r   test_encodeIntNegConversionz*UltraJSONTests.test_encodeIntNegConversion   s|    e$$
6 2 2333E!2!2333V 4 455555r   c                 r   d}t          j        |          }t          j        |           t          j        |           |                     |t          j        |                     |                     |t          j        |                     |                     |t          j        |                     d S )Nl         )r   r   r   r   r   r   r+   rG   s      r   test_encodeLongNegConversionz+UltraJSONTests.test_encodeLongNegConversion  s    $e$$
6V
6 2 2333E!2!2333V 4 455555r   c                     g d}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     d S )N   rp      rn   rO   rG   s      r   test_encodeListConversionz(UltraJSONTests.test_encodeListConversion  s`    e$$
6 2 2333V 4 455555r   c                 ,   ddddd}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     |                     |t          j        |                     d S )Nr   rp   r   rn   )k1k2k3k4rO   rG   s      r   test_encodeDictConversionz(UltraJSONTests.test_encodeDictConversion  s    !44e$$
6 2 2333V 4 4555V 4 455555r   c                 "   d }t          j        |          }|                     |t          j        |                     |                     |t          j        |                     |                     |t          j        |                     d S rX   rz   rG   s      r   test_encodeNoneConversionz(UltraJSONTests.test_encodeNoneConversion  |    e$$
6 2 2333E!2!2333V 4 455555r   c                 "   d}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     |                     |t          j        |                     d S )NTrz   rG   s      r   test_encodeTrueConversionz(UltraJSONTests.test_encodeTrueConversion%  r   r   c                 "   d}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     |                     |t          j        |                     d S )NFrz   rG   s      r   test_encodeFalseConversionz)UltraJSONTests.test_encodeFalseConversion,  r   r   c                 ,   d}|                     d          }t          j        |d          }t          j         |          }|                     |t	          j        |d                     |                     |t	          j        |                     d S )Ns   日шutf-8Fr!   )r   r   r   r   r   r+   r   r]   s       r   test_encodeToUTF8z UltraJSONTests.test_encodeToUTF83  s    'W%%l5u555l3djUCCCDDDdjoo.....r   c                     d}t          j        |          }t          j        t          |                    }|                     ||           d S )Nz{"obj": 31337})r   r   strr   )r   r   dec1dec2s       r   test_decodeFromUnicodez%UltraJSONTests.test_decodeFromUnicode;  sG     |E""|CJJ''t$$$$$r   c                      G d d          } G d d          } |            } |            |_         ||j         _         |                     t          t          j        |           d S )Nc                       e Zd ZdZd ZdS )2UltraJSONTests.test_encodeRecursionMax.<locals>.O2r   c                     d| j         iS Nmemberr   r,   s    r   toDictz9UltraJSONTests.test_encodeRecursionMax.<locals>.O2.toDictF       $+..r   N__name__
__module____qualname__r   r   r$   r   r   O2r   C  (        F/ / / / /r   r   c                       e Zd ZdZd ZdS )2UltraJSONTests.test_encodeRecursionMax.<locals>.O1r   c                     d| j         iS r   r   r,   s    r   r   z9UltraJSONTests.test_encodeRecursionMax.<locals>.O1.toDictL  r   r   Nr   r$   r   r   O1r   I  r   r   r   )r   assertRaisesOverflowErrorr   r   )r   r   r   r   s       r   test_encodeRecursionMaxz&UltraJSONTests.test_encodeRecursionMaxA  s    	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ rtt#-u=====r   c                 p    t          d          }|                     t          t          j        |           d S )Nnanfloatr   r   r   r   r>   s     r   test_encodeDoubleNanz#UltraJSONTests.test_encodeDoubleNanT  -    e-u=====r   c                 p    t          d          }|                     t          t          j        |           d S Ninfr   r>   s     r   test_encodeDoubleInfz#UltraJSONTests.test_encodeDoubleInfX  r   r   c                 r    t          d           }|                     t          t          j        |           d S r   r   r>   s     r   test_encodeDoubleNegInfz&UltraJSONTests.test_encodeDoubleNegInf\  s/    u-u=====r   c                 |    ddl m}  |g d          }|                     dt          j        |                     d S )Nr   )OrderedDict))r   r   )r   r   )   r   )rp   rp   z{"1":1,"0":0,"8":8,"2":2})collectionsr   r   r   r   )r   r   r   s      r   test_encodeOrderedDictz%UltraJSONTests.test_encodeOrderedDict`  sQ    ++++++<<<==4el56I6IJJJJJr   c                 V    d}|                      t          t          j        |           d S )Nzfdsa sda v9sa fdsar   
ValueErrorr   r   r>   s     r   test_decodeJibberishz#UltraJSONTests.test_decodeJibberishf  s'    $*elE:::::r   c                 V    d}|                      t          t          j        |           d S )N[r   r>   s     r   test_decodeBrokenArrayStartz*UltraJSONTests.test_decodeBrokenArrayStartj  '    *elE:::::r   c                 V    d}|                      t          t          j        |           d S )N{r   r>   s     r   test_decodeBrokenObjectStartz+UltraJSONTests.test_decodeBrokenObjectStartn  r   r   c                 V    d}|                      t          t          j        |           d S )N]r   r>   s     r   test_decodeBrokenArrayEndz(UltraJSONTests.test_decodeBrokenArrayEndr  r   r   c                 \    ddz  }|                      t          t          j        |           d S )Nr      r   r>   s     r   test_decodeArrayDepthTooBigz*UltraJSONTests.test_decodeArrayDepthTooBigv  ,    {#*elE:::::r   c                 V    d}|                      t          t          j        |           d S )N}r   r>   s     r   test_decodeBrokenObjectEndz)UltraJSONTests.test_decodeBrokenObjectEndz  r   r   c                 V    d}|                      t          t          j        |           d S )Nz
{"one":1,}r   r>   s     r   "test_decodeObjectTrailingCommaFailz1UltraJSONTests.test_decodeObjectTrailingCommaFail~  s'    *elE:::::r   c                 \    ddz  }|                      t          t          j        |           d S )Nr   r   r   r>   s     r   test_decodeObjectDepthTooBigz+UltraJSONTests.test_decodeObjectDepthTooBig  r   r   c                 V    d}|                      t          t          j        |           d S )Nz"TESTINGr   r>   s     r   test_decodeStringUnterminatedz,UltraJSONTests.test_decodeStringUnterminated  '    *elE:::::r   c                 V    d}|                      t          t          j        |           d S Nz
"TESTING\"r   r>   s     r   %test_decodeStringUntermEscapeSequencez4UltraJSONTests.test_decodeStringUntermEscapeSequence  '    *elE:::::r   c                 V    d}|                      t          t          j        |           d S r   r   r>   s     r   test_decodeStringBadEscapez)UltraJSONTests.test_decodeStringBadEscape  r   r   c                 V    d}|                      t          t          j        |           d S )Ntrur   r>   s     r   test_decodeTrueBrokenz$UltraJSONTests.test_decodeTrueBroken  '    *elE:::::r   c                 V    d}|                      t          t          j        |           d S )Nfar   r>   s     r   test_decodeFalseBrokenz%UltraJSONTests.test_decodeFalseBroken  s'    *elE:::::r   c                 V    d}|                      t          t          j        |           d S )Nnr   r>   s     r   test_decodeNullBrokenz$UltraJSONTests.test_decodeNullBroken  r   r   c                 z    d}t          d          D ](}|                     t          t          j        |           )d S )Nz{{1337:""}}  ranger   r   r   r   r   r   xs      r   $test_decodeBrokenDictKeyTypeLeakTestz3UltraJSONTests.test_decodeBrokenDictKeyTypeLeakTest  sC    t 	? 	?Aj%,>>>>	? 	?r   c                 z    d}t          d          D ](}|                     t          t          j        |           )d S )Nz
{{"key":"}r   r   r   s      r   test_decodeBrokenDictLeakTestz,UltraJSONTests.test_decodeBrokenDictLeakTest  sC    t 	? 	?Aj%,>>>>	? 	?r   c                 z    d}t          d          D ](}|                     t          t          j        |           )d S )Nz[[[truer   r   r   s      r   test_decodeBrokenListLeakTestz,UltraJSONTests.test_decodeBrokenListLeakTest  sC    t 	? 	?Aj%,>>>>	? 	?r   c                 V    d}|                      t          t          j        |           d S )Nz{{{{31337}}}}r   r>   s     r   test_decodeDictWithNoKeyz'UltraJSONTests.test_decodeDictWithNoKey  '    *elE:::::r   c                 V    d}|                      t          t          j        |           d S )Nz{{{{"key"}}}}r   r>   s     r   !test_decodeDictWithNoColonOrValuez0UltraJSONTests.test_decodeDictWithNoColonOrValue  r   r   c                 V    d}|                      t          t          j        |           d S )Nz{{{{"key":}}}}r   r>   s     r   test_decodeDictWithNoValuez)UltraJSONTests.test_decodeDictWithNoValue  s'     *elE:::::r   c                 Z    d}|                      dt          j        |                     d S )N31337r}   r   r   r   r>   s     r   test_decodeNumericIntPosz'UltraJSONTests.test_decodeNumericIntPos  s-    U 3 344444r   c                 Z    d}|                      dt          j        |                     d S )Nz-31337r   r  r>   s     r   test_decodeNumericIntNegz'UltraJSONTests.test_decodeNumericIntNeg  s-    e!4!455555r   c                 V    d}|                      t          t          j        |           d S )Ns   r   r   r   r   r>   s     r    test_encodeUnicode4BytesUTF8Failz/UltraJSONTests.test_encodeUnicode4BytesUTF8Fail  s'    +-u=====r   c                    d}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     |                     |t          j        |                     d}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     |                     |t          j        |                     |                     dt          j        d                     d S )Nz31337   1337 z"  \u0000\r\n "z   
 rz   rG   s      r   test_encodeNullCharacterz'UltraJSONTests.test_encodeNullCharacter  s   !e$$
6 2 2333E!2!2333V 4 4555e$$
6 2 2333E!2!2333V 4 4555-u{?/K/KLLLLLr   c                 ~    d}|                      t          j        |          t          j        |                     d S )Nz"31337 \u0000 31337")r   r   r   r   r   r>   s     r   test_decodeNullCharacterz'UltraJSONTests.test_decodeNullCharacter  s7    'e,,dj.?.?@@@@@r   c                     g d}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     d S )N)    r  r  r  r  r  rO   rG   s      r   test_encodeListLongConversionz,UltraJSONTests.test_encodeListLongConversion  sj    
 
 
 e$$
6 2 2333V 4 455555r   c                     g d}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     d S )N)    r  r  rO   rG   s      r   %test_encodeListLongUnsignedConversionz4UltraJSONTests.test_encodeListLongUnsignedConversion  sb    RRRe$$
6 2 2333V 4 455555r   c                 "   d}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     |                     |t          j        |                     d S )Nr  rz   rG   s      r   test_encodeLongConversionz(UltraJSONTests.test_encodeLongConversion  s|    #e$$
6 2 2333E!2!2333V 4 455555r   c                 "   d}t          j        |          }|                     |t          j        |                     |                     |t          j        |                     |                     |t          j        |                     d S )Nr  rz   rG   s      r   !test_encodeLongUnsignedConversionz0UltraJSONTests.test_encodeLongUnsignedConversion  s|    $e$$
6 2 2333E!2!2333V 4 455555r   c                     d}t          j        |          }|                     |t          j        |                     d S N1337E40r   r   r   r   r   rG   s      r   test_numericIntExpz!UltraJSONTests.test_numericIntExp  <    e$$E!2!233333r   c                     d}t          j        |          }|                     |t          j        |                     d S )Nz1.337E40r  rG   s      r   test_numericIntFrcExpz$UltraJSONTests.test_numericIntFrcExp   <    e$$E!2!233333r   c                     d}t          j        |          }|                     |t          j        |                     d S )Nz1337E+9r  rG   s      r   test_decodeNumericIntExpEPLUSz,UltraJSONTests.test_decodeNumericIntExpEPLUS  r!  r   c                     d}t          j        |          }|                     |t          j        |                     d S )Nz	1.337e+40r  rG   s      r   test_decodeNumericIntExpePLUSz,UltraJSONTests.test_decodeNumericIntExpePLUS
  s<    e$$E!2!233333r   c                     d}t          j        |          }|                     |t          j        |                     d S r  r  rG   s      r   test_decodeNumericIntExpEz(UltraJSONTests.test_decodeNumericIntExpE  r!  r   c                     d}t          j        |          }|                     |t          j        |                     d S )N1337e40r  rG   s      r   test_decodeNumericIntExpez(UltraJSONTests.test_decodeNumericIntExpe  r!  r   c                     d}t          j        |          }|                     |t          j        |                     d S )Nz1.337E-4r  rG   s      r   test_decodeNumericIntExpEMinusz-UltraJSONTests.test_decodeNumericIntExpEMinus  r$  r   c                     d}t          j        |          }|                     |t          j        |                     d S )Nz1.337e-4r  rG   s      r   test_decodeNumericIntExpeMinusz-UltraJSONTests.test_decodeNumericIntExpeMinus  r$  r   c                     t                      }t          j        g d|           |                     d|                                           d S )Nr   rp   r   [1,2,3])r   r   dumpr   getvaluer   fs     r   test_dumpToFilezUltraJSONTests.test_dumpToFile#  sE    JJ
999a   AJJLL11111r   c                      G d d          } |            }t          j        g d|           |                     d|j                   d S )Nc                       e Zd Zd Zd ZdS ):UltraJSONTests.test_dumpToFileLikeObject.<locals>.filelikec                     d| _         d S N bytesr,   s    r   __init__zCUltraJSONTests.test_dumpToFileLikeObject.<locals>.filelike.__init__*  s    


r   c                 &    | xj         |z  c_         d S rX   r@  )r   rA  s     r   writez@UltraJSONTests.test_dumpToFileLikeObject.<locals>.filelike.write-  s    

e#



r   N)r   r   r   rB  rD  r$   r   r   fileliker<  )  s2             $ $ $ $ $r   rE  r3  r4  )r   r5  r   rA  r   rE  r8  s      r   test_dumpToFileLikeObjectz(UltraJSONTests.test_dumpToFileLikeObject(  sk    	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ HJJ
999a   AG,,,,,r   c                 T    |                      t          t          j        g d           d S r>  )r   	TypeErrorr   r5  r,   s    r   test_dumpFileArgsErrorz%UltraJSONTests.test_dumpFileArgsError4  s$    )UZR88888r   c                 x    t          d          }|                     g dt          j        |                     d S )N	[1,2,3,4]r   )r   r   r   loadr7  s     r   test_loadFilezUltraJSONTests.test_loadFile7  s7    [!!uz!}}55555r   c                      G d d          } |            }|                      g dt          j        |                     d S )Nc                       e Zd Zd ZdS )8UltraJSONTests.test_loadFileLikeObject.<locals>.filelikec                 F    	 | j          d S # t          $ r d| _         Y dS w xY w)NTrL  )endAttributeErrorr,   s    r   readz=UltraJSONTests.test_loadFileLikeObject.<locals>.filelike.read=  s;    'HHHH% ' ' '#DH&;;'s      N)r   r   r   rU  r$   r   r   rE  rQ  <  s#        ' ' ' ' 'r   rE  r   )r   r   rM  rF  s      r   test_loadFileLikeObjectz&UltraJSONTests.test_loadFileLikeObject;  s_    	' 	' 	' 	' 	' 	' 	' 	' HJJuz!}}55555r   c                 R    |                      t          t          j        d           d S Nz[])r   rI  r   rM  r,   s    r   test_loadFileArgsErrorz%UltraJSONTests.test_loadFileArgsErrorG  s"    )UZ66666r   c                 R    |                      t          t          j        d           d S )Nl   U$Jp[lSr  r,   s    r   test_encodeNumericOverflowz)UltraJSONTests.test_encodeNumericOverflowJ  s#    -7QRRRRRr   c                     dddz  ddz  ddz  f}d}t          ||          D ]3\  }}|                     t          j        |          d         |           4d S )Nz{"id": 3590016419}z
{"id": %s}                    )l   M+ r]  r^  r_  id)zipr   r   r   )r   docsresultsdocresults        r   !test_decodeNumberWith32bitSignBitz0UltraJSONTests.test_decodeNumberWith32bitSignBitM  s|     !7"7"M*	
 >tW-- 	> 	>KCU\#..t4f====	> 	>r   c                     t          d          D ]6}d                    d          }|dz  dz  dz  }t          j        |           7d S )NrS      år      rp   )r   r   r   )r   r   baser   s       r   test_encodeBigEscapez#UltraJSONTests.test_encodeBigEscapeZ  sX    r 	  	 A??7++D4K$&*EL	  	 r   c                     t          d          D ]P}d                    d          }d                                }||dz  dz  dz  z   |z   }t          j        |           Qd S )NrS   rh  r   "ri  rp   )r   r   r   r   )r   r   rj  quoter   s        r   test_decodeBigEscapez#UltraJSONTests.test_decodeBigEscape`  so    r 	  	 A??7++DJJLLETD[4/!34u<EL		  	 r   c                     ddi G fdd          } |            }t          j        |          }t          j        |          }|                     |           d S )Nkeyr}   c                        e Zd Z fdZd ZdS ),UltraJSONTests.test_toDict.<locals>.DictTestc                     S rX   r$   )r   ds    r   r   z3UltraJSONTests.test_toDict.<locals>.DictTest.toDictk  s    r   c                     dS )Nz"json defined"r$   r,   s    r   __json__z5UltraJSONTests.test_toDict.<locals>.DictTest.__json__n  s    ''r   N)r   r   r   r   rw  )ru  s   r   DictTestrs  j  s=            ( ( ( ( (r   rx  r   r   r   r   )r   rx  or   r_   ru  s        @r   test_toDictzUltraJSONTests.test_toDictg  s    EN	( 	( 	( 	( 	( 	( 	( 	( 	( 	( HJJal6""a     r   c                     d G fdd          }d |            i}t          j        |          }t          j        |          }|                     |di           d S )Nthis is the correct outputc                       e Zd Z fdZdS )6UltraJSONTests.test_object_with_json.<locals>.JSONTestc                     dz   dz   S Nrm  r$   r   output_texts    r   rw  z?UltraJSONTests.test_object_with_json.<locals>.JSONTest.__json__|  s    [(3..r   Nr   r   r   rw  r  s   r   JSONTestr  {  s.        / / / / / / /r   r  rq  ry  r   r  ru  r   r_   r  s        @r   test_object_with_jsonz$UltraJSONTests.test_object_with_jsonv  s     3	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ XXZZ al6""v{344444r   c                     d G fdd          }d |            i}t          j        |          }t          j        |          }|                     |di           d S )Nr}  c                       e Zd Z fdZdS )>UltraJSONTests.test_object_with_json_unicode.<locals>.JSONTestc                     dz   dz   S r  r$   r  s    r   rw  zGUltraJSONTests.test_object_with_json_unicode.<locals>.JSONTest.__json__  s    k)D00r   Nr  r  s   r   r  r    s.        1 1 1 1 1 1 1r   r  rq  ry  r  s        @r   test_object_with_json_unicodez,UltraJSONTests.test_object_with_json_unicode  s     4	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 XXZZ al6""v{344444r   c                     dddgi G fdd          }d |            i}t          j        |          }t          j        |          }|                     |di           d S )Nfoobarbazc                       e Zd Z fdZdS )>UltraJSONTests.test_object_with_complex_json.<locals>.JSONTestc                 ,    t          j                  S rX   r=   )r   objs    r   rw  zGUltraJSONTests.test_object_with_complex_json.<locals>.JSONTest.__json__  s    |C(((r   Nr  )r  s   r   r  r    s.        ) ) ) ) ) ) )r   r  rq  ry  )r   r  ru  r   r_   r  s        @r   test_object_with_complex_jsonz,UltraJSONTests.test_object_with_complex_json  s     '(	) 	) 	) 	) 	) 	) 	) 	) 	) 	) XXZZ al6""vsm,,,,,r   c                     d dddi fD ]C G fdd          }d |            i}|                      t          t          j        |           Dd S )Ni  gGz(@Tc                       e Zd Z fdZdS )AUltraJSONTests.test_object_with_json_type_error.<locals>.JSONTestc                     S rX   r$   )r   return_values    r   rw  zJUltraJSONTests.test_object_with_json_type_error.<locals>.JSONTest.__json__  s	    ''r   Nr  )r  s   r   r  r    s.        ( ( ( ( ( ( (r   r  rq  )r   rI  r   r   )r   r  ru  r  s      @r    test_object_with_json_type_errorz/UltraJSONTests.test_object_with_json_type_error  s    !4b9 	: 	:L( ( ( ( ( ( ( ( ( ( $Aiq9999	: 	:r   c                      G d d          }d |            i}|                      t          t          j        |           d S )Nc                       e Zd Zd ZdS )FUltraJSONTests.test_object_with_json_attribute_error.<locals>.JSONTestc                     t           rX   )rT  r,   s    r   rw  zOUltraJSONTests.test_object_with_json_attribute_error.<locals>.JSONTest.__json__  s    $$r   Nr  r$   r   r   r  r    s#        % % % % %r   r  rq  )r   rT  r   r   )r   r  ru  s      r   %test_object_with_json_attribute_errorz4UltraJSONTests.test_object_with_json_attribute_error  s\    	% 	% 	% 	% 	% 	% 	% 	% XXZZ .%,:::::r   c                 V    d}|                      t          t          j        |           d S )Nz[31337,]r   r>   s     r   !test_decodeArrayTrailingCommaFailz0UltraJSONTests.test_decodeArrayTrailingCommaFail  r   r   c                 V    d}|                      t          t          j        |           d S )Nz[,31337]r   r>   s     r    test_decodeArrayLeadingCommaFailz/UltraJSONTests.test_decodeArrayLeadingCommaFail  r   r   c                 V    d}|                      t          t          j        |           d S )Nz[,]r   r>   s     r   test_decodeArrayOnlyCommaFailz,UltraJSONTests.test_decodeArrayOnlyCommaFail  r   r   c                 V    d}|                      t          t          j        |           d S )Nz[]]r   r>   s     r   $test_decodeArrayUnmatchedBracketFailz3UltraJSONTests.test_decodeArrayUnmatchedBracketFail  r   r   c                 ^    d}t          j        |          }|                     g |           d S rX  )r   r   r   )r   r   r  s      r   test_decodeArrayEmptyz$UltraJSONTests.test_decodeArrayEmpty  s2    l5!!S!!!!!r   c                 2    d}t          j        |           d S )Nz[31337]r   r   r>   s     r   test_decodeArrayOneItemz&UltraJSONTests.test_decodeArrayOneItem      Ur   c                 2    d}t          j        |           d S )N18446744073709551615r  r>   s     r   test_decodeLongUnsignedValuez+UltraJSONTests.test_decodeLongUnsignedValue      &Ur   c                 2    d}t          j        |           d S )N9223372036854775807r  r>   s     r   test_decodeBigValuez"UltraJSONTests.test_decodeBigValue  s    %Ur   c                 2    d}t          j        |           d S )Nz-9223372036854775808r  r>   s     r   test_decodeSmallValuez$UltraJSONTests.test_decodeSmallValue  r  r   c                 V    d}|                      t          t          j        |           d S N18446744073709551616r   r>   s     r   test_decodeTooBigValuez%UltraJSONTests.test_decodeTooBigValue  '    &*elE:::::r   c                 V    d}|                      t          t          j        |           d S Nz-90223372036854775809r   r>   s     r   test_decodeTooSmallValuez'UltraJSONTests.test_decodeTooSmallValue  '    '*elE:::::r   c                 V    d}|                      t          t          j        |           d S r  r   r>   s     r   test_decodeVeryTooBigValuez)UltraJSONTests.test_decodeVeryTooBigValue  r  r   c                 V    d}|                      t          t          j        |           d S r  r   r>   s     r   test_decodeVeryTooSmallValuez+UltraJSONTests.test_decodeVeryTooSmallValue  r  r   c                 2    d}t          j        |           d S )Nz{}
	 r  r>   s     r   "test_decodeWithTrailingWhitespacesz1UltraJSONTests.test_decodeWithTrailingWhitespaces  r  r   c                 V    d}|                      t          t          j        |           d S )Nz{}
	 ar   r>   s     r   %test_decodeWithTrailingNonWhitespacesz4UltraJSONTests.test_decodeWithTrailingNonWhitespaces  r   r   c                 V    d}|                      t          t          j        |           d S )Nz[18446744073709551616]r   r>   s     r   test_decodeArrayWithBigIntz)UltraJSONTests.test_decodeArrayWithBigInt  s'    (*elE:::::r   c                    |                      dt          j        d                     |                      dt          j        d                     |                      dt          j        d                     |                      dt          j        d                     |                      d	t          j        d
                     |                      dt          j        d                     |                      dt          j        d                     |                      dt          j        d                     |                      dt          j        d                     |                      dt          j        d                     |                      dt          j        d                     |                      dt          j        d                     |                      dt          j        d                     |                      dt          j        d                     |                      dt          j        d                     |                      dt          j        d                      |                      d!t          j        d"                     |                      d#t          j        d$                     d S )%Ng3ӭz-1.1234567893gRCz-1.234567893gB4z-1.34567893g
LOz
-1.4567893g	jz	-1.567893g[_$z-1.67893geaz-1.7894g}?5^Iz-1.893gz-1.3g3ӭ?z1.1234567893gRC?z1.234567893gB4?z
1.34567893g
LO?z	1.4567893g	j?z1.567893g[_$?z1.67893gea?z1.7894g}?5^I?z1.893g?z1.3)r7   r   r   r,   s    r   'test_decodeFloatingPointAdditionalTestsz6UltraJSONTests.test_decodeFloatingPointAdditionalTests  sH   }ek/.J.JKKK|U[-H-HIII{EK,F,FGGGz5;|+D+DEEEy%+k*B*BCCCxZ)@)@AAAwI(>(>???vu{8'<'<===tU[%8%8999|U[-H-HIII{EK,F,FGGGz5;|+D+DEEEy%+k*B*BCCCxZ)@)@AAAwI(>(>???vu{8'<'<===uek'&:&:;;;sEK$6$677777r   c                 V    d}|                      t          t          j        |           d S )Nz{"age", 44}r   r>   s     r   test_ReadBadObjectSyntaxz'UltraJSONTests.test_ReadBadObjectSyntax
  r   r   c                 V    |                      dt          j        d                     d S )NTtruer   r   r   r,   s    r   test_ReadTruezUltraJSONTests.test_ReadTrue  (    u{62233333r   c                 V    |                      dt          j        d                     d S )NFfalser  r,   s    r   test_ReadFalsezUltraJSONTests.test_ReadFalse  s(    G 4 455555r   c                 V    |                      d t          j        d                     d S Nnullr  r,   s    r   test_ReadNullzUltraJSONTests.test_ReadNull  r  r   c                 V    |                      dt          j        d                     d S )Nr  Tr*   r,   s    r   test_WriteTruezUltraJSONTests.test_WriteTrue  (    T!2!233333r   c                 V    |                      dt          j        d                     d S )Nr  Fr*   r,   s    r   test_WriteFalsezUltraJSONTests.test_WriteFalse  s(    %+e"4"455555r   c                 V    |                      dt          j        d                      d S r  r*   r,   s    r   test_WriteNullzUltraJSONTests.test_WriteNull  r  r   c                 Z    |                      g dt          j        d                     d S )NTFNz [ true, false,null] r  r,   s    r   test_ReadArrayOfSymbolsz&UltraJSONTests.test_ReadArrayOfSymbols   s0    ,,,ek:Q.R.RSSSSSr   c                 Z    |                      dt          j        g d                     d S Nz[true,false,null]r  r*   r,   s    r    test_WriteArrayOfSymbolsFromListz/UltraJSONTests.test_WriteArrayOfSymbolsFromList#  s0    ,ek:M:M:M.N.NOOOOOr   c                 V    |                      dt          j        d                     d S r  r*   r,   s    r   !test_WriteArrayOfSymbolsFromTuplez0UltraJSONTests.test_WriteArrayOfSymbolsFromTuple&  s*    ,ek:M.N.NOOOOOr   c                 V    d}|                      t          t          j        |           d S )Nu   )r   UnicodeEncodeErrorr   r+   )r   rt   s     r   $test_encodingInvalidUnicodeCharacterz3UltraJSONTests.test_encodingInvalidUnicodeCharacter)  s(    ,ek1=====r   c                 p    ddddddd}t          j        |d          }|                     |d           d S )Nr   )r/   cber8  ru  T)	sort_keysz%{"a":1,"b":1,"c":1,"d":1,"e":1,"f":1})r   r+   r   )r   data
sortedKeyss      r   test_sortKeyszUltraJSONTests.test_sortKeys-  sH    QQQQQ??[666
%LMMMMMr   getrefcountTztest requires sys.refcount)reasonc                     dd l }|                                 dg}d|i}t          j        |          }t	          j        |           |                     |t          j        |                     d S )Nr   abc1gccollectsysr  r   r+   r   )r   r  valuer  	ref_counts        r   $test_does_not_leak_dictionary_valuesz3UltraJSONTests.test_does_not_leak_dictionary_values2  sm    			


U|OE**	DCOE$:$:;;;;;r   c                 p   dd l }|                                 d}d}dg}g d}||||i}t          j        |          }t          j        |          }t	          j        |           |                     |t          j        |                     |                     |t          j        |                     d S )Nr   r  r  r3  r  )	r   r  r;   key2r:   value2r  
ref_count1
ref_count2s	            r   "test_does_not_leak_dictionary_keysz1UltraJSONTests.test_does_not_leak_dictionary_keys=  s    			


fdF+_T**
_T**
DS_T%:%:;;;S_T%:%:;;;;;r   c                     dd l }|                                 d}d}||i}t          j        |          }t	          j        |           |                     |t          j        |                     d S )Nr   r  r   r  r   r  r;   r:   r  r  s         r   (test_does_not_leak_dictionary_string_keyz7UltraJSONTests.test_does_not_leak_dictionary_string_keyM  sp    			


f~_T**
DS_T%:%:;;;;;r   c                     dd l }|                                 d}d}||i}t          j        |          }t	          j        |           |                     |t          j        |                     d S )Nr   )r/   r   r  r	  s         r   'test_does_not_leak_dictionary_tuple_keyz6UltraJSONTests.test_does_not_leak_dictionary_tuple_keyY  sp    			


f~_T**
DS_T%:%:;;;;;r   c                     dd l }|                                 d}d}||i}t          j        |          }t	          j        |           |                     |t          j        |                     d S )Nr      1r   r  r	  s         r   'test_does_not_leak_dictionary_bytes_keyz6UltraJSONTests.test_does_not_leak_dictionary_bytes_keye  p    			


f~_T**
DS_T%:%:;;;;;r   c                     dd l }|                                 d }d}||i}t          j        |          }t	          j        |           |                     |t          j        |                     d S )Nr   r   r  r	  s         r   &test_does_not_leak_dictionary_None_keyz5UltraJSONTests.test_does_not_leak_dictionary_None_keyq  r  r   N)r   r   r   r   r(   r-   r1   r3   r5   r8   r?   rH   rJ   rL   rP   rT   rV   rY   r`   rc   re   rg   ri   rl   rv   rx   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r  r  r  r  r  r  r  r   r#  r&  r(  r*  r-  r/  r1  r9  rG  rJ  rN  rV  rY  r[  rf  rk  ro  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  unittestskipIfhasattrr  r  r  r
  r  r  r  r$   r   r   r   r      s       - - -B B B<
 
 
' ' '' ' '  
9 9 9  ,J J J( ( (
J J J6 6 66 6 66 6 6  / / /3 3 3/ / // / // / // / /% % %.% % %$6 6 66 6 66 6 6	6 	6 	66 6 66 6 66 6 66 6 66 6 6/ / /% % %> > >&> > >> > >> > >K K K; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;? ? ?
? ? ?
? ? ?
; ; ;; ; ;; ; ;5 5 56 6 6> > >M M MA A A6 6 66 6 66 6 66 6 64 4 4
4 4 4
4 4 4
4 4 4
4 4 4
4 4 4
4 4 4
4 4 4
2 2 2

- 
- 
-9 9 96 6 6
6 
6 
67 7 7S S S> > >          ! ! !5 5 55 5 5- - -	: 	: 	:; ; ;; ; ;; ; ;; ; ;; ; ;" " "
        ; ; ;; ; ;; ; ;; ; ;  ; ; ;; ; ;8 8 8*; ; ;4 4 46 6 64 4 44 4 46 6 64 4 4T T TP P PP P P> > >N N N
 X_m44<<Eabbb< < cb< X_m44<<Eabbb< < cb< X_m44<<Eabbb	< 	< cb	< X_m44<<Eabbb	< 	< cb	< X_m44<<Eabbb	< 	< cb	< X_m44<<Eabbb	< 	< cb	< 	< 	<r   r   __main__indenti  i  c                 6    t          j        ddi|            d S )Nr/   Tr  r=   r  s    r   test_dump_huge_indentr    s!    	L#tV,,,,,,r   first_lengthrp      second_lengthi*  i*  c                 >    t          j        d| z  d|z  g           d S )Nr/   r  )r   r+   )r  r  s     r   test_dump_long_stringr    s)     
K|#Vm%;<=====r   c                      g x} }t          d          D ]O}|                    t          t          |                               |d         }t          j        | |           Pd S )NrN   r  )r   appendlistr   r+   )r/   _ais      r   test_dump_indented_nested_listr&    si    KA2YY ! !
		$uQxx..!!!VAa     ! !r   )r   r   rp   rn   rB   r   1   c                     t          t                                        d          }t          j        |                                          }t          j        ||            d S )Nz334-reproducer.jsonr  )r   __file__	with_namer   r   
read_bytesr+   )r  pathr/   s      r   test_issue_334r-    sP    >>##$9::DDOO%%&&A	K&!!!!!!r   ztest_input, expected))z"\uD83D\uDCA9"u   💩)z"a\uD83D\uDCA9b"u   a💩b)z"\uD800"   )z
"a\uD800b"u   ab)z"\uDEAD"   )z
"a\uDEADb"u   ab)z"\uD83D\uD83D\uDCA9"u   💩)z"\uDCA9\uD83D\uDCA9"u   💩)z"\uD83D\uDCA9\uD83D"u   💩)z"\uD83D\uDCA9\uDCA9"u   💩)z"\uD83D \uDCA9"u    )u   ""r.  )u   ""r/  )u	   "a"u   a)u   ""u   c                     t          j        |           |k    sJ t          j        |                     dd                    |k    sJ t          j        |           |k    sJ d S )Nr   surrogatepass)r   r   r   r   )
test_inputexpecteds     r    test_decode_surrogate_charactersr4    sm    0 ;z""h....;z((/BBCCxOOOO :j!!X------r   )r	   r   rD   r  r  pytestior   pathlibr   srslyr   r+   r\   TestCaser   r   mainmarkparametrizer#  r   r  r  r&  r-  r4  r$   r   r   <module>r=     s      



                     zl< l< l< l< l<X& l< l< l<^0 zHMOOO  44eU(;(;#<#<==- - >=- eeAqkk):):;;$$uuUE/B/B*C*CDD> > ED <;>! ! ! #9#9#9::" " ;:"    .. ./ .. . .r   