##// END OF EJS Templates
Merge pull request #5426 from takluyver/i5348...
Merge pull request #5426 from takluyver/i5348 Separate get_session_info between HistoryAccessor and HistoryManager

File last commit:

r13366:518e26e1
r16000:42da0484 merge
Show More
test_kernel.py
95 lines | 3.2 KiB | text/x-python | PythonLexer
epatters
TST: Add some unit tests for in-process kernel and kernel manager.
r8475 #-------------------------------------------------------------------------------
# Copyright (C) 2012 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-------------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
from __future__ import print_function
# Standard library imports
epatters
BUG: raw_input logic incorrect for in-process terminal frontend.
r8482 import sys
epatters
TST: Add some unit tests for in-process kernel and kernel manager.
r8475 import unittest
# Local imports
MinRK
update inprocess kernel to new layout...
r10298 from IPython.kernel.inprocess.blocking import BlockingInProcessKernelClient
from IPython.kernel.inprocess.manager import InProcessKernelManager
MinRK
move IPython.inprocess to IPython.kernel.inprocess
r9375 from IPython.kernel.inprocess.ipkernel import InProcessKernel
epatters
TST: Skip pylab test for in-process kernel when matplotlib is missing.
r8493 from IPython.testing.decorators import skipif_not_matplotlib
epatters
TST: Add some unit tests for in-process kernel and kernel manager.
r8475 from IPython.utils.io import capture_output
Pietro Berkes
BUG: In inprocess tests, use input/raw_input depending on Python version.
r8941 from IPython.utils import py3compat
epatters
TST: Add some unit tests for in-process kernel and kernel manager.
r8475
Thomas Kluyver
Use StringIO.StringIO on Python 2....
r13366 if py3compat.PY3:
from io import StringIO
else:
from StringIO import StringIO
epatters
TST: Add some unit tests for in-process kernel and kernel manager.
r8475 #-----------------------------------------------------------------------------
# Test case
#-----------------------------------------------------------------------------
class InProcessKernelTestCase(unittest.TestCase):
MinRK
update inprocess kernel to new layout...
r10298 def setUp(self):
self.km = InProcessKernelManager()
self.km.start_kernel()
self.kc = BlockingInProcessKernelClient(kernel=self.km.kernel)
self.kc.start_channels()
epatters
TST: Skip pylab test for in-process kernel when matplotlib is missing.
r8493 @skipif_not_matplotlib
epatters
TST: Add some unit tests for in-process kernel and kernel manager.
r8475 def test_pylab(self):
""" Does pylab work in the in-process kernel?
"""
MinRK
update inprocess kernel to new layout...
r10298 kc = self.kc
kc.execute('%pylab')
msg = get_stream_message(kc)
MinRK
fix pylab test in in-process kernel...
r11485 self.assert_('matplotlib' in msg['content']['data'])
epatters
TST: Add some unit tests for in-process kernel and kernel manager.
r8475
epatters
BUG: raw_input logic incorrect for in-process terminal frontend.
r8482 def test_raw_input(self):
""" Does the in-process kernel handle raw_input correctly?
"""
io = StringIO('foobar\n')
sys_stdin = sys.stdin
sys.stdin = io
try:
Pietro Berkes
BUG: In inprocess tests, use input/raw_input depending on Python version.
r8941 if py3compat.PY3:
MinRK
update inprocess kernel to new layout...
r10298 self.kc.execute('x = input()')
Pietro Berkes
BUG: In inprocess tests, use input/raw_input depending on Python version.
r8941 else:
MinRK
update inprocess kernel to new layout...
r10298 self.kc.execute('x = raw_input()')
epatters
BUG: raw_input logic incorrect for in-process terminal frontend.
r8482 finally:
sys.stdin = sys_stdin
MinRK
update inprocess kernel to new layout...
r10298 self.assertEqual(self.km.kernel.shell.user_ns.get('x'), 'foobar')
epatters
BUG: raw_input logic incorrect for in-process terminal frontend.
r8482
epatters
TST: Add some unit tests for in-process kernel and kernel manager.
r8475 def test_stdout(self):
""" Does the in-process kernel correctly capture IO?
"""
kernel = InProcessKernel()
with capture_output() as io:
kernel.shell.run_cell('print("foo")')
self.assertEqual(io.stdout, 'foo\n')
MinRK
update inprocess kernel to new layout...
r10298 kc = BlockingInProcessKernelClient(kernel=kernel)
kernel.frontends.append(kc)
kc.shell_channel.execute('print("bar")')
msg = get_stream_message(kc)
epatters
TST: Add some unit tests for in-process kernel and kernel manager.
r8475 self.assertEqual(msg['content']['data'], 'bar\n')
#-----------------------------------------------------------------------------
# Utility functions
#-----------------------------------------------------------------------------
MinRK
update inprocess kernel to new layout...
r10298 def get_stream_message(kernel_client, timeout=5):
epatters
TST: Add some unit tests for in-process kernel and kernel manager.
r8475 """ Gets a single stream message synchronously from the sub channel.
"""
while True:
MinRK
update inprocess kernel to new layout...
r10298 msg = kernel_client.get_iopub_msg(timeout=timeout)
epatters
TST: Add some unit tests for in-process kernel and kernel manager.
r8475 if msg['header']['msg_type'] == 'stream':
return msg
if __name__ == '__main__':
unittest.main()