
    i              
       t   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$                  j'                  d e ed	d
                  d        Zej$                  j'                  d e edd                  ej$                  j'                  d e edd                  d               Zd Zej$                  j'                  dg d      d        Zej$                  j'                  dg d      d        Zy)    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        Zy)UltraJSONTestsc                     t        j                  d      }t        j                  |      }t        j                  |      }| j                  |d       y )Nz	1337.1337g@)decimalDecimalr   encodedecodeassertEqualselfsutencodeddecodeds       m/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/srsly/tests/ujson/test_ujson.pytest_encodeDecimalz!UltraJSONTests.test_encodeDecimal   s<    ook*,,s#,,w'),    c                      dd}d}d} fd} ||d        ||d        ||dd	        ||dd	        ||dd	        ||dd	        ||d
       y )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 |}j                  ||        |j                  dd      rKj                  t	        j
                  |             j                  t        j                  |             y y )Nescape_forward_slashesT)r   r   r   getjsonloadsr   )expected_outputencode_kwargsoutputinputr   s      r   helperz:UltraJSONTests.test_encodeStringConversion.<locals>.helper   so    \\%9=9FV_5  !94@  

6(:;  V(<= A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e4 	deLeuM 	|$$G|%4H 	"5Ar   c                 R    | j                  dt        j                  dd             y )Nz$"\u003cimg src='\u0026amp;'\/\u003e"z<img src='&amp;'/>T)r#   r   r   dumpsr   s    r   testWriteEscapedStringz%UltraJSONTests.testWriteEscapedString4   s"    8KK,E	
r   c                     ddi}t        j                  |      }t        j                  |      }| j                  ||       t	        j
                  |      }t	        j                  |      }| j                  ||       y )NalZ:`7{ r   r+   r   r   r   r   r   r   s       r   test_doubleLongIssuez#UltraJSONTests.test_doubleLongIssue:   sd    %&**S/**W%g&,,s#,,w'g&r   c                     ddi}t        j                  |      }t        j                  |      }| j                  ||       t	        j
                  |      }t	        j                  |      }| j                  ||       y )Nr/   g#_tr0   r   s       r   test_doubleLongDecimalIssuez*UltraJSONTests.test_doubleLongDecimalIssueC   sd    ,-**S/**W%g&,,s#,,w'g&r   c                 `    ddi}t        j                  |      }t        j                  |       y )Nr/   gԟpA)r   r+   r   )r   r   r   s      r   test_encodeDecodeLongDecimalz+UltraJSONTests.test_encodeDecodeLongDecimalL   s'    &'++c"Wr   c                     ddi}t        j                  |      }t        j                  |      }| j                  |d   |d          y )Nr/   g=
ףp=@)r   r   r   assertAlmostEqualr   s       r   test_decimalDecodeTestz%UltraJSONTests.test_decimalDecodeTestQ   s?    Dk,,s#,,w's4y'$-8r   c                 ~    ddddddd}t        j                  |       dddddddd}t        j                  |       y )Nvalue1)key1r;   r;   r;   r;   r;   )   بنr<   r<   r<   r<   r<   r<   r   r   r   r   s     r   test_encodeDictWithUnicodeKeysz-UltraJSONTests.test_encodeDictWithUnicodeKeysW   sU    
 	U 
 	Ur   c                 2   t         j                  }t        j                  |      }| j	                  t        |d      t        t        j                  |      d             | j	                  t        |d      t        t        j                  |      d             y N   	mathpir   r   r   roundr   r   r   r   r   r   s      r   test_encodeDoubleConversionz*UltraJSONTests.test_encodeDoubleConversionm   se    e$ua%

60BA*FGua%V0Da*HIr   c                 V    d}t        j                  |      }| j                  |d       y )Ng      ?z1.0)r   r   r   rG   s      r   test_encodeWithDecimalz%UltraJSONTests.test_encodeWithDecimals   s%    e$'r   c                 4   t         j                   }t        j                  |      }| j	                  t        |d      t        t        j                  |      d             | j	                  t        |d      t        t        j                  |      d             y rA   rC   rG   s      r   test_encodeDoubleNegConversionz-UltraJSONTests.test_encodeDoubleNegConversionx   sg    e$ua%

60BA*FGua%V0Da*HIr   c                     g gggdz  }t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             y )N   r   r   r   r   r   r   rG   s      r   test_encodeArrayOfNestedArraysz-UltraJSONTests.test_encodeArrayOfNestedArrays   sQ    $2e$

