a
    	3j{                     @   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)Zparse_float)loadsdecimalZDecimal
assertTrue
isinstanceassertEqualselfrval r   V/www/server/python_manager/versions/3.9.10/lib/python3.9/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)Z	parse_intg      ?)r   floatr	   r
   r   r   r   r   r   
test_float   s    zTestDecode.test_floatc                 C   s:   |  | di  |  | dg  |  | dd d S )N{}z[]z"" )r   r   )r   r   r   r   test_empty_objects   s    zTestDecode.test_empty_objectsc                 C   s   d}g d}|  | |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   )Z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 r   r   r    r   r   r   r"      r#   c                 S   s   d S r   r   r    r   r   r   r"   $   r#   )r$   Zobject_hookr   z{"empty": {}}empty)r   r   evaljsonloadr   r   type)r   spZodr   r   r   test_object_pairs_hook   s2    
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   test_decoder_optimizations-   s    
z%TestDecode.test_decoder_optimizationsc                 C   sF   ||}t |d t |d  \}}\}}| || | || d S )Nr   r   )sortedZ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}])r8   r   r'   decoderJSONDecoderdecodeZassertFalsememo)r   r*   r9   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"]escaper>   rA   r   r   r   test_invalid_escapeF   s    zTestDecode.test_invalid_escapec                 C   s.   d}ddg i d fD ]}|  t|| j| q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    n1 s<0    Y  | dt|j | | j }| j	t
| W d    n1 s0    Y  | 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;   assertRaisesr@   r   Z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   
ValueErrorZ
raw_decode)r   r7   r   r   r   test_negative_index^   s    
zTestDecode.test_negative_indexN)__name__
__module____qualname__r   r   r   r,   r1   r8   r=   rC   rE   rG   rO   rQ   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )TestPyDecodeNrR   rS   rT   r   r   r   r   rU   b   r#   rU   c                   @   s   e Zd ZdS )TestCDecodeNrV   r   r   r   r   rW   c   r#   rW   )r   ior   collectionsr   Ztest.test_jsonr   r   r   rU   rW   r   r   r   r   <module>   s   [