o
    
 ¢i¼‚  ã                   @   s  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„ dejƒZ	 edkr?e ¡  	 ej deed	d
ƒƒ¡dd„ ƒZej deeddƒƒ¡ej deeddƒƒ¡dd„ ƒƒZdd„ Zej dg d¢¡dd„ ƒZej dg d¢¡dd„ ƒZdS )é    N)ÚStringIO)ÚPath)Úujsonc                   @   s¨  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dadb„ Z3dcdd„ Z4dedf„ Z5dgdh„ Z6didj„ Z7dkdl„ Z8dmdn„ Z9dodp„ Z:dqdr„ Z;dsdt„ Z<dudv„ Z=dwdx„ Z>dydz„ Z?d{d|„ Z@d}d~„ ZAdd€„ ZBdd‚„ ZCdƒd„„ ZDd…d†„ ZEd‡dˆ„ ZFd‰dŠ„ ZGd‹dŒ„ ZHddŽ„ ZIdd„ ZJd‘d’„ ZKd“d”„ ZLd•d–„ ZMd—d˜„ ZNd™dš„ ZOd›dœ„ ZPddž„ ZQdŸd „ ZRd¡d¢„ ZSd£d¤„ ZTd¥d¦„ ZUd§d¨„ ZVd©dª„ ZWd«d¬„ ZXd­d®„ ZYd¯d°„ ZZd±d²„ Z[d³d´„ Z\dµd¶„ Z]d·d¸„ Z^d¹dº„ Z_d»d¼„ Z`d½d¾„ Zad¿dÀ„ ZbdÁdÂ„ ZcdÃdÄ„ ZddÅdÆ„ ZedÇdÈ„ ZfdÉdÊ„ ZgdËdÌ„ ZhdÍdÎ„ ZidÏdÐ„ ZjdÑdÒ„ ZkdÓdÔ„ ZldÕdÖ„ Zmd×dØ„ ZndÙdÚ„ ZodÛdÜ„ ZpdÝdÞ„ Zqdßdà„ Zrdádâ„ Zsdãdä„ Ztdådæ„ Zudçdè„ Zvdédê„ Zwdëdì„ Zxdídî„ Zydïdð„ Zzdñdò„ Z{e|j}e~edóƒdôk dõdöd÷dø„ ƒZ€e|j}e~edóƒdôk dõdödùdú„ ƒZe|j}e~edóƒdôk dõdödûdü„ ƒZ‚e|j}e~edóƒdôk dõdödýdþ„ ƒZƒe|j}e~edóƒdôk dõdödÿd „ ƒZ„e|j}e~edóƒdôk dõdödd„ ƒZ…dS (  ÚUltraJSONTestsc                 C   s.   t  d¡}t |¡}t |¡}|  |d¡ d S )Nz	1337.1337gç§èˆä”@)ÚdecimalÚDecimalr   ÚencodeÚdecodeÚassertEqual©ÚselfÚsutÚencodedÚdecoded© r   úP/home/ubuntu/.local/lib/python3.10/site-packages/srsly/tests/ujson/test_ujson.pyÚtest_encodeDecimal   s   


z!UltraJSONTests.test_encodeDecimalc                    s~   d‰ d}d}d}‡ ‡fdd„}||dd ||d	d ||dd	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                    sV   t jˆ fi |¤Ž}ˆ || ¡ | dd¡r)ˆ ˆ t |¡¡ ˆ ˆ t  |¡¡ d S d S )NÚescape_forward_slashesT)r   r   r
   ÚgetÚjsonÚloadsr	   )Úexpected_outputÚencode_kwargsÚoutput©Úinputr   r   r   Úhelper   s   þz:UltraJSONTests.test_encodeStringConversion.<locals>.helperT©Úensure_asciiF)r   Úencode_html_chars)r   r   )r   Únot_html_encodedÚhtml_encodedÚnot_slashes_escapedr   r   r   r   Útest_encodeStringConversion   s   ÿz*UltraJSONTests.test_encodeStringConversionc                 C   s   |   dtjddd¡ d S )Nz$"\u003cimg src='\u0026amp;'\/\u003e"z<img src='&amp;'/>T)r   ©r
   r   Údumps©r   r   r   r   ÚtestWriteEscapedString4   s   þz%UltraJSONTests.testWriteEscapedStringc                 C   óL   ddi}t  |¡}t  |¡}|  ||¡ t |¡}t |¡}|  ||¡ d S )NÚalüÿÿÿZ:`¡7{ ©r   r%   r   r
   r   r   r	   r   r   r   r   Útest_doubleLongIssue:   ó   



z#UltraJSONTests.test_doubleLongIssuec                 C   r(   )Nr)   g#å_œçt¦Âr*   r   r   r   r   Útest_doubleLongDecimalIssueC   r,   z*UltraJSONTests.test_doubleLongDecimalIssuec                 C   s    ddi}t  |¡}t  |¡ d S )Nr)   gÔŸpAª‚¿Á)r   r%   r	   )r   r   r   r   r   r   Útest_encodeDecodeLongDecimalL   s   
z+UltraJSONTests.test_encodeDecodeLongDecimalc                 C   s4   ddi}t  |¡}t  |¡}|  |d |d ¡ d S )Nr)   g=
×£p=@)r   r   r	   ÚassertAlmostEqualr   r   r   r   Útest_decimalDecodeTestQ   s   