6 23V 45r   c                     g ddz  }t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             y )N)cAT@rR   rR   rR   
   rO   rG   s      r   test_encodeArrayOfDoublesz(UltraJSONTests.test_encodeArrayOfDoubles   sL    DrIe$

6 23V 45r   c                     d}t        j                  |      }| j                  |t        j                  |             | j                  |d       | j                  |t        j
                  |             y )NzA string \ /   
  	z"A string \\ \/ \b \f \n \r \t"rO   rG   s      r   test_encodeStringConversion2z+UltraJSONTests.test_encodeStringConversion2   sX    .e$

6 23!JKV 45r   c                      y Nr$   r,   s    r   test_decodeUnicodeConversionz+UltraJSONTests.test_decodeUnicodeConversion   s    r   c                     d}t        j                  |      }t        j                  |      }| j                  |t	        |             | j                  |t        j                  |             y )Nu@   Räksmörgås اسامة بن محمد بن عوض بن لادنr   r   r   r   json_unicoder   r   r   r   encdecs       r   test_encodeUnicodeConversion1z,UltraJSONTests.test_encodeUnicodeConversion1   sP    Rll5!ll3l512djjo.r   c                     d}t        j                  |      }t        j                  |      }| j                  ||       | j                  |t	        |             y )N)r   r   r   r   r\   r]   s       r   test_encodeControlEscapingz)UltraJSONTests.test_encodeControlEscaping   sH    ll5!ll3$l512r   c                     d}t        j                  |      }t        j                  |      }| j                  |t	        |             | j                  |t        j                  |             y )Nu
   æ¥Ñr[   r]   s       r   test_encodeUnicodeConversion2z,UltraJSONTests.test_encodeUnicodeConversion2   sP    &ll5!ll3l512djjo.r   c                     d}t        j                  |      }t        j                  |      }| j                  |t	        |             | j                  |t        j                  |             y )Nu   ðr[   r]   s       r   test_encodeUnicodeSurrogatePairz.UltraJSONTests.test_encodeUnicodeSurrogatePair   sP    "ll5!ll3l512djjo.r   c                     d}t        j                  |      }t        j                  |      }| j                  |t	        |             | j                  |t        j                  |             y )Nu   ð°TRAILINGNORMALr[   r]   s       r   test_encodeUnicode4BytesUTF8z+UltraJSONTests.test_encodeUnicode4BytesUTF8   P    0ll5!ll3l512djjo.r   c                     d}t        j                  |      }t        j                  |      }| j                  |t	        |             | j                  |t        j                  |             y )Nu   ó¿¿¿TRAILINGNORMALr[   r]   s       r   #test_encodeUnicode4BytesUTF8Highestz2UltraJSONTests.test_encodeUnicode4BytesUTF8Highest   rj   r   c                    d}t        j                  |      }t        j                  |      }t        |      dk(  r+| j	                  t        |      t        |      dz  dz          n*| j	                  t        |      t        |      dz  dz          | j	                  ||       t        j
                  |      }| j	                  ||       t        j                  |d      }t        j                  |d      }| j	                  t        |      t        |      dz          | j	                  ||       t        j
                  |      }| j	                  ||       y )Nu   🐮🐮🐭🐭            Fr!   )r   r+   r   lenr   r   r   sr   encoded_jsonr   s        r   testEncodeUnicodeBMPz#UltraJSONTests.testEncodeUnicodeBMP   s   6++a.zz!}q6Q;S\3q6B;?;S\3q6A:>:,/++g&G$ ++ae4zz!%8Ws1vz2,/++g&G$r   c                 >   d}t        j                  |      }t        j                  |      }| j                  t	        |      t	        |      dz  dz          | j                  ||       t        j
                  |      }| j                  ||       t        j                  |d      }t        j                  |d      }| j                  t	        |      t	        |      dz          | j                  ||       t        j
                  |      }| j                  ||       y )Nu	   ✿♡✿rq   rp   Fr!   )r   r+   r   r   rr   r   rs   s        r   testEncodeSymbolsz UltraJSONTests.testEncodeSymbols   s     ++a.zz!}Ws1vzA~6,/++g&G$ ++ae4zz!%8Ws1vz2,/++g&G$r   c                    g ggg}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             | j                  |t        j                  |             y rX   r   r   r   r   r   r+   r   rG   s      r   test_encodeArrayInArrayz&UltraJSONTests.test_encodeArrayInArray   sf    $e$

