
    ;e                        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	 d dl
mZmZmZmZmZ ej        s ej        d           eed          Zd Z G d d	ej                  Z ej         e            d
           G d dej                              Z G d dej                  Zd Zedk    r ej                     dS dS )    N)support)	os_helper)spawn_pythonkill_pythonassert_python_okassert_python_failure interpreter_requires_environmentztest module requires subprocessgettotalrefcountc                 P    t          |           }|                                 }||fS N)r   wait)pdata
returncodes      )/usr/lib/python3.11/test/test_cmd_line.py_kill_python_and_exit_coder      s%    q>>DJ    c                   $   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z ej         e            d          d             Zd Zd Zd Zd Zd Zd Z ej        ej        d          d             Z ej        ej        d          d             Z ej        ej        dk    d          d             Z ej        ej        dk    d          d             Z ej        ej        dk    pe j!        d          d             Z"d Z#d Z$d Z%d  Z& ej        ej'        j(        d!          d"             Z)d# Z*d$ Z+d% Z,d& Z-d' Z.d( Z/d) Z0d* Z1 ej        e2j3        d+k    d,           ej        ej        d-k    d.          d/                         Z4d0 Z5d1 Z6d2 Z7d3 Z8d4 Z9d5 Z:d6 Z; ej         e            d7          d8             Z<d9 Z=d: Z>d;d;d<d=Z?d> Z@dJd@ZAdA ZBdB ZCdC ZDdD ZE ej        ej        dk    dE          dF             ZFdG ZGdH ZHdIS )KCmdLineTestc                 B    t          d           t          d           d S )N.z< .)r   selfs    r   test_directorieszCmdLineTest.test_directories!   s$    c"""e$$$$$r   c                     t          |          \  }}}|                     |dk    p|                    d                     |                     d|           |                     d|           |S )Nr      
s	   Traceback)r   
assertTrueendswithassertNotIn)r   cmd_linercouterrs        r   verify_valid_flagzCmdLineTest.verify_valid_flag%   sm    '11Cs
9cll5&9&9:::s+++s+++
r   c                    |                      d           |                      d           |                      d          }|                                }|                     d|d                    |                     d|           |                     d|           |                     t          |          d           d S )	Nz-hz-?z--help   usager   
   PYTHONHOME   -X dev2   )r$   
splitlinesassertInr   
assertLesslenr   r"   liness      r   	test_helpzCmdLineTest.test_help,   s    t$$$t$$$$$X..  ha))),,,C(((E

