a
    óñ"h   ã                   @   s^   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 G dd„ dej
ƒZdS )é    N)Úsupport)Úassert_python_okc                   @   sÌ   e Zd ZdZe d¡Ze d¡Ze d¡Ze d¡Z	dd„ Z
d)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#d$„ Ze ejd%kd&¡d'd(„ ƒZdS )*ÚTestToolzÊ

        [["blorpie"],[ "whoops" ] , [
                                 ],	"d-shtaeou","d-nthiouh",
        "i-vhbjkhnth", {"nifty":87}, {"morefield" :	false,"field"
            :"yes"}  ]
           a.      [
        [
            "blorpie"
        ],
        [
            "whoops"
        ],
        [],
        "d-shtaeou",
        "d-nthiouh",
        "i-vhbjkhnth",
        {
            "nifty": 87
        },
        {
            "field": "yes",
            "morefield": false
        }
    ]
    a.      [
        [
            "blorpie"
        ],
        [
            "whoops"
        ],
        [],
        "d-shtaeou",
        "d-nthiouh",
        "i-vhbjkhnth",
        {
            "nifty": 87
        },
        {
            "morefield": false,
            "field": "yes"
        }
    ]
    zr    {"ingredients":["frog", "water", "chocolate", "glucose"]}
    {"ingredients":["chocolate","steel bolts"]}
    zí    {
        "ingredients": [
            "frog",
            "water",
            "chocolate",
            "glucose"
        ]
    }
    {
        "ingredients": [
            "chocolate",
            "steel bolts"
        ]
    }
    c                 C   sD   t jddf}tj|| jdddd}|  |j| j¡ |  |jd¡ d S )Nú-mú	json.toolT©ÚinputÚcapture_outputÚtextÚcheckÚ )	ÚsysÚ
executableÚ
subprocessÚrunÚdataÚassertEqualÚstdoutÚexpectÚstderr©ÚselfÚargsÚprocess© r   ú@/opt/python-3.9.21/usr/lib/python3.9/test/test_json/test_tool.pyÚtest_stdin_stdoutW   s    zTestTool.test_stdin_stdoutNc                 C   sV   t j}t|ddd.}|  tj|¡ | |p0| j¡ W d   ƒ n1 sH0    Y  |S )NÚwúutf-8©Úencoding)r   ÚTESTFNÚopenÚ
addCleanupÚosÚremoveÚwriter   )r   r   ÚinfileÚfpr   r   r   Ú_create_infile]   s
    .zTestTool._create_infilec                 C   sP   |   ¡ }tdd|ƒ\}}}|  |d¡ |  | ¡ | j ¡  ¡ ¡ |  |d¡ d S )Nr   r   r   ó    )r)   r   r   Ú
splitlinesr   Úencode©r   r'   ÚrcÚoutÚerrr   r   r   Útest_infile_stdoutd   s
    zTestTool.test_infile_stdoutc                 C   s^   d}t  d¡ ¡ }|  |¡}tdd|ƒ\}}}|  |d¡ |  | ¡ | ¡ ¡ |  |d¡ d S )Nu   {"msg": "ã“ã‚“ã«ã¡ã¯"}zP        {
            "msg": "\u3053\u3093\u306b\u3061\u306f"
        }
        r   r   r   r*   )ÚtextwrapÚdedentr,   r)   r   r   r+   )r   r   r   r'   r.   r/   r0   r   r   r   Útest_non_ascii_infilek   s    