6 23E!23V 45r   c                    d}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             | j                  |t        j                  |             y )Niz  rz   rG   s      r   test_encodeIntConversionz'UltraJSONTests.test_encodeIntConversion   `    e$

6 23E!23V 45r   c                    d}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             | j                  |t        j                  |             y )N闅rz   rG   s      r   test_encodeIntNegConversionz*UltraJSONTests.test_encodeIntNegConversion   s`    e$

6 23E!23V 45r   c                 d   d}t        j                  |      }t        j                  |       t        j                  |       | j                  |t        j                  |             | j                  |t        j                  |             | j                  |t        j                  |             y )Nl         )r   r   r   r   r   r   r+   rG   s      r   test_encodeLongNegConversionz+UltraJSONTests.test_encodeLongNegConversion  sx    $e$

6V

6 23E!23V 45r   c                     g d}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             y )N   rp      rn   rO   rG   s      r   test_encodeListConversionz(UltraJSONTests.test_encodeListConversion  sG    e$

6 23V 45r   c                    ddddd}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             | j                  |t        j
                  |             y )Nr   rp   r   rn   )k1k2k3k4rO   rG   s      r   test_encodeDictConversionz(UltraJSONTests.test_encodeDictConversion  si    !4e$

6 23V 45V 45r   c                    d }t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             | j                  |t        j                  |             y rX   rz   rG   s      r   test_encodeNoneConversionz(UltraJSONTests.test_encodeNoneConversion  `    e$

6 23E!23V 45r   c                    d}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             | j                  |t        j                  |             y )NTrz   rG   s      r   test_encodeTrueConversionz(UltraJSONTests.test_encodeTrueConversion%  r   r   c                    d}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             | j                  |t        j                  |             y )NFrz   rG   s      r   test_encodeFalseConversionz)UltraJSONTests.test_encodeFalseConversion,  r   r   c                    d}|j                  d      }t        j                  |d      }t        j                   |      }| j                  |t	        j
                  |d             | j                  |t	        j                  |             y )Ns   日шutf-8Fr!   )r   r   r   r   r   r+   r   r]   s       r   test_encodeToUTF8z UltraJSONTests.test_encodeToUTF83  sf    'W%ll5u5ll3djjUCDdjjo.r   c                     d}t        j                  |      }t        j                  t        |            }| j                  ||       y )Nz{"obj": 31337})r   r   strr   )r   r   dec1dec2s       r   test_decodeFromUnicodez%UltraJSONTests.test_decodeFromUnicode;  s7     ||E"||CJ't$r   c                      G d d      } G d d      } |       } |       |_         ||j                   _         | j                  t        t        j                  |       y )Nc                       e Zd ZdZd Zy)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y)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  sJ    	/ 	/	/ 	/ t#-u=r   c                 d    t        d      }| j                  t        t        j                  |       y )Nnanfloatr   r   r   r   r>   s     r   test_encodeDoubleNanz#UltraJSONTests.test_encodeDoubleNanT  !    e-u=r   c                 d    t        d      }| j                  t        t        j                  |       y Ninfr   r>   s     r   test_encodeDoubleInfz#UltraJSONTests.test_encodeDoubleInfX  r   r   c                 f    t        d       }| j                  t        t        j                  |       y r   r   r>   s     r   test_encodeDoubleNegInfz&UltraJSONTests.test_encodeDoubleNegInf\  s#    u-u=r   c                 n    ddl m}  |g d      }| j                  dt        j                  |             y )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`  s*    +<=4ell56IJr   c                 R    d}| j                  t        t        j                  |       y )Nzfdsa sda v9sa fdsar   