B'''''r   c                 \    |                      d          }|                     d|           d S )Nz
--help-envr'   r$   r+   r   r"   s     r   test_help_envzCmdLineTest.test_help_env6   s/    $$\22mS)))))r   c                 \    |                      d          }|                     d|           d S )Nz--help-xoptionsr(   r2   r3   s     r   test_help_xoptionszCmdLineTest.test_help_xoptions:   s0    $$%677i%%%%%r   c                 H   |                      d          }|                                }|                     d|d                    |                     d|           |                     d|           d                    |dd                                        d           d S )	Nz
--help-allr&   r   r'   r(   r      ascii)r$   r*   r+   joindecoder.   s      r   test_help_allzCmdLineTest.test_help_all>   s    $$\22  ha)))mS)))i%%% 	qrr""7+++++r   c                 Z    |                      d           |                      d           d S )Nz-Oz-OOr$   r   s    r   test_optimizezCmdLineTest.test_optimizeI   s0    t$$$u%%%%%r   c                 0    |                      d           d S )N-Sr>   r   s    r   test_site_flagzCmdLineTest.test_site_flagM   s    t$$$$$r   c                 *   dt           j        d d         z                      d          }dD ]e}t          |          \  }}}|                     |                    |                     |                     |                    |                     fd S )NzPython %d.%d   r9   )z-Vz	--versionz-VV)sysversion_infoencoder   assertFalse
startswithr   )r   versionswitchr!   r"   r#   s         r   test_versionzCmdLineTest.test_versionP   s    !C$4RaR$88@@II. 	5 	5F+F33LBSS^^G44555OOCNN7334444	5 	5r   c                     t          d          \  }}}|                     d|           t          d          \  }}}|                     d|           d S )Nz-vs   stack overflowz-vv)r   r   r   r!   r"   r#   s       r   test_verbosezCmdLineTest.test_verboseW   s^     (--C*C000'..C*C00000r   z6Cannot run -E tests when PYTHON env vars are required.c                     d } |            }|                      |i             |dd          }|                      |ddd           d S )Nc                      t           j        df| z   } | dz  } t          j        |           }t	          |                                d                   }|S )N-E)-c import sys; print(sys._xoptions)r   )rE   
executable
subprocesscheck_outputevalr*   )argsr"   optss      r   get_xoptionsz/CmdLineTest.test_xoptions.<locals>.get_xoptionsc   sQ     ND)D0D>>D)$//C((+,,DKr   z-Xaz	-Xb=c,d=eTzc,d=e)ab)assertEqual)r   r[   rZ   s      r   test_xoptionszCmdLineTest.test_xoptions`   si    	 	 	 |~~r"""|E;//T8899999r   c                      fd}d} |d|          \  }}}                      |                                d                                 |d            |dddd|          \  }}}                      |                                d	           t          r                     |d
           d S                       |d           d S )Nc                  d   t           j        g}|                    |            t          j        }t          j        |||          }|                                \  }}|j                                         |j	                                         |j
        }                    |d           |||fS )Nstdoutstderrr   )rE   rU   extendrV   PIPEPopencommunicaterc   closerd   r   r^   )rY   cmdrf   r   r"   r#   r!   r   s          r   
run_pythonz1CmdLineTest.test_showrefcount.<locals>.run_pythons   s     >"CJJt?D T$???A}}HCHNNHNNBR###sC<r   rT   rS   s   {}r   -I-Xshowrefcounts   {'showrefcount': True}s   ^\[-?\d+ refs, \d+ blocks\])r^   rstripPy_DEBUGassertRegex)r   rk   coder!   r"   r#   s   `     r   test_showrefcountzCmdLineTest.test_showrefcountr   s    	  	  	  	  	  2!z$--Cu---c"""!z$ndDIIC'@AAA 	' S"ABBBBBS#&&&&&r   c                     h d}|D ]r\  }}dd| ddg}|                      |          5  t          | }|                     |j                            d          |           d d d            n# 1 swxY w Y   sd S )N>   z=onFrozenImporterz=offSourceFileLoader rv   =rv   rm   frozen_modulesrS   z,import os; print(os.__spec__.loader, end="")utf-8)subTestr   rq   r"   r;   )r   testsrawexpectedrj   ress         r   test_xoption_frozen_modulesz'CmdLineTest.test_xoption_frozen_modules   s    
 
 
 # 	D 	DMC/#//GICc"" D D&,  !8!8(CCCD D D D D D D D D D D D D D D	D 	Ds   8A..A2	5A2	c                     t          d           t          dd           t          ddd           t          dddd           d S )N-mfnord43520xyzrunpytimeit-n1r   r   r   s    r   test_run_modulezCmdLineTest.test_run_module   sP     	d###dO444 	dG_===xs33333r   c                 b   t          ddddd          }|j                            d           |j                            d           t          |          }|                     |                    d          d	k               |                     |                    d
          d	k               d S )N-ir   r   r   r   s   Timer
   exit()
s   1 loops   __main__.Timer)r   stdinwriter   r   find)r   r   r   s      r   test_run_module_bug1764407z&CmdLineTest.test_run_module_bug1764407   s     tXtS99	j!!!	k"""1~~		),,2333		"344:;;;;;r   c                    t           j                            t                                        d          }t          j        |          5  t          ddd           t          ddd           d d d            d S # 1 swxY w Y   d S )Ntestr   unittestztest/test_longexp.pyz./test/test_longexp.py)ospathdirname__file__removesuffixr   
change_cwdr   )r   projectlibpaths     r   test_relativedir_bug46421z%CmdLineTest.test_relativedir_bug46421   s     22??GG!.11 	I 	IT:/EFFFT:/GHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is   #A<<B B c                 d    t          d           t          dd           t          dd           d S )NrS   zraise Exceptionpassr   r   s    r   test_run_codezCmdLineTest.test_run_code   s9     	d###d$5666v&&&&&r   zneed os_helper.FS_NONASCIIc                 z    dt           j        dt          t           j                  d}t          d|           d S )Nzassert(ord(z) == )rS   )r   FS_NONASCIIordr   )r   commands     r   test_non_asciizCmdLineTest.test_non_ascii   sC       +++S1F-G-G-G-GIw'''''r   c                     t           j        }d| d}t          d|          }|                     |j                                        t          |                              d                     d S )Nz# coding: latin1
print(ascii('z'))rS   r9   )r   r   r   r^   r"   ro   r9   rG   )r   chrj   r   s       r   test_codingzCmdLineTest.test_coding   sg     "7777tS))))599+;+;G+D+DEEEEEr   win32z Windows has a native unicode APIc                    d}t           j                                        }d|d<   d|d<   d|z   dz   }t          j        t
          j        d|gt          j        t          j        |	          }|	                                \  }}|j
        d
k    rd}n(|j
        dk    rd}nt          d|j
        d|          |                    |          st          |d|          d S )N   CLC_ALL0PYTHONCOERCECLOCALEs   import locale; print(ascii("s   "), locale.getencoding())rS   )rc   rd   envr8   s3   Unable to decode the command from the command line:r   s   '\xff' zUnknown exit code: z	, output=z doesn't start with )r   environcopyrV   rg   rE   rU   rf   STDOUTrh   r   AssertionErrorrI   )r   undecodabler   rr   r   rc   rd   patterns           r   test_undecodable_codez!CmdLineTest.test_undecodable_code   s    jooH%(!"*+.)) 	 ^T4(?:+<   <1
 MGG\Q "GG !.q|||U[U[!\]]]  )) 	Q vvvww!OPPP	Q 	Qr   c           	      b  
 d