z%UltraJSONTests.test_decimalDecodeTestc                 C   s>   dddddddœ}t  |¡ ddddddddœ}t  |¡ d S )NÚvalue1)Úkey1r2   r2   r2   r2   r2   )õ   Ø¨Ù†r3   r3   r3   r3   r3   r3   ©r   r   ©r   r   r   r   r   Útest_encodeDictWithUnicodeKeysW   s"   ú
ù	z-UltraJSONTests.test_encodeDictWithUnicodeKeysc                 C   sP   t j}t |¡}|  t|dƒtt |¡dƒ¡ |  t|dƒtt |¡dƒ¡ d S ©Né   ©	ÚmathÚpir   r   r
   Úroundr   r   r	   ©r   r   r   r   r   r   Útest_encodeDoubleConversionm   s   
"z*UltraJSONTests.test_encodeDoubleConversionc                 C   s   d}t  |¡}|  |d¡ d S )Ng      ð?z1.0)r   r   r
   r=   r   r   r   Útest_encodeWithDecimals   ó   
z%UltraJSONTests.test_encodeWithDecimalc                 C   sR   t j }t |¡}|  t|dƒtt |¡dƒ¡ |  t|dƒtt |¡dƒ¡ d S r7   r9   r=   r   r   r   Útest_encodeDoubleNegConversionx   s   
"z-UltraJSONTests.test_encodeDoubleNegConversionc                 C   s@   g gggd }t  |¡}|  |t |¡¡ |  |t  |¡¡ d S )Né   ©r   r   r
   r   r   r	   r=   r   r   r   Útest_encodeArrayOfNestedArrays   s   
z-UltraJSONTests.test_encodeArrayOfNestedArraysc                 C   s>   g d¢d }t  |¡}|  |t |¡¡ |  |t  |¡¡ d S )N)çcATšÞ@rE   rE   rE   é
   rC   r=   r   r   r   Útest_encodeArrayOfDoubles†   s   
z(UltraJSONTests.test_encodeArrayOfDoublesc                 C   sB   d}t  |¡}|  |t |¡¡ |  |d¡ |  |t  |¡¡ d S )NzA string \ /   
  	z"A string \\ \/ \b \f \n \r \t"rC   r=   r   r   r   Útest_encodeStringConversion2   s
   
z+UltraJSONTests.test_encodeStringConversion2c                 C   s   d S ©Nr   r&   r   r   r   Útest_decodeUnicodeConversion”   ó   z+UltraJSONTests.test_decodeUnicodeConversionc                 C   ó>   d}t  |¡}t  |¡}|  |t|ƒ¡ |  |t |¡¡ d S )Nu@   RÃ¤ksmÃ¶rgÃ¥s Ø§Ø³Ø§Ù…Ø© Ø¨Ù† Ù…Ø­Ù…Ø¯ Ø¨Ù† Ø¹ÙˆØ¶ Ø¨Ù† Ù„Ø§Ø¯Ù†©r   r   r	   r
   Újson_unicoder   r   ©r   r   ÚencÚdecr   r   r   Útest_encodeUnicodeConversion1—   ó
   

z,UltraJSONTests.test_encodeUnicodeConversion1c                 C   s8   d}t  |¡}t  |¡}|  ||¡ |  |t|ƒ¡ d S )Nú)r   r   r	   r
   rN   rO   r   r   r   Útest_encodeControlEscapingž   s
   

z)UltraJSONTests.test_encodeControlEscapingc                 C   rL   )Nu
   Ã¦Â—Â¥Ã‘ÂˆrM   rO   r   r   r   Útest_encodeUnicodeConversion2¥   rS   z,UltraJSONTests.test_encodeUnicodeConversion2c                 C   rL   )Nu   Ã°ÂÂÂ†rM   rO   r   r   r   Útest_encodeUnicodeSurrogatePair¬   ó
   

z.UltraJSONTests.test_encodeUnicodeSurrogatePairc                 C   rL   )Nu   Ã°Â‘Â€Â°TRAILINGNORMALrM   rO   r   r   r   Útest_encodeUnicode4BytesUTF8´   rX   z+UltraJSONTests.test_encodeUnicode4BytesUTF8c                 C   rL   )Nu   Ã³Â¿Â¿Â¿TRAILINGNORMALrM   rO   r   r   r   Ú#test_encodeUnicode4BytesUTF8Highest¼   rX   z2UltraJSONTests.test_encodeUnicode4BytesUTF8Highestc                 C   sÚ   d}t  |¡}t |¡}t|ƒdkr!|  t|ƒt|ƒd d ¡ n|  t|ƒt|ƒd d ¡ |  ||¡ t  |¡}|  ||¡ t j|dd}tj|dd}|  t|ƒt|ƒd ¡ |  ||¡ t  |¡}|  ||¡ d S )Nu   ðŸ®ðŸ®ðŸ­ðŸ­é   é   é   é   Fr   )r   r%   r   Úlenr
   r   ©r   Úsr   Úencoded_jsonr   r   r   r   ÚtestEncodeUnicodeBMPÇ   s   



