@@ -25,18 +25,195 @@ fn test_kernel_info() {
2525fn test_execute_request ( ) {
2626 let frontend = DummyArkFrontend :: lock ( ) ;
2727
28- frontend. send_execute_request ( "42" , ExecuteRequestOptions :: default ( ) ) ;
28+ let code = "42" ;
29+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
2930 frontend. recv_iopub_busy ( ) ;
3031
3132 let input = frontend. recv_iopub_execute_input ( ) ;
32- assert_eq ! ( input. code, "42" ) ;
33+ assert_eq ! ( input. code, code ) ;
3334 assert_eq ! ( frontend. recv_iopub_execute_result( ) , "[1] 42" ) ;
3435
3536 frontend. recv_iopub_idle ( ) ;
3637
38+ assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count) ;
39+ }
40+
41+ #[ test]
42+ fn test_execute_request_empty ( ) {
43+ let frontend = DummyArkFrontend :: lock ( ) ;
44+
45+ let code = "" ;
46+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
47+ frontend. recv_iopub_busy ( ) ;
48+
49+ let input = frontend. recv_iopub_execute_input ( ) ;
50+ assert_eq ! ( input. code, code) ;
51+
52+ frontend. recv_iopub_idle ( ) ;
53+
54+ assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count) ;
55+
56+ // Equivalent to invisible output
57+ let code = "invisible(1)" ;
58+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
59+ frontend. recv_iopub_busy ( ) ;
60+
61+ let input = frontend. recv_iopub_execute_input ( ) ;
62+ assert_eq ! ( input. code, code) ;
63+
64+ frontend. recv_iopub_idle ( ) ;
65+
66+ assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count) ;
67+ }
68+
69+ #[ test]
70+ fn test_execute_request_multiple_lines ( ) {
71+ let frontend = DummyArkFrontend :: lock ( ) ;
72+
73+ let code = "1 +\n 2+\n 3" ;
74+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
75+ frontend. recv_iopub_busy ( ) ;
76+
77+ let input = frontend. recv_iopub_execute_input ( ) ;
78+ assert_eq ! ( input. code, code) ;
79+ assert_eq ! ( frontend. recv_iopub_execute_result( ) , "[1] 6" ) ;
80+
81+ frontend. recv_iopub_idle ( ) ;
82+
3783 assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count)
3884}
3985
86+ #[ test]
87+ fn test_execute_request_incomplete ( ) {
88+ let frontend = DummyArkFrontend :: lock ( ) ;
89+
90+ let code = "1 +" ;
91+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
92+ frontend. recv_iopub_busy ( ) ;
93+
94+ let input = frontend. recv_iopub_execute_input ( ) ;
95+ assert_eq ! ( input. code, code) ;
96+
97+ assert ! ( frontend
98+ . recv_iopub_execute_error( )
99+ . contains( "Can't execute incomplete input" ) ) ;
100+
101+ frontend. recv_iopub_idle ( ) ;
102+
103+ assert_eq ! (
104+ frontend. recv_shell_execute_reply_exception( ) ,
105+ input. execution_count
106+ )
107+ }
108+
109+ #[ test]
110+ fn test_execute_request_incomplete_multiple_lines ( ) {
111+ let frontend = DummyArkFrontend :: lock ( ) ;
112+
113+ let code = "1 +\n 2 +" ;
114+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
115+ frontend. recv_iopub_busy ( ) ;
116+
117+ let input = frontend. recv_iopub_execute_input ( ) ;
118+ assert_eq ! ( input. code, code) ;
119+
120+ assert ! ( frontend
121+ . recv_iopub_execute_error( )
122+ . contains( "Can't execute incomplete input" ) ) ;
123+
124+ frontend. recv_iopub_idle ( ) ;
125+
126+ assert_eq ! (
127+ frontend. recv_shell_execute_reply_exception( ) ,
128+ input. execution_count
129+ )
130+ }
131+
132+ #[ test]
133+ fn test_execute_request_browser ( ) {
134+ let frontend = DummyArkFrontend :: lock ( ) ;
135+
136+ let code = "browser()" ;
137+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
138+ frontend. recv_iopub_busy ( ) ;
139+
140+ let input = frontend. recv_iopub_execute_input ( ) ;
141+ assert_eq ! ( input. code, code) ;
142+
143+ assert ! ( frontend
144+ . recv_iopub_execute_result( )
145+ . contains( "Called from: top level" ) ) ;
146+
147+ frontend. recv_iopub_idle ( ) ;
148+
149+ assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count) ;
150+
151+ let code = "Q" ;
152+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
153+ frontend. recv_iopub_busy ( ) ;
154+
155+ let input = frontend. recv_iopub_execute_input ( ) ;
156+ assert_eq ! ( input. code, code) ;
157+
158+ frontend. recv_iopub_idle ( ) ;
159+
160+ assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count) ;
161+ }
162+
163+ #[ test]
164+ fn test_execute_request_browser_incomplete ( ) {
165+ let frontend = DummyArkFrontend :: lock ( ) ;
166+
167+ let code = "browser()" ;
168+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
169+ frontend. recv_iopub_busy ( ) ;
170+
171+ let input = frontend. recv_iopub_execute_input ( ) ;
172+ assert_eq ! ( input. code, code) ;
173+
174+ assert ! ( frontend
175+ . recv_iopub_execute_result( )
176+ . contains( "Called from: top level" ) ) ;
177+
178+ frontend. recv_iopub_idle ( ) ;
179+
180+ assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count) ;
181+
182+ let code = "1 +" ;
183+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
184+ frontend. recv_iopub_busy ( ) ;
185+
186+ let input = frontend. recv_iopub_execute_input ( ) ;
187+ assert_eq ! ( input. code, code) ;
188+
189+ // TODO!: Why do we get the message as a stream?
190+ frontend. recv_iopub_stream_stderr ( "Error: \n Can't execute incomplete input:\n 1 +\n " ) ;
191+
192+ // assert!(frontend
193+ // .recv_iopub_execute_error()
194+ // .contains("Can't execute incomplete input"));
195+
196+ frontend. recv_iopub_idle ( ) ;
197+
198+ assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count) ;
199+
200+ // assert_eq!(
201+ // frontend.recv_shell_execute_reply_exception(),
202+ // input.execution_count
203+ // );
204+
205+ let code = "Q" ;
206+ frontend. send_execute_request ( code, ExecuteRequestOptions :: default ( ) ) ;
207+ frontend. recv_iopub_busy ( ) ;
208+
209+ let input = frontend. recv_iopub_execute_input ( ) ;
210+ assert_eq ! ( input. code, code) ;
211+
212+ frontend. recv_iopub_idle ( ) ;
213+
214+ assert_eq ! ( frontend. recv_shell_execute_reply( ) , input. execution_count) ;
215+ }
216+
40217#[ test]
41218fn test_execute_request_error ( ) {
42219 let frontend = DummyArkFrontend :: lock ( ) ;
0 commit comments