3
d                 @   s8  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j  ejjdeed	d
dd Zejjdeeddejjdeedddd Zdd Zejjdd ddddddgdd Zejjdd=d>d?d@dAdBdCdDdEdFdGdHdIdJdKgd;d< ZdS )L    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 ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd ZcddĄ ZdddƄ ZeddȄ Zfddʄ Zgdd̄ Zhdd΄ ZiddЄ Zjdd҄ ZkddԄ Zlddք Zmdd؄ Znddڄ Zodd܄ Zpddބ Zqdd Zrdd Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Z{e|j}e~eddk dddd Ze|j}e~eddk dddd Ze|j}e~eddk dddd Ze|j}e~eddk dddd Ze|j}e~eddk dddd  Ze|j}e~eddk dddd ZdS (  UltraJSONTestsc             C   s.   t jd}tj|}tj|}| j|d d S )Nz	1337.1337g@)decimalDecimalr   encodedecodeassertEqual)selfsutencodeddecoded r   P/var/www/html/virt/lib64/python3.6/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                sN   t j f|}j||  |jddrJj tj| j t j| d S )Nescape_forward_slashesT)r   r   r
   getjsonloadsr	   )Zexpected_outputZencode_kwargsoutput)inputr   r   r   helper   s
    z:UltraJSONTests.test_encodeStringConversion.<locals>.helperT)ensure_asciiF)r   encode_html_chars)r   r   )r   Znot_html_encodedZhtml_encodedZnot_slashes_escapedr   r   )r   r   r   test_encodeStringConversion   s    z*UltraJSONTests.test_encodeStringConversionc             C   s   | j 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   sL   ddi}t j|}t j|}| j|| tj|}tj|}| j|| d S )Nal   Z:`7{ lZ:`7{ )r   r   r   r
   r   r   r	   )r   r   r   r   r   r   r   test_doubleLongIssue:   s    



z#UltraJSONTests.test_doubleLongIssuec             C   sL   ddi}t j|}t j|}| j|| tj|}tj|}| j|| d S )Nr   g#_tBg#_t)r   r   r   r
   r   r   r	   )r   r   r   r   r   r   r   test_doubleLongDecimalIssueC   s    



z*UltraJSONTests.test_doubleLongDecimalIssuec             C   s    ddi}t j|}t j| d S )Nr   gԟpAAgԟpA)r   r   r	   )r   r   r   r   r   r   test_encodeDecodeLongDecimalL   s    
z+UltraJSONTests.test_encodeDecodeLongDecimalc             C   s4   ddi}t j|}t j|}| j|d |d  d S )Nr   g=
ףp=@)r   r   r	   assertAlmostEqual)r   r   r   r   r   r   r   test_decimalDecodeTestQ   s    

z%UltraJSONTests.test_decimalDecodeTestc             C   s>   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%   )u   بنu   بنu   بنu   بنu   بنu   بنu   بن)r   r   )r   r   r   r   r   test_encodeDictWithUnicodeKeysW   s    
z-UltraJSONTests.test_encodeDictWithUnicodeKeysc             C   sP   t j}tj|}| jt|dttj|d | jt|dttj|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 j|}| j|d d S )Ng      ?z1.0)r   r   r
   )r   r   r   r   r   r   test_encodeWithDecimals   s    
z%UltraJSONTests.test_encodeWithDecimalc             C   sR   t j }tj|}| jt|dttj|d | jt|dttj|d d S )Nr'   )	r(   r)   r   r   r
   r*   r   r   r	   )r   r   r   r   r   r   test_encodeDoubleNegConversionx   s    
z-UltraJSONTests.test_encodeDoubleNegConversionc             C   s@   g gggd }t j|}| j|tj| | j|t j| d S )N   )r   r   r
   r   r   r	   )r   r   r   r   r   r   test_encodeArrayOfNestedArrays   s    
z-UltraJSONTests.test_encodeArrayOfNestedArraysc             C   sB   ddddgd }t j|}| j|tj| | j|t j| d S )NgcAT@
   )r   r   r
   r   r   r	   )r   r   r   r   r   r   test_encodeArrayOfDoubles   s    
z(UltraJSONTests.test_encodeArrayOfDoublesc             C   sB   d}t j|}| j|tj| | j|d | j|t j| d S )NzA string \ /   
  	z"A string \\ \/ \b \f \n \r \t")r   r   r
   r   r   r	   )r   r   r   r   r   r   test_encodeStringConversion2   s
    
z+UltraJSONTests.test_encodeStringConversion2c             C   s   d S )Nr   )r   r   r   r   test_decodeUnicodeConversion   s    z+UltraJSONTests.test_decodeUnicodeConversionc             C   s>   d}t j|}t j|}| j|t| | j|tj| d S )Nu@   Räksmörgås اسامة بن محمد بن عوض بن لادن)r   r   r	   r
   json_unicoder   r   )r   r   encdecr   r   r   test_encodeUnicodeConversion1   s
    