z#UltraJSONTests.testEncodeUnicodeBMPc                 C   s°   d}t  |¡}t |¡}|  t|ƒt|ƒd d ¡ |  ||¡ t  |¡}|  ||¡ t j|dd}tj|dd}|  t|ƒt|ƒd ¡ |  ||¡ t  |¡}|  ||¡ d S )Nu	   âœ¿â™¡âœ¿r^   r]   Fr   )r   r%   r   r
   r_   r   r`   r   r   r   ÚtestEncodeSymbolsÞ   s   



z UltraJSONTests.testEncodeSymbolsc                 C   sN   g ggg}t  |¡}|  |t |¡¡ |  |t |¡¡ |  |t  |¡¡ d S rI   ©r   r   r
   r   r   r%   r	   r=   r   r   r   Útest_encodeArrayInArrayð   s
   

z&UltraJSONTests.test_encodeArrayInArrayc                 C   óH   d}t  |¡}|  |t |¡¡ |  |t |¡¡ |  |t  |¡¡ d S )Néiz  re   r=   r   r   r   Útest_encodeIntConversionø   ó
   
z'UltraJSONTests.test_encodeIntConversionc                 C   rg   )Né—…ÿÿre   r=   r   r   r   Útest_encodeIntNegConversionÿ   rj   z*UltraJSONTests.test_encodeIntNegConversionc                 C   s\   d}t  |¡}t |¡ t  |¡ |  |t |¡¡ |  |t |¡¡ |  |t  |¡¡ d S )Nlûÿÿÿ         )r   r   r   r   r	   r
   r%   r=   r   r   r   Útest_encodeLongNegConversion  s   


z+UltraJSONTests.test_encodeLongNegConversionc                 C   ó:   g d¢}t  |¡}|  |t |¡¡ |  |t  |¡¡ d S )N©é   r]   é   r[   rC   r=   r   r   r   Útest_encodeListConversion  s   
z(UltraJSONTests.test_encodeListConversionc                 C   sR   dddddœ}t  |¡}|  |t |¡¡ |  |t  |¡¡ |  |t  |¡¡ d S )Nrp   r]   rq   r[   )Úk1Úk2Úk3Úk4rC   r=   r   r   r   Útest_encodeDictConversion  s
   
z(UltraJSONTests.test_encodeDictConversionc                 C   sH   d }t  |¡}|  |t |¡¡ |  |t |¡¡ |  |t  |¡¡ d S rI   re   r=   r   r   r   Útest_encodeNoneConversion  rj   z(UltraJSONTests.test_encodeNoneConversionc                 C   rg   )NTre   r=   r   r   r   Útest_encodeTrueConversion%  rj   z(UltraJSONTests.test_encodeTrueConversionc                 C   rg   )NFre   r=   r   r   r   Útest_encodeFalseConversion,  rj   z)UltraJSONTests.test_encodeFalseConversionc                 C   sR   d}|  d¡}tj|dd}t  |¡}|  |tj|dd¡ |  |t |¡¡ d S )Ns   æ—¥Ñˆúutf-8Fr   )r	   r   r   r
   r   r%   r   rO   r   r   r   Útest_encodeToUTF83  s   

z UltraJSONTests.test_encodeToUTF8c                 C   s,   d}t  |¡}t  t|ƒ¡}|  ||¡ d S )Nz{"obj": 31337})r   r	   Ústrr
   )r   r   Údec1Údec2r   r   r   Útest_decodeFromUnicode;  s   
z%UltraJSONTests.test_decodeFromUnicodec                 C   sF   G dd„ dƒ}G dd„ dƒ}|ƒ }|ƒ |_ ||j _ |  ttj|¡ d S )Nc                   @   ó   e Zd ZdZdd„ ZdS )z2UltraJSONTests.test_encodeRecursionMax.<locals>.O2r   c                 S   ó
   d| j iS ©NÚmember©r„   r&   r   r   r   ÚtoDictF  ó   
z9UltraJSONTests.test_encodeRecursionMax.<locals>.O2.toDictN©Ú__name__Ú
__module__Ú__qualname__r„   r†   r   r   r   r   ÚO2C  ó    rŒ   c                   @   r   )z2UltraJSONTests.test_encodeRecursionMax.<locals>.O1r   c                 S   r‚   rƒ   r…   r&   r   r   r   r†   L  r‡   z9UltraJSONTests.test_encodeRecursionMax.<locals>.O1.toDictNrˆ   r   r   r   r   ÚO1I  r   rŽ   )r„   ÚassertRaisesÚOverflowErrorr   r   )r   rŒ   rŽ   r   r   r   r   Útest_encodeRecursionMaxA  s   z&UltraJSONTests.test_encodeRecursionMaxc                 C   ó   t dƒ}|  ttj|¡ d S )NÚnan©Úfloatr   r   r   r   r5   r   r   r   Útest_encodeDoubleNanT  ó   z#UltraJSONTests.test_encodeDoubleNanc                 C   r’   ©NÚinfr”   r5   r   r   r   Útest_encodeDoubleInfX  r—   z#UltraJSONTests.test_encodeDoubleInfc                 C   s   t dƒ }|  ttj|¡ d S r˜   r”   r5   r   r   r   Útest_encodeDoubleNegInf\  s   
z&UltraJSONTests.test_encodeDoubleNegInfc                 C   s.   ddl m} |g d¢ƒ}|  dt |¡¡ d S )Nr   )ÚOrderedDict))rp   rp   )r   r   )é   r   )r]   r]   z{"1":1,"0":0,"8":8,"2":2})Úcollectionsrœ   r
   r   r   )r   rœ   r   r   r   r   Útest_encodeOrderedDict`  s   z%UltraJSONTests.test_encodeOrderedDictc                 C   ó   d}|   ttj|¡ d S )Nzfdsa sda v9sa fdsa©r   Ú
