
    ,i6                       d dl m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Zd dlZ G d de
      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j6                  j9                   e        d      dd       ZddZy)    )annotationsN)partial)Protocolc                      e Zd ZdddZy)RawInputc                     y N )selfprompts     d/var/www/system.tvplus.app.br/jogos/scrap/venv/lib/python3.12/site-packages/trio/_tests/test_repl.py__call__zRawInput.__call__   s        N r   strreturnr   )__name__
__module____qualname__r   r
   r   r   r   r      s    4r   r   c                4    t        |       g ddfd}|S )z
    Pass in a list of strings.
    Returns a callable that returns each string, each time its called
    When there are not more strings to return, raise EOFError
    c                f    j                  |        	 t              S # t        $ r t        d w xY wr	   )appendnextStopIterationEOFError)r   	cmds_iterpromptss    r   _raw_helperz$build_raw_input.<locals>._raw_helper   s5    v	%	?" 	%$	%s   
 0r   r   )iter)cmdsr    r   r   s     @@r   build_raw_inputr#      s      T
IG% r   c                     t        dg      }  |        dk(  sJ t        j                  t              5   |         ddd       y# 1 sw Y   yxY w)z"Quick test of our helper function.cmd1N)r#   pytestraisesr   )	raw_inputs    r   test_build_raw_inputr)   '   sD    )I;&   	x	    s   AAc                .  K   t         j                  j                         }t        g d      }|j	                  |d|       t         j                  j                  |       d{    | j                         \  }}|j                         g dk(  sJ y7 /w)z
    Run some basic commands through the interpreter while capturing stdout.
    Ensure that the interpreted prints the expected results.
    )zx = 1zprint(f'{x=}')'hello'zdef func():z  print(x + 1)r   zfunc()zasync def afunc():z
  return 4r   zawait afunc()
import sysz"sys.stdout.write('hello stdout\n')r(   N)zx=1r+   24zhello stdout13)trio_replTrioInteractiveConsoler#   setattrrun_repl
readouterr
splitlinescapsysmonkeypatchconsoler(   out_errs         r   test_basic_interactionr=   /   s      jj//1G	
I, i8
**

g
&&&!!#IC>>QQQQ 's   A!B#B$0Bc                4  K   t         j                  j                         }t        dg      }| j	                  |d|       t        j                  t              5  t         j                  j                  |       d {    d d d        y 7 # 1 sw Y   y xY ww)Nzraise SystemExitr(   )	r0   r1   r2   r#   r3   r&   r'   
SystemExitr4   )r9   r:   r(   s      r   "test_system_exits_quit_interpreterr@   T   s     jj//1G	
I
 i8	z	" +jj!!'***+ +*+ +s0   AB#B<B
=B	B
BBBc                $  K   t         j                  j                         }t        g d      }|j	                  |d|       t         j                  j                  |       d {    | j                         \  }}d|v sJ d|vsJ d|v sJ y 7 *w)N)z"import signal, trio, trio.lowlevelzasync def f():zh  trio.lowlevel.spawn_system_task(    trio.to_thread.run_sync,    signal.raise_signal, signal.SIGINT,  )z  await trio.sleep_forever()z  print('should not see this')r   z	await f()z print('AFTER KeyboardInterrupt')r(   KeyboardInterruptshouldzAFTER KeyboardInterruptr0   r1   r2   r#   r3   r4   r5   r8   r9   r:   r(   r;   errs         r   test_KI_interruptsrG   `   s      jj//1G	
I i8
**

g
&&&  "HC#%%%3$+++	 '   A!B#B$+Bc                  K   t         j                  j                         }t        g d      }|j	                  |d|       t         j                  j                  |       d {    | j                         \  }}d|v sJ y 7 w)N)r,   if sys.version_info < (3, 11):/  from exceptiongroup import BaseExceptionGroupr   z<raise BaseExceptionGroup('', [RuntimeError(), SystemExit()])!print('AFTER BaseExceptionGroup')r(   AFTER BaseExceptionGrouprD   r7   s         r   test_system_exits_in_exc_grouprN   |   s|      jj//1G	
	I i8
**