fd}
fd}
fd}d                     d          }d}||g}|||fD ]{}|                     |          5  |D ]G} ||          }	|                     |	j                                        t          |                     H	 d d d            n# 1 swxY w Y   |d S )	Nz;import sys, os; s=os.fsencode(sys.argv[1]); print(ascii(s))c                 f    t           j        d| g}t          j        |t          j        d          S )NrS   Trc   textrE   rU   rV   runrf   argrj   rr   s     r   run_defaultz6CmdLineTest.test_invalid_utf8_arg.<locals>.run_default
  s,    >4s3C>#joDIIIIr   c                     t           j        d| g}t          t          j                  }d|d<   t          j        |t
          j        d|          S )NrS   r   r   T)rc   r   r   )rE   rU   dictr   r   rV   r   rf   )r   rj   r   rr   s      r   run_c_localez7CmdLineTest.test_invalid_utf8_arg.<locals>.run_c_locale  sO    >4s3Crz""CCM>#jo'+6 6 6 6r   c                 j    t           j        ddd| g}t          j        |t          j        d          S )Nrm   utf8rS   Tr   r   r   s     r   run_utf8_modez8CmdLineTest.test_invalid_utf8_arg.<locals>.run_utf8_mode  s0    >4tSAC>#joDIIIIr      e:é, euro:€, non-bmp:􏿿r~   s   é)run_cmd)rG   r   r^   rc   ro   r9   )r   r   r   r   
valid_utf8invalid_utf8	test_argsr   r   procrr   s             @r   test_invalid_utf8_argz!CmdLineTest.test_invalid_utf8_arg   s{    M	J 	J 	J 	J 	J	6 	6 	6 	6 	6	J 	J 	J 	J 	J ?EEgNN
( 	  .	#\=A 	G 	GGg.. G G$ G GC"73<<D$$T[%7%7%9%95::FFFFGG G G G G G G G G G G G G G G	G 	Gs   AB##B'	*B'	darwinz%test specific to Mac OS X and Androidc                    d                     d          }d}|                    dd          }t          |                               d          dz   }t          j                                        }d|d<   t          j        t          j	        d	||ft          j
        |
          }|                                \  }}|                     ||           |                     |j        d           d S )Nr   r~   z%import sys; print(ascii(sys.argv[1]))surrogateescaper9   r   r   r   rS   )rc   r   r   )rG   r;   r9   r   r   r   rV   rg   rE   rU   rf   rh   r^   r   )	r   r   rr   decodedr   r   r   rc   rd   s	            r   test_osx_android_utf8z!CmdLineTest.test_osx_android_utf8+  s     9??HH6++g'899>>((11E9joo H^T4.?   ***q)))))r   c                     t          j        d          }t          j        d|g}t	          j        |t          j        t          j        dd          }|                     |j        d           d S )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)
        rS   T)rc   rd   r   checkz#False False False
False False True
)	textwrapdedentrE   rU   rV   r   rf   r^   rc   )r   rr   rY   r   s       r   %test_non_interactive_output_bufferingz1CmdLineTest.test_non_interactive_output_bufferingA  s{         d+~d:?%/_4tM M M.	/ 	/ 	/ 	/ 	/r   c                    dD ]~}d|z  }t          dd|          \  }}}|dk    r|n|}|                     |dd|z             d|z  }t          dd|          \  }}}|dk    r|n|}|                     |dd	|z             d S )
Nrb   z6import os, sys; sys.%s.buffer.write(b'x'); os._exit(0)-urS   rd      xzbinary %s not unbufferedz.import os, sys; sys.%s.write('x'); os._exit(0)ztext %s not unbufferedr   r^   )r   streamrr   r!   r"   r#   r   s          r   test_unbuffered_outputz"CmdLineTest.test_unbuffered_outputP  s    * 	L 	LFLD+D$==LBS H,,33#DT4)Cf)LMMMDD+D$==LBS H,,33#DT4)AF)JKKKK	L 	Lr   c                 4   d}t          dd|          }|j                            d           |j                                         t	          |          \  }}|                     |d           |                     |                    d          |           d S )Nz/import sys; sys.stdout.write(sys.stdin.read(1))r   rS   r   r   )r   r   r   flushr   r^   r   rI   )r   rr   r   r   r!   s        r   test_unbuffered_inputz!CmdLineTest.test_unbuffered_input`  s    AtT**	d	-a00bQ--t44444r   c                    d}d}|t           j        z   |z   }d}t          dd||          \  }}}|                     |                    d          |           |                     |                    d          |           d S )N  ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE  FGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJif 1:
            import sys
            path = ":".join(sys.path)
            path = path.encode("ascii", "backslashreplace")
            sys.stdout.buffer.write(path)rA   rS   
PYTHONPATHr9   )r   pathsepr   r+   rG   )r   path1path2r   rr   r!   r"   r#   s           r   test_large_PYTHONPATHz!CmdLineTest.test_large_PYTHONPATHj  s    rz!E)-
 (dD379 9 9Cell7++S111ell7++S11111r   z'PYTHONSAFEPATH changes default sys.pathc                     d}t          d|d          \  }}}t          d|d          \  }}}|                     ||           d S )Nr   rS   rz   r   F)
__isolatedr   )r   rr   rc1out1err1rc2out2err2s           r    test_empty_PYTHONPATH_issue16309z,CmdLineTest.test_empty_PYTHONPATH_issue16309y  s]    -
 +4"EEET4*4%HHHT4 	t$$$$$r   c                 "   dD ]
}t           j                                        }||d<   t          j        t
          j        dgt          j        t          j        t          j        |          }d}|j	        
                    t          |                              d          dz              |j	        
                    d           t          |          }t          |                              |d	          }|                     ||           d S )
