U
    Æ½„bã  ã                   @   sl   d dl mZ d dlZd dlmZ d dlZd dlmZm	Z	m
Z
 d dlmZ G dd„ de
ƒZG dd	„ d	eƒZdS )
é    )Úabsolute_importN)ÚTestCase)ÚStringIOÚbÚbinary_type)ÚOrderedDictc                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	ÚMisbehavingBytesSubtypeNc                 C   s   dS )Nz
bad decode© )ÚselfÚencodingr	   r	   ú@/tmp/pip-unpacked-wheel-9yxrzpkm/simplejson/tests/test_decode.pyÚdecode
   s    zMisbehavingBytesSubtype.decodec                 C   s   dS )Nzbad __str__r	   ©r
   r	   r	   r   Ú__str__   s    zMisbehavingBytesSubtype.__str__c                 C   s   t dƒS )Nzbad __bytes__)r   r   r	   r	   r   Ú	__bytes__   s    z!MisbehavingBytesSubtype.__bytes__)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r	   r	   r	   r   r   	   s   
r   c                   @   s~   e Zd Zeedƒs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 )Ú
TestDecodeÚassertIsc                 C   s   |   ||kd||f ¡ d S )Nz%r is %r)Ú
assertTrue)r
   Úar   r	   r	   r   r      s    zTestDecode.assertIsc                 C   s8   t jdtjd�}|  t|tjƒ¡ |  |t d¡¡ d S )Nz1.1)Úparse_float)ÚjsonÚloadsÚdecimalÚDecimalr   Ú
isinstanceÚassertEqual©r
   Úrvalr	   r	   r   Útest_decimal   s    zTestDecode.test_decimalc                 C   s.   t jdtd�}|  t|tƒ¡ |  |d¡ d S )NÚ1)Ú	parse_intg      ð?)r   r   Úfloatr   r   r   r   r	   r	   r   Ú
test_float   s    zTestDecode.test_floatc                 C   s    t  d¡}|  |dddœ¡ d S )Nz,{   "key"    :    "value"    ,  "k":"v"    }ÚvalueÚv)ÚkeyÚk)r   r   r   r   r	   r	   r   Útest_decoder_optimizations    s    
z%TestDecode.test_decoder_optimizationsc                 C   sR   d}|   t |¡t|ƒ¡ d}|   t |¡t|ƒ¡ d}|   t |¡t|ƒ¡ d S )Nz{}z[]ú"")r   r   r   Úeval©r
   Úsr	   r	   r   Útest_empty_objects'   s    zTestDecode.test_empty_objectsc                 C   s¶   d}dddddddg}|   t |¡t|ƒ¡ |   tj|d	d
„ d�|¡ |   tjt|ƒdd
„ d�|¡ tj|td�}|   |t|ƒ¡ |   t|ƒt¡ |   tj|tdd
„ d�t|ƒ¡ d S )Nz?{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7})Zxkdé   )Zkcwé   )Zarté   )Zhxmé   )Zqrté   )Úpadé   )Zhoyé   c                 S   s   | S ©Nr	   ©Úxr	   r	   r   Ú<lambda>4   ó    z3TestDecode.test_object_pairs_hook.<locals>.<lambda>©Úobject_pairs_hookc                 S   s   | S r8   r	   r9   r	   r	   r   r;   6   r<   c                 S   s   d S r8   r	   r9   r	   r	   r   r;   =   r<   )r>   Úobject_hook)r   r   r   r,   Úloadr   r   Útype)r
   r.   ÚpZodr	   r	   r   Útest_object_pairs_hook/   s,      ÿÿÿ
þýz!TestDecode.test_object_pairs_hookc                 C   sF   ||ƒ}t |d ƒt |d ƒ \}}\}}|  ||¡ |  ||¡ d S )Nr   r0   )Úsortedr   )r
   Úsourcer   r    r   r   ÚcÚdr	   r	   r   Úcheck_keys_reuse@   s    "zTestDecode.check_keys_reusec                 C   s   d  d¡}|  |tj¡ d S )Nõ2   [{"a_key": 1, "b_Ã©": 2}, {"a_key": 3, "b_Ã©": 4}]Úutf8)ÚencoderH   r   r   r-   r	   r	   r   Útest_keys_reuse_strF   s    
zTestDecode.test_keys_reuse_strc                 C   s   d}|   |tj¡ d S )NrI   )rH   r   r   r-   r	   r	   r   Útest_keys_reuse_unicodeJ   s    z"TestDecode.test_keys_reuse_unicodec                 C   sP   |   t d¡d¡ |   t d¡d¡ |   t d¡dg¡ |   t d¡dg¡ d S )Nr+   Ú z[""])r   r   r   r   r	   r	   r   Útest_empty_stringsN   s    zTestDecode.test_empty_stringsc                 C   sd   t jj}|  di idf|ƒ  d¡¡ |  di idf|td� d¡¡ |  di idf|ƒ  d¡¡ d S )Nr   é	   z	{"a": {}}r=   é   z 
{"a": {}})r   ÚdecoderÚJSONDecoderr   Ú
raw_decodeÚdict)r
   Úclsr	   r	   r   Útest_raw_decodeT   s    

þ
þ

þzTestDecode.test_raw_decodec                 C   s¨   t jj}tdƒ}|  |ƒ  |¡d¡ |  |dd� |¡d¡ |  |d d� |¡d¡ ttdƒƒ}|  |ƒ  |¡d¡ |  |dd� |¡d¡ |  |d d� |¡d¡ d S )Nu   "Ã¢Â‚Â¬"u   â‚¬Úlatin1)r   u   Ã¢Â‚Â¬)r   rR   rS   r   r   r   r   )r
   rV   Údatar	   r	   r   Útest_bytes_decodeb   s    zTestDecode.test_bytes_decodec                 C   s„   t j ¡ }dD ](}|  t|jd|¡ |  t|jd|¡ qtddgtd�\}}t|ƒt|ƒ }|  t|j||¡ |  t|j||¡ d S )N)	r3   r4   r6   éÿÿÿÿéþÿÿÿéýÿÿÿéüÿÿÿéûÿÿÿiúÿÿÿZ1234Z	128931233Z	472389423)r(   )	r   rR   rS   ÚassertRaisesÚ
ValueErrorÚ	scan_oncerT   rD   Úid)r
   ÚjÚir:   ÚyZdiffr	   r	   r   Útest_bounds_checkingn   s    
zTestDecode.test_bounds_checkingN)r   r   r   Úhasattrr   r   r!   r%   r*   r/   rC   rH   rL   rM   rO   rW   rZ   rg   r	   r	   r	   r   r      s   
r   )Ú
__future__r   r   Zunittestr   Z
simplejsonr   Zsimplejson.compatr   r   r   r   r   r   r	   r	   r	   r   Ú<module>   s   