ValueErrorr   r   r>   s     r   test_decodeJibberishz#UltraJSONTests.test_decodeJibberishf  s    $*ellE:r   c                 R    d}| j                  t        t        j                  |       y )N[r   r>   s     r   test_decodeBrokenArrayStartz*UltraJSONTests.test_decodeBrokenArrayStartj      *ellE:r   c                 R    d}| j                  t        t        j                  |       y )N{r   r>   s     r   test_decodeBrokenObjectStartz+UltraJSONTests.test_decodeBrokenObjectStartn  r   r   c                 R    d}| j                  t        t        j                  |       y )N]r   r>   s     r   test_decodeBrokenArrayEndz(UltraJSONTests.test_decodeBrokenArrayEndr  r   r   c                 X    ddz  }| j                  t        t        j                  |       y )Nr      r   r>   s     r   test_decodeArrayDepthTooBigz*UltraJSONTests.test_decodeArrayDepthTooBigv  "    {#*ellE:r   c                 R    d}| j                  t        t        j                  |       y )N}r   r>   s     r   test_decodeBrokenObjectEndz)UltraJSONTests.test_decodeBrokenObjectEndz  r   r   c                 R    d}| j                  t        t        j                  |       y )Nz
{"one":1,}r   r>   s     r   "test_decodeObjectTrailingCommaFailz1UltraJSONTests.test_decodeObjectTrailingCommaFail~  s    *ellE:r   c                 X    ddz  }| j                  t        t        j                  |       y )Nr   r   r   r>   s     r   test_decodeObjectDepthTooBigz+UltraJSONTests.test_decodeObjectDepthTooBig  r   r   c                 R    d}| j                  t        t        j                  |       y )Nz"TESTINGr   r>   s     r   test_decodeStringUnterminatedz,UltraJSONTests.test_decodeStringUnterminated      *ellE:r   c                 R    d}| j                  t        t        j                  |       y Nz
"TESTING\"r   r>   s     r   %test_decodeStringUntermEscapeSequencez4UltraJSONTests.test_decodeStringUntermEscapeSequence      *ellE:r   c                 R    d}| j                  t        t        j                  |       y r   r   r>   s     r   test_decodeStringBadEscapez)UltraJSONTests.test_decodeStringBadEscape  r   r   c                 R    d}| j                  t        t        j                  |       y )Ntrur   r>   s     r   test_decodeTrueBrokenz$UltraJSONTests.test_decodeTrueBroken      *ellE:r   c                 R    d}| j                  t        t        j                  |       y )Nfar   r>   s     r   test_decodeFalseBrokenz%UltraJSONTests.test_decodeFalseBroken  s    *ellE:r   c                 R    d}| j                  t        t        j                  |       y )Nnr   r>   s     r   test_decodeNullBrokenz$UltraJSONTests.test_decodeNullBroken  r   r   c                 r    d}t        d      D ]'  }| j                  t        t        j                  |       ) y )Nz{{1337:""}}  ranger   r   r   r   r   r   xs      r   $test_decodeBrokenDictKeyTypeLeakTestz3UltraJSONTests.test_decodeBrokenDictKeyTypeLeakTest  s0    t 	?Aj%,,>	?r   c                 r    d}t        d      D ]'  }| j                  t        t        j                  |       ) y )Nz
{{"key":"}r   r   r   s      r   test_decodeBrokenDictLeakTestz,UltraJSONTests.test_decodeBrokenDictLeakTest  s0    t 	?Aj%,,>	?r   c                 r    d}t        d      D ]'  }| j                  t        t        j                  |       ) y )Nz[[[truer   r   r   s      r   test_decodeBrokenListLeakTestz,UltraJSONTests.test_decodeBrokenListLeakTest  s0    t 	?Aj%,,>	?r   c                 R    d}| j                  t        t        j                  |       y )Nz{{{{31337}}}}r   r>   s     r   test_decodeDictWithNoKeyz'UltraJSONTests.test_decodeDictWithNoKey      *ellE:r   c                 R    d}| j                  t        t        j                  |       y )Nz{{{{"key"}}}}r   r>   s     r   !test_decodeDictWithNoColonOrValuez0UltraJSONTests.test_decodeDictWithNoColonOrValue  r   r   c                 R    d}| j                  t        t        j                  |       y )Nz{{{{"key":}}}}r   r>   s     r   test_decodeDictWithNoValuez)UltraJSONTests.test_decodeDictWithNoValue  s     *ellE:r   c                 R    d}| j                  dt        j                  |             y )N31337r}   r   r   r   r>   s     r   test_decodeNumericIntPosz'UltraJSONTests.test_decodeNumericIntPos  s     U 34r   c                 R    d}| j                  dt        j                  |             y )Nz-31337r   r  r>   s     r   test_decodeNumericIntNegz'UltraJSONTests.test_decodeNumericIntNeg  s     e!45r   c                 R    d}| j                  t        t        j                  |       y )Ns   r   r   r   r   r>   s     r    test_encodeUnicode4BytesUTF8Failz/UltraJSONTests.test_encodeUnicode4BytesUTF8Fail  s    +-u=r   c                 f   d}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             | j                  |t        j                  |             d}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             | j                  |t        j                  |             | j                  dt        j
                  d             y )Nz31337   1337 z"  \u0000\r\n "z   
 rz   rG   s      r   test_encodeNullCharacterz'UltraJSONTests.test_encodeNullCharacter  s    !e$

6 23E!23V 45e$

6 23E!23V 45-u{{?/KLr   c                 x    d}| j                  t        j                  |      t        j                  |             y )Nz"31337 \u0000 31337")r   r   r   r   r   r>   s     r   test_decodeNullCharacterz'UltraJSONTests.test_decodeNullCharacter  s)    'e,djj.?@r   c                     g d}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             y )N)    r  r  r  r  r  rO   rG   s      r   test_encodeListLongConversionz,UltraJSONTests.test_encodeListLongConversion  sK    
 e$