N)r9   zlatin-1r~   PYTHONIOENCODINGr   )r   rc   rd   r   u   a=é b= c=𐀀 d=􏿿r9   r   r   backslashreplace)r   r   r   rV   rg   rE   rU   rf   r   r   r   r9   rG   r   reprr+   )r   encodingr   r   r   r   escapeds          r   test_displayhook_unencodablez(CmdLineTest.test_displayhook_unencodable  s    5 	) 	)H*//##C&.C"# & o!!(  A ?DGMM%++,,W55=>>>GMM+&&&q>>D4jj''2DEEGMM'4((((	) 	)r   c                 H   t          j        d          5 }t          j                            d          }|                    |                    d                     |                                 |                    d           t          j
        t          j        d|f|t          j                  5 }|                                \  }}d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |                                |           d S )Nzwb+ASCII)s   abcs   defr   rS   )r   rc   )tempfileNamedTemporaryFiler   lineseprG   r   r:   r   seekrV   rg   rE   rU   rf   rh   r^   ro   )r   rr   r   r   sepr   rc   rd   s           r   check_inputzCmdLineTest.check_input  sn   (// 	45*##G,,CKK!122333KKMMMJJqMMM!t,JO5 5 5 48<!%!1!1!3!34 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	(33333s6   BC/4CC/C	C/C	 C//C36C3c                 2    |                      dd           d S )Nz-import sys; print(repr(sys.stdin.readline()))s   'abc\n'r  r   s    r   test_stdin_readlinezCmdLineTest.test_stdin_readline  s,     	;	 	 	 	 	r   c                 2    |                      dd           d S )Nzprint(repr(input()))s   'abc'r  r   s    r   test_builtin_inputzCmdLineTest.test_builtin_input  s*    "	 	 	 	 	r   c                    d}t          d|          \  }}}t          j        dk    r.|                     d|           |                     d|           d S |                     d|           |                     d|           d S )Nzif 1:
            import sys
            print(1)
            print(2)
            print(3, file=sys.stderr)
            print(4, file=sys.stderr)rS   r   s   1
2
s   3
4
s   1
2
s   3
4
)r   rE   platformr^   r   rr   r!   r"   r#   s        r   test_output_newlinezCmdLineTest.test_output_newline  s    ) (d33C<7""]C000]C00000Y,,,Y,,,,,r   c                     t          dd          \  }}}|                     |                    dd          d           |                     d|           d S )NrS   'r9   ignoreSyntaxErrorr   )r   rq   r;   r^   rN   s       r   test_unmached_quotezCmdLineTest.test_unmached_quote  sY     -T377CGX66FFFc"""""r   c                     d}t          d|          \  }}}|                     d|           |                     d|           |                     |                    dd          d           d S )Nzif 1:
            import os, sys, test.support
            test.support.SuppressCrashReport().__enter__()
            sys.stdout.write('x')
            os.close(sys.stdout.fileno())rS   r   x   r9   r  z"Exception ignored in.*
OSError: .*)r   r^   rq   r;   r  s        r   test_stdout_flush_at_shutdownz)CmdLineTest.test_stdout_flush_at_shutdown  s    -
 -T488Cc"""b!!!GX66>	@ 	@ 	@ 	@ 	@r   c                 ^    d}t          d|          \  }}}|                     d|           d S )Nzimport sys; sys.stdout.close()rS   r   r   r  s        r   test_closed_stdoutzCmdLineTest.test_closed_stdout  s:     0'd33Cc"""""r   posixztest needs POSIX semanticsvxworksz.test needs preexec support in subprocess.Popenc                 X   d                               }fd}t          j        t          j        dd|gt          j        t          j        t          j        |          }|                                \  }}|                     |d           |                     |j        d           d S )	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)streamsc                      d v rt          j        d           d v rt          j        d           d v rt          j        d           d S d S )Nr   r   rc   r8   rd   rD   )r   ri   r  s   r   preexecz+CmdLineTest._test_no_stdio.<locals>.preexec  sW    '!!7""7"" #"r   rR   rS   )r   rc   rd   
