##// END OF EJS Templates
PR: Add needs_local_scope to debug magic (#13960)...
PR: Add needs_local_scope to debug magic (#13960) Fixes https://github.com/ipython/ipython/issues/13959

File last commit:

r27235:3b816f80
r28162:83f90a3f merge
Show More
test_embed.py
138 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
Samuel Gaist
[terminal][tests][embed] Remove nose
r26916
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
Samuel Gaist
[terminal][tests][embed] Remove nose
r26916 assert p.returncode == 0
assert "3 . 14" in std
if os.name != "nt":
Thomas Kluyver
Skip failing test part on Windows...
r14840 # TODO: Fix up our different stdout references, see issue gh-14
Samuel Gaist
[terminal][tests][embed] Remove nose
r26916 assert "IPython" in std
assert "bye!" in 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)
Nikita Kniazev
Tweak tests for PyPy and add CI runner...
r27235 child.timeout = 15 * IPYTHON_TESTING_TIMEOUT_SCALE
Jason Newton
add test_nest_embed...
r18764 child.expect(ipy_prompt)
Nikita Kniazev
Tweak tests for PyPy and add CI runner...
r27235 child.timeout = 5 * IPYTHON_TESTING_TIMEOUT_SCALE
Jason Newton
add test_nest_embed...
r18764 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()