Skip to content

Commit d26693d

Browse files
committed
Add tests for incompete inputs and browser prompts
1 parent adaf4e7 commit d26693d

File tree

2 files changed

+225
-2
lines changed

2 files changed

+225
-2
lines changed

crates/ark/tests/kernel-notebook.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,49 @@ fn test_notebook_execute_request_multiple_expressions() {
5858

5959
assert_eq!(frontend.recv_shell_execute_reply(), input.execution_count);
6060
}
61+
62+
#[test]
63+
fn test_notebook_execute_request_incomplete() {
64+
let frontend = DummyArkFrontendNotebook::lock();
65+
66+
let code = "1 +";
67+
frontend.send_execute_request(code, ExecuteRequestOptions::default());
68+
frontend.recv_iopub_busy();
69+
70+
let input = frontend.recv_iopub_execute_input();
71+
assert_eq!(input.code, code);
72+
73+
assert!(frontend
74+
.recv_iopub_execute_error()
75+
.contains("Can't execute incomplete input"));
76+
77+
frontend.recv_iopub_idle();
78+
79+
assert_eq!(
80+
frontend.recv_shell_execute_reply_exception(),
81+
input.execution_count
82+
)
83+
}
84+
85+
#[test]
86+
fn test_notebook_execute_request_incomplete_multiple_lines() {
87+
let frontend = DummyArkFrontendNotebook::lock();
88+
89+
let code = "1 +\n2 +";
90+
frontend.send_execute_request(code, ExecuteRequestOptions::default());
91+
frontend.recv_iopub_busy();
92+
93+
let input = frontend.recv_iopub_execute_input();
94+
assert_eq!(input.code, code);
95+
96+
assert!(frontend
97+
.recv_iopub_execute_error()
98+
.contains("Can't execute incomplete input"));
99+
100+
frontend.recv_iopub_idle();
101+
102+
assert_eq!(
103+
frontend.recv_shell_execute_reply_exception(),
104+
input.execution_count
105+
)
106+
}

crates/ark/tests/kernel.rs

Lines changed: 179 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,195 @@ fn test_kernel_info() {
2525
fn 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 +\n2 +";
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: \nCan't execute incomplete input:\n1 +\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]
41218
fn test_execute_request_error() {
42219
let frontend = DummyArkFrontend::lock();

0 commit comments

Comments
 (0)