
    z%i                         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      Z
 G d d	e
e      Z G d
 de
e      Zy)    N)StringIO)OrderedDict)PyTestCTest)supportc                   Z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)
TestDecodec                     | j                  dt        j                        }| j                  t	        |t        j                               | j                  |t        j                  d             y )Nz1.1)parse_float)loadsdecimalDecimal
assertTrue
isinstanceassertEqualselfrvals     N/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_json/test_decode.pytest_decimalzTestDecode.test_decimal	   sH    zz%W__z=
49:wu56    c                     | j                  dt              }| j                  t        |t                     | j	                  |d       y )N1)	parse_intg      ?)r   floatr   r   r   r   s     r   
test_floatzTestDecode.test_float   s7    zz#z/
4/0s#r   c                     | j                  | j                  d      i        | j                  | j                  d      g        | j                  | j                  d      d       y )N{}z[]z"" )r   r   )r   s    r   test_empty_objectszTestDecode.test_empty_objects   sM    D)2.D)2.D)2.r   c                    d}g d}| j                  | j                  |      t        |             | j                  | j                  |d       |       | j                  | j                  j	                  t        |      d       |       | j                  |t              }| j                  |t        |             | j                  t        |      t               | j                  | j                  |t        d       t        |             | j                  | j                  dt              t                      | j                  | j                  d	t              t        d
t               fg             y )Nz?{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7}))xkd   )kcw   )art   )hxm   )qrt   )pad   )hoy   c                     | S N xs    r   <lambda>z3TestDecode.test_object_pairs_hook.<locals>.<lambda>   s    1 r   )object_pairs_hookc                     | S r1   r2   r3   s    r   r5   z3TestDecode.test_object_pairs_hook.<locals>.<lambda>   s    A r   c                      y r1   r2   r3   s    r   r5   z3TestDecode.test_object_pairs_hook.<locals>.<lambda>%   s    r   )r6   object_hookr   z{"empty": {}}empty)r   r   evaljsonloadr   r   type)r   spods       r   test_object_pairs_hookz!TestDecode.test_object_pairs_hook   s9   M1AQ0AEqI:E ( GHI	KZZ[Z9[^,b;/A0> $ @$Q	) 	DKH$	(O6A $ C$w&>%?@	Br   c                 P    | j                  d      }| j                  |ddd       y )Nz,{   "key"    :    "value"    ,  "k":"v"    }valuev)keyk)r   r   r   s     r   test_decoder_optimizationsz%TestDecode.test_decoder_optimizations.   s(     zzHIg378r   c                      ||      }t        |d         t        |d         c\  }}\  }}| j                  ||       | j                  ||       y )Nr   r#   )sortedassertIs)r   sourcer   r   abcds           r   check_keys_reusezTestDecode.check_keys_reuse5   sJ    V}Q&a/AAaar   c                     d}| j                  || j                         | j                  j                  j	                         }| j                  ||j
                         | j                  |j                         y )Nu2   [{"a_key": 1, "b_é": 2}, {"a_key": 3, "b_é": 4}])rQ   r   r<   decoderJSONDecoderdecodeassertFalsememo)r   r?   rS   s      r   test_keys_reusezTestDecode.test_keys_reuse;   sY    Da,))##//1a0&r   c                 \    d}d}| j                  | j                  || j                  |       y )Nz
[1, 2, 3]5z
Extra dataassertRaisesRegexJSONDecodeErrorr   r   r?   msgs      r   test_extra_datazTestDecode.test_extra_dataB   s*    t33S$**aHr   c                 \    d}d}| j                  | j                  || j                  |       y )Nz	["abc\y"]escaperZ   r]   s      r   test_invalid_escapezTestDecode.test_invalid_escapeG   s*    t33S$**aHr   c                 d    d}ddg i d fD ]$  }| j                  t        || j                  |       & y )Nzthe JSON object must be strr#   gQ	@)r[   	TypeErrorr   )r   r^   rD   s      r   test_invalid_input_typez"TestDecode.test_invalid_input_typeL   s;    +r2t, 	FE""9c4::uE	Fr   c                    dj                  d      j                  d      }| j                  | j                        5 }| j	                  |       d d d        | j                  dt        j                               | j                  | j                        5 }| j                  j                  t        |             d d d        | j                  dt        |j                               dj                  dj                  d      j                  d            }| j                  | j	                  |      d       | j                  | j                  j                  t        |            d       y # 1 sw Y   !xY w# 1 sw Y   xY w)Nz[1,2,3]z	utf-8-sigzutf-8BOMz"{}"r   u   ﻿)encoderU   assertRaisesr\   r   assertInstr	exceptionr<   r=   r   formatr   )r   bom_jsoncm
bom_in_strs       r   test_string_with_utf8_bomz$TestDecode.test_string_with_utf8_bomQ   s   ##K077@t334 	!JJx 	!eS./t334 	/IINN8H-.	/eS./]]299[#9#@#@#IJ
J/:(<=xH	! 	!	/ 	/s   E-%E:-E7:Fc                 |    | j                   j                         }| j                  t        |j                  dd       y )N*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai<)r<   rT   ri   
ValueError
raw_decode)r   rP   s     r   test_negative_indexzTestDecode.test_negative_index_   s,    II!!#*allFFCr   c                    d}t        j                  |      5  | j                  d|z         | j                  t              5  | j                  d|dz   z         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Ni  r   r#   )r   adjust_int_max_str_digitsr   ri   rt   )r   	maxdigitss     r   test_limit_intzTestDecode.test_limit_intc   sw    	..y9 	2JJsY'"":. 2

3)a-012	2 	22 2	2 	2s#   *A7A+A7+A4	0A77B N)__name__
__module____qualname__r   r   r    rB   rH   rQ   rX   r_   rb   re   rq   rv   rz   r2   r   r   r	   r	      sI    7
$
/
B,9'I
I
F
ID2r   r	   c                       e Zd Zy)TestPyDecodeNr{   r|   r}   r2   r   r   r   r   k       r   r   c                       e Zd Zy)TestCDecodeNr   r2   r   r   r   r   l   r   r   r   )r   ior   collectionsr   test.test_jsonr   r   testr   r	   r   r   r2   r   r   <module>r      s7      # ( `2 `2F -:v , **e *r   