z,UltraJSONTests.test_encodeUnicodeConversion1c             C   s8   d}t j|}t j|}| j|| | j|t| d S )N)r   r   r	   r
   r4   )r   r   r5   r6   r   r   r   test_encodeControlEscaping   s
    

z)UltraJSONTests.test_encodeControlEscapingc             C   s>   d}t j|}t j|}| j|t| | j|tj| d S )Nu
   æ¥Ñ)r   r   r	   r
   r4   r   r   )r   r   r5   r6   r   r   r   test_encodeUnicodeConversion2   s
    

z,UltraJSONTests.test_encodeUnicodeConversion2c             C   s>   d}t j|}t j|}| j|t| | j|tj| d S )Nu   ð)r   r   r	   r
   r4   r   r   )r   r   r5   r6   r   r   r   test_encodeUnicodeSurrogatePair   s
    

z.UltraJSONTests.test_encodeUnicodeSurrogatePairc             C   s>   d}t j|}t j|}| j|t| | j|tj| d S )Nu   ð°TRAILINGNORMAL)r   r   r	   r
   r4   r   r   )r   r   r5   r6   r   r   r   test_encodeUnicode4BytesUTF8   s
    

z+UltraJSONTests.test_encodeUnicode4BytesUTF8c             C   s>   d}t j|}t j|}| j|t| | j|tj| d S )Nu   ó¿¿¿TRAILINGNORMAL)r   r   r	   r
   r4   r   r   )r   r   r5   r6   r   r   r   #test_encodeUnicode4BytesUTF8Highest   s
    

z2UltraJSONTests.test_encodeUnicode4BytesUTF8Highestc             C   s   d}t j|}tj|}t|dkrB| jt|t|d d  n| jt|t|d d  | j|| t j|}| j|| t j|dd}tj|dd}| jt|t|d  | j|| t j|}| j|| d S )Nu   🐮🐮🐭🐭            F)r   )r   r   r   lenr
   r   )r   sr   encoded_jsonr   r   r   r   testEncodeUnicodeBMP   s    



z#UltraJSONTests.testEncodeUnicodeBMPc             C   s   d}t j|}tj|}| jt|t|d d  | j|| t j|}| j|| t j|dd}tj|dd}| jt|t|d  | j|| t j|}| j|| d S )Nu	   ✿♡✿rA   r@   F)r   )r   r   r   r
   rB   r   )r   rC   r   rD   r   r   r   r   testEncodeSymbols   s    



z UltraJSONTests.testEncodeSymbolsc             C   sN   g ggg}t j|}| j|tj| | j|tj| | j|t j| d S )N)r   r   r
   r   r   r   r	   )r   r   r   r   r   r   test_encodeArrayInArray   s
    

z&UltraJSONTests.test_encodeArrayInArrayc             C   sH   d}t j|}| j|tj| | j|tj| | j|t j| d S )Niiz  )r   r   r
   r   r   r   r	   )r   r   r   r   r   r   test_encodeIntConversion   s
    
z'UltraJSONTests.test_encodeIntConversionc             C   sH   d}t j|}| j|tj| | j|tj| | j|t j| d S )Niiz  i)r   r   r
   r   r   r   r	   )r   r   r   r   r   r   test_encodeIntNegConversion   s
    
z*UltraJSONTests.test_encodeIntNegConversionc             C   s\   d}t j|}tj| t j| | j|tj| | j|tj| | j|t j| d S )Nl            l         )r   r   r   r   r	   r
   r   )r   r   r   r   r   r   test_encodeLongNegConversion  s    


z+UltraJSONTests.test_encodeLongNegConversionc             C   s>   ddddg}t j|}| j|tj| | j|t j| d S )N   r@      r>   )r   r   r
   r   r   r	   )r   r   r   r   r   r   test_encodeListConversion  s    
z(UltraJSONTests.test_encodeListConversionc             C   sR   ddddd}t j|}| j|tj| | j|t j| | j|t j| d S )NrK   r@   rL   r>   )Zk1Zk2Zk3Zk4)r   r   r
   r   r   r	   )r   r   r   r   r   r   test_encodeDictConversion  s
    
z(UltraJSONTests.test_encodeDictConversionc             C   sH   d }t j|}| j|tj| | j|tj| | j|t j| d S )N)r   r   r
   r   r   r   r	   )r   r   r   r   r   r   test_encodeNoneConversion  s
    
z(UltraJSONTests.test_encodeNoneConversionc             C   sH   d}t j|}| j|tj| | j|tj| | j|t j| d S )NT)r   r   r
   r   r   r   r	   )r   r   r   r   r   r   test_encodeTrueConversion%  s
    
z(UltraJSONTests.test_encodeTrueConversionc             C   sH   d}t j|}| j|tj| | j|tj| | j|t j| d S )NF)r   r   r
   r   r   r   r	   )r   r   r   r   r   r   test_encodeFalseConversion,  s
    
