U
    Æ½„bt(  ã                   @   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
   ú>/tmp/pip-unpacked-wheel-9yxrzpkm/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)Ú
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¡ qªq¢d S )Nr   )g      ð?z1.0)é
   Ú10)TÚtrue)FÚfalse)NÚnulléd   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>)Úskipkeysr4   Ú )
r   r   r#   r!   r)   r*   ÚassertRaisesÚ	TypeErrorÚdictÚitems)r   rB   ÚkÚexpectÚvr4   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)TFr3   z{"false": true, "true": false}r7   g      @g      @é   r5   é   Ú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oner5   )Ztwor7   )Zthreeé   )Zfouré   )ZfiverH   z6{"one": 1, "two": 2, "three": 3, "four": 4, "five": 5})r!   r*   ÚOrderedDictr#   )r   rB   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 )NrR   zOTo do non-awesome things with this object, please construct it from an integer!)ÚhasattrrR   ÚNotImplementedError)r   r6   r
   r
   r   Ú__mul__x   s    

zHTestDump.test_indent_unknown_type_acceptance.<locals>.AwesomeInt.__mul__N)r   r   r   Ú__doc__rU   rX   r
   r
   r
   r   Ú
AwesomeIntj   s   rZ   r   r5   r7   rL   )Úindentz[
   0,
   1,
   2
]N)Úobjectr!   r*   r#   )r   rZ   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   Ú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 )Nr7   é    c                 s   s   | ]}t |ƒ|fV  qd S r8   )Ústr)r9   Úxr
   r
   r   r<   �   s     z*TestDump.test_sort_keys.<locals>.<genexpr>Tr3   )	ÚrangerA   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 Ã¢Â‚Â¬rf   )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 )	Nrk   z
["\u20ac"]rl   rm   rn   z
["\u00a4"]r   ro   rq   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 )Nrk   rf   z{"\u20ac": 42}rl   rm   rn   z{"\u00a4": 42}r   ro   T)r   r=   r    rq   r   r
   r
   r   Útest_bytes_keyà   sL    ÿÿÿÿ ÿÿþÿÿ ÿ ÿzTestDump.test_bytes_keyN)r   r   r   r&   r,   rF   rG   rK   rO   r]   r_   re   rh   rj   rs   rt   ru   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    