From 1408c9f0774af2131b8e854b353c724fd02a8d32 Mon Sep 17 00:00:00 2001 From: Wolfgang Schnerring Date: Thu, 18 Sep 2014 14:58:42 +0200 Subject: [PATCH] Introduce pytest_enter_pdb hook --- CHANGELOG | 2 ++ _pytest/hookspec.py | 2 ++ _pytest/pdb.py | 1 + testing/test_pdb.py | 18 ++++++++++++++++++ 4 files changed, 23 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 5b416963b..2496738e1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -16,6 +16,8 @@ NEXT CWD outside a test package pytest would get fixture discovery wrong. Thanks to Wolfgang Schnerring for figuring out a reproducable example. +- Introduce pytest_enter_pdb hook (needed e.g. by pytest_timeout to cancel the + timeout when interactively entering pdb). 2.6.2 ----------- diff --git a/_pytest/hookspec.py b/_pytest/hookspec.py index 5a4466388..6d1420740 100644 --- a/_pytest/hookspec.py +++ b/_pytest/hookspec.py @@ -262,3 +262,5 @@ def pytest_exception_interact(node, call, report): that is not an internal exception like "skip.Exception". """ +def pytest_enter_pdb(): + """ called upon pdb.set_trace()""" diff --git a/_pytest/pdb.py b/_pytest/pdb.py index 607a4582b..d0f7509f9 100644 --- a/_pytest/pdb.py +++ b/_pytest/pdb.py @@ -42,6 +42,7 @@ class pytestPDB: tw = py.io.TerminalWriter() tw.line() tw.sep(">", "PDB set_trace (IO-capturing turned off)") + self._pluginmanager.hook.pytest_enter_pdb() pdb.Pdb().set_trace(frame) diff --git a/testing/test_pdb.py b/testing/test_pdb.py index 2cc0727b0..cc1f1e10e 100644 --- a/testing/test_pdb.py +++ b/testing/test_pdb.py @@ -267,3 +267,21 @@ class TestPDB: "*NameError*xxx*", "*1 error*", ]) + + def test_enter_pdb_hook_is_called(self, testdir): + testdir.makeconftest(""" + def pytest_enter_pdb(): + print 'enter_pdb_hook' + """) + p1 = testdir.makepyfile(""" + import pytest + + def test_foo(): + pytest.set_trace() + """) + child = testdir.spawn_pytest(str(p1)) + child.expect("enter_pdb_hook") + child.send('c\n') + child.sendeof() + if child.isalive(): + child.wait()