a 4êdgZ‰ã@s¶ddlZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z m Z eedƒZdd„ZGdd„dejƒZe e ƒd ¡Gd d „d ejƒƒZd d „Zedkr²eƒdS)éN)Úsupport)Ú spawn_pythonÚ kill_pythonÚassert_python_okÚassert_python_failureÚ interpreter_requires_environmentZgettotalrefcountcCst|ƒ}| ¡}||fS©N)rÚwait)ÚpÚdataÚ returncode©r ú./usr/local/lib/python3.9/test/test_cmd_line.pyÚ_kill_python_and_exit_codesrc@s:eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z e   e ƒd¡dd„ƒZ dd„Zdd„Zdd„Zdd„Ze  ejd¡dd„ƒZe   ejdkd¡dd „ƒZe   ejdkd¡d!d"„ƒZe  ejd#kpÒejd$¡d%d&„ƒZd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Z d1d2„Z!d3d4„Z"d5d6„Z#d7d8„Z$d9d:„Z%d;d<„Z&d=d>„Z'd?d@„Z(e   e)j*dAkdB¡e   ejdCkdD¡dEdF„ƒƒZ+dGdH„Z,dIdJ„Z-dKdL„Z.dMdN„Z/dOdP„Z0dQdR„Z1dSdT„Z2e   e ƒdU¡dVdW„ƒZ3dXdY„Z4dZd[„Z5d\d\d]œd^d_„Z6d`da„Z7dsdcdd„Z8dedf„Z9dgdh„Z:didj„Z;dkdl„ZdrS)tÚ CmdLineTestcCstdƒtdƒdS)NÚ.z< .)r©Úselfr r rÚtest_directoriesszCmdLineTest.test_directoriescCsBt|Ž\}}}| |dkp"| d¡¡| d|¡| d|¡dS)Nóó s Traceback)rÚ assertTrueÚendswithÚ assertNotIn)rZcmd_lineÚrcÚoutÚerrr r rÚverify_valid_flag!s zCmdLineTest.verify_valid_flagcCs| d¡| d¡dS)Nz-Oz-OO©rrr r rÚ test_optimize's zCmdLineTest.test_optimizecCs| d¡dS)Nú-Srrr r rÚtest_site_flag+szCmdLineTest.test_site_flagcCsBtdƒ\}}}| ¡}| d|d¡d |dd…¡ d¡dS)Nz-hsusagerréÚascii)rÚ splitlinesÚassertInÚjoinÚdecode)rrrrÚlinesr r rÚ test_usage.szCmdLineTest.test_usagecCsTdtjdd… d¡}dD]2}t|ƒ\}}}| | |¡¡| | |¡¡qdS)Nz Python %d.%dér#)z-Vz --versionz-VV)ÚsysÚ version_infoÚencoderZ assertFalseÚ startswithr)rÚversionZswitchrrrr r rÚ test_version6s zCmdLineTest.test_versioncCs8tdƒ\}}}| d|¡tdƒ\}}}| d|¡dS)Nz-vsstack overflowz-vv)rr©rrrrr r rÚ test_verbose=s zCmdLineTest.test_verbosez6Cannot run -E tests when PYTHON env vars are required.cCs:dd„}|ƒ}| |i¡|ddƒ}| |dddœ¡dS)NcWs4tjdf|}|d7}t |¡}t| ¡dƒ}|S)Nú-E)ú-cú import sys; print(sys._xoptions)r)r+Ú executableÚ subprocessÚ check_outputÚevalr$)ÚargsrÚoptsr r rÚ get_xoptionsIs  z/CmdLineTest.test_xoptions..get_xoptionsz-Xaz -Xb=c,d=eTzc,d=e)ÚaÚb)Ú assertEqual)rr<r;r r rÚ test_xoptionsFs    zCmdLineTest.test_xoptionscs‚‡fdd„}d}|d|ƒ\}}}ˆ | ¡d¡ˆ |d¡|ddd|ƒ\}}}ˆ | ¡d ¡trrˆ |d ¡n ˆ |d¡dS) Ncsdtjg}| |¡tj}tj|||d}| ¡\}}|j ¡|j  ¡|j }ˆ  |d¡|||fS)N©ÚstdoutÚstderrr) r+r6Úextendr7ÚPIPEÚPopenÚ communicaterBÚcloserCr r?)r:ÚcmdrEr rrrrr rÚ run_pythonYs     z1CmdLineTest.test_showrefcount..run_pythonr5r4s{}rú-XÚ showrefcounts{'showrefcount': True}s^\[\d+ refs, \d+ blocks\])r?ÚrstripÚPy_DEBUGÚ assertRegex)rrJÚcoderrrr rrÚtest_showrefcountXs  zCmdLineTest.test_showrefcountcCs0tdƒtddƒtdddƒtddddƒdS)Nú-mZ fnord43520xyzZrunpyÚtimeitú-nÚ1©rrrr r rÚtest_run_modulets  zCmdLineTest.test_run_modulecCs\tdddddƒ}|j d¡|j d¡t|ƒ}| | d¡d k¡| | d ¡d k¡dS) Nú-irRrSrTrUsTimer óexit() s1 loopéÿÿÿÿs__main__.Timer)rÚstdinÚwriterrÚfind)rr r r r rÚtest_run_module_bug1764407€s   z&CmdLineTest.test_run_module_bug1764407cCs tdƒtddƒtddƒdS)Nr4zraise ExceptionÚpassrVrr r rÚ test_run_code‹s zCmdLineTest.test_run_codezneed support.FS_NONASCIIcCs"dtjttjƒf}td|ƒdS)Nzassert(ord(%r) == %s)r4)rÚ FS_NONASCIIÚordr)rZcommandr r rÚtest_non_ascii”sÿzCmdLineTest.test_non_asciiÚwin32z Windows has a native unicode APIcCs¤d}tj ¡}d|d<d|d<d|d}tjtjd|gtjtj|d }|  ¡\}}|j d krdd }n"|j d krtd }nt d|j |fƒ‚|  |¡s t d||fƒ‚dS)NóÿÚCÚLC_ALLÚ0ZPYTHONCOERCECLOCALEsimport locale; print(ascii("s""), locale.getpreferredencoding())r4)rBrCÚenvr"s3Unable to decode the command from the command line:rs'\xff' z Unknown exit code: %s, output=%az%a doesn't start with %a) ÚosÚenvironÚcopyr7rFr+r6rEÚSTDOUTrGr ÚAssertionErrorr.)rZ undecodablerirPr rBrCÚpatternr r rÚtest_undecodable_codeŸs. ÿÿÿ ý    z!CmdLineTest.test_undecodable_codec s²d‰tjdˆg}‡fdd„}‡fdd„}‡fdd„}d  d ¡}d }||g}|||fD]X}|j|d 8|D]"} || ƒ} | | j ¡t| ƒ¡qjWdƒqT1s¢0YqTdS) Nz;import sys, os; s=os.fsencode(sys.argv[1]); print(ascii(s))r4cs tjdˆ|g}tj|tjddS)Nr4T©rBÚtext©r+r6r7ÚrunrE©ÚargrI©rPr rÚ run_defaultÎsz6CmdLineTest.test_invalid_utf8_arg..run_defaultcs4tjdˆ|g}ttjƒ}d|d<tj|tjd|dS)Nr4rfrgT)rBrrri)r+r6Údictrjrkr7rtrE)rvrIrirwr rÚ run_c_localeÒs   ÿz7CmdLineTest.test_invalid_utf8_arg..run_c_localecs$tjdddˆ|g}tj|tjddS)NrKÚutf8r4Trqrsrurwr rÚ run_utf8_modeÙsz8CmdLineTest.test_invalid_utf8_arg..run_utf8_modeõe:é, euro:€, non-bmp:ô¿¿úutf-8sÿÃÿÃ©í €ý¿¿»ºº)Úrun_cmd)r+r6r-ÚsubTestr?rBrMr#) rZbase_cmdrxrzr|Z valid_utf8Z invalid_utf8Z test_argsrrvÚprocr rwrÚtest_invalid_utf8_argÂs      ÿz!CmdLineTest.test_invalid_utf8_argÚdarwinz%test specific to Mac OS X and Androidc Cs„d d¡}d}| dd¡}t|ƒ d¡d}tj ¡}d|d<tjtj d ||ftj |d }|  ¡\}}|  ||¡|  |j d ¡dS) Nr}r~z%import sys; print(ascii(sys.argv[1]))Úsurrogateescaper#rrfrgr4)rBrir)r-r'r#rjrkrlr7rFr+r6rErGr?r ) rrrrPZdecodedÚexpectedrir rBrCr r rÚtest_osx_android_utf8ïs    ý  z!CmdLineTest.test_osx_android_utf8cCs@t d¡}tjd|g}tj|tjtjddd}| |jd¡dS)Nzè import sys out = sys.stdout print(out.isatty(), out.write_through, out.line_buffering) err = sys.stderr print(err.isatty(), err.write_through, err.line_buffering) r4T)rBrCrrÚcheckz#False False False False False True ) ÚtextwrapÚdedentr+r6r7rtrEr?rB)rrPr:rr r rÚ%test_non_interactive_output_bufferings   ÿÿz1CmdLineTest.test_non_interactive_output_bufferingcCs†dD]|}d|}tdd|ƒ\}}}|dkr.|n|}| |dd|¡d|}tdd|ƒ\}}}|dkrj|n|}| |dd |¡qdS) NrAz6import os, sys; sys.%s.buffer.write(b'x'); os._exit(0)ú-ur4rCóxzbinary %s not unbufferedz.import os, sys; sys.%s.write('x'); os._exit(0)ztext %s not unbuffered©rr?)rÚstreamrPrrrr r r rÚtest_unbuffered_outputsÿÿz"CmdLineTest.test_unbuffered_outputcCsTd}tdd|ƒ}|j d¡|j ¡t|ƒ\}}| |d¡| | d¡|¡dS)Nz/import sys; sys.stdout.write(sys.stdin.read(1))r‹r4rŒr)rr[r\Úflushrr?rr.)rrPr r rr r rÚtest_unbuffered_input$s     z!CmdLineTest.test_unbuffered_inputcCsXd}d}|tj|}d}tdd||d\}}}| | d¡|¡| | d¡|¡dS)NAôABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEAôFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJú¨if 1: import sys path = ":".join(sys.path) path = path.encode("ascii", "backslashreplace") sys.stdout.buffer.write(path)r r4©Z PYTHONPATHr#)rjÚpathseprr%r-)rZpath1Zpath2ÚpathrPrrrr r rÚtest_large_PYTHONPATH.sÿ z!CmdLineTest.test_large_PYTHONPATHcCs<d}td|dd\}}}td|dd\}}}| ||¡dS)Nr’r4Úr“F)Z __isolatedr)rrPZrc1Zout1Zerr1Zrc2Zout2Zerr2r r rÚ test_empty_PYTHONPATH_issue16309=sz,CmdLineTest.test_empty_PYTHONPATH_issue16309cCsŽdD]„}tj ¡}||d<tjtjdgtjtjtj|d}d}|j   t |ƒ  d¡d¡|j   d¡t |ƒ}t|ƒ  |d ¡}| ||¡qdS) N)r#zlatin-1r~ZPYTHONIOENCODINGrX)r[rBrCriua=é b=í²€ c=ð€€ d=ô¿¿r#rrYÚbackslashreplace)rjrkrlr7rFr+r6rErmr[r\r#r-rÚreprr%)rÚencodingrir rrr Úescapedr r rÚtest_displayhook_unencodableNs  û z(CmdLineTest.test_displayhook_unencodablec Cs²t d¡„}tj d¡}| | d¡¡| ¡| d¡t j t j d|f|t j d}| ¡\}}Wdƒn1sv0YWdƒn1s”0Y| | ¡|¡dS)Nzwb+ÚASCII)sabcsdefrr4)r[rB)ÚtempfileÚNamedTemporaryFilerjÚlinesepr-r\r&rÚseekr7rFr+r6rErGr?rM)rrPr…r[ÚseprrBrCr r rÚ check_input`s    þHzCmdLineTest.check_inputcCs| dd¡dS)Nz-import sys; print(repr(sys.stdin.readline()))s'abc\n'©r¤rr r rÚtest_stdin_readlinelsþzCmdLineTest.test_stdin_readlinecCs| dd¡dS)Nzprint(repr(input()))s'abc'r¥rr r rÚtest_builtin_inputssþzCmdLineTest.test_builtin_inputcCsTd}td|ƒ\}}}tjdkr8| d|¡| d|¡n| d|¡| d|¡dS)Nz’if 1: import sys print(1) print(2) print(3, file=sys.stderr) print(4, file=sys.stderr)r4rds1 2 s3 4 s1 2 s3 4 )rr+Úplatformr?©rrPrrrr r rÚtest_output_newlineys   zCmdLineTest.test_output_newlinecCs4tddƒ\}}}| | dd¡d¡| d|¡dS)Nr4ú'r#ÚignoreÚ SyntaxErrorr)rrOr'r?r1r r rÚtest_unmached_quoteŠszCmdLineTest.test_unmached_quotecCsDd}td|ƒ\}}}| d|¡| d|¡| | dd¡d¡dS)Nzµif 1: import os, sys, test.support test.support.SuppressCrashReport().__enter__() sys.stdout.write('x') os.close(sys.stdout.fileno())r4réxr#r¬z"Exception ignored in.* OSError: .*)rr?rOr'r©r r rÚtest_stdout_flush_at_shutdown‘s  ÿz)CmdLineTest.test_stdout_flush_at_shutdowncCs$d}td|ƒ\}}}| d|¡dS)Nzimport sys; sys.stdout.close()r4rrr©r r rÚtest_closed_stdoutŸszCmdLineTest.test_closed_stdoutÚposixztest needs POSIX semanticsZvxworksz.test needs preexec support in subprocess.Popencsfdjˆd}‡fdd„}tjtjdd|gtjtjtj|d}| ¡\}}| |d¡| |jd ¡dS) Nz»if 1: import os, sys for i, s in enumerate({streams}): if getattr(sys, s) is not None: os._exit(i + 1) os._exit(42)©Ústreamscs:dˆvrt d¡dˆvr$t d¡dˆvr6t d¡dS)Nr[rrBr"rCr*)rjrHr r³r rÚpreexec²s   z+CmdLineTest._test_no_stdio..preexecr3r4)r[rBrCÚ preexec_fnré*) Úformatr7rFr+r6rErGr?r )rr´rPrµr rrr r³rÚ_test_no_stdio¨sû  û  zCmdLineTest._test_no_stdiocCs| dg¡dS)Nr[©r¹rr r rÚ test_no_stdinÃszCmdLineTest.test_no_stdincCs| dg¡dS)NrBrºrr r rÚtest_no_stdoutÆszCmdLineTest.test_no_stdoutcCs| dg¡dS)NrCrºrr r rÚtest_no_stderrÉszCmdLineTest.test_no_stderrcCs| gd¢¡dS)N)r[rBrCrºrr r rÚtest_no_std_streamsÌszCmdLineTest.test_no_std_streamscCs.| d¡g}tj dd¡dkr:ttjƒ}|d=d|d<ni}tdƒD]6}d}td|fi|¤Ž\}}}| |d ¡| |¡qFt t |ƒƒ}|j t |ƒd d   |¡d d }td|dd\}}}| d|¡td|dd\}}}| d|¡td|dd\}}}| d|¡tdd|dd\}}}| d|¡dS)Nz-RÚPYTHONHASHSEEDÚrandomrUZ __cleanenvézprint(hash("spam"))r4rr"z83 runs produced an identical random hash for "spam": {})Úmsgzs.  ÿ"