##// END OF EJS Templates
Require jsonschema for nbformat, html and nbconvert tests
Require jsonschema for nbformat, html and nbconvert tests

File last commit:

r13892:3cd52168
r16981:96681f4a
Show More
test_kernel.py
207 lines | 7.2 KiB | text/x-python | PythonLexer
Thomas Kluyver
Add failing test for saving kernel history on Python 2
r13892 # coding: utf-8
MinRK
add basic print tests for kernel...
r9438 """test the IPython Kernel"""
#-------------------------------------------------------------------------------
# Copyright (C) 2013 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
#-------------------------------------------------------------------------------
Thomas Kluyver
Add failing test for saving kernel history on Python 2
r13892 import io
import os.path
MinRK
subprocess outstream forwarding doesn't work on Windows
r9449 import sys
MinRK
add basic print tests for kernel...
r9438
import nose.tools as nt
MinRK
only test `--help-all`...
r12357 from IPython.testing import decorators as dec, tools as tt
MinRK
move kernel-test utilities to kernel.tests.utils...
r12414 from IPython.utils import py3compat
MinRK
test first element of sys.path in Kernel...
r12853 from IPython.utils.path import locate_profile
Thomas Kluyver
Add failing test for saving kernel history on Python 2
r13892 from IPython.utils.tempdir import TemporaryDirectory
MinRK
move kernel-test utilities to kernel.tests.utils...
r12414
Thomas Kluyver
Add failing test for saving kernel history on Python 2
r13892 from .utils import (new_kernel, kernel, TIMEOUT, assemble_output, execute,
flush_channels, wait_for_idle)
MinRK
add basic print tests for kernel...
r9438
#-------------------------------------------------------------------------------
# Tests
#-------------------------------------------------------------------------------
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 def _check_mp_mode(kc, expected=False, stream="stdout"):
execute(kc=kc, code="import sys")
flush_channels(kc)
msg_id, content = execute(kc=kc, code="print (sys.%s._check_mp_mode())" % stream)
stdout, stderr = assemble_output(kc.iopub_channel)
MinRK
add basic print tests for kernel...
r9438 nt.assert_equal(eval(stdout.strip()), expected)
MinRK
test input / raw_input...
r12322 # printing tests
MinRK
add basic print tests for kernel...
r9438 def test_simple_print():
"""simple print statement in kernel"""
MinRK
move kernel-test utilities to kernel.tests.utils...
r12414 with kernel() as kc:
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 iopub = kc.iopub_channel
msg_id, content = execute(kc=kc, code="print ('hi')")
MinRK
add basic print tests for kernel...
r9438 stdout, stderr = assemble_output(iopub)
MinRK
play nice with py3k...
r9442 nt.assert_equal(stdout, 'hi\n')
nt.assert_equal(stderr, '')
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 _check_mp_mode(kc, expected=False)
MinRK
add basic print tests for kernel...
r9438
MinRK
test first element of sys.path in Kernel...
r12853 def test_sys_path():
"""test that sys.path doesn't get messed up by default"""
with kernel() as kc:
msg_id, content = execute(kc=kc, code="import sys; print (repr(sys.path[0]))")
stdout, stderr = assemble_output(kc.iopub_channel)
nt.assert_equal(stdout, "''\n")
def test_sys_path_profile_dir():
"""test that sys.path doesn't get messed up when `--profile-dir` is specified"""
with new_kernel(['--profile-dir', locate_profile('default')]) as kc:
msg_id, content = execute(kc=kc, code="import sys; print (repr(sys.path[0]))")
stdout, stderr = assemble_output(kc.iopub_channel)
nt.assert_equal(stdout, "''\n")
MinRK
subprocess outstream forwarding doesn't work on Windows
r9449 @dec.knownfailureif(sys.platform == 'win32', "subprocess prints fail on Windows")
MinRK
add basic print tests for kernel...
r9438 def test_subprocess_print():
"""printing from forked mp.Process"""
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 with new_kernel() as kc:
iopub = kc.iopub_channel
MinRK
add basic print tests for kernel...
r9438
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 _check_mp_mode(kc, expected=False)
flush_channels(kc)
MinRK
add basic print tests for kernel...
r9438 np = 5
code = '\n'.join([
MinRK
workaround Windows lack of fork in subprocess tests...
r9446 "from __future__ import print_function",
MinRK
add basic print tests for kernel...
r9438 "import multiprocessing as mp",
MinRK
workaround Windows lack of fork in subprocess tests...
r9446 "pool = [mp.Process(target=print, args=('hello', i,)) for i in range(%i)]" % np,
MinRK
add basic print tests for kernel...
r9438 "for p in pool: p.start()",
"for p in pool: p.join()"
])
expected = '\n'.join([
"hello %s" % i for i in range(np)
]) + '\n'
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 msg_id, content = execute(kc=kc, code=code)
MinRK
add basic print tests for kernel...
r9438 stdout, stderr = assemble_output(iopub)
MinRK
play nice with py3k...
r9442 nt.assert_equal(stdout.count("hello"), np, stdout)
MinRK
add basic print tests for kernel...
r9438 for n in range(np):
MinRK
play nice with py3k...
r9442 nt.assert_equal(stdout.count(str(n)), 1, stdout)
nt.assert_equal(stderr, '')
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 _check_mp_mode(kc, expected=False)
_check_mp_mode(kc, expected=False, stream="stderr")
MinRK
add basic print tests for kernel...
r9438
def test_subprocess_noprint():
"""mp.Process without print doesn't trigger iostream mp_mode"""
MinRK
move kernel-test utilities to kernel.tests.utils...
r12414 with kernel() as kc:
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 iopub = kc.iopub_channel
MinRK
add basic print tests for kernel...
r9438
np = 5
code = '\n'.join([
"import multiprocessing as mp",
MinRK
subprocess outstream forwarding doesn't work on Windows
r9449 "pool = [mp.Process(target=range, args=(i,)) for i in range(%i)]" % np,
MinRK
add basic print tests for kernel...
r9438 "for p in pool: p.start()",
"for p in pool: p.join()"
])
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 msg_id, content = execute(kc=kc, code=code)
MinRK
add basic print tests for kernel...
r9438 stdout, stderr = assemble_output(iopub)
MinRK
play nice with py3k...
r9442 nt.assert_equal(stdout, '')
nt.assert_equal(stderr, '')
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 _check_mp_mode(kc, expected=False)
_check_mp_mode(kc, expected=False, stream="stderr")
MinRK
add basic print tests for kernel...
r9438
MinRK
subprocess outstream forwarding doesn't work on Windows
r9449 @dec.knownfailureif(sys.platform == 'win32', "subprocess prints fail on Windows")
MinRK
add test for raising error in forked process
r9441 def test_subprocess_error():
"""error in mp.Process doesn't crash"""
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 with new_kernel() as kc:
iopub = kc.iopub_channel
MinRK
add test for raising error in forked process
r9441
code = '\n'.join([
"import multiprocessing as mp",
MinRK
workaround Windows lack of fork in subprocess tests...
r9446 "p = mp.Process(target=int, args=('hi',))",
MinRK
add test for raising error in forked process
r9441 "p.start()",
"p.join()",
])
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 msg_id, content = execute(kc=kc, code=code)
MinRK
add test for raising error in forked process
r9441 stdout, stderr = assemble_output(iopub)
MinRK
play nice with py3k...
r9442 nt.assert_equal(stdout, '')
MinRK
workaround Windows lack of fork in subprocess tests...
r9446 nt.assert_true("ValueError" in stderr, stderr)
MinRK
add test for raising error in forked process
r9441
MinRK
move test_kernel from IPython.zmq to IPython.kernel...
r12318 _check_mp_mode(kc, expected=False)
_check_mp_mode(kc, expected=False, stream="stderr")
MinRK
add test for raising error in forked process
r9441
MinRK
test input / raw_input...
r12322 # raw_input tests
def test_raw_input():
"""test [raw_]input"""
MinRK
move kernel-test utilities to kernel.tests.utils...
r12414 with kernel() as kc:
MinRK
test input / raw_input...
r12322 iopub = kc.iopub_channel
input_f = "input" if py3compat.PY3 else "raw_input"
theprompt = "prompt> "
code = 'print({input_f}("{theprompt}"))'.format(**locals())
msg_id = kc.execute(code, allow_stdin=True)
msg = kc.get_stdin_msg(block=True, timeout=TIMEOUT)
nt.assert_equal(msg['header']['msg_type'], u'input_request')
content = msg['content']
nt.assert_equal(content['prompt'], theprompt)
text = "some text"
kc.input(text)
reply = kc.get_shell_msg(block=True, timeout=TIMEOUT)
nt.assert_equal(reply['content']['status'], 'ok')
stdout, stderr = assemble_output(iopub)
nt.assert_equal(stdout, text + "\n")
@dec.skipif(py3compat.PY3)
def test_eval_input():
"""test input() on Python 2"""
MinRK
move kernel-test utilities to kernel.tests.utils...
r12414 with kernel() as kc:
MinRK
test input / raw_input...
r12322 iopub = kc.iopub_channel
input_f = "input" if py3compat.PY3 else "raw_input"
theprompt = "prompt> "
code = 'print(input("{theprompt}"))'.format(**locals())
msg_id = kc.execute(code, allow_stdin=True)
msg = kc.get_stdin_msg(block=True, timeout=TIMEOUT)
nt.assert_equal(msg['header']['msg_type'], u'input_request')
content = msg['content']
nt.assert_equal(content['prompt'], theprompt)
kc.input("1+1")
reply = kc.get_shell_msg(block=True, timeout=TIMEOUT)
nt.assert_equal(reply['content']['status'], 'ok')
stdout, stderr = assemble_output(iopub)
nt.assert_equal(stdout, "2\n")
MinRK
only test `--help-all`...
r12357
Thomas Kluyver
Add failing test for saving kernel history on Python 2
r13892 def test_save_history():
# Saving history from the kernel with %hist -f was failing because of
# unicode problems on Python 2.
with kernel() as kc, TemporaryDirectory() as td:
file = os.path.join(td, 'hist.out')
execute(u'a=1', kc=kc)
wait_for_idle(kc)
execute(u'b=u"abcþ"', kc=kc)
wait_for_idle(kc)
_, reply = execute("%hist -f " + file, kc=kc)
nt.assert_equal(reply['status'], 'ok')
with io.open(file, encoding='utf-8') as f:
content = f.read()
nt.assert_in(u'a=1', content)
nt.assert_in(u'b=u"abcþ"', content)
MinRK
only test `--help-all`...
r12357 def test_help_output():
"""ipython kernel --help-all works"""
tt.help_all_output_test('kernel')