a ze'@sddlZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z m Z eedZddZGdddejZee d Gd d d ejZd d ZedkredS)N)support) spawn_python kill_pythonassert_python_okassert_python_failure interpreter_requires_environmentZgettotalrefcountcCst|}|}||fSN)rwait)pdata returncoder F/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_cmd_line.py_kill_python_and_exit_codesrc@s:eZdZddZddZddZddZd d Zd d Zd dZ e e dddZ ddZddZddZddZe ejdddZe ejdkddd Ze ejdkdd!d"Ze ejd#kpejd$d%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Z d1d2Z!d3d4Z"d5d6Z#d7d8Z$d9d:Z%d;d<Z&d=d>Z'd?d@Z(e e)j*dAkdBe ejdCkdDdEdFZ+dGdHZ,dIdJZ-dKdLZ.dMdNZ/dOdPZ0dQdRZ1dSdTZ2e e dUdVdWZ3dXdYZ4dZd[Z5d\d\d]d^d_Z6d`daZ7dsdcddZ8dedfZ9dgdhZ:didjZ;dkdlZdrS)t CmdLineTestcCstdtddS)N.z< .)rselfr r rtest_directoriesszCmdLineTest.test_directoriescCsBt|\}}}||dkp"|d|d||d|dS)N s Traceback)r assertTrueendswith assertNotIn)rZcmd_linercouterrr r rverify_valid_flag!s zCmdLineTest.verify_valid_flagcCs|d|ddS)Nz-Oz-OOrrr r r test_optimize's zCmdLineTest.test_optimizecCs|ddS)N-Srrr r rtest_site_flag+szCmdLineTest.test_site_flagcCsBtd\}}}|}|d|dd|ddddS)Nz-hsusagerrascii)r splitlinesassertInjoindecode)rrrrlinesr r r test_usage.szCmdLineTest.test_usagecCsTdtjddd}dD]2}t|\}}}||||||qdS)Nz Python %d.%dr#)z-Vz --versionz-VV)sys version_infoencoderZ assertFalse startswithr)rversionZswitchrrrr r r test_version6s zCmdLineTest.test_versioncCs8td\}}}|d|td\}}}|d|dS)Nz-vsstack overflowz-vv)rrrrrrr r r test_verbose=s zCmdLineTest.test_verbosez6Cannot run -E tests when PYTHON env vars are required.cCs:dd}|}||i|dd}||ddddS)NcWs4tjdf|}|d7}t|}t|d}|S)N-E)-c import sys; print(sys._xoptions)r)r+ executable subprocess check_outputevalr$)argsroptsr r r get_xoptionsIs  z/CmdLineTest.test_xoptions..get_xoptionsz-Xaz -Xb=c,d=eTzc,d=e)ab) assertEqual)rr<r;r r r test_xoptionsFs    zCmdLineTest.test_xoptionscsfdd}d}|d|\}}}|d|d|ddd|\}}}|d trr|d n |ddS) Ncsdtjg}||tj}tj|||d}|\}}|j|j |j } |d|||fS)Nstdoutstderrr) r+r6extendr7PIPEPopen communicaterBcloserCr r?)r:cmdrEr rrrrr r run_pythonYs     z1CmdLineTest.test_showrefcount..run_pythonr5r4s{}r-X showrefcounts{'showrefcount': True}s^\[\d+ refs, \d+ blocks\])r?rstripPy_DEBUG assertRegex)rrJcoderrrr rrtest_showrefcountXs  zCmdLineTest.test_showrefcountcCs0tdtddtdddtdddddS)N-mZ fnord43520xyzZrunpytimeit-n1rrrr r rtest_run_modulets  zCmdLineTest.test_run_modulecCs\tddddd}|jd|jdt|}||dd k||d d kdS) N-irRrSrTrUsTimer exit() s1 loops__main__.Timer)rstdinwriterrfind)rr r r r rtest_run_module_bug1764407s   z&CmdLineTest.test_run_module_bug1764407cCs tdtddtdddS)Nr4zraise ExceptionpassrVrr r r test_run_codes zCmdLineTest.test_run_codezneed support.FS_NONASCIIcCs"dtjttjf}td|dS)Nzassert(ord(%r) == %s)r4)r FS_NONASCIIordr)rZcommandr r rtest_non_asciiszCmdLineTest.test_non_asciiwin32z Windows has a native unicode APIcCsd}tj}d|d<d|d<d|d}tjtjd|gtjtj|d }| \}}|j d krdd }n"|j d krtd }nt d|j |f| |st d||fdS)NCLC_ALL0ZPYTHONCOERCECLOCALEsimport locale; print(ascii("s""), locale.getpreferredencoding())r4)rBrCenvr"s3Unable to decode the command from the command line:rs'\xff' z Unknown exit code: %s, output=%az%a doesn't start with %a) osenvironcopyr7rFr+r6rESTDOUTrGr AssertionErrorr.)rZ undecodablerirPr rBrCpatternr r rtest_undecodable_codes.      z!CmdLineTest.test_undecodable_codec sdtjdg}fdd}fdd}fdd}d d }d }||g}|||fD]X}|j|d 8|D]"} || } || jt| qjWdqT1s0YqTdS) Nz;import sys, os; s=os.fsencode(sys.argv[1]); print(ascii(s))r4cs tjd|g}tj|tjddS)Nr4TrBtextr+r6r7runrEargrIrPr r run_defaultsz6CmdLineTest.test_invalid_utf8_arg..run_defaultcs4tjd|g}ttj}d|d<tj|tjd|dS)Nr4rfrgT)rBrrri)r+r6dictrjrkr7rtrE)rvrIrirwr r run_c_locales   z7CmdLineTest.test_invalid_utf8_arg..run_c_localecs$tjddd|g}tj|tjddS)NrKutf8r4Trqrsrurwr r run_utf8_modesz8CmdLineTest.test_invalid_utf8_arg..run_utf8_modee:é, euro:€, non-bmp:􏿿utf-8sé)run_cmd)r+r6r-subTestr?rBrMr#) rZbase_cmdrxrzr|Z valid_utf8Z invalid_utf8Z test_argsrrvprocr rwrtest_invalid_utf8_args      z!CmdLineTest.test_invalid_utf8_argdarwinz%test specific to Mac OS X and Androidc Csdd}d}|dd}t|dd}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 ) rrrrPZdecodedexpectedrir rBrCr r rtest_osx_android_utf8s      z!CmdLineTest.test_osx_android_utf8cCs@td}tjd|g}tj|tjtjddd}||jddS)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)rBrCrrcheckz#False False False False False True ) textwrapdedentr+r6r7rtrEr?rB)rrPr:rr r r%test_non_interactive_output_bufferings   z1CmdLineTest.test_non_interactive_output_bufferingcCsdD]|}d|}tdd|\}}}|dkr.|n|}||dd|d|}tdd|\}}}|dkrj|n|}||dd |qdS) NrAz6import os, sys; sys.%s.buffer.write(b'x'); os._exit(0)-ur4rCxzbinary %s not unbufferedz.import os, sys; sys.%s.write('x'); os._exit(0)ztext %s not unbufferedrr?)rstreamrPrrrr r r rtest_unbuffered_outputsz"CmdLineTest.test_unbuffered_outputcCsTd}tdd|}|jd|jt|\}}||d||d|dS)Nz/import sys; sys.stdout.write(sys.stdin.read(1))rr4rr)rr[r\flushrr?rr.)rrPr r rr r rtest_unbuffered_input$s     z!CmdLineTest.test_unbuffered_inputcCsXd}d}|tj|}d}tdd||d\}}}||d|||d|dS)NAABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEAFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJif 1: import sys path = ":".join(sys.path) path = path.encode("ascii", "backslashreplace") sys.stdout.buffer.write(path)r r4Z PYTHONPATHr#)rjpathseprr%r-)rZpath1Zpath2pathrPrrrr r rtest_large_PYTHONPATH.s z!CmdLineTest.test_large_PYTHONPATHcCs<d}td|dd\}}}td|dd\}}}|||dS)Nrr4rF)Z __isolatedr)rrPZrc1Zout1Zerr1Zrc2Zout2Zerr2r r r test_empty_PYTHONPATH_issue16309=sz,CmdLineTest.test_empty_PYTHONPATH_issue16309cCsdD]}tj}||d<tjtjdgtjtjtj|d}d}|j t | dd|j dt |}t| |d }|||qdS) N)r#zlatin-1r~ZPYTHONIOENCODINGrX)r[rBrCriua=é b= c=𐀀 d=􏿿r#rrYbackslashreplace)rjrkrlr7rFr+r6rErmr[r\r#r-rreprr%)rencodingrir rrr escapedr r rtest_displayhook_unencodableNs   z(CmdLineTest.test_displayhook_unencodablec Cstd}tjd}||d||dt j t j d|f|t j d}|\}}Wdn1sv0YWdn1s0Y|||dS)Nzwb+ASCII)sabcsdefrr4)r[rB)tempfileNamedTemporaryFilerjlinesepr-r\r&rseekr7rFr+r6rErGr?rM)rrPrr[seprrBrCr r r check_input`s    HzCmdLineTest.check_inputcCs|dddS)Nz-import sys; print(repr(sys.stdin.readline()))s'abc\n'rrr r rtest_stdin_readlinelszCmdLineTest.test_stdin_readlinecCs|dddS)Nzprint(repr(input()))s'abc'rrr r rtest_builtin_inputsszCmdLineTest.test_builtin_inputcCsTd}td|\}}}tjdkr8|d||d|n|d||d|dS)Nzif 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 rtest_output_newlineys   zCmdLineTest.test_output_newlinecCs4tdd\}}}||ddd|d|dS)Nr4'r#ignore SyntaxErrorr)rrOr'r?r1r r rtest_unmached_quoteszCmdLineTest.test_unmached_quotecCsDd}td|\}}}|d||d|||ddddS)Nzif 1: import os, sys, test.support test.support.SuppressCrashReport().__enter__() sys.stdout.write('x') os.close(sys.stdout.fileno())r4rxr#rz"Exception ignored in.* OSError: .*)rr?rOr'rr r rtest_stdout_flush_at_shutdowns  z)CmdLineTest.test_stdout_flush_at_shutdowncCs$d}td|\}}}|d|dS)Nzimport sys; sys.stdout.close()r4rrrr r rtest_closed_stdoutszCmdLineTest.test_closed_stdoutposixztest needs POSIX semanticsZvxworksz.test needs preexec support in subprocess.Popencsfdjd}fdd}tjtjdd|gtjtjtj|d}|\}}||d||jd dS) Nzif 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:dvrtddvr$tddvr6tddS)Nr[rrBr"rCr*)rjrHr rr rpreexecs   z+CmdLineTest._test_no_stdio..preexecr3r4)r[rBrC preexec_fnr*) formatr7rFr+r6rErGr?r )rrrPrr rrr rr_test_no_stdios    zCmdLineTest._test_no_stdiocCs|dgdS)Nr[rrr r r test_no_stdinszCmdLineTest.test_no_stdincCs|dgdS)NrBrrr r rtest_no_stdoutszCmdLineTest.test_no_stdoutcCs|dgdS)NrCrrr r rtest_no_stderrszCmdLineTest.test_no_stderrcCs|gddS)N)r[rBrCrrr r rtest_no_std_streamsszCmdLineTest.test_no_std_streamscCs.|dg}tjdddkr:ttj}|d=d|d<ni}tdD]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-RPYTHONHASHSEEDrandomrUZ __cleanenvzprint(hash("spam"))r4rr"z83 runs produced an identical random hash for "spam": {})msgzs.  "