ValueErrorr   r	   r5   r   r   r   Útest_decodeJibberishf  ó   z#UltraJSONTests.test_decodeJibberishc                 C   r    )Nú[r¡   r5   r   r   r   Útest_decodeBrokenArrayStartj  r¤   z*UltraJSONTests.test_decodeBrokenArrayStartc                 C   r    )NÚ{r¡   r5   r   r   r   Útest_decodeBrokenObjectStartn  r¤   z+UltraJSONTests.test_decodeBrokenObjectStartc                 C   r    )Nú]r¡   r5   r   r   r   Útest_decodeBrokenArrayEndr  r¤   z(UltraJSONTests.test_decodeBrokenArrayEndc                 C   ó   dd }|   ttj|¡ d S )Nr¥   é   r¡   r5   r   r   r   Útest_decodeArrayDepthTooBigv  r—   z*UltraJSONTests.test_decodeArrayDepthTooBigc                 C   r    )NÚ}r¡   r5   r   r   r   Útest_decodeBrokenObjectEndz  r¤   z)UltraJSONTests.test_decodeBrokenObjectEndc                 C   r    )Nz
{"one":1,}r¡   r5   r   r   r   Ú"test_decodeObjectTrailingCommaFail~  r¤   z1UltraJSONTests.test_decodeObjectTrailingCommaFailc                 C   r«   )Nr§   r¬   r¡   r5   r   r   r   Útest_decodeObjectDepthTooBig‚  r—   z+UltraJSONTests.test_decodeObjectDepthTooBigc                 C   r    )Nz"TESTINGr¡   r5   r   r   r   Útest_decodeStringUnterminated†  r¤   z,UltraJSONTests.test_decodeStringUnterminatedc                 C   r    ©Nz
"TESTING\"r¡   r5   r   r   r   Ú%test_decodeStringUntermEscapeSequenceŠ  r¤   z4UltraJSONTests.test_decodeStringUntermEscapeSequencec                 C   r    r³   r¡   r5   r   r   r   Útest_decodeStringBadEscapeŽ  r¤   z)UltraJSONTests.test_decodeStringBadEscapec                 C   r    )NÚtrur¡   r5   r   r   r   Útest_decodeTrueBroken’  r¤   z$UltraJSONTests.test_decodeTrueBrokenc                 C   r    )NÚfar¡   r5   r   r   r   Útest_decodeFalseBroken–  r¤   z%UltraJSONTests.test_decodeFalseBrokenc                 C   r    )NÚnr¡   r5   r   r   r   Útest_decodeNullBrokenš  r¤   z$UltraJSONTests.test_decodeNullBrokenc                 C   ó&   d}t dƒD ]
}|  ttj|¡ qd S )Nz{{1337:""}}éè  ©Úranger   r¢   r   r	   ©r   r   Úxr   r   r   Ú$test_decodeBrokenDictKeyTypeLeakTestž  ó   ÿz3UltraJSONTests.test_decodeBrokenDictKeyTypeLeakTestc                 C   r¼   )Nz
{{"key":"}r½   r¾   rÀ   r   r   r   Útest_decodeBrokenDictLeakTest£  rÃ   z,UltraJSONTests.test_decodeBrokenDictLeakTestc                 C   r¼   )Nz[[[truer½   r¾   rÀ   r   r   r   Útest_decodeBrokenListLeakTest¨  rÃ   z,UltraJSONTests.test_decodeBrokenListLeakTestc                 C   r    )Nz{{{{31337}}}}r¡   r5   r   r   r   Útest_decodeDictWithNoKey­  r¤   z'UltraJSONTests.test_decodeDictWithNoKeyc                 C   r    )Nz{{{{"key"}}}}r¡   r5   r   r   r   Ú!test_decodeDictWithNoColonOrValue±  r¤   z0UltraJSONTests.test_decodeDictWithNoColonOrValuec                 C   r    )Nz{{{{"key":}}}}r¡   r5   r   r   r   Útest_decodeDictWithNoValueµ  r¤   z)UltraJSONTests.test_decodeDictWithNoValuec                 C   ó   d}|   dt |¡¡ d S )NÚ31337rh   ©r
   r   r	   r5   r   r   r   Útest_decodeNumericIntPos¹  ó   z'UltraJSONTests.test_decodeNumericIntPosc                 C   rÉ   )Nz-31337rk   rË   r5   r   r   r   Útest_decodeNumericIntNeg½  rÍ   z'UltraJSONTests.test_decodeNumericIntNegc                 C   r    )Ns   ý¿¿¿¿¿©r   r   r   r   r5   r   r   r   Ú test_encodeUnicode4BytesUTF8FailÁ  r¤   z/UltraJSONTests.test_encodeUnicode4BytesUTF8Failc                 C   sž   d}t  |¡}|  |t |¡¡ |  |t |¡¡ |  |t  |¡¡ d}t  |¡}|  |t |¡¡ |  |t |¡¡ |  |t  |¡¡ |  dt  d¡¡ d S )Nz31337   1337ú z"  \u0000\r\n "z   
 re   r=   r   r   r   Útest_encodeNullCharacterÅ  s   

z'UltraJSONTests.test_encodeNullCharacterc                 C   s    d}|   t |¡t |¡¡ d S )Nz"31337 \u0000 31337")r
   r   r	   r   r   r5   r   r   r   Útest_decodeNullCharacterÔ  s   z'UltraJSONTests.test_decodeNullCharacterc                 C   rn   )N)ì   ÿÿÿÿ rÔ   rÔ   rÔ   rÔ   rÔ   rC   r=   r   r   r   Útest_encodeListLongConversionØ  s   
z,UltraJSONTests.test_encodeListLongConversionc                 C   rn   )N)ì   ÿÿÿÿ rÖ   rÖ   rC   r=   r   r   r   Ú%test_encodeListLongUnsignedConversionå  s   
z4UltraJSONTests.test_encodeListLongUnsignedConversionc                 C   rg   )NrÔ   re   r=   r   r   r   Útest_encodeLongConversionì  rj   z(UltraJSONTests.test_encodeLongConversionc                 C   rg   )NrÖ   re   r=   r   r   r   Ú!test_encodeLongUnsignedConversionó  s
   
