##// END OF EJS Templates
turn missing dependencies in nbconvert to 500 errors...
turn missing dependencies in nbconvert to 500 errors pygments is the only such example at this time

File last commit:

r13366:518e26e1
r14044:c016ca7e
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()