
    <fhj8                       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ddZej8                  j;                   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     H/var/www/zara/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                     dt         iS )N__builtins__)r+   r
   r   r   build_localsr,   2   s    L))r   c                B  K   t         j                  j                  t                     }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.
    repl_locals)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=1r0   24zhello stdout13)	trio_replTrioInteractiveConsoler,   r#   setattrrun_repl
readouterr
splitlinescapsysmonkeypatchconsoler(   out_errs         r   test_basic_interactionrB   6   s      jj//LN/KG	
I, i8
**

g
&&&!!#IC>>QQQQ 's   A+B-B.0Bc                H  K   t         j                  j                  t                     }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)Nr.   zraise SystemExitr(   )
r5   r6   r7   r,   r#   r8   r&   r'   
SystemExitr9   )r>   r?   r(   s      r   "test_system_exits_quit_interpreterrE   [   s     jj//LN/KG	
I
 i8	z	" +jj!!'***+ +*+ +s0   A!B"##BBB	B"BBB"c                8  K   t         j                  j                  t                     }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)Nr.   )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r5   r6   r7   r,   r#   r8   r9   r:   r=   r>   r?   r(   r@   errs         r   test_KI_interruptsrL   g   s      jj//LN/KG	
I i8
**

g
&&&  "HC#%%%3$+++	 '   A+B-B.+Bc                   K   t         j                  j                  t                     }t	        g d      }|j                  |d|       t         j                  j                  |       d {    | j                         \  }}d|v sJ y 7 w)Nr.   )r1   if sys.version_info < (3, 11):/  from exceptiongroup import BaseExceptionGroupr   z<raise BaseExceptionGroup('', [RuntimeError(), SystemExit()])!print('AFTER BaseExceptionGroup')r(   AFTER BaseExceptionGrouprI   r<   s         r   test_system_exits_in_exc_grouprS      s      jj//LN/KG	
	I i8
**

g
&&&!!#IC &,,,	 '   A+B-B.Bc                   K   t         j                  j                  t                     }t	        g d      }|j                  |d|       t         j                  j                  |       d {    | j                         \  }}d|v sJ y 7 w)Nr.   )r1   rO   rP   r   zraise BaseExceptionGroup(z?  '', [BaseExceptionGroup('', [RuntimeError(), SystemExit()])])rQ   r(   rR   rI   r<   s         r   %test_system_exits_in_nested_exc_grouprV      s      jj//LN/KG	

I i8
**

g
&&&!!#IC &,,,	 'rT   c                8  K   t         j                  j                  t                     }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)Nr.   zraise BaseExceptionprint('AFTER BaseException')r(   _threads.py_repl.pyAFTER BaseExceptionrI   rJ   s         r   test_base_exception_capturedr\      s      jj//LN/KG "*	
I i8
**

g
&&&  "HC###S    C'''	 'rM   c                   K   t         j                  j                  t                     }t	        ddg      }|j                  |d|       t         j                  j                  |       d {    | j                         \  }}d|v sJ y 7 w)Nr.   z&raise ExceptionGroup('', [KeyError()])zprint('AFTER ExceptionGroup')r(   zAFTER ExceptionGrouprI   r<   s         r   test_exc_group_capturedr^      s      jj//LN/KG 5+	
I i8
**

g
&&&!!#IC!S((( 'rT   c                8  K   t         j                  j                  t                     }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)Nr.   )z-async def async_func_raises_base_exception():z  raise BaseExceptionr   z(await async_func_raises_base_exception()rX   r(   rY   rZ   r[   rI   rJ   s         r   *test_base_exception_capture_from_coroutiner`      s      jj//LN/KG	

I i8
**

g
&&&  "HC###S    C'''	 'rM   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.
    -mr5   s   exit())inputr   N)
subprocessrunsys
executable
returncode)repls    r   test_main_entrypointrj      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)rf   platformpathlibPathexists	read_text)sysctls    r   should_try_newline_injectionrt      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   -urb   r5   r   s   import trio
>>> i      print("hello!")
   >>>    hello!      KeyboardInterrupts   print("hello!")   )rf   rn   ptyforkosexeclprg   endswithreadprintdecodewritecountkillsignalSIGINTclosewaitpid)r   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)Nrx   rb   r5   rw   r   )stdoutstderrstdincreationflagsr   s   
   
s   import trio
>>> ry   rz   r{   sI   import ctypes; ctypes.windll.kernel32.SetConsoleCtrlHandler(None, False)
sW   import coverage; trio.lowlevel.enable_ki_protection(coverage.pytracer.PyTracer._trace)
r}   s+   print("READY"); await trio.sleep_forever()
Fs   READY
Ts   trios/   import time; print("READY"); time.sleep(99999)
s	   Traceback)r5   open_nurserystartr   run_processrf   rg   rd   PIPESTDOUTrn   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   <  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)r   zdict[str, object])r=   zpytest.CaptureFixture[str]r>   pytest.MonkeyPatchr   r   )r>   r   r   r   )r   bool) 
__future__r   r   ro   r   rd   rf   	functoolsr   typingr   r&   
trio._replr5   r   r#   r)   r,   rB   rE   rL   rS   rV   r\   r^   r`   rj   rt   markskipifr   r   r
   r   r   <module>r      sf   " 	    
    5x 5&*"R&"R#"R 
"RJ	+,&,#, 
,8-&-#- 
-.-&-#- 
-0(&(#( 
(()&)#) 
)$(&(#( 
(0 	) $&&/  1	1hw&r   