o
    KXh                     @   sr   d dl Z d dlmZ d dlmZ d dlmZmZ d dl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CTest)supportc                   @   st   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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   D/opt/python-3.10.19/usr/lib/python3.10/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 Nr   xr   r   r   <lambda>       z3TestDecode.test_object_pairs_hook.<locals>.<lambda>)object_pairs_hookc                 S   r    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_reuse5   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}])r:   r   r)   decoderJSONDecoderdecodeZassertFalsememo)r   r,   r;   r   r   r   test_keys_reuse;   s
   zTestDecode.test_keys_reusec                 C       d}d}|  | j|| j| d S )Nz
[1, 2, 3]5z
Extra dataassertRaisesRegexJSONDecodeErrorr   r   r,   msgr   r   r   test_extra_dataB      zTestDecode.test_extra_datac                 C   r@   )Nz	["abc\y"]escaperA   rD   r   r   r   test_invalid_escapeG   rG   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	@)rB   	TypeErrorr   )r   rE   r/   r   r   r   test_invalid_input_typeL   s   z"TestDecode.test_invalid_input_typec                 C   s   d dd}| | j}| | W d    n1 sw   Y  | dt|j | | j}| j	t
| W d    n1 sEw   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=   assertRaisesrC   r   ZassertInstr	exceptionr)   r*   r   formatr   )r   Zbom_jsoncmZ
bom_in_strr   r   r   test_string_with_utf8_bomQ   s   z$TestDecode.test_string_with_utf8_bomc                 C   s    | j  }| t|jdd d S )NZ*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai<)r)   r<   rN   
ValueErrorZ
raw_decode)r   r9   r   r   r   test_negative_index_   s   
zTestDecode.test_negative_indexc              	   C   s   d}t |6 | d|  | t | d|d   W d    n1 s(w   Y  W d    d S W d    d S 1 s@w   Y  d S )Ni  r   r   )r   Zadjust_int_max_str_digitsr   rN   rT   )r   Z	maxdigitsr   r   r   test_limit_intc   s   "zTestDecode.test_limit_intN)__name__
__module____qualname__r   r   r   r.   r3   r:   r?   rF   rI   rK   rS   rU   rV   r   r   r   r   r      s    r   c                   @      e Zd ZdS )TestPyDecodeNrW   rX   rY   r   r   r   r   r[   k       r[   c                   @   rZ   )TestCDecodeNr\   r   r   r   r   r^   l   r]   r^   )r	   ior   collectionsr   Ztest.test_jsonr   r   testr   r   r[   r^   r   r   r   r   <module>   s    c