preexec_fnr   *   )	formatrV   rg   rE   rU   rf   rh   r^   r   )r   r  rr   r   r   r"   r#   s    `     r   _test_no_stdiozCmdLineTest._test_no_stdio  s    
 #F7F33 		 	 	 	 	 ^T4./??      ==??Sc"""r*****r   c                 2    |                      dg           d S )Nr   r$  r   s    r   test_no_stdinzCmdLineTest.test_no_stdin  s    WI&&&&&r   c                 2    |                      dg           d S )Nrc   r&  r   s    r   test_no_stdoutzCmdLineTest.test_no_stdout      XJ'''''r   c                 2    |                      dg           d S )Nrd   r&  r   s    r   test_no_stderrzCmdLineTest.test_no_stderr  r*  r   c                 4    |                      g d           d S )N)r   rc   rd   r&  r   s    r   test_no_std_streamszCmdLineTest.test_no_std_streams
  s#    999:::::r   c                 t   |                      d           g }t          j                            dd          dk    r"t	          t          j                  }|d= d|d<   ni }t          d          D ]A}d}t          d|fi |\  }}}|                     |d	           |                    |           Bt          t          |                    }|                     t          |          d
d                    |                     d}t          d|d          \  }}}|                     d|           t          d|d          \  }}}|                     d|           t          d|d          \  }}}|                     d|           t          dd|d          \  }}}|                     d|           d S )Nz-RPYTHONHASHSEEDrandomr   
__cleanenv   zprint(hash("spam"))rS   r   r8   z83 runs produced an identical random hash  for "spam": {})msgz<import sys; print("random is", sys.flags.hash_randomization)rz   r0  s   random is 1r   s   random is 0)r$   r   r   getr   ranger   r^   appendsortedsetassertGreaterr-   r#  r+   )r   hashesr   irr   r!   r"   r#   s           r   test_hash_randomizationz#CmdLineTest.test_hash_randomization  s   t$$$:>>*H55AArz""C $% #CCq 	 	A(D+D$>>#>>LBSR###MM#F$$3v;; 117 	 	A 	A 	A
 N'd2FFFCnc***'d8LLLCnc***'d3GGGCnc***'dDMMMCnc*****r   c                    t           j        }|                     t           j        |           t	          |dd          5 }t          d|           t          d|           d d d            n# 1 swxY w Y   t          |           d S )Nwr~   r   z
import sys)filezdel sys.modules['__main__'])r   TESTFN
addCleanupunlinkopenprintr   )r   filenamescripts      r   test_del___main__zCmdLineTest.test_del___main__2  s     #	((333(C'222 	>f,V,,,,/f====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	"""""s   #A..A25A2c                    t          dd          \  }}}|                     d|           |                     |                                                    d          d           |                     d|           t          dd          \  }}}|                     d|           |                     |                                                    d          d           |                     d|           t          ddd          \  }}}|                     d|           |                     d|           |                     |                                                    d          d           |                     d|           d S )	NrR   z-zs   Unknown option: -zr8   r   )withoutz-as   Unknown option: -a)r   r+   r^   r*   countr   rN   s       r   test_unknown_optionsz CmdLineTest.test_unknown_options=  sv   ,T488C+S111))//0EFFJJJc""" -T4@@@C+S111))//0EFFJJJc""",T4FFFC+S111.444))//0EFFJJJc"""""r   6Cannot run -I tests when PYTHON env vars are required.c                    |                      d           |                      d           t          dddd          \  }}}|                     |                                d           t	          j                    5 }t          j                            |d          }t          j                            |d	          }t          |d
d          5 }|
                    d           d d d            n# 1 swxY w Y   t          |d
d          5 }|
                    d           |
                    d           d d d            n# 1 swxY w Y   |                     t          j        t          j        t          j        d|g|t          j                   t          j        t          j        d|g|          }|                     |                                d           d d d            d S # 1 swxY w Y   d S )Nrl   z-IEPsrS   z`from sys import flags as f; print(f.no_user_site, f.ignore_environment, f.isolated, f.safe_path)rz   )dummyvars
   1 1 1 Truezuuid.pyzmain.pyr@  r~   rA  z)raise RuntimeError('isolated mode test')
zimport uuid
zprint('ok')
rR   )cwdrd   )rR  s   ok)r$   r   r^   stripr   temp_cwdr   r   r:   rF  r   assertRaisesrV   CalledProcessErrorrW   rE   rU   DEVNULL)r   r!   r"   r#   tmpdirfakemainfs           r   test_isolatedmodezCmdLineTest.test_isolatedmodeO  s    	t$$$w''''dS 	  C
 	m444!! 	1V7<<	22D7<<	22DdC'222 FaDEEEF F F F F F F F F F F F F F FdC'222 )a(((((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) j;(5"~tT:%/%7  9 9 9 )3>4*F.46 6 6CSYY[[%000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s\   =AG.C2&G.2C6	6G.9C6	:G.+E:G.E
	
G.E
	BG..G25G2c                     dD ]y\  }}t          ||||          }t          t          |                    }d| d| d}|                     |          5  t	          d|fi | d d d            n# 1 swxY w Y   zd S )N))rz   r   )r   r8   )r   r8   )2rD   )PYTHONDEBUGPYTHONOPTIMIZEPYTHONDONTWRITEBYTECODEPYTHONVERBOSEzimport sys; sys.stderr.write(str(sys.flags)); sys.exit(not (
                    sys.flags.debug == sys.flags.optimize ==
                    sys.flags.verbose ==
                    z:
                    and sys.flags.dont_write_bytecode == z
                )))envar_valuerS   )r   intboolr   r   )r   valuer   env_varsdont_write_bytecoderr   s         r   test_sys_flags_setzCmdLineTest.test_sys_flags_setk  s   I 	9 	9OE8!$(-#	  H #&d5kk"2"2
   ;N    %00 9 9 t88x8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9%	9 	9s   A11A5	8A5	c                    t                      }dddddd|d fg}|D ]\  }}}|dnd| d	}d
