U
    O5[                     @   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	   >/usr/lib/python3/dist-packages/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)Zparse_float)jsonloadsdecimalZ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)Z	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   )Z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 r4   r	   r5   r	   r	   r   r7   6   r8   c                 S   s   d S r4   r	   r5   r	   r	   r   r7   =   r8   )r:   Z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   r-   )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 )N2   [{"a_key": 1, "b_é": 2}, {"a_key": 3, "b_é": 4}]utf8)encoderC   r   r   r*   r	   r	   r   test_keys_reuse_strF   s    
zTestDecode.test_keys_reuse_strc                 C   s   d}|  |tj d S )NrD   )rC   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": {}}r9      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   rM   rN   r   r   r   r   )r
   rQ   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)	r0   r1   r2   iZ1234Z	128931233Z	472389423)r%   )	r   rM   rN   ZassertRaises
ValueErrorZ	scan_oncerO   r?   id)r
   jir6   yZdiffr	   r	   r   test_bounds_checkingn   s    
zTestDecode.test_bounds_checkingN)r   r   r   hasattrr   r   r   r"   r'   r,   r>   rC   rG   rH   rJ   rR   rU   r`   r	   r	   r	   r   r      s   
r   )Z
__future__r   r   Zunittestr   Z
simplejsonr   Zsimplejson.compatr   r   r   r   r   r   r	   r	   r	   r   <module>   s   