U
    O5[t(                     @   sx   d dl mZ d dlmZmZmZmZmZmZ d dl	Z
G dd deZG dd deZdd	 Zd
d ZG dd deZdS )    )TestCase)StringIO	long_typebbinary_type	text_typePY3Nc                   @   s   e Zd Zdd ZdS )MisbehavingTextSubtypec                 C   s   dS )NzFAIL! selfr
   r
   </usr/lib/python3/dist-packages/simplejson/tests/test_dump.py__str__   s    zMisbehavingTextSubtype.__str__N)__name__
__module____qualname__r   r
   r
   r
   r   r	      s   r	   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	MisbehavingBytesSubtypeNc                 C   s   dS )Nz
bad decoder
   )r   encodingr
   r
   r   decode
   s    zMisbehavingBytesSubtype.decodec                 C   s   dS )Nzbad __str__r
   r   r
   r
   r   r      s    zMisbehavingBytesSubtype.__str__c                 C   s   t dS )Nzbad __bytes__r   r   r
   r
   r   	__bytes__   s    z!MisbehavingBytesSubtype.__bytes__)N)r   r   r   r   r   r   r
   r
   r
   r   r   	   s   
r   c                 C   s   t rt| tr| dS | S )Nascii)r   
isinstancebytesr   )sr
   r
   r   as_text_type   s    
r   c                 C   s
   |  dS )Niso-8859-15)r   r   r
   r
   r   decode_iso_8859_15   s    r   c                   @   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S )TestDumpc                 C   s&   t  }ti | | | d d S N{})r   jsondumpassertEqualgetvalue)r   sior
   r
   r   	test_dump   s    zTestDump.test_dumpc              	   C   sj   dD ]`}|  tt||k |  tt|gd |k |  ttd|id |k qd S )N)NTFr   a)Z
assertTruer!   loadsdumps)r   cr
   r
   r   test_constants   s     zTestDump.test_constantsc                 C   sB  t ddfdddddtddfg}|D ]L\}}| tt||i||i | ttj||id	d
||i q&| ttjtdi i ddit ddddifD ]}dD ]}t|}d|t< tdd |	 D }| ttj|d	|d| | ttjd|id	|dd|i | ttj|gd	|d|g qqd S )Nr   )g      ?z1.0)
   Z10)Ttrue)FZfalse)NZnulld   Z100T	sort_keys   otherZderpZherp   )FTc                 s   s   | ]\}}t ||fV  qd S N)r   ).0keyvalr
   r
   r   	<genexpr>9   s     z.TestDump.test_stringify_key.<locals>.<genexpr>)skipkeysr0    )
r   r   r#   r!   r(   r)   assertRaises	TypeErrordictitems)r   r>   kZexpectvr0   Zv0Zv1r
   r
   r   test_stringify_key%   sF    

zTestDump.test_stringify_keyc                 C   s   |  ti d d S r   )r#   r!   r)   r   r
   r
   r   
test_dumpsD   s    zTestDump.test_dumpsc                 C   sR   |  tjdddddd |  tjdddtd	dd
tddddiddd d S )NFT)TFr/   z{"false": true, "true": false}r3   g      @g      @   r1      7r   z3{"2": 3.0, "4.0": 5, "6": true, "7": 0, "false": 1})r#   r!   r)   r   r   r
   r
   r   test_encode_truefalseG   s,         zTestDump.test_encode_truefalsec                 C   s.   dddddg}t t |}| |d d S )N)Zoner1   )Ztwor3   )Zthree   )Zfour   )ZfiverC   z6{"one": 1, "two": 2, "three": 3, "four": 4, "five": 5})r!   r)   OrderedDictr#   )r   r>   r   r
   r
   r   test_ordered_dictU   s    zTestDump.test_ordered_dictc                 C   s8   G dd dt }tjdddg|dd}| |d d	S )
a  
        A test against the regression mentioned at `github issue 29`_.

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

        .. _github issue 29:
           http://github.com/simplejson/simplejson/issue/29
        c                   @   s    e Zd ZdZdd Zdd ZdS )z@TestDump.test_indent_unknown_type_acceptance.<locals>.AwesomeIntz'An awesome reimplementation of integersc                 _   s(   t |dkr$t|d tr$|d | _d S )Nr   )lenr   int_int)r   argskwargsr
   r
   r   __init__m   s    zITestDump.test_indent_unknown_type_acceptance.<locals>.AwesomeInt.__init__c                 S   s    t | dr| j| S tdd S )NrM   zOTo do non-awesome things with this object, please construct it from an integer!)hasattrrM   NotImplementedError)r   r2   r
   r
   r   __mul__x   s    

zHTestDump.test_indent_unknown_type_acceptance.<locals>.AwesomeInt.__mul__N)r   r   r   __doc__rP   rS   r
   r
   r
   r   
AwesomeIntj   s   rU   r   r1   r3   rG   )indentz[
   0,
   1,
   2
]N)objectr!   r)   r#   )r   rU   r   r
   r
   r   #test_indent_unknown_type_acceptance]   s    z,TestDump.test_indent_unknown_type_acceptancec                 C   s&   dgd }|  tt|| d S )Nr   i )r#   r!   r(   r)   )r   Zlstr
   r
   r   test_accumulator   s    
zTestDump.test_accumulatorc                 C   sp   t ddD ]`}tdd t |D }t }tj||dd | | tj|dd | t| | q
d S )Nr3       c                 s   s   | ]}t ||fV  qd S r4   )str)r5   xr
   r
   r   r8      s     z*TestDump.test_sort_keys.<locals>.<genexpr>Tr/   )	ranger=   r   r!   r"   r#   r$   r)   r(   )r   Znum_keyspr%   r
   r
   r   test_sort_keys   s    zTestDump.test_sort_keysc                 C   sh   d}|  tt|t| |  tt|gt|g |  tt|dit|di d S )Nzthis is some text*   )r#   r!   r)   r	   )r   textr
   r
   r   test_misbehaving_text_subtype   s    