z0UltraJSONTests.test_encodeLongUnsignedConversionc                 C   ó$   d}t  |¡}|  |t |¡¡ d S ©NÚ1337E40©r   r	   r
   r   r   r=   r   r   r   Útest_numericIntExpû  ó   
z!UltraJSONTests.test_numericIntExpc                 C   rÚ   )Nz1.337E40rÝ   r=   r   r   r   Útest_numericIntFrcExp   rß   z$UltraJSONTests.test_numericIntFrcExpc                 C   rÚ   )Nz1337E+9rÝ   r=   r   r   r   Útest_decodeNumericIntExpEPLUS  rß   z,UltraJSONTests.test_decodeNumericIntExpEPLUSc                 C   rÚ   )Nz	1.337e+40rÝ   r=   r   r   r   Útest_decodeNumericIntExpePLUS
  rß   z,UltraJSONTests.test_decodeNumericIntExpePLUSc                 C   rÚ   rÛ   rÝ   r=   r   r   r   Útest_decodeNumericIntExpE  rß   z(UltraJSONTests.test_decodeNumericIntExpEc                 C   rÚ   )NÚ1337e40rÝ   r=   r   r   r   Útest_decodeNumericIntExpe  rß   z(UltraJSONTests.test_decodeNumericIntExpec                 C   rÚ   )Nz1.337E-4rÝ   r=   r   r   r   Útest_decodeNumericIntExpEMinus  rß   z-UltraJSONTests.test_decodeNumericIntExpEMinusc                 C   rÚ   )Nz1.337e-4rÝ   r=   r   r   r   Útest_decodeNumericIntExpeMinus  rß   z-UltraJSONTests.test_decodeNumericIntExpeMinusc                 C   s*   t ƒ }t g d¢|¡ |  d| ¡ ¡ d S )N©rp   r]   rq   ú[1,2,3])r   r   Údumpr
   Úgetvalue©r   Úfr   r   r   Útest_dumpToFile#  s   zUltraJSONTests.test_dumpToFilec                 C   s6   G dd„ dƒ}|ƒ }t  g d¢|¡ |  d|j¡ d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z:UltraJSONTests.test_dumpToFileLikeObject.<locals>.filelikec                 S   s
   d| _ d S ©NÚ ©Úbytesr&   r   r   r   Ú__init__*  r‡   zCUltraJSONTests.test_dumpToFileLikeObject.<locals>.filelike.__init__c                 S   s   |  j |7  _ d S rI   rñ   )r   rò   r   r   r   Úwrite-  s   z@UltraJSONTests.test_dumpToFileLikeObject.<locals>.filelike.writeN)r‰   rŠ   r‹   ró   rô   r   r   r   r   Úfilelike)  s    rõ   rè   ré   )r   rê   r
   rò   ©r   rõ   rí   r   r   r   Útest_dumpToFileLikeObject(  s   z(UltraJSONTests.test_dumpToFileLikeObjectc                 C   s   |   ttjg d¡ d S rï   )r   Ú	TypeErrorr   rê   r&   r   r   r   Útest_dumpFileArgsError4  ó   z%UltraJSONTests.test_dumpFileArgsErrorc                 C   s"   t dƒ}|  g d¢t |¡¡ d S )Nú	[1,2,3,4]ro   )r   r
   r   Úloadrì   r   r   r   Útest_loadFile7  s   zUltraJSONTests.test_loadFilec                 C   s.   G dd„ dƒ}|ƒ }|   g d¢t |¡¡ d S )Nc                   @   ó   e Zd Zdd„ ZdS )z8UltraJSONTests.test_loadFileLikeObject.<locals>.filelikec                 S   s(   z| j  W d S  ty   d| _ Y dS w )NTrû   )ÚendÚAttributeErrorr&   r   r   r   Úread=  s   þz=UltraJSONTests.test_loadFileLikeObject.<locals>.filelike.readN)r‰   rŠ   r‹   r  r   r   r   r   rõ   <  ó    rõ   ro   )r
   r   rü   rö   r   r   r   Útest_loadFileLikeObject;  s   z&UltraJSONTests.test_loadFileLikeObjectc                 C   ó   |   ttjd¡ d S ©Nz[])r   rø   r   rü   r&   r   r   r   Útest_loadFileArgsErrorG  ó   z%UltraJSONTests.test_loadFileArgsErrorc                 C   r  )Nl   ËUÖ$Jpœ[¨lSrÏ   r&   r   r   r   Útest_encodeNumericOverflowJ  r  z)UltraJSONTests.test_encodeNumericOverflowc                 C   sJ   ddd dd dd f}d}t ||ƒD ]\}}|  t |¡d |¡ qd S )Nz{"id": 3590016419}z
{"id": %s}ì        ì        ì   ÿÿ )l   £Mö+ r	  r
  r  Úid)Úzipr
   r   r	   )r   ÚdocsÚresultsÚdocÚresultr   r   r   Ú!test_decodeNumberWith32bitSignBitM  s   üÿz0UltraJSONTests.test_decodeNumberWith32bitSignBitc                 C   s6   t dƒD ]}d d¡}|d d d }t |¡ qd S )NrF   õ   Ã¥r{   é   r]   )r¿   r   r   )r   rÁ   Úbaser   r   r   r   Útest_encodeBigEscapeZ  s
   
