U
    4Je=                     @   st   d dl mZ d dlZd dlmZ d dl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-52sb2ggr/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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>5       z3TestDecode.test_object_pairs_hook.<locals>.<lambda>object_pairs_hookc                 S   s   | S r8   r	   r9   r	   r	   r   r;   7   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_hook0   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_reuseA   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)encoderH   r   r   r-   r	   r	   r   test_keys_reuse_strG   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_unicodeK   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_stringsO   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_decodeU   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_decodec   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   iZ1234Z	128931233Z	472389423)r(   )	r   rR   rS   assertRaises
ValueError	scan_oncerT   rD   id)r
   jir:   yZdiffr	   r	   r   test_bounds_checkingo   s    
zTestDecode.test_bounds_checkingc                 C   sP   t tddd  }dd|d   }| t|t| | ttj|d  d S )NZget_int_max_str_digitsc                   S   s   dS )Ni  r	   r	   r	   r	   r   r;   |   r<   z-TestDecode.test_bounded_int.<locals>.<lambda>r"   0r0   )getattrsysr   r   r   intr`   ra   )r
   Zmax_str_digitsr.   r	   r	   r   test_bounded_intz   s    zTestDecode.test_bounded_intN)r   r   r   hasattrr   r   r!   r%   r*   r/   rC   rH   rL   rM   rO   rW   rZ   rg   rl   r	   r	   r	   r   r      s   
r   )
__future__r   r   Zunittestr   rj   Z
simplejsonr   Zsimplejson.compatr   r   r   r   r   r   r	   r	   r	   r   <module>   s   