6 23V 45r   c                     g d}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             y )N)    r  r  rO   rG   s      r   %test_encodeListLongUnsignedConversionz4UltraJSONTests.test_encodeListLongUnsignedConversion  sG    Re$

6 23V 45r   c                    d}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             | j                  |t        j                  |             y )Nr  rz   rG   s      r   test_encodeLongConversionz(UltraJSONTests.test_encodeLongConversion  s`    #e$

6 23E!23V 45r   c                    d}t        j                  |      }| j                  |t        j                  |             | j                  |t        j
                  |             | j                  |t        j                  |             y )Nr  rz   rG   s      r   !test_encodeLongUnsignedConversionz0UltraJSONTests.test_encodeLongUnsignedConversion  s`    $e$

6 23E!23V 45r   c                 |    d}t        j                  |      }| j                  |t        j                  |             y N1337E40r   r   r   r   r   rG   s      r   test_numericIntExpz!UltraJSONTests.test_numericIntExp  .    e$E!23r   c                 |    d}t        j                  |      }| j                  |t        j                  |             y )Nz1.337E40r  rG   s      r   test_numericIntFrcExpz$UltraJSONTests.test_numericIntFrcExp   .    e$E!23r   c                 |    d}t        j                  |      }| j                  |t        j                  |             y )Nz1337E+9r  rG   s      r   test_decodeNumericIntExpEPLUSz,UltraJSONTests.test_decodeNumericIntExpEPLUS  r!  r   c                 |    d}t        j                  |      }| j                  |t        j                  |             y )Nz	1.337e+40r  rG   s      r   test_decodeNumericIntExpePLUSz,UltraJSONTests.test_decodeNumericIntExpePLUS
  s.    e$E!23r   c                 |    d}t        j                  |      }| j                  |t        j                  |             y r  r  rG   s      r   test_decodeNumericIntExpEz(UltraJSONTests.test_decodeNumericIntExpE  r!  r   c                 |    d}t        j                  |      }| j                  |t        j                  |             y )N1337e40r  rG   s      r   test_decodeNumericIntExpez(UltraJSONTests.test_decodeNumericIntExpe  r!  r   c                 |    d}t        j                  |      }| j                  |t        j                  |             y )Nz1.337E-4r  rG   s      r   test_decodeNumericIntExpEMinusz-UltraJSONTests.test_decodeNumericIntExpEMinus  r$  r   c                 |    d}t        j                  |      }| j                  |t        j                  |             y )Nz1.337e-4r  rG   s      r   test_decodeNumericIntExpeMinusz-UltraJSONTests.test_decodeNumericIntExpeMinus  r$  r   c                     t               }t        j                  g d|       | j                  d|j	                                y )Nr   rp   r   [1,2,3])r   r   dumpr   getvaluer   fs     r   test_dumpToFilezUltraJSONTests.test_dumpToFile#  s-    J