z)UltraJSONTests.test_encodeFalseConversionc             C   sR   d}|j d}tj|dd}tj |}| j|tj|dd | j|tj| d S )Ns   日шzutf-8F)r   )r	   r   r   r
   r   r   r   )r   r   r5   r6   r   r   r   test_encodeToUTF83  s    

z UltraJSONTests.test_encodeToUTF8c             C   s,   d}t j|}t jt|}| j|| d S )Nz{"obj": 31337})r   r	   strr
   )r   r   Zdec1Zdec2r   r   r   test_decodeFromUnicode;  s    
z%UltraJSONTests.test_decodeFromUnicodec             C   sF   G dd d}G dd d}| }| |_ ||j _ | jttj| d S )Nc               @   s   e Zd ZdZdd ZdS )z2UltraJSONTests.test_encodeRecursionMax.<locals>.O2r   c             S   s
   d| j iS )Nmember)rU   )r   r   r   r   toDictF  s    z9UltraJSONTests.test_encodeRecursionMax.<locals>.O2.toDictN)__name__
__module____qualname__rU   rV   r   r   r   r   O2C  s   rZ   c               @   s   e Zd ZdZdd ZdS )z2UltraJSONTests.test_encodeRecursionMax.<locals>.O1r   c             S   s
   d| j iS )NrU   )rU   )r   r   r   r   rV   L  s    z9UltraJSONTests.test_encodeRecursionMax.<locals>.O1.toDictN)rW   rX   rY   rU   rV   r   r   r   r   O1I  s   r[   )rU   assertRaisesOverflowErrorr   r   )r   rZ   r[   r   r   r   r   test_encodeRecursionMaxA  s    z&UltraJSONTests.test_encodeRecursionMaxc             C   s   t d}| jttj| d S )Nnan)floatr\   r]   r   r   )r   r   r   r   r   test_encodeDoubleNanT  s    z#UltraJSONTests.test_encodeDoubleNanc             C   s   t d}| jttj| d S )Ninf)r`   r\   r]   r   r   )r   r   r   r   r   test_encodeDoubleInfX  s    z#UltraJSONTests.test_encodeDoubleInfc             C   s   t d }| jttj| d S )Nrb   )r`   r\   r]   r   r   )r   r   r   r   r   test_encodeDoubleNegInf\  s    
