test_debug_magic.py
82 lines
| 2.4 KiB
| text/x-python
|
PythonLexer
Matthias Bussonnier
|
r24683 | """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 | ||||
#----------------------------------------------------------------------------- | ||||
import os | ||||
import sys | ||||
from IPython.testing.decorators import skip_win32 | ||||
Miro Hrončok
|
r25049 | from IPython.testing import IPYTHON_TESTING_TIMEOUT_SCALE | ||
Matthias Bussonnier
|
r24683 | |||
#----------------------------------------------------------------------------- | ||||
# Tests | ||||
#----------------------------------------------------------------------------- | ||||
@skip_win32 | ||||
def test_debug_magic_passes_through_generators(): | ||||
""" | ||||
This test that we can correctly pass through frames of a generator post-mortem. | ||||
""" | ||||
import pexpect | ||||
import re | ||||
Mickaël Schoentgen
|
r24896 | in_prompt = re.compile(br'In ?\[\d+\]:') | ||
Matthias Bussonnier
|
r24683 | ipdb_prompt = 'ipdb>' | ||
env = os.environ.copy() | ||||
child = pexpect.spawn(sys.executable, ['-m', 'IPython', '--colors=nocolor', '--simple-prompt'], | ||||
env=env) | ||||
Miro Hrončok
|
r25049 | child.timeout = 15 * IPYTHON_TESTING_TIMEOUT_SCALE | ||
Matthias Bussonnier
|
r24683 | |||
child.expect(in_prompt) | ||||
Matthias Bussonnier
|
r24945 | |||
Miro Hrončok
|
r25049 | child.timeout = 2 * IPYTHON_TESTING_TIMEOUT_SCALE | ||
Matthias Bussonnier
|
r24945 | |||
Matthias Bussonnier
|
r24683 | child.sendline("def f(x):") | ||
child.sendline(" raise Exception") | ||||
child.sendline("") | ||||
child.expect(in_prompt) | ||||
child.sendline("gen = (f(x) for x in [0])") | ||||
child.sendline("") | ||||
child.expect(in_prompt) | ||||
child.sendline("for x in gen:") | ||||
child.sendline(" pass") | ||||
child.sendline("") | ||||
Nikita Kniazev
|
r27235 | child.timeout = 10 * IPYTHON_TESTING_TIMEOUT_SCALE | ||
Matthias Bussonnier
|
r24683 | child.expect('Exception:') | ||
child.expect(in_prompt) | ||||
child.sendline(r'%debug') | ||||
child.expect('----> 2 raise Exception') | ||||
child.expect(ipdb_prompt) | ||||
child.sendline('u') | ||||
child.expect_exact(r'----> 1 gen = (f(x) for x in [0])') | ||||
child.expect(ipdb_prompt) | ||||
child.sendline('u') | ||||
child.expect_exact('----> 1 for x in gen:') | ||||
child.expect(ipdb_prompt) | ||||
Matthias Bussonnier
|
r28377 | child.sendline("u") | ||
child.expect_exact( | ||||
"*** all frames above hidden, use `skip_hidden False` to get get into those." | ||||
) | ||||
Matthias Bussonnier
|
r24683 | |||
child.expect(ipdb_prompt) | ||||
child.sendline('exit') | ||||
child.expect(in_prompt) | ||||
child.sendline('exit') | ||||
child.close() | ||||