##// END OF EJS Templates
Backport PR #8131: handle undefined when sorting quick help...
Backport PR #8131: handle undefined when sorting quick help Since undefined is neither less than nor greater than anything in Javascript, the sort function was treating it as equal to everything, causing inconsistent behavior depending on the sort algorithm of the browser. closes #8089 This ensures undefined elements are sorted last in the sequence.

File last commit:

r18764:856a1b7a
r20884:3740b498
Show More
test_embed.py
125 lines | 4.4 KiB | text/x-python | PythonLexer
Paul Ivanov
initial test for the embedding
r14184 """Test embedding of IPython"""
#-----------------------------------------------------------------------------
# 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
Skip failing test part on Windows...
r14840 import os
Paul Ivanov
initial test for the embedding
r14184 import sys
import nose.tools as nt
from IPython.utils.process import process_handler
Paul Ivanov
updated test for IPython.embed()
r14707 from IPython.utils.tempdir import NamedFileInTemporaryDirectory
Jason Newton
add test_nest_embed...
r18764 from IPython.testing.decorators import skip_win32
Paul Ivanov
initial test for the embedding
r14184
#-----------------------------------------------------------------------------
# Tests
#-----------------------------------------------------------------------------
Jason Newton
add test_nest_embed...
r18764
Paul Ivanov
cleaner string/bytes solution, closes #4759...
r14731 _sample_embed = b"""
Paul Ivanov
initial test for the embedding
r14184 from __future__ import print_function
import IPython
a = 3
b = 14
print(a, '.', b)
IPython.embed()
Paul Ivanov
updated test for IPython.embed()
r14707 print('bye!')
Paul Ivanov
initial test for the embedding
r14184 """
Paul Ivanov
cleaner string/bytes solution, closes #4759...
r14731 _exit = b"exit\r"
Paul Ivanov
3 at last, 3 at last, thank Guido BDFL......
r14712
Paul Ivanov
initial test for the embedding
r14184 def test_ipython_embed():
Paul Ivanov
updated test for IPython.embed()
r14707 """test that `IPython.embed()` works"""
with NamedFileInTemporaryDirectory('file_with_embed.py') as f:
Paul Ivanov
cleaner string/bytes solution, closes #4759...
r14731 f.write(_sample_embed)
Paul Ivanov
updated test for IPython.embed()
r14707 f.flush()
Paul Ivanov
fix test for windows, just in case
r14802 f.close() # otherwise msft won't be able to read the file
Paul Ivanov
updated test for IPython.embed()
r14707
# run `python file_with_embed.py`
cmd = [sys.executable, f.name]
Paul Ivanov
cleaner use of process_handler
r14801 out, p = process_handler(cmd, lambda p: (p.communicate(_exit), p))
Paul Ivanov
3 at last, 3 at last, thank Guido BDFL......
r14712 std = out[0].decode('UTF-8')
Paul Ivanov
updated test for IPython.embed()
r14707 nt.assert_equal(p.returncode, 0)
Paul Ivanov
3 at last, 3 at last, thank Guido BDFL......
r14712 nt.assert_in('3 . 14', std)
Thomas Kluyver
Skip failing test part on Windows...
r14840 if os.name != 'nt':
# TODO: Fix up our different stdout references, see issue gh-14
nt.assert_in('IPython', std)
Paul Ivanov
3 at last, 3 at last, thank Guido BDFL......
r14712 nt.assert_in('bye!', std)
Paul Ivanov
initial test for the embedding
r14184
Jason Newton
add test_nest_embed...
r18764 @skip_win32
def test_nest_embed():
"""test that `IPython.embed()` is nestable"""
from IPython.external import pexpect
ipy_prompt = r']:' #ansi color codes give problems matching beyond this
child = pexpect.spawn('%s -m IPython'%(sys.executable, ))
child.expect(ipy_prompt)
child.sendline("from __future__ import print_function")
child.expect(ipy_prompt)
child.sendline("import IPython")
child.expect(ipy_prompt)
child.sendline("ip0 = get_ipython()")
#enter first nested embed
child.sendline("IPython.embed()")
#skip the banner until we get to a prompt
try:
prompted = -1
while prompted != 0:
prompted = child.expect([ipy_prompt, '\r\n'])
except pexpect.TIMEOUT as e:
print(e)
#child.interact()
child.sendline("embed1 = get_ipython()"); child.expect(ipy_prompt)
child.sendline("print('true' if embed1 is not ip0 else 'false')")
assert(child.expect(['true\r\n', 'false\r\n']) == 0)
child.expect(ipy_prompt)
child.sendline("print('true' if IPython.get_ipython() is embed1 else 'false')")
assert(child.expect(['true\r\n', 'false\r\n']) == 0)
child.expect(ipy_prompt)
#enter second nested embed
child.sendline("IPython.embed()")
#skip the banner until we get to a prompt
try:
prompted = -1
while prompted != 0:
prompted = child.expect([ipy_prompt, '\r\n'])
except pexpect.TIMEOUT as e:
print(e)
#child.interact()
child.sendline("embed2 = get_ipython()"); child.expect(ipy_prompt)
child.sendline("print('true' if embed2 is not embed1 else 'false')")
assert(child.expect(['true\r\n', 'false\r\n']) == 0)
child.expect(ipy_prompt)
child.sendline("print('true' if embed2 is IPython.get_ipython() else 'false')")
assert(child.expect(['true\r\n', 'false\r\n']) == 0)
child.expect(ipy_prompt)
child.sendline('exit')
#back at first embed
child.expect(ipy_prompt)
child.sendline("print('true' if get_ipython() is embed1 else 'false')")
assert(child.expect(['true\r\n', 'false\r\n']) == 0)
child.expect(ipy_prompt)
child.sendline("print('true' if IPython.get_ipython() is embed1 else 'false')")
assert(child.expect(['true\r\n', 'false\r\n']) == 0)
child.expect(ipy_prompt)
child.sendline('exit')
#back at launching scope
child.expect(ipy_prompt)
child.sendline("print('true' if get_ipython() is ip0 else 'false')")
assert(child.expect(['true\r\n', 'false\r\n']) == 0)
child.expect(ipy_prompt)
child.sendline("print('true' if IPython.get_ipython() is ip0 else 'false')")
assert(child.expect(['true\r\n', 'false\r\n']) == 0)
child.expect(ipy_prompt)