Skip to content

Commit

Permalink
pdb: only use outcomes.exit via do_quit
Browse files Browse the repository at this point in the history
  • Loading branch information
blueyed committed May 8, 2019
1 parent 2051e30 commit f1c53a1
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 4 deletions.
1 change: 1 addition & 0 deletions changelog/5235.bugfix.rst
@@ -0,0 +1 @@
``outcome.exit`` is not used with ``EOF`` in the pdb wrapper anymore, but only with ``quit``.
10 changes: 8 additions & 2 deletions src/_pytest/debugging.py
Expand Up @@ -181,17 +181,23 @@ def do_continue(self, arg):

do_c = do_cont = do_continue

def set_quit(self):
def do_quit(self, arg):
"""Raise Exit outcome when quit command is used in pdb.
This is a bit of a hack - it would be better if BdbQuit
could be handled, but this would require to wrap the
whole pytest run, and adjust the report etc.
"""
super(PytestPdbWrapper, self).set_quit()
ret = super(PytestPdbWrapper, self).do_quit(arg)

if cls._recursive_debug == 0:
outcomes.exit("Quitting debugger")

return ret

do_q = do_quit
do_exit = do_quit

def setup(self, f, tb):
"""Suspend on setup().
Expand Down
29 changes: 27 additions & 2 deletions testing/test_pdb.py
Expand Up @@ -395,7 +395,7 @@ def test_1():
child = testdir.spawn_pytest(str(p1))
child.expect("test_1")
child.expect("Pdb")
child.sendeof()
child.sendline("q")
rest = child.read().decode("utf8")
assert "no tests ran" in rest
assert "reading from stdin while output" not in rest
Expand Down Expand Up @@ -957,7 +957,7 @@ def test_1():
child = testdir.spawn_pytest(str(p1))
child.expect("test_1")
child.expect("Pdb")
child.sendeof()
child.sendline("quit")
rest = child.read().decode("utf8")
assert "Quitting debugger" in rest
assert "reading from stdin while output" not in rest
Expand Down Expand Up @@ -1163,3 +1163,28 @@ def runcall(self, *args, **kwds):
)
assert result.ret == 0
result.stdout.fnmatch_lines(["*runcall_called*", "* 1 passed in *"])


def test_pdb_eoferror_without_read(testdir):
p1 = testdir.makepyfile(
"""
def input_without_read(*args, **kwargs):
raise EOFError()
def test(monkeypatch):
try:
import __builtin__
except ImportError:
import builtins
monkeypatch.setattr(builtins, "input", input_without_read)
else:
monkeypatch.setattr(__builtin__, "raw_input", input_without_read)
__import__('pdb').set_trace()
"""
)
result = testdir.runpytest(str(p1))
result.stdout.fnmatch_lines(["E *BdbQuit", "*= 1 failed in*"])
assert result.ret == 1

0 comments on commit f1c53a1

Please sign in to comment.