test_kernelmanager.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # Copyright (c) IPython Development Team.
  2. # Distributed under the terms of the Modified BSD License.
  3. from __future__ import print_function
  4. import unittest
  5. from ipykernel.inprocess.blocking import BlockingInProcessKernelClient
  6. from ipykernel.inprocess.manager import InProcessKernelManager
  7. #-----------------------------------------------------------------------------
  8. # Test case
  9. #-----------------------------------------------------------------------------
  10. class InProcessKernelManagerTestCase(unittest.TestCase):
  11. def setUp(self):
  12. self.km = InProcessKernelManager()
  13. def tearDown(self):
  14. if self.km.has_kernel:
  15. self.km.shutdown_kernel()
  16. def test_interface(self):
  17. """ Does the in-process kernel manager implement the basic KM interface?
  18. """
  19. km = self.km
  20. assert not km.has_kernel
  21. km.start_kernel()
  22. assert km.has_kernel
  23. assert km.kernel is not None
  24. kc = km.client()
  25. assert not kc.channels_running
  26. kc.start_channels()
  27. assert kc.channels_running
  28. old_kernel = km.kernel
  29. km.restart_kernel()
  30. self.assertIsNotNone(km.kernel)
  31. assert km.kernel != old_kernel
  32. km.shutdown_kernel()
  33. assert not km.has_kernel
  34. self.assertRaises(NotImplementedError, km.interrupt_kernel)
  35. self.assertRaises(NotImplementedError, km.signal_kernel, 9)
  36. kc.stop_channels()
  37. assert not kc.channels_running
  38. def test_execute(self):
  39. """ Does executing code in an in-process kernel work?
  40. """
  41. km = self.km
  42. km.start_kernel()
  43. kc = km.client()
  44. kc.start_channels()
  45. kc.wait_for_ready()
  46. kc.execute('foo = 1')
  47. assert km.kernel.shell.user_ns['foo'] == 1
  48. def test_complete(self):
  49. """ Does requesting completion from an in-process kernel work?
  50. """
  51. km = self.km
  52. km.start_kernel()
  53. kc = km.client()
  54. kc.start_channels()
  55. kc.wait_for_ready()
  56. km.kernel.shell.push({'my_bar': 0, 'my_baz': 1})
  57. kc.complete('my_ba', 5)
  58. msg = kc.get_shell_msg()
  59. assert msg['header']['msg_type'] == 'complete_reply'
  60. self.assertEqual(sorted(msg['content']['matches']),
  61. ['my_bar', 'my_baz'])
  62. def test_inspect(self):
  63. """ Does requesting object information from an in-process kernel work?
  64. """
  65. km = self.km
  66. km.start_kernel()
  67. kc = km.client()
  68. kc.start_channels()
  69. kc.wait_for_ready()
  70. km.kernel.shell.user_ns['foo'] = 1
  71. kc.inspect('foo')
  72. msg = kc.get_shell_msg()
  73. assert msg['header']['msg_type'] == 'inspect_reply'
  74. content = msg['content']
  75. assert content['found']
  76. text = content['data']['text/plain']
  77. self.assertIn('int', text)
  78. def test_history(self):
  79. """ Does requesting history from an in-process kernel work?
  80. """
  81. km = self.km
  82. km.start_kernel()
  83. kc = km.client()
  84. kc.start_channels()
  85. kc.wait_for_ready()
  86. kc.execute('1')
  87. kc.history(hist_access_type='tail', n=1)
  88. msg = kc.shell_channel.get_msgs()[-1]
  89. assert msg['header']['msg_type'] == 'history_reply'
  90. history = msg['content']['history']
  91. assert len(history) == 1
  92. assert history[0][2] == '1'
  93. if __name__ == '__main__':
  94. unittest.main()