44import os
55
66import pytest
7+ import zmq
8+ from IPython .core .history import DummyDB
79
8- from ipykernel .ipkernel import IPythonKernel
10+ from ipykernel .ipkernel import BaseComm , IPythonKernel , create_comm
11+
12+ from .conftest import MockIPyKernel
913
1014if os .name == "nt" :
1115 pytest .skip ("skipping tests on windows" , allow_module_level = True )
@@ -25,7 +29,14 @@ async def test_direct_kernel_info_request(ipkernel):
2529 assert reply ["header" ]["msg_type" ] == "kernel_info_reply"
2630
2731
28- async def test_direct_execute_request (ipkernel ):
32+ async def test_direct_execute_request (ipkernel : MockIPyKernel ):
33+ reply = await ipkernel .test_shell_message ("execute_request" , dict (code = "hello" , silent = False ))
34+ assert reply ["header" ]["msg_type" ] == "execute_reply"
35+ reply = await ipkernel .test_shell_message (
36+ "execute_request" , dict (code = "trigger_error" , silent = False )
37+ )
38+ assert reply ["content" ]["status" ] == "aborted"
39+
2940 reply = await ipkernel .test_shell_message ("execute_request" , dict (code = "hello" , silent = False ))
3041 assert reply ["header" ]["msg_type" ] == "execute_reply"
3142
@@ -40,6 +51,11 @@ async def test_direct_execute_request_aborting(ipkernel):
4051async def test_complete_request (ipkernel ):
4152 reply = await ipkernel .test_shell_message ("complete_request" , dict (code = "hello" , cursor_pos = 0 ))
4253 assert reply ["header" ]["msg_type" ] == "complete_reply"
54+ ipkernel .use_experimental_completions = False
55+ reply = await ipkernel .test_shell_message (
56+ "complete_request" , dict (code = "hello" , cursor_pos = None )
57+ )
58+ assert reply ["header" ]["msg_type" ] == "complete_reply"
4359
4460
4561async def test_inspect_request (ipkernel ):
@@ -48,10 +64,23 @@ async def test_inspect_request(ipkernel):
4864
4965
5066async def test_history_request (ipkernel ):
67+ ipkernel .shell .history_manager .db = DummyDB ()
5168 reply = await ipkernel .test_shell_message (
5269 "history_request" , dict (hist_access_type = "" , output = "" , raw = "" )
5370 )
5471 assert reply ["header" ]["msg_type" ] == "history_reply"
72+ reply = await ipkernel .test_shell_message (
73+ "history_request" , dict (hist_access_type = "tail" , output = "" , raw = "" )
74+ )
75+ assert reply ["header" ]["msg_type" ] == "history_reply"
76+ reply = await ipkernel .test_shell_message (
77+ "history_request" , dict (hist_access_type = "range" , output = "" , raw = "" )
78+ )
79+ assert reply ["header" ]["msg_type" ] == "history_reply"
80+ reply = await ipkernel .test_shell_message (
81+ "history_request" , dict (hist_access_type = "search" , output = "" , raw = "" )
82+ )
83+ assert reply ["header" ]["msg_type" ] == "history_reply"
5584
5685
5786async def test_comm_info_request (ipkernel ):
@@ -77,11 +106,25 @@ async def test_direct_interrupt_request(ipkernel):
77106# assert reply['header']['msg_type'] == 'usage_reply'
78107
79108
80- async def test_is_complete_request (ipkernel ):
109+ async def test_is_complete_request (ipkernel : MockIPyKernel ):
110+ reply = await ipkernel .test_shell_message ("is_complete_request" , dict (code = "hello" ))
111+ assert reply ["header" ]["msg_type" ] == "is_complete_reply"
112+ setattr (ipkernel , "shell.input_transformer_manager" , None )
81113 reply = await ipkernel .test_shell_message ("is_complete_request" , dict (code = "hello" ))
82114 assert reply ["header" ]["msg_type" ] == "is_complete_reply"
83115
84116
117+ def test_do_apply (ipkernel : MockIPyKernel ):
118+ from ipyparallel import pack_apply_message
119+
120+ def hello ():
121+ pass
122+
123+ msg = pack_apply_message (hello , (), {})
124+ ipkernel .do_apply (None , msg , "1" , {})
125+ ipkernel .do_apply (None , [], "1" , {})
126+
127+
85128async def test_direct_debug_request (ipkernel ):
86129 reply = await ipkernel .test_control_message ("debug_request" , {})
87130 assert reply ["header" ]["msg_type" ] == "debug_reply"
@@ -96,3 +139,64 @@ async def test_cancel_on_sigint(ipkernel: IPythonKernel):
96139 with ipkernel ._cancel_on_sigint (future ):
97140 pass
98141 future .set_result (None )
142+
143+
144+ def test_dispatch_debugpy (ipkernel : IPythonKernel ):
145+ msg = ipkernel .session .msg ("debug_request" , {})
146+ msg_list = ipkernel .session .serialize (msg )
147+ ipkernel .dispatch_debugpy ([zmq .Message (m ) for m in msg_list ])
148+
149+
150+ async def test_start (ipkernel : IPythonKernel ):
151+ shell_future = asyncio .Future ()
152+ control_future = asyncio .Future ()
153+
154+ async def fake_dispatch_queue ():
155+ shell_future .set_result (None )
156+
157+ async def fake_poll_control_queue ():
158+ control_future .set_result (None )
159+
160+ ipkernel .dispatch_queue = fake_dispatch_queue
161+ ipkernel .poll_control_queue = fake_poll_control_queue
162+ ipkernel .start ()
163+ ipkernel .debugpy_stream = None
164+ ipkernel .start ()
165+ await ipkernel .process_one (False )
166+ await shell_future
167+ await control_future
168+
169+
170+ async def test_start_no_debugpy (ipkernel : IPythonKernel ):
171+ shell_future = asyncio .Future ()
172+ control_future = asyncio .Future ()
173+
174+ async def fake_dispatch_queue ():
175+ shell_future .set_result (None )
176+
177+ async def fake_poll_control_queue ():
178+ control_future .set_result (None )
179+
180+ ipkernel .dispatch_queue = fake_dispatch_queue
181+ ipkernel .poll_control_queue = fake_poll_control_queue
182+ ipkernel .debugpy_stream = None
183+ ipkernel .start ()
184+
185+ await shell_future
186+ await control_future
187+
188+
189+ def test_create_comm ():
190+ assert isinstance (create_comm (), BaseComm )
191+
192+
193+ def test_finish_metadata (ipkernel : IPythonKernel ):
194+ reply_content = dict (status = "error" , ename = "UnmetDependency" )
195+ metadata = ipkernel .finish_metadata ({}, {}, reply_content )
196+ assert metadata ["dependencies_met" ] is False
197+
198+
199+ async def test_do_debug_request (ipkernel : IPythonKernel ):
200+ msg = ipkernel .session .msg ("debug_request" , {})
201+ msg_list = ipkernel .session .serialize (msg )
202+ await ipkernel .do_debug_request (msg )
0 commit comments