ýz#UltraJSONTests.test_encodeBigEscapec                 C   sF   t dƒD ]}d d¡}d ¡ }||d d d  | }t |¡ qd S )NrF   r  r{   ú"r  r]   )r¿   r   r   r	   )r   rÁ   r  Úquoter   r   r   r   Útest_decodeBigEscape`  s   
üz#UltraJSONTests.test_decodeBigEscapec                    sD   ddi‰ G ‡ fdd„dƒ}|ƒ }t  |¡}t  |¡}|  |ˆ ¡ d S )NÚkeyrh   c                       s    e Zd Z‡ fdd„Zdd„ ZdS )z,UltraJSONTests.test_toDict.<locals>.DictTestc                    ó   ˆ S rI   r   r&   ©Údr   r   r†   k  rK   z3UltraJSONTests.test_toDict.<locals>.DictTest.toDictc                 S   s   dS )Nz"json defined"r   r&   r   r   r   Ú__json__n  rK   z5UltraJSONTests.test_toDict.<locals>.DictTest.__json__N)r‰   rŠ   r‹   r†   r  r   r  r   r   ÚDictTestj  s    r  ©r   r   r	   r
   )r   r  Úor   rQ   r   r  r   Útest_toDictg  s   

zUltraJSONTests.test_toDictc                    óH   d‰ G ‡ fdd„dƒ}d|ƒ i}t  |¡}t  |¡}|  |dˆ i¡ d S )Núthis is the correct outputc                       ó   e Zd Z‡ fdd„ZdS )z6UltraJSONTests.test_object_with_json.<locals>.JSONTestc                    ó   dˆ  d S ©Nr  r   r&   ©Úoutput_textr   r   r  |  ó   z?UltraJSONTests.test_object_with_json.<locals>.JSONTest.__json__N©r‰   rŠ   r‹   r  r   r(  r   r   ÚJSONTest{  ó    r,  r  r   ©r   r,  r  r   rQ   r   r(  r   Útest_object_with_jsonv  ó   


z$UltraJSONTests.test_object_with_jsonc                    r#  )Nr$  c                       r%  )z>UltraJSONTests.test_object_with_json_unicode.<locals>.JSONTestc                    r&  r'  r   r&   r(  r   r   r  Š  r*  zGUltraJSONTests.test_object_with_json_unicode.<locals>.JSONTest.__json__Nr+  r   r(  r   r   r,  ‰  r-  r,  r  r   r.  r   r(  r   Útest_object_with_json_unicode„  r0  z,UltraJSONTests.test_object_with_json_unicodec                    sP   dddgi‰ G ‡ fdd„dƒ}d|ƒ i}t  |¡}t  |¡}|  |dˆ i¡ d S )NÚfooÚbarÚbazc                       r%  )z>UltraJSONTests.test_object_with_complex_json.<locals>.JSONTestc                    s
   t  ˆ ¡S rI   r4   r&   ©Úobjr   r   r  ˜  r‡   zGUltraJSONTests.test_object_with_complex_json.<locals>.JSONTest.__json__Nr+  r   r5  r   r   r,  —  r-  r,  r  r   r.  r   r5  r   Útest_object_with_complex_json’  s   


z,UltraJSONTests.test_object_with_complex_jsonc                    sD   d dddi fD ]‰ G ‡ fdd„dƒ}d|ƒ i}|   ttj|¡ qd S )NiÒ  g®Gáz®(@Tc                       r%  )zAUltraJSONTests.test_object_with_json_type_error.<locals>.JSONTestc                    r  rI   r   r&   ©Úreturn_valuer   r   r  ¥  rK   zJUltraJSONTests.test_object_with_json_type_error.<locals>.JSONTest.__json__Nr+  r   r8  r   r   r,  ¤  r-  r,  r  )r   rø   r   r   ©r   r,  r  r   r8  r   Ú test_object_with_json_type_error   s
   