g
&&&!!#IC &,,,	 '   A!B#B$Bc                  K   t         j                  j                         }t        g d      }|j	                  |d|       t         j                  j                  |       d {    | j                         \  }}d|v sJ y 7 w)N)r,   rJ   rK   r   zraise BaseExceptionGroup(z?  '', [BaseExceptionGroup('', [RuntimeError(), SystemExit()])])rL   r(   rM   rD   r7   s         r   %test_system_exits_in_nested_exc_grouprQ      s|      jj//1G	

I i8
**

g
&&&!!#IC &,,,	 'rO   c                $  K   t         j                  j                         }t        ddg      }|j	                  |d|       t         j                  j                  |       d {    | j                         \  }}d|vsJ d|vsJ d|v sJ y 7 *w)Nzraise BaseExceptionprint('AFTER BaseException')r(   _threads.py_repl.pyAFTER BaseExceptionrD   rE   s         r   test_base_exception_capturedrW      s      jj//1G "*	
I i8
**

g
&&&  "HC###S    C'''	 'rH   c                  K   t         j                  j                         }t        ddg      }|j	                  |d|       t         j                  j                  |       d {    | j                         \  }}d|v sJ y 7 w)Nz&raise ExceptionGroup('', [KeyError()])zprint('AFTER ExceptionGroup')r(   zAFTER ExceptionGrouprD   r7   s         r   test_exc_group_capturedrY      s      jj//1G 5+	
I i8
**

g
&&&!!#IC!S((( 'rO   c                $  K   t         j                  j                         }t        g d      }|j	                  |d|       t         j                  j                  |       d {    | j                         \  }}d|vsJ d|vsJ d|v sJ y 7 *w)N)z-async def async_func_raises_base_exception():z  raise BaseExceptionr   z(await async_func_raises_base_exception()rS   r(   rT   rU   rV   rD   rE   s         r   *test_base_exception_capture_from_coroutiner[      s      jj//1G	

I i8
**

g
&&&  "HC###S    C'''	 'rH   c                 v    t        j                  t        j                  ddgd      } | j                  dk(  sJ y)zL
    Basic smoke test when running via the package __main__ entrypoint.
    -mr0   s   exit())inputr   N)
subprocessrunsys
executable
returncode)repls    r   test_main_entrypointre      s1     >>3>>48	JD??ar   c                     t         j                  dk7  ryt        j                  d      } | j	                         sy| j                         dk(  S )NlinuxFz /proc/sys/dev/tty/legacy_tiocstiT1)ra   platformpathlibPathexists	read_text)sysctls    r   should_try_newline_injectionro      sB    
||w\\<=F==? !S((r   z"the ioctl we use is disabled in CI)reasonc                    t         j                  dk7  sJ dd l} | j                         \  }}|dk(  r6t	        j
                  t         j                  gt         j                  dddg  d}|j                  d      s+|t	        j                  |d      z  }|j                  d      s+t        |j                                d}t	        j                  |d	       |j                  d
      s+|t	        j                  |d      z  }|j                  d
      s+|j                  d      dk(  sJ t        |j                                d}t	        j                  |t        j                         |j                  d
      s+|t	        j                  |d      z  }|j                  d
      s+d|v sJ t        |j                                d}t	        j                  |d       t	        j                  |t        j                         |j                  d
      s+|t	        j                  |d      z  }|j                  d
      s+d|v sJ t        |j                                t	        j                   |       t	        j"                  |d      d    y )Nwin32r   -ur]   r0   r   s   import trio