9a AJJL1r   c                      G d d      } |       }t        j                  g d|       | j                  d|j                         y )Nc                       e Zd Zd Zd Zy):UltraJSONTests.test_dumpToFileLikeObject.<locals>.filelikec                     d| _         y N bytesr,   s    r   __init__zCUltraJSONTests.test_dumpToFileLikeObject.<locals>.filelike.__init__*  s	    
r   c                 .    | xj                   |z  c_         y 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<  )  s     $r   rE  r3  r4  )r   r5  r   rA  r   rE  r8  s      r   test_dumpToFileLikeObjectz(UltraJSONTests.test_dumpToFileLikeObject(  s7    	$ 	$ J

9a AGG,r   c                 P    | j                  t        t        j                  g d       y r>  )r   	TypeErrorr   r5  r,   s    r   test_dumpFileArgsErrorz%UltraJSONTests.test_dumpFileArgsError4  s    )UZZR8r   c                 h    t        d      }| j                  g dt        j                  |             y )N	[1,2,3,4]r   )r   r   r   loadr7  s     r   test_loadFilezUltraJSONTests.test_loadFile7  s$    [!uzz!}5r   c                 t     G d d      } |       }| j                  g dt        j                  |             y )Nc                       e Zd Zd Zy)8UltraJSONTests.test_loadFileLikeObject.<locals>.filelikec                 J    	 | j                    y # t        $ r
 d| _         Y yw xY w)NTrL  )endAttributeErrorr,   s    r   readz=UltraJSONTests.test_loadFileLikeObject.<locals>.filelike.read=  s'    'HH% '#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-    	' 	' Juzz!}5r   c                 N    | j                  t        t        j                  d       y Nz[])r   rI  r   rM  r,   s    r   test_loadFileArgsErrorz%UltraJSONTests.test_loadFileArgsErrorG  s    )UZZ6r   c                 N    | j                  t        t        j                  d       y )Nl   U$Jp[lSr  r,   s    r   test_encodeNumericOverflowz)UltraJSONTests.test_encodeNumericOverflowJ  s    -7QRr   c                     dddz  ddz  ddz  f}d}t        ||      D ]-  \  }}| j                  t        j                  |      d   |       / y )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  se     !7"7"M*	
 >tW- 	>KCU\\#.t4f=	>r   c                     t        d      D ]3  }dj                  d      }|dz  dz  dz  }t        j                  |       5 y )NrS      år      rp   )r   r   r   )r   r   baser   s       r   test_encodeBigEscapez#UltraJSONTests.test_encodeBigEscapeZ  sB    r 	 A??7+D4K$&*ELL	 r   c                     t        d      D ]I  }dj                  d      }dj                         }||dz  dz  dz  z   |z   }t        j                  |       K y )NrS   rh  r   "ri  rp   )r   r   r   r   )r   r   rj  quoter   s        r   test_decodeBigEscapez#UltraJSONTests.test_decodeBigEscape`  sW    r 	 A??7+DJJLETD[4/!34u<ELL		 r   c                     ddi G fdd      } |       }t        j                  |      }t        j                  |      }| j                  |       y )Nkeyr}   c                       e Zd Z fdZd Zy),UltraJSONTests.test_toDict.<locals>.DictTestc                     S rX   r$   )r   ds    r   r   z3UltraJSONTests.test_toDict.<locals>.DictTest.toDictk  s    r   c                      y)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  sJ    EN	( 	( Jall6"a r   c                     d G fdd      }d |       i}t        j                  |      }t        j                  |      }| j                  |di       y )Nthis is the correct outputc                       e Zd Z fdZy)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  sR     3	/ 	/ XZ all6"v{34r   c                     d G fdd      }d |       i}t        j                  |      }t        j                  |      }| j                  |di       y )Nr}  c                       e Zd Z fdZy)>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    1r   r  rq  ry  r  s        @r   test_object_with_json_unicodez,UltraJSONTests.test_object_with_json_unicode  sR     4	1 	1 XZ all6"v{34r   c                     dddgi G fdd      }d |       i}t        j                  |      }t        j                  |      }| j                  |di       y )Nfoobarbazc                       e Zd Z fdZy)>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[     '(	) 	) XZ all6"vsm,r   c                     d dddi fD ]<   G fdd      }d |       i}| j                  t        t        j                  |       > y )Ni  gGz(@Tc                       e Zd Z fdZy)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  sK    !4b9 	:L( ( $Aiq9	:r   c                 t     G d d      }d |       i}| j                  t        t        j                  |       y )Nc                       e Zd Zd Zy)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  s0    	% 	% XZ .%,,:r   c                 R    d}| j                  t        t        j                  |       y )Nz[31337,]r   r>   s     r   !test_decodeArrayTrailingCommaFailz0UltraJSONTests.test_decodeArrayTrailingCommaFail  r   r   c                 R    d}| j                  t        t        j                  |       y )Nz[,31337]r   r>   s     r    test_decodeArrayLeadingCommaFailz/UltraJSONTests.test_decodeArrayLeadingCommaFail  r   r   c                 R    d}| j                  t        t        j                  |       y )Nz[,]r   r>   s     r   test_decodeArrayOnlyCommaFailz,UltraJSONTests.test_decodeArrayOnlyCommaFail  r   r   c                 R    d}| j                  t        t        j                  |       y )Nz[]]r   r>   s     r   $test_decodeArrayUnmatchedBracketFailz3UltraJSONTests.test_decodeArrayUnmatchedBracketFail  r   r   c                 V    d}t        j                  |      }| j                  g |       y rX  )r   r   r   )r   r   r  s      r   test_decodeArrayEmptyz$UltraJSONTests.test_decodeArrayEmpty  s%    ll5!S!r   c                 2    d}t        j                  |       y )Nz[31337]r   r   r>   s     r   test_decodeArrayOneItemz&UltraJSONTests.test_decodeArrayOneItem      Ur   c                 2    d}t        j                  |       y )N18446744073709551615r  r>   s     r   test_decodeLongUnsignedValuez+UltraJSONTests.test_decodeLongUnsignedValue      &Ur   c                 2    d}t        j                  |       y )N9223372036854775807r  r>   s     r   test_decodeBigValuez"UltraJSONTests.test_decodeBigValue  s    %Ur   c                 2    d}t        j                  |       y )Nz-9223372036854775808r  r>   s     r   test_decodeSmallValuez$UltraJSONTests.test_decodeSmallValue  r  r   c                 R    d}| j                  t        t        j                  |       y N18446744073709551616r   r>   s     r   test_decodeTooBigValuez%UltraJSONTests.test_decodeTooBigValue      &*ellE:r   c                 R    d}| j                  t        t        j                  |       y Nz-90223372036854775809r   r>   s     r   test_decodeTooSmallValuez'UltraJSONTests.test_decodeTooSmallValue      '*ellE:r   c                 R    d}| j                  t        t        j                  |       y r  r   r>   s     r   test_decodeVeryTooBigValuez)UltraJSONTests.test_decodeVeryTooBigValue  r  r   c                 R    d}| j                  t        t        j                  |       y r  r   r>   s     r   test_decodeVeryTooSmallValuez+UltraJSONTests.test_decodeVeryTooSmallValue  r  r   c                 2    d}t        j                  |       y )Nz{}
	 r  r>   s     r   "test_decodeWithTrailingWhitespacesz1UltraJSONTests.test_decodeWithTrailingWhitespaces  r  r   c                 R    d}| j                  t        t        j                  |       y )Nz{}
	 ar   r>   s     r   %test_decodeWithTrailingNonWhitespacesz4UltraJSONTests.test_decodeWithTrailingNonWhitespaces  r   r   c                 R    d}| j                  t        t        j                  |       y )Nz[18446744073709551616]r   r>   s     r   test_decodeArrayWithBigIntz)UltraJSONTests.test_decodeArrayWithBigInt  s    (*ellE:r   c                 8   | j                  dt        j                  d             | j                  dt        j                  d             | j                  dt        j                  d             | j                  dt        j                  d             | j                  d	t        j                  d
             | j                  dt        j                  d             | j                  dt        j                  d             | j                  dt        j                  d             | j                  dt        j                  d             | j                  dt        j                  d             | j                  dt        j                  d             | j                  dt        j                  d             | j                  dt        j                  d             | j                  dt        j                  d             | j                  dt        j                  d             | j                  dt        j                  d              | j                  d!t        j                  d"             | j                  d#t        j                  d$             y )%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  s   }ekk/.JK|U[[-HI{EKK,FGz5;;|+DEy%++k*BCxZ)@AwI(>?vu{{8'<=tU[[%89|U[[-HI{EKK,FGz5;;|+DEy%++k*BCxZ)@AwI(>?vu{{8'<=uekk'&:;sEKK$67r   c                 R    d}| j                  t        t        j                  |       y )Nz{"age", 44}r   r>   s     r   test_ReadBadObjectSyntaxz'UltraJSONTests.test_ReadBadObjectSyntax
  r   r   c                 N    | j                  dt        j                  d             y )NTtruer   r   r   r,   s    r   test_ReadTruezUltraJSONTests.test_ReadTrue      u{{623r   c                 N    | j                  dt        j                  d             y )NFfalser  r,   s    r   test_ReadFalsezUltraJSONTests.test_ReadFalse  s    G 45r   c                 N    | j                  d t        j                  d             y Nnullr  r,   s    r   test_ReadNullzUltraJSONTests.test_ReadNull  r  r   c                 N    | j                  dt        j                  d             y )Nr  Tr*   r,   s    r   test_WriteTruezUltraJSONTests.test_WriteTrue      T!23r   c                 N    | j                  dt        j                  d             y )Nr  Fr*   r,   s    r   test_WriteFalsezUltraJSONTests.test_WriteFalse  s    %++e"45r   c                 N    | j                  dt        j                  d              y r  r*   r,   s    r   test_WriteNullzUltraJSONTests.test_WriteNull  r  r   c                 R    | j                  g dt        j                  d             y )NTFNz [ true, false,null] r  r,   s    r   test_ReadArrayOfSymbolsz&UltraJSONTests.test_ReadArrayOfSymbols   s    ,ekk:Q.RSr   c                 R    | j                  dt        j                  g d             y Nz[true,false,null]r  r*   r,   s    r    test_WriteArrayOfSymbolsFromListz/UltraJSONTests.test_WriteArrayOfSymbolsFromList#  s    ,ekk:M.NOr   c                 N    | j                  dt        j                  d             y r  r*   r,   s    r   !test_WriteArrayOfSymbolsFromTuplez0UltraJSONTests.test_WriteArrayOfSymbolsFromTuple&  s    ,ekk:M.NOr   c                 R    d}| j                  t        t        j                  |       y )Nu   )r   UnicodeEncodeErrorr   r+   )r   rt   s     r   $test_encodingInvalidUnicodeCharacterz3UltraJSONTests.test_encodingInvalidUnicodeCharacter)  s    ,ekk1=r   c                 h    ddddddd}t        j                  |d      }| j                  |d       y )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-  s5    QQQQQ?[[6