z&UltraJSONTests.test_encodeDoubleNegInfc             C   s2   ddl m} |ddd	d
g}| jdtj| d S )Nr   )OrderedDictrK      r@   z{"1":1,"0":0,"8":8,"2":2})rK   rK   )r   r   )rf   rf   )r@   r@   )collectionsre   r
   r   r   )r   re   r   r   r   r   test_encodeOrderedDict`  s    z%UltraJSONTests.test_encodeOrderedDictc             C   s   d}| j ttj| d S )Nzfdsa sda v9sa fdsa)r\   
ValueErrorr   r	   )r   r   r   r   r   test_decodeJibberishf  s    z#UltraJSONTests.test_decodeJibberishc             C   s   d}| j ttj| d S )N[)r\   ri   r   r	   )r   r   r   r   r   test_decodeBrokenArrayStartj  s    z*UltraJSONTests.test_decodeBrokenArrayStartc             C   s   d}| j ttj| d S )N{)r\   ri   r   r	   )r   r   r   r   r   test_decodeBrokenObjectStartn  s    z+UltraJSONTests.test_decodeBrokenObjectStartc             C   s   d}| j ttj| d S )N])r\   ri   r   r	   )r   r   r   r   r   test_decodeBrokenArrayEndr  s    z(UltraJSONTests.test_decodeBrokenArrayEndc             C   s   dd }| j ttj| d S )Nrk   i   i   )r\   ri   r   r	   )r   r   r   r   r   test_decodeArrayDepthTooBigv  s    z*UltraJSONTests.test_decodeArrayDepthTooBigc             C   s   d}| j ttj| d S )N})r\   ri   r   r	   )r   r   r   r   r   test_decodeBrokenObjectEndz  s    z)UltraJSONTests.test_decodeBrokenObjectEndc             C   s   d}| j ttj| d S )Nz
{"one":1,})r\   ri   r   r	   )r   r   r   r   r   "test_decodeObjectTrailingCommaFail~  s    z1UltraJSONTests.test_decodeObjectTrailingCommaFailc             C   s   dd }| j ttj| d S )Nrm   i   i   )r\   ri   r   r	   )r   r   r   r   r   test_decodeObjectDepthTooBig  s    z+UltraJSONTests.test_decodeObjectDepthTooBigc             C   s   d}| j ttj| d S )Nz"TESTING)r\   ri   r   r	   )r   r   r   r   r   test_decodeStringUnterminated  s    z,UltraJSONTests.test_decodeStringUnterminatedc             C   s   d}| j ttj| d S )Nz
"TESTING\")r\   ri   r   r	   )r   r   r   r   r   %test_decodeStringUntermEscapeSequence  s    z4UltraJSONTests.test_decodeStringUntermEscapeSequencec             C   s   d}| j ttj| d S )Nz
"TESTING\")r\   ri   r   r	   )r   r   r   r   r   test_decodeStringBadEscape  s    z)UltraJSONTests.test_decodeStringBadEscapec             C   s   d}| j ttj| d S )NZtru)r\   ri   r   r	   )r   r   r   r   r   test_decodeTrueBroken  s    z$UltraJSONTests.test_decodeTrueBrokenc             C   s   d}| j ttj| d S )Nfa)r\   ri   r   r	   )r   r   r   r   r   test_decodeFalseBroken  s    z%UltraJSONTests.test_decodeFalseBrokenc             C   s   d}| j ttj| d S )Nn)r\   ri   r   r	   )r   r   r   r   r   test_decodeNullBroken  s    z$UltraJSONTests.test_decodeNullBrokenc             C   s*   d}x t dD ]}| jttj| qW d S )Nz{{1337:""}}i  )ranger\   ri   r   r	   )r   r   xr   r   r   $test_decodeBrokenDictKeyTypeLeakTest  s    z3UltraJSONTests.test_decodeBrokenDictKeyTypeLeakTestc             C   s*   d}x t dD ]}| jttj| qW d S )Nz
{{"key":"}i  )r~   r\   ri   r   r	   )r   r   r   r   r   r   test_decodeBrokenDictLeakTest  s    z,UltraJSONTests.test_decodeBrokenDictLeakTestc             C   s*   d}x t dD ]}| jttj| qW d S )Nz[[[truei  )r~   r\   ri   r   r	   )r   r   r   r   r   r   test_decodeBrokenListLeakTest  s    z,UltraJSONTests.test_decodeBrokenListLeakTestc             C   s   d}| j ttj| d S )Nz{{{{31337}}}})r\   ri   r   r	   )r   r   r   r   r   test_decodeDictWithNoKey  s    z'UltraJSONTests.test_decodeDictWithNoKeyc             C   s   d}| j ttj| d S )Nz{{{{"key"}}}})r\   ri   r   r	   )r   r   r   r   r   !test_decodeDictWithNoColonOrValue  s    z0UltraJSONTests.test_decodeDictWithNoColonOrValuec             C   s   d}| j ttj| d S )Nz{{{{"key":}}}})r\   ri   r   r	   )r   r   r   r   r   test_decodeDictWithNoValue  s    z)UltraJSONTests.test_decodeDictWithNoValuec             C   s   d}| j dtj| d S )NZ31337iiz  )r
   r   r	   )r   r   r   r   r   test_decodeNumericIntPos  s    z'UltraJSONTests.test_decodeNumericIntPosc             C   s   d}| j dtj| d S )Nz-31337iiz  i)r
   r   r	   )r   r   r   r   r   test_decodeNumericIntNeg  s    z'UltraJSONTests.test_decodeNumericIntNegc             C   s   d}| j ttj| d S )Ns   )r\   r]   r   r   )r   r   r   r   r    test_encodeUnicode4BytesUTF8Fail  s    z/UltraJSONTests.test_encodeUnicode4BytesUTF8Failc             C   s   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 d S )Nz31337   1337 z"  \u0000\r\n "z   
 )r   r   r
   r   r   r   r	   )r   r   r   r   r   r   test_encodeNullCharacter  s    

z'UltraJSONTests.test_encodeNullCharacterc             C   s    d}| j tj|tj| d S )Nz"31337 \u0000 31337")r
   r   r	   r   r   )r   r   r   r   r   test_decodeNullCharacter  s    z'UltraJSONTests.test_decodeNullCharacterc             C   sB   ddddddg}t j|}| j|tj| | j|t j| d S )Nl    )r   r   r
   r   r   r	   )r   r   r   r   r   r   test_encodeListLongConversion  s    
z,UltraJSONTests.test_encodeListLongConversionc             C   s<   dddg}t j|}| j|tj| | j|t j| d S )Nl    )r   r   r
   r   r   r	   )r   r   r   r   r   r   %test_encodeListLongUnsignedConversion  s    

z4UltraJSONTests.test_encodeListLongUnsignedConversionc             C   sH   d}t j|}| j|tj| | j|tj| | j|t j| d S )Nl    )r   r   r
   r   r   r   r	   )r   r   r   r   r   r   test_encodeLongConversion  s
    
z(UltraJSONTests.test_encodeLongConversionc             C   sH   d}t j|}| j|tj| | j|tj| | j|t j| d S )Nl    )r   r   r
   r   r   r   r	   )r   r   r   r   r   r   !test_encodeLongUnsignedConversion  s
    
z0UltraJSONTests.test_encodeLongUnsignedConversionc             C   s$   d}t j|}| j|tj| d S )N1337E40)r   r	   r
   r   r   )r   r   r   r   r   r   test_numericIntExp  s    
z!UltraJSONTests.test_numericIntExpc             C   s$   d}t j|}| j|tj| d S )Nz1.337E40)r   r	   r
   r   r   )r   r   r   r   r   r   test_numericIntFrcExp   s    
z$UltraJSONTests.test_numericIntFrcExpc             C   s$   d}t j|}| j|tj| d S )Nz1337E+9)r   r	   r
   r   r   )r   r   r   r   r   r   test_decodeNumericIntExpEPLUS  s    
z,UltraJSONTests.test_decodeNumericIntExpEPLUSc             C   s$   d}t j|}| j|tj| d S )Nz	1.337e+40)r   r	   r
   r   r   )r   r   r   r   r   r   test_decodeNumericIntExpePLUS
  s    
z,UltraJSONTests.test_decodeNumericIntExpePLUSc             C   s$   d}t j|}| j|tj| d S )Nr   )r   r	   r
   r   r   )r   r   r   r   r   r   test_decodeNumericIntExpE  s    
z(UltraJSONTests.test_decodeNumericIntExpEc             C   s$   d}t j|}| j|tj| d S )NZ1337e40)r   r	   r
   r   r   )r   r   r   r   r   r   test_decodeNumericIntExpe  s    
z(UltraJSONTests.test_decodeNumericIntExpec             C   s$   d}t j|}| j|tj| d S )Nz1.337E-4)r   r	   r
   r   r   )r   r   r   r   r   r   test_decodeNumericIntExpEMinus  s    
z-UltraJSONTests.test_decodeNumericIntExpEMinusc             C   s$   d}t j|}| j|tj| d S )Nz1.337e-4)r   r	   r
   r   r   )r   r   r   r   r   r   test_decodeNumericIntExpeMinus  s    
z-UltraJSONTests.test_decodeNumericIntExpeMinusc             C   s,   t  }tjdddg| | jd|j  d S )NrK   r@   rL   z[1,2,3])r   r   dumpr
   getvalue)r   fr   r   r   test_dumpToFile#  s    zUltraJSONTests.test_dumpToFilec             C   s8   G dd d}| }t jdddg| | j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 )bytes)r   r   r   r   __init__*  s    zCUltraJSONTests.test_dumpToFileLikeObject.<locals>.filelike.__init__c             S   s   |  j |7  _ d S )N)r   )r   r   r   r   r   write-  s    z@UltraJSONTests.test_dumpToFileLikeObject.<locals>.filelike.writeN)rW   rX   rY   r   r   r   r   r   r   filelike)  s   r   rK   r@   rL   z[1,2,3])r   r   r
   r   )r   r   r   r   r   r   test_dumpToFileLikeObject(  s    z(UltraJSONTests.test_dumpToFileLikeObjectc             C   s   | j ttjg d d S )Nr   )r\   	TypeErrorr   r   )r   r   r   r   test_dumpFileArgsError4  s    z%UltraJSONTests.test_dumpFileArgsErrorc             C   s&   t d}| jddddgtj| d S )Nz	[1,2,3,4]rK   r@   rL   r>   )r   r
   r   load)r   r   r   r   r   test_loadFile7  s    zUltraJSONTests.test_loadFilec             C   s2   G dd d}| }| j ddddgtj| d S )Nc               @   s   e Zd Zdd ZdS )z8UltraJSONTests.test_loadFileLikeObject.<locals>.filelikec             S   s*   y
| j  W n tk
r$   d| _ dS X d S )NTz	[1,2,3,4])endAttributeError)r   r   r   r   read=  s
    
z=UltraJSONTests.test_loadFileLikeObject.<locals>.filelike.readN)rW   rX   rY   r   r   r   r   r   r   <  s   r   rK   r@   rL   r>   )r
   r   r   )r   r   r   r   r   r   test_loadFileLikeObject;  s    z&UltraJSONTests.test_loadFileLikeObjectc             C   s   | j ttjd d S )Nz[])r\   r   r   r   )r   r   r   r   test_loadFileArgsErrorG  s    z%UltraJSONTests.test_loadFileArgsErrorc             C   s   | j ttjd d S )Nl   U$Jp[lS)r\   r]   r   r   )r   r   r   r   test_encodeNumericOverflowJ  s    z)UltraJSONTests.test_encodeNumericOverflowc             C   sN   ddd	 dd
 dd f}d}x,t ||D ]\}}| jtj|d | q(W d S )Nz{"id": 3590016419}z
{"id": %s}r@          rK      M+ idl        l        l        l                    l            )r   r   r   r   )zipr
   r   r	   )r   Zdocsresultsdocresultr   r   r   !test_decodeNumberWith32bitSignBitM  s    
z0UltraJSONTests.test_decodeNumberWith32bitSignBitc             C   s:   x4t dD ](}djd}|d d d }tj| q
W d S )Nr0      åzutf-8i   r@   )r~   r   r   )r   r   baser   r   r   r   test_encodeBigEscapeZ  s    
z#UltraJSONTests.test_encodeBigEscapec             C   sJ   xDt dD ]8}djd}dj }||d d d  | }tj| q
W d S )Nr0   r   zutf-8"i   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 j|}t j|}| j|  d S )Nkeyiiz  c                   s    e Zd Z fddZdd ZdS )z,UltraJSONTests.test_toDict.<locals>.DictTestc                s    S )Nr   )r   )dr   r   rV   k  s    z3UltraJSONTests.test_toDict.<locals>.DictTest.toDictc             S   s   dS )Nz"json defined"r   )r   r   r   r   __json__n  s    z5UltraJSONTests.test_toDict.<locals>.DictTest.__json__N)rW   rX   rY   rV   r   r   )r   r   r   DictTestj  s   r   )r   r   r	   r
   )r   r   or   r6   r   )r   r   test_toDictg  s    

zUltraJSONTests.test_toDictc                sH   d G  fddd}d| i}t j|}t j|}| j|d i d S )Nzthis is the correct outputc                   s   e Zd Z fddZdS )z6UltraJSONTests.test_object_with_json.<locals>.JSONTestc                s   d  d S )Nr   r   )r   )output_textr   r   r   |  s    z?UltraJSONTests.test_object_with_json.<locals>.JSONTest.__json__N)rW   rX   rY   r   r   )r   r   r   JSONTest{  s   r   r   )r   r   r	   r
   )r   r   r   r   r6   r   )r   r   test_object_with_jsonv  s    


z$UltraJSONTests.test_object_with_jsonc                sH   d G  fddd}d| i}t j|}t j|}| j|d i d S )Nzthis is the correct outputc                   s   e Zd Z fddZdS )z>UltraJSONTests.test_object_with_json_unicode.<locals>.JSONTestc                s   d  d S )Nr   r   )r   )r   r   r   r     s    zGUltraJSONTests.test_object_with_json_unicode.<locals>.JSONTest.__json__N)rW   rX   rY   r   r   )r   r   r   r     s   r   r   )r   r   r	   r
   )r   r   r   r   r6   r   )r   r   test_object_with_json_unicode  s    


z,UltraJSONTests.test_object_with_json_unicodec                sP   dddgi G  fddd}d| i}t j|}t j|}| j|d i d S )NZfoobarZbazc                   s   e Zd Z fddZdS )z>UltraJSONTests.test_object_with_complex_json.<locals>.JSONTestc                s
   t j S )N)r   r   )r   )objr   r   r     s    zGUltraJSONTests.test_object_with_complex_json.<locals>.JSONTest.__json__N)rW   rX   rY   r   r   )r   r   r   r     s   r   r   )r   r   r	   r
   )r   r   r   r   r6   r   )r   r   test_object_with_complex_json  s    


z,UltraJSONTests.test_object_with_complex_jsonc                sH   xBd dddi fD ]0 G  fddd}d| i}| j ttj| qW d S )Ni  gGz(@Tc                   s   e Zd Z fddZdS )zAUltraJSONTests.test_object_with_json_type_error.<locals>.JSONTestc                s    S )Nr   )r   )return_valuer   r   r     s    zJUltraJSONTests.test_object_with_json_type_error.<locals>.JSONTest.__json__N)rW   rX   rY   r   r   )r   r   r   r     s   r   r   )r\   r   r   r   )r   r   r   r   )r   r    test_object_with_json_type_error  s    
z/UltraJSONTests.test_object_with_json_type_errorc             C   s,   G dd d}d| i}| j ttj| d S )Nc               @   s   e Zd Zdd ZdS )zFUltraJSONTests.test_object_with_json_attribute_error.<locals>.JSONTestc             S   s   t d S )N)r   )r   r   r   r   r     s    zOUltraJSONTests.test_object_with_json_attribute_error.<locals>.JSONTest.__json__N)rW   rX   rY   r   r   r   r   r   r     s   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   s   d}| j ttj| d S )Nz[31337,])r\   ri   r   r	   )r   r   r   r   r   !test_decodeArrayTrailingCommaFail  s    z0UltraJSONTests.test_decodeArrayTrailingCommaFailc             C   s   d}| j ttj| d S )Nz[,31337])r\   ri   r   r	   )r   r   r   r   r    test_decodeArrayLeadingCommaFail  s    z/UltraJSONTests.test_decodeArrayLeadingCommaFailc             C   s   d}| j ttj| d S )Nz[,])r\   ri   r   r	   )r   r   r   r   r   test_decodeArrayOnlyCommaFail  s    z,UltraJSONTests.test_decodeArrayOnlyCommaFailc             C   s   d}| j ttj| d S )Nz[]])r\   ri   r   r	   )r   r   r   r   r   $test_decodeArrayUnmatchedBracketFail  s    z3UltraJSONTests.test_decodeArrayUnmatchedBracketFailc             C   s   d}t j|}| jg | d S )Nz[])r   r	   r
   )r   r   r   r   r   r   test_decodeArrayEmpty  s    
z$UltraJSONTests.test_decodeArrayEmptyc             C   s   d}t j| d S )Nz[31337])r   r	   )r   r   r   r   r   test_decodeArrayOneItem  s    z&UltraJSONTests.test_decodeArrayOneItemc             C   s   d}t j| d S )NZ18446744073709551615)r   r	   )r   r   r   r   r   test_decodeLongUnsignedValue  s    z+UltraJSONTests.test_decodeLongUnsignedValuec             C   s   d}t j| d S )NZ9223372036854775807)r   r	   )r   r   r   r   r   test_decodeBigValue  s    z"UltraJSONTests.test_decodeBigValuec             C   s   d}t j| d S )Nz-9223372036854775808)r   r	   )r   r   r   r   r   test_decodeSmallValue  s    z$UltraJSONTests.test_decodeSmallValuec             C   s   d}| j ttj| d S )N18446744073709551616)r\   ri   r   r	   )r   r   r   r   r   test_decodeTooBigValue  s    z%UltraJSONTests.test_decodeTooBigValuec             C   s   d}| j ttj| d S )Nz-90223372036854775809)r\   ri   r   r	   )r   r   r   r   r   test_decodeTooSmallValue  s    z'UltraJSONTests.test_decodeTooSmallValuec             C   s   d}| j ttj| d S )Nr   )r\   ri   r   r	   )r   r   r   r   r   test_decodeVeryTooBigValue  s    z)UltraJSONTests.test_decodeVeryTooBigValuec             C   s   d}| j ttj| d S )Nz-90223372036854775809)r\   ri   r   r	   )r   r   r   r   r   test_decodeVeryTooSmallValue  s    z+UltraJSONTests.test_decodeVeryTooSmallValuec             C   s   d}t j| d S )Nz{}
	 )r   r	   )r   r   r   r   r   "test_decodeWithTrailingWhitespaces  s    z1UltraJSONTests.test_decodeWithTrailingWhitespacesc             C   s   d}| j ttj| d S )Nz{}
	 a)r\   ri   r   r	   )r   r   r   r   r   %test_decodeWithTrailingNonWhitespaces  s    z4UltraJSONTests.test_decodeWithTrailingNonWhitespacesc             C   s   d}| j ttj| d S )Nz[18446744073709551616])r\   ri   r   r	   )r   r   r   r   r   test_decodeArrayWithBigInt  s    z)UltraJSONTests.test_decodeArrayWithBigIntc             C   sH  | 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 d S )%Ng3ӭ?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.3z1.1234567893z1.234567893z
1.34567893z	1.4567893z1.567893z1.67893z1.7894z1.893z1.3g3ӭgRCgB4g
LOg	jg[_$geag}?5^Ig)r"   r   r   )r   r   r   r   'test_decodeFloatingPointAdditionalTests  s$    z6UltraJSONTests.test_decodeFloatingPointAdditionalTestsc             C   s   d}| j ttj| d S )Nz{"age", 44})r\   ri   r   r	   )r   r   r   r   r   test_ReadBadObjectSyntax
  s    z'UltraJSONTests.test_ReadBadObjectSyntaxc             C   s   | j dtjd d S )NTtrue)r
   r   r   )r   r   r   r   test_ReadTrue  s    zUltraJSONTests.test_ReadTruec             C   s   | j dtjd d S )NFfalse)r
   r   r   )r   r   r   r   test_ReadFalse  s    zUltraJSONTests.test_ReadFalsec             C   s   | j d tjd d S )Nnull)r
   r   r   )r   r   r   r   test_ReadNull  s    zUltraJSONTests.test_ReadNullc             C   s   | j dtjd d S )Nr   T)r
   r   r   )r   r   r   r   test_WriteTrue  s    zUltraJSONTests.test_WriteTruec             C   s   | j dtjd d S )Nr   F)r
   r   r   )r   r   r   r   test_WriteFalse  s    zUltraJSONTests.test_WriteFalsec             C   s   | j dtjd  d S )Nr   )r
   r   r   )r   r   r   r   test_WriteNull  s    zUltraJSONTests.test_WriteNullc             C   s   | j ddd gtjd d S )NTFz [ true, false,null] )r
   r   r   )r   r   r   r   test_ReadArrayOfSymbols   s    z&UltraJSONTests.test_ReadArrayOfSymbolsc             C   s   | j dtjddd g d S )Nz[true,false,null]TF)r
   r   r   )r   r   r   r    test_WriteArrayOfSymbolsFromList#  s    z/UltraJSONTests.test_WriteArrayOfSymbolsFromListc             C   s   | j dtjd d S )Nz[true,false,null]TF)TFN)r
   r   r   )r   r   r   r   !test_WriteArrayOfSymbolsFromTuple&  s    z0UltraJSONTests.test_WriteArrayOfSymbolsFromTuplec             C   s   d}| j ttj| d S )Nu   )r\   UnicodeEncodeErrorr   r   )r   rC   r   r   r   $test_encodingInvalidUnicodeCharacter)  s    z3UltraJSONTests.test_encodingInvalidUnicodeCharacterc             C   s0   ddddddd}t j|dd}| j|d d S )NrK   )r   cber   r   T)	sort_keysz%{"a":1,"b":1,"c":1,"d":1,"e":1,"f":1})r   r   r
   )r   dataZ
sortedKeysr   r   r   test_sortKeys-  s    zUltraJSONTests.test_sortKeysgetrefcountTztest requires sys.refcount)reasonc             C   sH   dd l }|j  dg}d|i}tj|}tj| | j|tj| d S )Nr   abc1)gccollectsysr   r   r   r
   )r   r   valuer   Z	ref_countr   r   r   $test_does_not_leak_dictionary_values2  s    

z3UltraJSONTests.test_does_not_leak_dictionary_valuesc       	      C   sz   dd l }|j  d}d}dg}dddg}||||i}tj|}tj|}tj| | j|tj| | j|tj| d S )Nr   r   r   rK   r@   rL   )r   r   r   r   r   r   r
   )	r   r   r%   key2r$   Zvalue2r   
ref_count1Z
ref_count2r   r   r   "test_does_not_leak_dictionary_keys=  s    



z1UltraJSONTests.test_does_not_leak_dictionary_keysc             C   sJ   dd l }|j  d}d}||i}tj|}tj| | j|tj| d S )Nr   r   rK   )r   r   r   r   r   r   r
   )r   r   r%   r$   r   r   r   r   r   (test_does_not_leak_dictionary_string_keyM  s    

z7UltraJSONTests.test_does_not_leak_dictionary_string_keyc             C   sJ   dd l }|j  d}d}||i}tj|}tj| | j|tj| d S )Nr   r   rK   )r   )r   r   r   r   r   r   r
   )r   r   r%   r$   r   r   r   r   r   'test_does_not_leak_dictionary_tuple_keyY  s    

z6UltraJSONTests.test_does_not_leak_dictionary_tuple_keyc             C   sJ   dd l }|j  d}d}||i}tj|}tj| | j|tj| d S )Nr      1rK   )r   r   r   r   r   r   r
   )r   r   r%   r$   r   r   r   r   r   'test_does_not_leak_dictionary_bytes_keye  s    

z6UltraJSONTests.test_does_not_leak_dictionary_bytes_keyc             C   sJ   dd l }|j  d }d}||i}tj|}tj| | j|tj| d S )Nr   rK   )r   r   r   r   r   r   r
   )r   r   r%   r$   r   r   r   r   r   &test_does_not_leak_dictionary_None_keyq  s    

z5UltraJSONTests.test_does_not_leak_dictionary_None_keyN)rW   rX   rY   r   r   r   r   r    r!   r#   r&   r+   r,   r-   r/   r1   r2   r3   r7   r9   r:   r;   r<   r=   rE   rF   rG   rH   rI   rJ   rM   rN   rO   rP   rQ   rR   rT   r^   ra   rc   rd   rh   rj   rl   rn   rp   rq   rs   rt   ru   rv   rw   rx   ry   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   r   r   r   r   r   r   r   r   r   r   r   r   r   r   unittestZskipIfhasattrr   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
  )r   r   )r
  r   r   r   test_dump_huge_indent  s    r  first_lengthr@      second_lengthi*  i*  c             C   s   t jd|  d| g d S )Nr   r   )r   r   )r  r  r   r   r   test_dump_long_string  s    r  c              C   sF   g  } }x8t dD ],}|jtt | |d }tj| |d qW d S )Nr.   rK   )r
  )r~   appendlistr   r   )r   Z_air   r   r   test_dump_indented_nested_list  s
    r  rK   r>   r'   rf   1   c             C   s.   t tjd}tj|j }tj|| d d S )Nz334-reproducer.json)r
  )r   __file__	with_namer   r   
read_bytesr   )r
  pathr   r   r   r   test_issue_334  s    r  ztest_input, expected"\uD83D\uDCA9"   💩"a\uD83D\uDCA9b"   a💩b"\uD800"   
"a\uD800b"   ab"\uDEAD"   
"a\uDEADb"   ab"\uD83D\uD83D\uDCA9"   💩"\uDCA9\uD83D\uDCA9"   💩"\uD83D\uDCA9\uD83D"   💩"\uD83D\uDCA9\uDCA9"   💩"\uD83D \uDCA9"       ""   ""	   "a"   a   ""   c             C   sB   t j| |kstt j| jdd|ks,ttj| |ks>td S )Nzutf-8surrogatepass)r   r   AssertionErrorr   r   )Z
test_inputexpectedr   r   r    test_decode_surrogate_characters  s    r:  )r  r  )r  r  )r  r   )r!  r"  )r#  r$  )r%  r&  )r'  r(  )r)  r*  )r+  r,  )r-  r.  )r/  r0  )r1  r   )r2  r$  )r3  r4  )r5  r6  )r   r   r(   r   r  Zpytestior   pathlibr   Zsrslyr   r   r4   ZTestCaser   rW   mainmarkZparametrizer  r~   r  r  r  r  r:  r   r   r   r   <module>   sR           "$