a
    "h                     @   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   B/opt/python-3.9.21/usr/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_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}])r9   r   r(   decoderJSONDecoderdecodeZ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_dataB   s    zTestDecode.test_extra_datac                 C   s    d}d}|  | j|| j| d S )Nz	["abc\y"]escaper?   rB   r   r   r   test_invalid_escapeG   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   rC   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<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<   assertRaisesrA   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;   rK   
ValueErrorZ
raw_decode)r   r8   r   r   r   test_negative_index_   s    
zTestDecode.test_negative_indexc              	   C   s|   d}t |Z | d|  | t" | d|d   W d    n1 sP0    Y  W d    n1 sn0    Y  d S )Ni  r   r   )r   Zadjust_int_max_str_digitsr   rK   rQ   )r   Z	maxdigitsr   r   r   test_limit_intc   s
    zTestDecode.test_limit_intN)__name__
__module____qualname__r   r   r   r-   r2   r9   r>   rD   rF   rH   rP   rR   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   k   r$   rW   c                   @   s   e Zd ZdS )TestCDecodeNrX   r   r   r   r   rY   l   r$   rY   )r	   ior   collectionsr   Ztest.test_jsonr   r   testr   r   rW   rY   r   r   r   r   <module>   s   c