ùz/UltraJSONTests.test_object_with_json_type_errorc                 C   s,   G dd„ dƒ}d|ƒ i}|   ttj|¡ d S )Nc                   @   rþ   )zFUltraJSONTests.test_object_with_json_attribute_error.<locals>.JSONTestc                 S   s   t ‚rI   )r   r&   r   r   r   r  ®  rK   zOUltraJSONTests.test_object_with_json_attribute_error.<locals>.JSONTest.__json__Nr+  r   r   r   r   r,  ­  r  r,  r  )r   r   r   r   r:  r   r   r   Ú%test_object_with_json_attribute_error«  s   
z4UltraJSONTests.test_object_with_json_attribute_errorc                 C   r    )Nz[31337,]r¡   r5   r   r   r   Ú!test_decodeArrayTrailingCommaFail´  r¤   z0UltraJSONTests.test_decodeArrayTrailingCommaFailc                 C   r    )Nz[,31337]r¡   r5   r   r   r   Ú test_decodeArrayLeadingCommaFail¸  r¤   z/UltraJSONTests.test_decodeArrayLeadingCommaFailc                 C   r    )Nz[,]r¡   r5   r   r   r   Útest_decodeArrayOnlyCommaFail¼  r¤   z,UltraJSONTests.test_decodeArrayOnlyCommaFailc                 C   r    )Nz[]]r¡   r5   r   r   r   Ú$test_decodeArrayUnmatchedBracketFailÀ  r¤   z3UltraJSONTests.test_decodeArrayUnmatchedBracketFailc                 C   s   d}t  |¡}|  g |¡ d S r  )r   r	   r
   )r   r   r6  r   r   r   Útest_decodeArrayEmptyÄ  r@   z$UltraJSONTests.test_decodeArrayEmptyc                 C   ó   d}t  |¡ d S )Nz[31337]©r   r	   r5   r   r   r   Útest_decodeArrayOneItemÉ  ó   z&UltraJSONTests.test_decodeArrayOneItemc                 C   rB  )NÚ18446744073709551615rC  r5   r   r   r   Útest_decodeLongUnsignedValueÍ  rE  z+UltraJSONTests.test_decodeLongUnsignedValuec                 C   rB  )NÚ9223372036854775807rC  r5   r   r   r   Útest_decodeBigValueÑ  rE  z"UltraJSONTests.test_decodeBigValuec                 C   rB  )Nz-9223372036854775808rC  r5   r   r   r   Útest_decodeSmallValueÕ  rE  z$UltraJSONTests.test_decodeSmallValuec                 C   r    ©NÚ18446744073709551616r¡   r5   r   r   r   Útest_decodeTooBigValueÙ  r¤   z%UltraJSONTests.test_decodeTooBigValuec                 C   r    ©Nz-90223372036854775809r¡   r5   r   r   r   Útest_decodeTooSmallValueÝ  r¤   z'UltraJSONTests.test_decodeTooSmallValuec                 C   r    rK  r¡   r5   r   r   r   Útest_decodeVeryTooBigValueá  r¤   z)UltraJSONTests.test_decodeVeryTooBigValuec                 C   r    rN  r¡   r5   r   r   r   Útest_decodeVeryTooSmallValueå  r¤   z+UltraJSONTests.test_decodeVeryTooSmallValuec                 C   rB  )Nz{}
	 rC  r5   r   r   r   Ú"test_decodeWithTrailingWhitespacesé  rE  z1UltraJSONTests.test_decodeWithTrailingWhitespacesc                 C   r    )Nz{}
	 ar¡   r5   r   r   r   Ú%test_decodeWithTrailingNonWhitespacesí  r¤   z4UltraJSONTests.test_decodeWithTrailingNonWhitespacesc                 C   r    )Nz[18446744073709551616]r¡   r5   r   r   r   Útest_decodeArrayWithBigIntñ  r¤   z)UltraJSONTests.test_decodeArrayWithBigIntc                 C   sH  |   dt d¡¡ |   dt d¡¡ |   dt d¡¡ |   dt d¡¡ |   d	t d
¡¡ |   dt d¡¡ |   dt d¡¡ |   dt d¡¡ |   dt d¡¡ |   dt d¡¡ |   dt d¡¡ |   dt d¡¡ |   dt d¡¡ |   dt d¡¡ |   dt d¡¡ |   dt d ¡¡ |   d!t d"¡¡ |   d#t d$¡¡ d S )%NgÞ3ˆÓ­ùñ¿z-1.1234567893gªRCÊÀó¿z-1.234567893g¨B4¡æ‡õ¿z-1.34567893gŽš
LO÷¿z
-1.4567893g‰	jøù¿z	-1.567893g[_$´åÜú¿z-1.67893gþe÷äa¡ü¿z-1.7894g}?5^ºIþ¿z-1.893gÍÌÌÌÌÌô¿z-1.3gÞ3ˆÓ­ùñ?z1.1234567893gªRCÊÀó?z1.234567893g¨B4¡æ‡õ?z
1.34567893gŽš
LO÷?z	1.4567893g‰	jøù?z1.567893g[_$´åÜú?z1.67893gþe÷äa¡ü?z1.7894g}?5^ºIþ?z1.893gÍÌÌÌÌÌô?z1.3)r/   r   r   r&   r   r   r   Ú'test_decodeFloatingPointAdditionalTestsõ  s$   z6UltraJSONTests.test_decodeFloatingPointAdditionalTestsc                 C   r    )Nz{"age", 44}r¡   r5   r   r   r   Útest_ReadBadObjectSyntax
  r¤   z'UltraJSONTests.test_ReadBadObjectSyntaxc                 C   ó   |   dt d¡¡ d S )NTÚtrue©r
   r   r   r&   r   r   r   Útest_ReadTrue  rú   zUltraJSONTests.test_ReadTruec                 C   rW  )NFÚfalserY  r&   r   r   r   Útest_ReadFalse  rú   zUltraJSONTests.test_ReadFalsec                 C   s   |   d t d¡¡ d S ©NÚnullrY  r&   r   r   r   Útest_ReadNull  rú   zUltraJSONTests.test_ReadNullc                 C   rW  )NrX  Tr$   r&   r   r   r   Útest_WriteTrue  rú   zUltraJSONTests.test_WriteTruec                 C   rW  )Nr[  Fr$   r&   r   r   r   Útest_WriteFalse  rú   zUltraJSONTests.test_WriteFalsec                 C   s   |   dt d ¡¡ d S r]  r$   r&   r   r   r   Útest_WriteNull  rú   zUltraJSONTests.test_WriteNullc                 C   s   |   g d¢t d¡¡ d S )N©TFNz [ true, false,null] rY  r&   r   r   r   Útest_ReadArrayOfSymbols   ó   z&UltraJSONTests.test_ReadArrayOfSymbolsc                 C   s   |   dt g d¢¡¡ d S ©Nz[true,false,null]rc  r$   r&   r   r   r   Ú test_WriteArrayOfSymbolsFromList#  re  z/UltraJSONTests.test_WriteArrayOfSymbolsFromListc                 C   rW  rf  r$   r&   r   r   r   Ú!test_WriteArrayOfSymbolsFromTuple&  rú   z0UltraJSONTests.test_WriteArrayOfSymbolsFromTuplec                 C   r    )Nu   í±¿)r   ÚUnicodeEncodeErrorr   r%   )r   ra   r   r   r   Ú$test_encodingInvalidUnicodeCharacter)  r¤   z3UltraJSONTests.test_encodingInvalidUnicodeCharacterc                 C   s0   dddddddœ}t j|dd}|  |d¡ d S )Nrp   )r)   ÚcÚbÚerí   r  T)Ú	sort_keysz%{"a":1,"b":1,"c":1,"d":1,"e":1,"f":1})r   r%   r
   )r   ÚdataÚ
