@@ -250,6 +250,54 @@ fn test_execute_request_browser_incomplete() {
250250 assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count) ;
251251}
252252
253+ #[ test]
254+ fn test_execute_request_browser_stdin ( ) {
255+ let frontend = DummyArkFrontend :: lock ( ) ;
256+
257+ let code = "browser()" ;
258+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
259+ frontend. recv_iopub_busy ( ) ;
260+
261+ let input = frontend. recv_iopub_execute_input ( ) ;
262+ assert_eq ! ( input. code, code) ;
263+
264+ assert ! ( frontend
265+ . recv_iopub_execute_result( )
266+ . contains( "Called from: top level" ) ) ;
267+
268+ frontend. recv_iopub_idle ( ) ;
269+
270+ assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count) ;
271+
272+ let options = ExecuteRequestOptions { allow_stdin : true } ;
273+ let code = "readline('prompt>')" ;
274+ frontend. send_execute_request ( code, options) ;
275+ frontend. recv_iopub_busy ( ) ;
276+
277+ let input = frontend. recv_iopub_execute_input ( ) ;
278+ assert_eq ! ( input. code, code) ;
279+
280+ let prompt = frontend. recv_stdin_input_request ( ) ;
281+ assert_eq ! ( prompt, String :: from( "prompt>" ) ) ;
282+
283+ frontend. send_stdin_input_reply ( String :: from ( "hi" ) ) ;
284+
285+ assert_eq ! ( frontend. recv_iopub_execute_result( ) , "[1] \" hi\" " ) ;
286+ frontend. recv_iopub_idle ( ) ;
287+ assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count) ;
288+
289+ let code = "Q" ;
290+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
291+ frontend. recv_iopub_busy ( ) ;
292+
293+ let input = frontend. recv_iopub_execute_input ( ) ;
294+ assert_eq ! ( input. code, code) ;
295+
296+ frontend. recv_iopub_idle ( ) ;
297+
298+ assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count) ;
299+ }
300+
253301#[ test]
254302fn test_execute_request_error ( ) {
255303 let frontend = DummyArkFrontend :: lock ( ) ;
0 commit comments