B
    18\{                 @   sf   d dl Z d dlmZ d dlmZ d dlmZmZ G dd dZG dd deeZ	G d	d
 d
eeZ
dS )    N)StringIO)OrderedDict)PyTestCTestc               @   sl   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S )
TestDecodec             C   s8   | j dtjd}| t|tj | |td d S )Nz1.1)parse_float)loadsdecimalZDecimal
assertTrue
isinstanceassertEqual)selfrval r   ^/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_json/test_decode.pytest_decimal   s    zTestDecode.test_decimalc             C   s.   | j dtd}| t|t | |d d S )N1)	parse_intg      ?)r   floatr
   r   r   )r   r   r   r   r   
test_float   s    zTestDecode.test_floatc             C   s:   |  | di  |  | dg  |  | dd d S )Nz{}z[]z"" )r   r   )r   r   r   r   test_empty_objects   s    zTestDecode.test_empty_objectsc             C   s   d}dddddddg}|  | |t| |  | j|d	d
 d| |  | jjt|dd
 d| | j|td}|  |t| |  t|t |  | j|tdd
 dt| |  | jdtdt  |  | jdtdtdt fg 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>       z3TestDecode.test_object_pairs_hook.<locals>.<lambda>)object_pairs_hookc             S   s   | S )Nr   )r    r   r   r   r!      r"   c             S   s   d S )Nr   )r    r   r   r   r!   $   r"   )r#   object_hookz{}z{"empty": {}}empty)r   r   evaljsonloadr   r   type)r   spZodr   r   r   test_object_pairs_hook   s$    



z!TestDecode.test_object_pairs_hookc             C   s    |  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   sF   ||}t |d t |d  \}}\}}| || | || d S )Nr   r   )sortedassertIs)r   sourcer   r   abcdr   r   r   check_keys_reuse4   s    "zTestDecode.check_keys_reusec             C   s<   d}|  || j | jj }|  ||j | |j d S )Nu2   [{"a_key": 1, "b_é": 2}, {"a_key": 3, "b_é": 4}])r9   r   r'   decoderJSONDecoderdecodeassertFalsememo)r   r*   r:   r   r   r   test_keys_reuse:   s
    zTestDecode.test_keys_reusec             C   s    d}d}|  | j|| j| d S )Nz
[1, 2, 3]5z
Extra data)assertRaisesRegexJSONDecodeErrorr   )r   r*   msgr   r   r   test_extra_dataA   s    zTestDecode.test_extra_datac             C   s    d}d}|  | j|| j| d S )Nz	["abc\y"]escape)r@   rA   r   )r   r*   rB   r   r   r   test_invalid_escapeF   s    zTestDecode.test_invalid_escapec             C   s2   d}x(ddg i d gD ]}|  t|| j| qW d S )Nzthe JSON object must be strr   gQ	@)r@   	TypeErrorr   )r   rB   r-   r   r   r   test_invalid_input_typeK   s    z"TestDecode.test_invalid_input_typec          	   C   s   d dd}| | j}| | W d Q R X | dt|j | | j}| j	t
| W d Q R X | dt|j dd dd}| | |d | | j	t
|d d S )Nz[1,2,3]z	utf-8-sigzutf-8BOMz"{}"r   u   ﻿)encoder<   assertRaisesrA   r   assertInstr	exceptionr'   r(   r   formatr   )r   Zbom_jsoncmZ
bom_in_strr   r   r   test_string_with_utf8_bomP   s    z$TestDecode.test_string_with_utf8_bomc             C   s    | j  }| t|jdd d S )NZ*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai<)r'   r;   rJ   
ValueError
raw_decode)r   r8   r   r   r   test_negative_index^   s    
zTestDecode.test_negative_indexN)__name__
__module____qualname__r   r   r   r,   r1   r9   r?   rC   rE   rG   rP   rS   r   r   r   r   r      s   r   c               @   s   e Zd ZdS )TestPyDecodeN)rT   rU   rV   r   r   r   r   rW   b   s    rW   c               @   s   e Zd ZdS )TestCDecodeN)rT   rU   rV   r   r   r   r   rX   c   s    rX   )r	   ior   collectionsr   Ztest.test_jsonr   r   r   rW   rX   r   r   r   r   <module>   s   [