%LMr   getrefcountTztest requires sys.refcount)reasonc                     dd l }|j                          dg}d|i}t        j                  |      }t	        j
                  |       | j                  |t        j                  |             y )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  sQ    


U|OOE*	DCOOE$:;r   c                 `   dd l }|j                          d}d}dg}g d}||||i}t        j                  |      }t        j                  |      }t	        j
                  |       | j                  |t        j                  |             | j                  |t        j                  |             y )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 }|j                          d}d}||i}t        j                  |      }t	        j
                  |       | j                  |t        j                  |             y )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  sT    


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


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


f~__T*
DS__T%:;r   c                     dd l }|j                          d }d}||i}t        j                  |      }t	        j
                  |       | j                  |t        j                  |             y )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<
''
9,J(
J666/3////%.%$666	666666/%>&>>>K;;;;;;;;;;;;;;?
?
?
;;;56>MA66664
4
4
4
4
4
4
4
2

-96
67S>  !55-	:;;;;;"
;;;;;;8*;464464TPP>N
 X__m4<<Eab< c< X__m4<<Eab< c< X__m4<<Eab	< c	< X__m4<<Eab	< c	< X__m4<<Eab	< c	< X__m4<<Eab	< c	<r   r   __main__indenti  i  c                 6    t        j                  ddi|        y )Nr/   Tr  r=   r  s    r   test_dump_huge_indentr    s    	LL#tV,r   first_lengthrp      second_lengthi*  i*  c                 >    t        j                  d| z  d|z  g       y )Nr/   r  )r   r+   )r  r  s     r   test_dump_long_stringr    s     
KK|#Vm%;<=r   c                      g x} }t        d      D ]A  }|j                  t        t        |                   |d   }t        j                  | |       C y )NrN   r  )r   appendlistr   r+   )r/   _ais      r   test_dump_indented_nested_listr&    sI    KA2Y !
		$uQx.!VAa !r   )r   r   rp   rn   rB   r   1   c                     t        t              j                  d      }t        j                  |j                               }t        j                  ||        y )Nz334-reproducer.jsonr  )r   __file__	with_namer   r   
read_bytesr+   )r  pathr/   s      r   test_issue_334r-    s:    >##$9:DDOO%&A	KK&!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                  | j                  dd            |k(  sJ t        j                  |       |k(  sJ y )Nr   surrogatepass)r   r   r   r   )
test_inputexpecteds     r    test_decode_surrogate_charactersr4    sX    0 ;;z"h...;;z((/BCx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<      
      zzl<X&& l<^0 zHMMO  4eU(;#<=- >- eAqk):;$uUE/B*CD> E <>! #9:" ;" ../..r   