o
    g{                     @   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   P/Users/admin/.pyenv/versions/3.10.0/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_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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_dataA      zTestDecode.test_extra_datac                 C   r?   )Nz	["abc\y"]escaper@   rC   r   r   r   test_invalid_escapeF   rF   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	@)rA   	TypeErrorr   )r   rD   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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<   assertRaisesrB   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;   rM   
ValueErrorZ
raw_decode)r   r8   r   r   r   test_negative_index^   s   
zTestDecode.test_negative_indexN)__name__
__module____qualname__r   r   r   r-   r2   r9   r>   rE   rH   rJ   rR   rT   r   r   r   r   r      s    r   c                   @      e Zd ZdS )TestPyDecodeNrU   rV   rW   r   r   r   r   rY   b       rY   c                   @   rX   )TestCDecodeNrZ   r   r   r   r   r\   c   r[   r\   )r   ior   collectionsr   Ztest.test_jsonr   r   r   rY   r\   r   r   r   r   <module>   s    [