zTestTool.test_non_ascii_infilec                 C   s˜   |   ¡ }tjd }tdd||ƒ\}}}|  tj|¡ t|dƒ"}|  | 	¡ | j
¡ W d   ƒ n1 sf0    Y  |  |d¡ |  |d¡ |  |d¡ d S )Nú.outr   r   Úrr   r*   )r)   r   r!   r   r#   r$   r%   r"   r   Úreadr   )r   r'   Úoutfiler.   r/   r0   r(   r   r   r   Útest_infile_outfilez   s    
0zTestTool.test_infile_outfilec                 C   s„   |   ¡ }tdd||ƒ\}}}t|ddd"}|  | ¡ | j¡ W d   ƒ n1 sR0    Y  |  |d¡ |  |d¡ |  |d¡ d S )Nr   r   r6   r   r   r   r*   )r)   r   r"   r   r7   r   )r   r'   r.   r/   r0   r(   r   r   r   Útest_writing_in_place…   s    0zTestTool.test_writing_in_placec                 C   sF   t jdddf}tj|| jdddd}|  |j| j¡ |  |jd¡ d S )Nr   r   z--json-linesTr   r   )	r   r   r   r   Újsonlines_rawr   r   Újsonlines_expectr   r   r   r   r   Útest_jsonlinesŽ   s    zTestTool.test_jsonlinesc                 C   s>   t dddƒ\}}}|  |d¡ |  | d¡¡ |  |d¡ d S )Nr   r   z-hr   s   usage: r*   )r   r   Z
assertTrueÚ
startswith)r   r.   r/   r0   r   r   r   Útest_help_flag”   s    zTestTool.test_help_flagc                 C   sR   |   ¡ }tddd|ƒ\}}}|  |d¡ |  | ¡ | j ¡  ¡ ¡ |  |d¡ d S )Nr   r   z--sort-keysr   r*   )r)   r   r   r+   Úexpect_without_sort_keysr,   r-   r   r   r   Útest_sort_keys_flagš   s    
ÿzTestTool.test_sort_keys_flagc                 C   sR   d}t  d¡}tjddddf}tj||dddd}|  |j|¡ |  |jd	¡ d S )
Nú[1, 2]z5        [
          1,
          2
        ]
        r   r   z--indentÚ2Tr   r   )	r2   r3   r   r   r   r   r   r   r   ©r   Zinput_r   r   r   r   r   r   Útest_indent¢   s    
zTestTool.test_indentc                 C   sJ   d}d}t jdddf}tj||dddd}|  |j|¡ |  |jd¡ d S )	Nz[1,
2]z[1, 2]
r   r   z--no-indentTr   r   ©r   r   r   r   r   r   r   rD   r   r   r   Útest_no_indent¯   s    zTestTool.test_no_indentc                 C   sJ   d}d}t jdddf}tj||dddd}|  |j|¡ |  |jd¡ d S )	NrB   z[
	1,
	2
]
r   r   z--tabTr   r   rF   rD   r   r   r   Útest_tab·   s    zTestTool.test_tabc                 C   sJ   d}d}t jdddf}tj||dddd}|  |j|¡ |  |jd¡ d S )	Nz	[ 1 ,
 2]z[1,2]
r   r   z	--compactTr   r   rF   rD   r   r   r   Útest_compact¿   s    zTestTool.test_compactc                 C   s€   |   d¡}tjd }|  tj|¡ tddd||ƒ t|dƒ}| ¡  	¡ }W d   ƒ n1 s^0    Y  g d¢}|  
||¡ d S )Nõ   {"key":"ðŸ’©"}r5   r   r   z--no-ensure-asciiÚrb)ó   {s       "key": "ðŸ’©"ó   }©r)   r   r!   r#   r$   r%   r   r"   r7   r+   r   ©r   r'   r8   ÚfÚlinesZexpectedr   r   r   Útest_no_ensure_ascii_flagÇ   s    

*z"TestTool.test_no_ensure_ascii_flagc                 C   s~   |   d¡}tjd }|  tj|¡ tdd||ƒ t|dƒ}| ¡  	¡ }W d   ƒ n1 s\0    Y  g d¢}|  
||¡ d S )NrJ   r5   r   r   rK   )rL   s       "key": "\ud83d\udca9"rM   rN   rO   r   r   r   Útest_ensure_ascii_defaultÒ   s    

*z"TestTool.test_ensure_ascii_defaultÚwin32z-The test is failed with ValueError on Windowsc                 C   sH   t jddg}tj|tjtjd}|j ¡  | d¡ |  |j	t
j¡ d S )Nr   r   )r   Ústdins   "{}")r   r   r   ÚPopenÚPIPEr   ÚcloseÚcommunicater   Ú
returncodeÚerrnoÚEPIPE)r   ÚcmdÚprocr   r   r   Útest_broken_pipe_errorÝ   s    þ

zTestTool.test_broken_pipe_error)N)Ú__name__Ú
__module__Ú__qualname__r   r2   r3   r@   r   r;   r<   r   r)   r1   r4   r9   r:   r=   r?   rA   rE   rG   rH   rI   rR   rS   ÚunittestZskipIfr   Úplatformr_   r   r   r   r   r      s,   




	r   )r[   r$   r   r2   rc   r   Útestr   Ztest.support.script_helperr   ZTestCaser   r   r   r   r   Ú<module>   s   