##// END OF EJS Templates
Use proper subprocess commands instead of modifying the command line....
Use proper subprocess commands instead of modifying the command line. This should in particular work on windows; as 2>/dev/null might not have been proper windows syntax

File last commit:

r25049:e8d8a60c
r25239:802df205
Show More
test_embed.py
136 lines | 4.7 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
Thomas Kluyver
Use simplified prompt in test_embed...
r22132 import subprocess
Paul Ivanov
initial test for the embedding
r14184 import sys
import nose.tools as nt
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
Miro HronĨok
Tests: Allow setting a custom timeout scale...
r25049 from IPython.testing import IPYTHON_TESTING_TIMEOUT_SCALE
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 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]
Thomas Kluyver
Use simplified prompt in test_embed...
r22132 env = os.environ.copy()
env['IPY_TEST_SIMPLE_PROMPT'] = '1'
p = subprocess.Popen(cmd, env=env, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate(_exit)
std = out.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"""
MinRK
remove pexpect from external...
r20815 import pexpect
Jason Newton
add test_nest_embed...
r18764 ipy_prompt = r']:' #ansi color codes give problems matching beyond this
Thomas Kluyver
Use simplified prompt in test_embed...
r22132 env = os.environ.copy()
env['IPY_TEST_SIMPLE_PROMPT'] = '1'
Jason Newton
add test_nest_embed...
r18764
Thomas Kluyver
Use simplified prompt in test_embed...
r22132 child = pexpect.spawn(sys.executable, ['-m', 'IPython', '--colors=nocolor'],
env=env)
Miro HronĨok
Tests: Allow setting a custom timeout scale...
r25049 child.timeout = 5 * IPYTHON_TESTING_TIMEOUT_SCALE
Jason Newton
add test_nest_embed...
r18764 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()
Matthias Bussonnier
Prototype async REPL using IPython, take III...
r24463 child.sendline("embed1 = get_ipython()")
child.expect(ipy_prompt)
Jason Newton
add test_nest_embed...
r18764 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()
Matthias Bussonnier
Prototype async REPL using IPython, take III...
r24463 child.sendline("embed2 = get_ipython()")
child.expect(ipy_prompt)
Jason Newton
add test_nest_embed...
r18764 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)
Matthias Bussonnier
Force nocolor in some cases....
r22081 child.sendline('exit')
child.close()