z&TestDump.test_misbehaving_text_subtypec                 C   sl   t d}| tt|t| | tt|gt|g | tt|dit|di d S )Nu   this is some data â¬r`   )r   r#   r!   r)   r   )r   datar
   r
   r   test_misbehaving_bytes_subtype   s    
z'TestDump.test_misbehaving_bytes_subtypec                 C   s   |  ttdd | ttjtd |  tjtdddd |  tjtdddd tr| jttjtdd d | jttjtdd d |  tjtdd tdd nL|  tjtdd dd | jttjtdd d | jttjtdd td d S )	N   â¬z"\u20ac"   ¤
iso-8859-1r   z"\u00a4"r   r   default	r#   r!   r)   r   r;   UnicodeDecodeErrorr   r<   r   r   r
   r
   r   test_bytes_toplevel   s<     zTestDump.test_bytes_toplevelc                 C   s  |  ttdgd | ttjtdg |  tjtdgddd |  tjtdgddd tr| jttjtdgd d | jttjtdgd d |  tjtdgd tdd nR|  tjtdgd dd | jttjtdgd d | jttjtdgd td d S )	Nre   z
["\u20ac"]rf   rg   rh   z
["\u00a4"]r   ri   rk   r   r
   r
   r   test_bytes_nested   s<     zTestDump.test_bytes_nestedc                 C   sd  |  ttddid | ttjtddi |  tjtddiddd |  tjtddiddd tr| jttjtddid d | jttjtddid d | jttjtddid td	 |  tjtddid d
dd nv|  tjtddid dd | jttjtddid d | jttjtddid td	 | jttjtddid d
d d S )Nre   r`   z{"\u20ac": 42}rf   rg   rh   z{"\u00a4": 42}r   ri   T)r   r9   r    rk   r   r
   r
   r   test_bytes_key   sL       zTestDump.test_bytes_keyN)r   r   r   r&   r+   rA   rB   rF   rJ   rX   rY   r_   rb   rd   rm   rn   ro   r
   r
   r
   r   r      s   (	r   )Zunittestr   Zsimplejson.compatr   r   r   r   r   r   Z
simplejsonr!   r	   r   r   r   r   r
   r
   r
   r   <module>   s    