ó
ÐH/\c           @   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 Z d  d l j Z	 d  d l
 Z
 d  d l m Z d  d l
 m Z e e d ƒ r« e e _ n  e e  d ƒ Z e  j d d k Z e j rß d Z n d	 Z e e  j d
 ƒ Z e oe j Z d e	 j f d „  ƒ  YZ e	 j d ƒ d e j f d „  ƒ  Yƒ Z d e	 j f d „  ƒ  YZ e d k rye	 j ƒ  n  d S(   iÿÿÿÿN(   t   mock(   t
   subprocesst	   mswindowst   pypy_version_infoi    i   s@   import msvcrt; msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY);t    t   newlinest   Testc           B   sq  e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z e j d ƒ d „  ƒ Z	 e j
 e j d ƒ e j d ƒ d	 „  ƒ ƒ Z e j d ƒ d
 „  ƒ Z e j d ƒ d „  ƒ Z e j d k rÃ d „  Z n  d „  Z e j d ƒ d „  ƒ Z d „  Z e j e j d ƒ d „  ƒ ƒ Z e j d ƒ d „  ƒ Z e j d ƒ d „  ƒ Z e j
 e j d  d k  d ƒ d „  ƒ Z d „  Z RS(   c         C   s+   t  t |  ƒ j ƒ  t j ƒ  t j ƒ  d  S(   N(   t   superR   t   setUpt   gct   collect(   t   self(    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyR   '   s    
c         C   s5   t  j t j d d g ƒ } |  j | j ƒ  d ƒ d  S(   Ns   -cs   import sys; sys.exit(10)i
   (   R   t   Popent   syst
   executablet   assertEqualt   wait(   R   t   popen(    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt	   test_exit,   s    c         C   sE   t  j t j d d g ƒ } t j | g ƒ |  j | j ƒ  d ƒ d  S(   Ns   -cs   import sys; sys.exit(11)i   (   R   R   R   R   t   geventR   R   t   poll(   R   R   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt	   test_wait0   s    c         C   s[   y t  j d g ƒ j ƒ  Wn. t k
 rJ } | j d k sW t | ƒ ‚ n Xt d ƒ ‚ d  S(   Nt   *i   s5   Expected OSError: [Errno 2] No such file or directory(   R   R   R   t   OSErrort   errnot   AssertionError(   R   t   ex(    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_child_exception5   s
    c         C   s‡   t  j ƒ  } t j t j d d g d t j ƒ} | j ƒ  | j j	 ƒ  ~ t
 rg t j ƒ  t j ƒ  n  t  j ƒ  } |  j | | ƒ d  S(   Ns   -cs   print()t   stdout(   t	   greentestt   get_number_open_filesR   R   R   R   t   PIPER   R   t   closet   PYPYR	   R
   R   (   R   t
   num_beforet   pt	   num_after(    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt	   test_leak=   s    

t   hangsc         C   sŸ   t  j t j d d d d g d t  j d t  j d t  j ƒ} | j d ƒ \ } } |  j | d ƒ t j j d	 ƒ r‹ | j d
 ƒ s› t	 ‚ n |  j | d
 ƒ d  S(   Ns   -Wt   ignores   -csN   import sys,os;sys.stderr.write("pineapple");sys.stdout.write(sys.stdin.read())t   stdinR   t   stderrt   bananas   -dbgt	   pineapple(
   R   R   R   R   R   t   communicateR   t   endswitht
   startswithR   (   R   R#   R   R)   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_communicateK   s    			s   Windows does weird things heres   Sometimes segfaultsc      
   C   s›   t  j t j d d d d g d t  j d t  j d t  j d t ƒ} | j d	 ƒ \ } } |  j | t ƒ |  j | t ƒ |  j	 | d
 ƒ |  j	 | d ƒ d  S(   Ns   -WR'   s   -csf   import sys,os;sys.stderr.write("pineapple\r\n\xff\xff\xf2\xf9\r\n");sys.stdout.write(sys.stdin.read())R(   R   R)   t   universal_newliness   banana
ÿÿòù
s   banana
ÿÿòù
s   pineapple
ÿÿòù
(
   R   R   R   R   R   t   TrueR,   t   assertIsInstancet   strR   (   R   R#   R   R)   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_communicate_universal\   s     							c         C   s¢   t  j t j d d t d g d t  j d d d d ƒ} zU | j j ƒ  } t r| t	 si |  j
 | d ƒ qŒ |  j
 | d	 ƒ n |  j
 | d
 ƒ Wd  | j j ƒ  Xd  S(   Ns   -cs   import sys,os;s	  sys.stdout.write("line1\n");sys.stdout.flush();sys.stdout.write("line2\r");sys.stdout.flush();sys.stdout.write("line3\r\n");sys.stdout.flush();sys.stdout.write("line4\r");sys.stdout.flush();sys.stdout.write("\nline5");sys.stdout.flush();sys.stdout.write("\nline6");R   R0   i   t   bufsizes#   line1
line2
line3
line4
line5
line6s%   line1
line2
line3

line4

line5
line6s%   line1
line2line3
line4
line5
line6(   R   R   R   R   t	   SETBINARYR   R   t   readt   python_universal_newlinest    python_universal_newlines_brokenR   R    (   R   R#   R   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_universal1w   s"    
			
	
	c         C   s¢   t  j t j d d t d g d t  j d d d d ƒ} zU | j j ƒ  } t r| t	 si |  j
 | d ƒ qŒ |  j
 | d	 ƒ n |  j
 | d
 ƒ Wd  | j j ƒ  Xd  S(   Ns   -cs   import sys,os;sá   sys.stdout.write("line1\n");sys.stdout.flush();sys.stdout.write("line2\r");sys.stdout.flush();sys.stdout.write("line3\r\n");sys.stdout.flush();sys.stdout.write("line4\r\nline5");sys.stdout.flush();sys.stdout.write("\nline6");R   R0   i   R5   s#   line1
line2
line3
line4
line5
line6s%   line1
line2
line3

line4

line5
line6s%   line1
line2line3
line4
line5
line6(   R   R   R   R   R6   R   R   R7   R8   R9   R   R    (   R   R#   R   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_universal2›   s"    
				
	
	t   win32c         C   s¡   t  j ƒ  \ } } t j | ƒ } t j d d g d | ƒ} z' t j d ƒ |  j | j ƒ  d  ƒ Wd  | j ƒ  d  k r… | j
 ƒ  n  | j ƒ  t  j | ƒ Xd  S(   Nt   grept   textR(   gš™™™™™¹?(   t   ost   pipeR   t
   FileObjectR   t   timet   sleepR   R   t   Nonet   killR    (   R   t   rt   wR(   R#   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_nonblock_removed¿   s    
c         C   sf   x_ t  d ƒ D]Q } y t j d ƒ Wn+ t k
 rQ } | j t j k r^ ‚  q^ q Xt d ƒ ‚ q Wd  S(   Ni   t   this_name_must_not_exists   must fail with ENOENT(   t   rangeR   R   R   R   t   ENOENTR   (   R   t   _R   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_issue148Ó   s    
c         C   sY   y t  j t j d d g ƒ Wn) t  j k
 rH } |  j | j d ƒ n Xt d ƒ ‚ d  S(   Ns   -cs   import sys; sys.exit(44)i,   s!   must fail with CalledProcessError(   R   t   check_outputR   R   t   CalledProcessErrorR   t
   returncodeR   (   R   t   e(    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_check_output_keyword_errorÝ   s
    c         C   sm   t  r
 d  St j t j d d d g d t j d t j ƒ} | j j d ƒ | j j	 ƒ  } |  j
 | d ƒ d  S(   Ns   -us   -cs2   import sys; sys.stdout.write(sys.stdin.readline())R(   R   s   foobar
(   t   PY3R   R   R   R   R   R(   t   writeR   t   readlineR   (   R   R#   RF   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_popen_bufsizeæ   s    	s   Not sure why?c            s¯   d d l  m } g  ‰  | j d d ƒ } ‡  ‡ f d †  } | d | ƒ } | j ƒ  | j ƒ  ˆ j t ˆ  ƒ d ƒ ˆ j t ˆ  d t	 ƒ ˆ  ƒ ˆ j ˆ  d j
 d d	 ƒ d  S(
   Niÿÿÿÿ(   t   monkeyt	   threadingt   Threadc             sN   ˆ j  t ƒ ) }  t j j d d t ƒt d ƒ ‚ Wd  QXˆ  j |  j ƒ d  S(   Ns   echo 123t   shells%   Should not be able to construct Popen(	   t   assertRaisest	   TypeErrorR   R   R   R1   R   t   appendt	   exception(   t   exc(   R   R   (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   fnþ   s    t   targeti   i    s5   child watchers are only available on the default loop(   R   RW   t   get_originalt   startt   joinR   t   lent
   assertTruet
   isinstanceR\   t   args(   R   RW   RY   R`   t   thread(    (   R   R   s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt    test_subprocess_in_native_threadó   s    

c         C   sZ   t  j t j d d g d t  j | } | j ƒ  \ } } |  j | | ƒ |  j | ƒ d  S(   Ns   -ct   passR   (   R   R   R   R   R   R,   R2   t   assertIsNone(   R   t   kwargst   kindt   procR   R)   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   __test_no_output  s    	sG   Sometimes segfaults; https://travis-ci.org/gevent/gevent/jobs/327357682c         C   s   |  j  i t d 6t ƒ d  S(   NR0   (   t   _Test__test_no_outputR1   R3   (   R   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt9   test_universal_newlines_text_mode_no_output_is_always_str  s    i   i   i   s   Need encoding argumentc         C   s   |  j  i d d 6t ƒ d  S(   Ns   utf-8t   encoding(   Rq   R3   (   R   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt'   test_encoded_text_mode_no_output_is_str  s    c         C   s   |  j  i  t ƒ d  S(   N(   Rq   t   bytes(   R   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt)   test_default_mode_no_output_is_always_str&  s    (   i   i   (   t   __name__t
   __module__R   R   R   R   R%   R   t   skipOnLibuvOnPyPyOnWinR/   t   skipIfR   R   t   skipOnLibuvOnCIOnPyPyR4   R:   R;   R   t   platformRH   RM   RR   RV   t   ignores_leakcheckt   skipOnWindowsRj   Rq   Rr   t   version_infoRt   Rv   (    (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyR   %   s,   					$"	
		
(s   Testing POSIX fd closingt   TestFDsc           B   s  e  Z e j d  ƒ e j d ƒ e j d ƒ d „  ƒ ƒ ƒ Z e j d ƒ e j d ƒ d „  ƒ ƒ Z e j d ƒ e j d  ƒ e j d ƒ e j d ƒ d „  ƒ ƒ ƒ ƒ Z e j d ƒ e j d ƒ d	 „  ƒ ƒ Z e j d
 ƒ e j d ƒ e j d ƒ d „  ƒ ƒ ƒ Z RS(   s   os.closeranges"   gevent.subprocess._set_inheritables   os.closec         C   sƒ   d } t  j j | d  ƒ | j t j d d ƒ t j d t  j ƒ g ƒ | j t j d t ƒ t j d t ƒ g ƒ | j	 d ƒ d  S(   Ni   i   i   i   i   i   (   i   i   i   (
   R   R   t   _close_fds_brute_forceRD   t   assert_has_callsR    t   callt   MAXFDR1   t   assert_called_once_with(   R   R    t   set_inheritablet
   closeranget   keep(    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_close_fds_brute_force/  s     s.   gevent.subprocess.Popen._close_fds_brute_forces
   os.listdirc         C   s3   d | _  t j j d g  d ƒ | j g  d ƒ d  S(   Ns   Not an Integert   pathi*   (   t   return_valueR   R   t   _close_fds_from_pathR…   (   R   t   listdirt   brute_force(    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt#   test_close_fds_from_path_bad_valuesG  s    	c         C   s•   d
 } d d d g | _  t j j d | d ƒ |  j g  | j ƒ | j t j d t	 ƒ t j d t	 ƒ g ƒ | j t j d ƒ t j d	 ƒ g ƒ d  S(   Ni   i   i   t   1t   6t   37RŠ   i   i%   (   i   i   i   (
   R‹   R   R   RŒ   R   t
   mock_callsR‚   R    Rƒ   R1   (   R   R    R†   R‡   R   Rˆ   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_close_fds_from_pathO  s     s   os.path.isdirc         C   sU   t  | _ t j j g  d ƒ | j g  d ƒ | j t j d ƒ t j d ƒ g ƒ d  S(   Ni*   s   /proc/self/fds   /dev/fd(	   t   FalseR‹   R   R   t
   _close_fdsR…   R‚   R    Rƒ   (   R   t   isdirRŽ   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_close_fds_no_dirj  s    	s,   gevent.subprocess.Popen._close_fds_from_pathc         C   sL   t  | _ t j j d g d ƒ |  j g  | j ƒ | j d d g d ƒ d  S(   Ni   i*   s   /proc/self/fd(   R1   R‹   R   R   R–   R   R“   R…   (   R   R—   RŽ   t	   from_path(    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_close_fds_with_dirv  s    	(	   Rw   Rx   R    t   patchR‰   R   R”   R˜   Rš   (    (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyR€   ,  s   !t   RunFuncTestCasec           B   s×   e  Z e j Z d  „  Z d „  Z d „  Z d „  Z d „  Z	 e j
 d ƒ d „  ƒ Z e j
 d ƒ d „  ƒ Z e j
 d ƒ d „  ƒ Z e j
 d ƒ d	 „  ƒ Z e j
 d ƒ d
 „  ƒ Z e j
 d ƒ d „  ƒ Z d „  Z RS(   c         K   s"   t  j d | g } t j | |  S(   s4   Run Python code in a subprocess using subprocess.runs   -c(   R   R   R   t   run(   R   t   codeRm   t   argv(    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt
   run_python†  s    c         C   sI   |  j  d ƒ } |  j | j d ƒ |  j t j ƒ  | j ƒ  Wd  QXd  S(   Ns   import sys; sys.exit(47)i/   (   R    R   RP   R[   R   RO   t   check_returncode(   R   t   cp(    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_returncode‹  s    c         C   sH   |  j  t j ƒ  } |  j d d t ƒWd  QX|  j | j j d ƒ d  S(   Ns   import sys; sys.exit(47)t   checki/   (   R[   R   RO   R    R1   R   R^   RP   (   R   t   c(    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt
   test_check’  s    c         C   s,   |  j  d d t ƒ} |  j | j d ƒ d  S(   Ns   import sys; sys.exit(0)R¤   i    (   R    R1   R   RP   (   R   R¢   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_check_zero—  s    c         C   s0   |  j  t j ƒ  |  j d d d ƒWd  QXd  S(   Ns   while True: passt   timeoutg-Cëâ6?(   R[   R   t   TimeoutExpiredR    (   R   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_timeoutœ  s    R&   c         C   s/   |  j  d d t j ƒ} |  j d | j ƒ d  S(   Ns   print('BDFL')R   t   BDFL(   R    R   R   t   assertInR   (   R   R¢   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_capture_stdout¤  s    c         C   s/   |  j  d d t j ƒ} |  j d | j ƒ d  S(   Ns$   import sys; sys.stderr.write('BDFL')R)   R«   (   R    R   R   R¬   R)   (   R   R¢   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_capture_stderrª  s    c      
   C   sd   t  j ƒ  R } | j d ƒ | j d ƒ |  j d d | d t j ƒ} |  j d | j ƒ Wd  QXd  S(   Nt   peari    s6   import sys; sys.stdout.write(sys.stdin.read().upper())R(   R   t   PEAR(	   t   tempfilet   TemporaryFileRT   t   seekR    R   R   R¬   R   (   R   t   tfR¢   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_check_output_stdin_arg°  s    c         C   s5   |  j  d d d d t j ƒ} |  j d | j ƒ d  S(   Ns6   import sys; sys.stdout.write(sys.stdin.read().upper())t   inputR¯   R   R°   (   R    R   R   R¬   R   (   R   R¢   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_check_output_input_arg»  s    c         C   sž   t  j ƒ  Œ } | j d ƒ | j d ƒ |  j t d d ƒ  } |  j d d | d d ƒWd  QX|  j d | j j	 d ƒ |  j d | j j	 d ƒ Wd  QXd  S(	   NR¯   i    t   msgs7   Expected ValueError when stdin and input args supplied.s   print('will not be run')R(   R¶   t   hare(
   R±   R²   RT   R³   R[   t
   ValueErrorR    R¬   R^   Rh   (   R   R´   R¥   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt&   test_check_output_stdin_with_input_argÃ  s    c      
   C   sg   |  j  t j ƒ # } |  j d d d d t j ƒWd  QX|  j | j j d ƒ |  j | j j d ƒ d  S(   NsM   import sys, time
sys.stdout.write('BDFL')
sys.stdout.flush()
time.sleep(3600)R¨   i   R   R«   (	   R[   R   R©   R    R   R   R^   t   outputR   (   R   R¥   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_check_output_timeoutÐ  s    c         C   sE   t  j j ƒ  } d | d <|  j d d | ƒ} |  j | j d ƒ d  S(   NR*   t   FRUITsC   import sys, os;sys.exit(33 if os.getenv("FRUIT")=="banana" else 31)t   envi!   (   R?   t   environt   copyR    R   RP   (   R   t   newenvR¢   (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   test_run_kwargsá  s
    
	(   Rw   Rx   R   t   LARGE_TIMEOUTt   __timeout__R    R£   R¦   R§   Rª   Ry   R­   R®   Rµ   R·   R»   R½   RÃ   (    (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyRœ     s   						t   __main__(   R   R?   R   t   unittestRB   R	   R±   t   gevent.testingt   testingR   R   R    R   t   hasattrR•   R   R!   R   RS   R6   R   R8   R9   t   TestCaseR   R~   R€   Rœ   Rw   t   main(    (    (    s<   lib/python2.7/site-packages/gevent/tests/test__subprocess.pyt   <module>   s4   		ÿ Ti