| d}d|g}|i nd|i}	||u r
ddg|d d<   n|dd| g|d d<   |                     ||          5  t          j                    5  t	          |i |	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )N)NNN)fooNrk  )Nbarrl  )rk  rl  rl  )rk  rz   Nrk  zis Nonez== ""z,import sys; sys.exit(not sys.pycache_prefix r   rS   PYTHONPYCACHEPREFIXrm   pycache_prefixr   zpycache_prefix=)envvalopt)objectr   r   rT  r   )
r   NO_VALUEcasesrp  rq  r   
exp_clauserr   rY   r   s
             r   test_set_pycache_prefixz#CmdLineTest.test_set_pycache_prefix  s    88   !Hd#
 &+ 	3 	3!FC&.&6<N8<N<N<NJO*OOOD$<D""-BF,KCh "23RaR "9C"9"9:RaRV55 3 3')) 3 3$d2c2223 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3	3 	3s6   1B5BB5B""B5%B"&B55B9	<B9	T)check_exitcodexdevc                   t          t          j                  }|                    dd            |                    dd            |                    dd            |rt          j        ddg|R }nt          j        g|R }t          j        |t          j        t          j	        d|          }|r| 
                    |j        d|           |j                                        S )	NPYTHONWARNINGSPYTHONDEVMODEPYTHONMALLOCrm   devTrc   rd   universal_newlinesr   r   )r   r   r   poprE   rU   rV   r   rf   r   r^   r   rc   ro   )r   rw  rx  rY   r   r   s         r   run_xdevzCmdLineTest.run_xdev  s    2: $'''&&&%%% 	+ND%7$77DDN*T**D~d%/_%/%615"%	' ' '
  	7T_a666{!!###r   c                    d}|                      d|d          }|                     |d           |                      d|          }|                     |d           d}t          rd}nd	}|                      d|          }|                     ||           |                      d
d|          }|                     |d|            |                      dd|          }|                     |d|            |                      dd|          }|                     |d|            	 dd l}d}t	          j                    5  |                      d|d          }d d d            n# 1 swxY w Y   t	          j                    rd}nd}|                     ||           n# t          $ r Y nw xY w	 dd l}d}|                      d|          }|                     |d           d S # t          $ r Y d S w xY w)N%import sys; print(sys.flags.dev_mode)rS   F)rx  FalseTruez\import warnings; print(' '.join('%s::%s' % (f[0], f[2].__name__) for f in warnings.filters))zdefault::Warningzdefault::Warning default::DeprecationWarning ignore::DeprecationWarning ignore::PendingDeprecationWarning ignore::ImportWarning ignore::ResourceWarningz-bzdefault::BytesWarning -bbzerror::BytesWarning z-Werrorzerror::Warning r   <import _testcapi; print(_testcapi.pymem_getallocatorsname()))rw  pymalloc_debugmalloc_debugz5import faulthandler; print(faulthandler.is_enabled()))	r  r^   rp   	_testcapir   SuppressCrashReportwith_pymallocImportErrorfaulthandler)r   rr   r"   expected_filtersr  
alloc_namer  s          r   	test_xdevzCmdLineTest.test_xdev  s   6mmD$Um33g&&&mmD$''f%%%>  	;1!: mmD$''.///mmD$--I7GIIJJJmmE4..G5EGGHHHmmItT22B0@BBCCC	. RD,.. F FmmD$umEEF F F F F F F F F F F F F F F$&& ,-

+
S*----  	 	 	D		* KD--d++CS&)))))  	 	 	DD	s6   (F  E&&E*-E* 
F-,F-1G% %
G32G3Fc                 j   |rd}nd}|dz  }t           j        d|dd|f}t          t          j                  }|                    dd            ||d<   t          j        |t          j        t          j	        d	|
          }| 
                    |j        d|           |j                                        S )Nzimport sys; from test.support.import_helper import import_fresh_module; warnings = import_fresh_module('warnings', blocked=['_warnings']); zimport sys, warnings; zKprint(' '.join('%s::%s' % (f[0], f[2].__name__) for f in warnings.filters))z-Wr  rS   r{  rz  Tr~  r   )rE   rU   r   r   r   r  rV   r   rf   r   r^   r   rc   ro   )r   cmdline_optionenvvaruse_pywarningrr   rY   r   r   s           r   check_warnings_filtersz"CmdLineTest.check_warnings_filters  s     	,ZDD ,D > 	?neT4H2:&&& &~d%/_%/%615"%	' ' '
 	!T222{!!###r   c                     d}t           s|dz  }|                     dd          }|                     ||           |                     ddd          }|                     ||           d S )Nz9error::BytesWarning once::UserWarning always::UserWarningz default::DeprecationWarning ignore::DeprecationWarning ignore::PendingDeprecationWarning ignore::ImportWarning ignore::ResourceWarningzonce::UserWarningzalways::UserWarningT)r  )rp   r  r^   )r   r  r"   s      r   test_warnings_filter_precedencez+CmdLineTest.test_warnings_filter_precedence  s    2  	< "; < ))*=*?A A.///))*=*?8< * > > 	./////r   c                    d}t          t          j                  }|                    dd            |||d<   n|                    dd            t          j        d|f}t          j        |t          j        t          j	        d|          }| 
                    |j                                        |           | 
                    |j        d           d S )Nr  r{  r|  rS   Tr~  r   )r   r   r   r  rE   rU   rV   r   rf   r   r^   rc   ro   r   )r   env_varnamerr   r   rY   r   s          r   check_pythonmalloczCmdLineTest.check_pythonmalloc  s    M2:&&&")CGGND)))d+~d%/_%/%615"%	' ' '
 	++--t444!,,,,,r   c                 B   t          j                    }|rt          rdnd}d}nt          rdnd}d}d |fd|fddg}|r|                    d           |D ]J\  }}|                     ||	          5  |                     ||           d d d            n# 1 swxY w Y   Kd S )
Nr  pymallocr  mallocdebug)r  r  )r  r  ))r  r  )r  r  )r  r  )r   r  rp   re   r   r  )r   r  default_namedefault_name_debugr   r  r  s          r   test_pythonmalloczCmdLineTest.test_pythonmalloc%  s+   (** 	0/7G++ZL!1-5C>>8L!/ < () ,	
  	LL    
 # 	7 	7MGTgD99 7 7''6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7	7 	7s   0BB	B	c                 <   d}t          t          j                  }|                    dd            t          j        d|f}t          j        |t          j        d|          }| 	                    |j
                                        d           | 	                    |j        d|           d|d<   t          j        |t          j        d|          }| 	                    |j
                                        d	           | 	                    |j        d|           d S )
Nr  r{  rS   T)rc   r  r   r  r   r   r  )r   r   r   r  rE   rU   rV   r   rf   r^   rc   ro   r   )r   rr   r   rY   r   s        r   test_pythondevmode_envz"CmdLineTest.test_pythondevmode_env?  s   62:&&&d+~d:?153@ @ @++--w777!T222"O~d:?153@ @ @++--v666!T22222r   z!bpo-32457 only applies on Windowsc                 `   t           j        ddf}t          j                            t           j                  \  }}|dz   |z   }t          j        |t
          j        |          }|                     |j	        d|           |                     |j
                                        d           d S )NrS   zprint(0)z\.\.\.\)rc   rU   r      0)rE   rU   r   r   splitrV   r   rf   r^   r   rc   rS  )r   rY   prefixexerU   r   s         r   test_argv0_normalizationz$CmdLineTest.test_argv0_normalizationQ  s     ~tZ/gmmCN33m+c1
~d:?)35 5 5!T222**,,d33333r   c                    t           j        ddg}t          j        |t          j        t          j        d          }d}|                     |j                            |          |j                   |                     |j	        d           d S )Nrl   z--unknown-optionT)rc   rd   r   z'unknown option --unknown-option
usage: r   )
rE   rU   rV   r   rf   r   rd   rI   assertNotEqualr   )r   rY   r   err_msgs       r   test_parsing_errorzCmdLineTest.test_parsing_error]  s    &89~d%/_%/_#') ) ) =..w77EEEDOQ/////r   c                    d}t          ddd|           t          ddd|           t          ddd|           t          ddd|d           t          d|d	           t          d|d
           d }t          d|          }|                      ||          dt          j                    f           t          ddd|          }|                      ||          d           t          ddd|          }|                      ||          d           t          ddd|          }|                      ||          d           t          d|d          }|                      ||          d           t          d|d          }|                      ||          d           t          ddd|d          }|                      ||          d           d S )NzMimport sys; print(sys.flags.int_max_str_digits, sys.get_int_max_str_digits())rm   int_max_str_digitsrS   zint_max_str_digits=foozint_max_str_digits=1004000)PYTHONINTMAXSTRDIGITSrk  100c                     | j                                                             d          }t          d |                                D                       S )Nr~   c              3   4   K   | ]}t          |          V  d S r   )rd  ).0r=  s     r   	<genexpr>zGCmdLineTest.test_int_max_str_digits.<locals>.res2int.<locals>.<genexpr>u  s(      55AQ555555r   )r"   rS  r;   tupler  )r   r"   s     r   res2intz4CmdLineTest.test_int_max_str_digits.<locals>.res2ints  sD    '--//((11C55555555r   r   zint_max_str_digits=0)r   r   zint_max_str_digits=4000)  r  zint_max_str_digits=100000)順 r  r   zint_max_str_digits=6000)p  r  )r   r   r^   rE   get_int_max_str_digits)r   rr   r  r   s       r   test_int_max_str_digitsz#CmdLineTest.test_int_max_str_digitsg  s#   ^d$8$EEEd$<dDIIId$<dDIIId$8$4:	< 	< 	< 	< 	dDFFFFdDFFFF	6 	6 	6 tT**C,F,H,H'IJJJt%;T4HHv...t%>dKK|444t%@$MM'7888tTEEEv...tTHHH|444+T4"(
 
 
 	|44444r   N)F)I__name__
__module____qualname__r   r$   r0   r4   r6   r<   r?   rB   rL   rO   r   skipIfr	   r_   rs   r   r   r   r   r   
skipUnlessr   r   r   r   rE   r  r   r   r   
is_androidr   r   r   r   r   flags	safe_pathr   r   r  r	  r  r  r  r  r  r   r  r$  r'  r)  r,  r.  r>  rJ  rN  r\  ri  rv  r  r  r  r  r  r  r  r  r  r   r   r   r   r       s\       % % %  ( ( (* * *& & &	, 	, 	,& & &% % %5 5 51 1 1 X_5577MO O: :O O: ' ' '>D D D
4 
4 
4	< 	< 	<I I I' ' ' X.0LMM( ( NM( X.0LMMF F NMF X_S\W,79 9Q Q9 9QB X_S\W,79 9(G (G9 9(GT X#,(2 #"%LN N* *N N*(/ / /L L L 5 5 52 2 2 X_SY(>@ @% %@ @%") ) )$
4 
4 
4    - - -"# # #@ @ @# # # X_RW')EFFX_S\Y.IK K+ +K K GF+0' ' '( ( (( ( (; ; ;#+ #+ #+J	# 	# 	## # #$ X_5577MO O1 1O O149 9 9.3 3 34 .2 $ $ $ $ $&9* 9* 9*v$ $ $ $*0 0 0*- - -"7 7 743 3 3$ X0<> >4 4> >40 0 0!5 !5 !5 !5 !5r   r   rO  c                   &    e Zd Zd Zd Zd Zd ZdS )IgnoreEnvironmentTestc                 J    d                     |          }t          dd|fi |S )Nz@import sys; sys.stderr.write(str(sys.flags)); sys.exit(not ({}))rR   rS   )r#  r   )r   	predicaterg  rr   s       r   run_ignoring_varsz'IgnoreEnvironmentTest.run_ignoring_vars  s3    
 RXXYbccdD==H===r   c                 ^    d}|                      d                    |          |           d S )Nshould_be_ignoredz'{}' not in sys.pathr   )r  r#  )r   r   s     r   test_ignore_PYTHONPATHz,IgnoreEnvironmentTest.test_ignore_PYTHONPATH  sB    "5<<TBB*. 	 	0 	0 	0 	0 	0r   c                 4    |                      dd           d S )Nz!sys.flags.hash_randomization == 1r   r5  r  r   s    r   test_ignore_PYTHONHASHSEEDz0IgnoreEnvironmentTest.test_ignore_PYTHONHASHSEED  s/    B.1 	 	3 	3 	3 	3 	3r   c                 @    d}|                      |ddddd           d S )Nz
            (sys.flags.debug == sys.flags.optimize ==
             sys.flags.dont_write_bytecode ==
             sys.flags.verbose == sys.flags.safe_path == 0)
        r   )r_  r`  ra  rb  PYTHONSAFEPATHr  )r   expected_outcomes     r   test_sys_flags_not_setz,IgnoreEnvironmentTest.test_sys_flags_not_set  sE    
 	$' 	 	
 	
 	
 	
 	
r   N)r  r  r  r  r  r  r  r  r   r   r  r    sP        > > >0 0 0
3 3 3
 
 
 
 
r   r  c                        e Zd Zd Zd Zd ZdS )SyntaxErrorTestsc                    t          j        t          j        dg|t           j        t           j                  }|                     |j        d           |                     |j        d            |                     d|j                   d S )N-)inputrc   rd   r   s   
SyntaxError)	rV   r   rE   rU   rf   r  r   rd   r+   )r   rr   r   s      r   check_stringzSyntaxErrorTests.check_string  s|    ~s~s34%/_Z_N N NDOQ///DK...&44444r   c                 0    |                      d           d S )Ns   (1+2+3r  r   s    r   test_tokenizer_error_with_stdinz0SyntaxErrorTests.test_tokenizer_error_with_stdin  s    )$$$$$r   c                 0    |                      d           d S )Ns   '\u1f'r  r   s    r   *test_decoding_error_at_the_end_of_the_linez;SyntaxErrorTests.test_decoding_error_at_the_end_of_the_line  s    *%%%%%r   N)r  r  r  r  r  r  r  r   r   r  r    sA        5 5 5% % %& & & & &r   r  c                  ,    t          j                     d S r   )r   reap_childrenr  r   r   tearDownModuler    s    r   __main__)r   rV   rE   r  r   r   r   r   test.supportr   test.support.script_helperr   r   r   r   r	   has_subprocess_supportSkipTesthasattrrp   r   TestCaser   r  r  r  r  r  rZ  r  r   r   <module>r     s  
 
			     



          " " " " " "             
 % ?
(
=
>
>> 73*++  h5 h5 h5 h5 h5(# h5 h5 h5V 1133IK K!
 !
 !
 !
 !
H- !
 !
K K!
H& & & & &x( & & &   zHMOOOOO r   