sortedKeysr   r   r   Útest_sortKeys-  s   zUltraJSONTests.test_sortKeysÚgetrefcountTztest requires sys.refcount)Úreasonc                 C   sH   dd l }| ¡  dg}d|i}t |¡}t |¡ |  |t |¡¡ d S )Nr   ÚabcÚ1©ÚgcÚcollectÚsysrr  r   r%   r
   )r   rw  Úvaluero  Ú	ref_countr   r   r   Ú$test_does_not_leak_dictionary_values2  s   

z3UltraJSONTests.test_does_not_leak_dictionary_valuesc           	      C   sx   dd l }| ¡  d}d}dg}g d¢}||||i}t |¡}t |¡}t |¡ |  |t |¡¡ |  |t |¡¡ d S )Nr   ru  rt  rè   rv  )	r   rw  r2   Úkey2r1   Úvalue2ro  Ú
ref_count1Ú
ref_count2r   r   r   Ú"test_does_not_leak_dictionary_keys=  s   


z1UltraJSONTests.test_does_not_leak_dictionary_keysc                 C   óJ   dd l }| ¡  d}d}||i}t |¡}t |¡ |  |t |¡¡ d S )Nr   ru  rp   rv  ©r   rw  r2   r1   ro  r  r   r   r   Ú(test_does_not_leak_dictionary_string_keyM  ó   

z7UltraJSONTests.test_does_not_leak_dictionary_string_keyc                 C   r‚  )Nr   )r)   rp   rv  rƒ  r   r   r   Ú'test_does_not_leak_dictionary_tuple_keyY  r…  z6UltraJSONTests.test_does_not_leak_dictionary_tuple_keyc                 C   r‚  )Nr   ó   1rp   rv  rƒ  r   r   r   Ú'test_does_not_leak_dictionary_bytes_keye  r…  z6UltraJSONTests.test_does_not_leak_dictionary_bytes_keyc                 C   sJ   dd l }| ¡  d }d}||i}t |¡}t |¡ |  |t |¡¡ d S )Nr   rp   rv  rƒ  r   r   r   Ú&test_does_not_leak_dictionary_None_keyq  r…  z5UltraJSONTests.test_does_not_leak_dictionary_None_keyN)†r‰   rŠ   r‹   r   r#   r'   r+   r-   r.   r0   r6   r>   r?   rA   rD   rG   rH   rJ   rR   rU   rV   rW   rY   rZ   rc   rd   rf   ri   rl   rm   rr   rw   rx   ry   rz   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  r  r  r"  r/  r1  r7  r;  r<  r=  r>  r?  r@  rA  rD  rG  rI  rJ  rM  rO  rP  rQ  rR  rS  rT  rU  rV  rZ  r\  r_  r`  ra  rb  rd  rg  rh  rj  rq  ÚunittestÚskipIfÚhasattrry  r|  r  r„  r†  rˆ  r‰  r   r   r   r   r      s   			




r   Ú__main__Úindenti  i  c                 C   s   t jddi| d d S )Nr)   T©rŽ  r4   r  r   r   r   Útest_dump_huge_indent©  s   r  Úfirst_lengthr]   é   Úsecond_lengthi§*  i¬*  c                 C   s   t  d|  d| g¡ d S )Nr)   rÑ   )r   r%   )r‘  r“  r   r   r   Útest_dump_long_string®  s   r”  c                  C   sB   g  } }t dƒD ]}| tt |ƒƒ¡ |d }tj| |d qd S )NrB   éÿÿÿÿr  )r¿   ÚappendÚlistr   r%   )r)   Ú_aÚir   r   r   Útest_dump_indented_nested_list´  s   ýrš  )r   rp   r]   r[   r8   r   é1   c                 C   s.   t tƒ d¡}t | ¡ ¡}tj|| d d S )Nz334-reproducer.jsonr  )r   Ú__file__Ú	with_namer   r   Ú
read_bytesr%   )rŽ  Úpathr)   r   r   r   Útest_issue_334¼  s   r   ztest_input, expected))z"\uD83D\uDCA9"u   ðŸ’©)z"a\uD83D\uDCA9b"u   aðŸ’©b)z"\uD800"õ   í €)z
"a\uD800b"u   aí €b)z"\uDEAD"õ   íº­)z
"a\uDEADb"u   aíº­b)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                 C   sB   t  | ¡|ks	J ‚t  |  dd¡¡|ksJ ‚t | ¡|ksJ ‚d S )Nr{   Úsurrogatepass)r   r   r   r   )Ú
test_inputÚexpectedr   r   r   Ú test_decode_surrogate_charactersÃ  s   r¦  )r   r   r:   ry  rŠ  ÚpytestÚior   Úpathlibr   Úsrslyr   r%   rN   ÚTestCaser   r‰   ÚmainÚmarkÚparametrizer—  r¿   r  r”  rš  r   r¦  r   r   r   r   Ú<module>   sD          u

þ