>>> i      print("hello!")
   >>>    hello!      KeyboardInterrupts   print("hello!")   )ra   ri   ptyforkosexeclprb   endswithreadprintdecodewritecountkillsignalSIGINTclosewaitpid)rz   pidpty_fdbuffers       r   test_ki_newline_injectionr      s    <<7""" ((*KC
ax
		#..HCNND$#GH Foo45"''&$'' oo45 
&--/FHHV)*oog&"''&$'' oog& <<	"a''' 
&--/FGGCoog&"''&$'' oog&  6))) 
&--/FHHV'(GGCoog&"''&$'' oog&  6)))	&--/HHVJJsAqr   c                 J  K   t        j                         4 d {   } | j                  t        t         j                  t
        j                  dddgt        j                  t        j                  t        j                  t
        j                  dk(  rt        j                  nd             d {   }|j                  4 d {    d}|j                  2 3 d {   }||z  }|j                  dd	      j                  d
      s0 t        |j!                                d}|j"                  j%                  d       d {    |j                  2 3 d {   }||z  }|j                  d      s  d|v sJ t        |j!                                t
        j                  dk(  rkd}|j"                  j%                  d       d {    |j                  2 3 d {   }||z  }|j                  d      s  t        |j!                                d}|j"                  j%                  d       d {    |j                  2 3 d {   }||z  }|j                  d      s  t        |j!                                t
        j                  dk(  rt&        j(                  nt&        j*                  }t-        j.                  |j0                  |       t
        j                  dk(  r$|j"                  j%                  d	       d {    n#|j"                  j%                  d	       d {    d}|j                  2 3 d {   }||z  }|j                  d      s  d|v sJ t        |j!                                |j"                  j%                  d       d {    d}d}|j                  2 3 d {   }||z  }|j                  dd	      j                  d      r$|s"t-        j.                  |j0                  |       d}|j                  d      se d|v sJ d|v sJ t        |j!                                |j"                  j%                  d       d {    d}d}|j                  2 3 d {   }||z  }|j                  dd	      j                  d      r$|s"t-        j.                  |j0                  |       d}|j                  d      se d|v sJ d|v sJ t        |j!                                d d d       d {    | j2                  j5                          d d d       d {    y 7 7 7 o7 [6 47 7 6 7 7 n6 W7 7 6 7 X7 77 #6 7 7 6 ]7 7 6 7 v# 1 d {  7  sw Y   xY w7 c# 1 d {  7  sw Y   y xY ww)Nrs   r]   r0   rr   r   )stdoutstderrstdincreationflagsr   s   
   
s   import trio
>>> rt   ru   rv   sI   import ctypes; ctypes.windll.kernel32.SetConsoleCtrlHandler(None, False)
sW   import coverage; trio.lowlevel.enable_ki_protection(coverage.pytracer.PyTracer._trace)
rx   s+   print("READY"); await trio.sleep_forever()
Fs   READY
Ts   trios/   import time; print("READY"); time.sleep(99999)
s	   Traceback)r0   open_nurserystartr   run_processra   rb   r_   PIPESTDOUTri   CREATE_NEW_PROCESS_GROUPr   replacer~   r   r   r   send_allr   CTRL_C_EVENTr   r|   r   r   cancel_scopecancel)nurseryprocr   partsignal_sentkilleds         r   test_ki_in_replr   5  s      " v& v&g]]  tV4!!(( ooEH\\U\E\jAAbc	
 	
 ;; g	# g	#F"kk  d$>>'51::;OP &--/"F**%%&:;;;"kk  d$??7+&&&&--/" ||w&jj))a   #'++  $dNFw/fmmo& F**%%k   #kk  d$??7+&--/"
 251H&--fmmKGGDHHk*||w& jj))%000 jj))%000F"kk  d$??7+'6111 &--/"**%%&UVVVFF"kk  d$>>'51:::FvGGDHHk2!F??7+f$$$'6111 &--/"**%%C   FF"kk  d$>>'51:::FvGGDHHk2!F??7+6)))'6111&--/"Og	# g	#T 	##%mv& v& v&	
g	#k <k+k 1 1k Wk
kyg	# g	# g	# g	#v& v& v& v&sH  V#T.V#BV0T11VT4V	U7T:T7
T: 'U7:U7T=U7UU 
UU73AU7UU7UU	
UU77:U71U2U7UU
U
U7"BU7 U#U7$U%U77U!;U
<U!?U7>U7U$U7*U*.U'
/U*2AU7AU7U-U7(U3,U0
-U30AU7&U73V>U5?VV#(V)V#1V4V7T::U7=U7 UU7U7	UU7U7UU7U7U7U!!U7$U7'U**U7-U70U33U75V7V		=V >V		VV#V VV V#)r"   z	list[str]r   r   )r   None)r8   zpytest.CaptureFixture[str]r9   pytest.MonkeyPatchr   r   )r9   r   r   r   )r   bool)
__future__r   r|   rj   r   r_   ra   	functoolsr   typingr   r&   
trio._replr0   r   r#   r)   r=   r@   rG   rN   rQ   rW   rY   r[   re   ro   markskipifr   r   r
   r   r   <module>r      sa   " 	    
    5x 5&"R&"R#"R 
"RJ	+,&,#, 
,8-&-#- 
-.-&-#- 
-0(&(#( 
(()&)#) 
)$(&(#( 
(0 	) $&&/  1	1hw&r   