Allow for "pdb" module to be rewritten
This commit is contained in:
parent
b847d5712b
commit
07f20ccab6
|
@ -1,8 +1,6 @@
|
||||||
""" interactive debugging with PDB, the Python Debugger. """
|
""" interactive debugging with PDB, the Python Debugger. """
|
||||||
import argparse
|
import argparse
|
||||||
import pdb
|
|
||||||
import sys
|
import sys
|
||||||
from doctest import UnexpectedException
|
|
||||||
|
|
||||||
from _pytest import outcomes
|
from _pytest import outcomes
|
||||||
from _pytest.config import hookimpl
|
from _pytest.config import hookimpl
|
||||||
|
@ -45,6 +43,8 @@ def pytest_addoption(parser):
|
||||||
|
|
||||||
|
|
||||||
def pytest_configure(config):
|
def pytest_configure(config):
|
||||||
|
import pdb
|
||||||
|
|
||||||
if config.getvalue("trace"):
|
if config.getvalue("trace"):
|
||||||
config.pluginmanager.register(PdbTrace(), "pdbtrace")
|
config.pluginmanager.register(PdbTrace(), "pdbtrace")
|
||||||
if config.getvalue("usepdb"):
|
if config.getvalue("usepdb"):
|
||||||
|
@ -87,6 +87,8 @@ class pytestPDB:
|
||||||
@classmethod
|
@classmethod
|
||||||
def _import_pdb_cls(cls, capman):
|
def _import_pdb_cls(cls, capman):
|
||||||
if not cls._config:
|
if not cls._config:
|
||||||
|
import pdb
|
||||||
|
|
||||||
# Happens when using pytest.set_trace outside of a test.
|
# Happens when using pytest.set_trace outside of a test.
|
||||||
return pdb.Pdb
|
return pdb.Pdb
|
||||||
|
|
||||||
|
@ -113,6 +115,8 @@ class pytestPDB:
|
||||||
"--pdbcls: could not import {!r}: {}".format(value, exc)
|
"--pdbcls: could not import {!r}: {}".format(value, exc)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
import pdb
|
||||||
|
|
||||||
pdb_cls = pdb.Pdb
|
pdb_cls = pdb.Pdb
|
||||||
|
|
||||||
wrapped_cls = cls._get_pdb_wrapper_class(pdb_cls, capman)
|
wrapped_cls = cls._get_pdb_wrapper_class(pdb_cls, capman)
|
||||||
|
@ -313,6 +317,8 @@ def _enter_pdb(node, excinfo, rep):
|
||||||
|
|
||||||
|
|
||||||
def _postmortem_traceback(excinfo):
|
def _postmortem_traceback(excinfo):
|
||||||
|
from doctest import UnexpectedException
|
||||||
|
|
||||||
if isinstance(excinfo.value, UnexpectedException):
|
if isinstance(excinfo.value, UnexpectedException):
|
||||||
# A doctest.UnexpectedException is not useful for post_mortem.
|
# A doctest.UnexpectedException is not useful for post_mortem.
|
||||||
# Use the underlying exception instead:
|
# Use the underlying exception instead:
|
||||||
|
|
|
@ -1238,3 +1238,40 @@ def test_warn_on_async_gen_function(testdir):
|
||||||
assert (
|
assert (
|
||||||
result.stdout.str().count("async def functions are not natively supported") == 1
|
result.stdout.str().count("async def functions are not natively supported") == 1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_pdb_can_be_rewritten(testdir):
|
||||||
|
testdir.makepyfile(
|
||||||
|
**{
|
||||||
|
"conftest.py": """
|
||||||
|
import pytest
|
||||||
|
pytest.register_assert_rewrite("pdb")
|
||||||
|
""",
|
||||||
|
"__init__.py": "",
|
||||||
|
"pdb.py": """
|
||||||
|
def check():
|
||||||
|
assert 1 == 2
|
||||||
|
""",
|
||||||
|
"test_pdb.py": """
|
||||||
|
def test():
|
||||||
|
import pdb
|
||||||
|
assert pdb.check()
|
||||||
|
""",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
# Disable debugging plugin itself to avoid:
|
||||||
|
# > INTERNALERROR> AttributeError: module 'pdb' has no attribute 'set_trace'
|
||||||
|
result = testdir.runpytest_subprocess("-p", "no:debugging", "-vv")
|
||||||
|
result.stdout.fnmatch_lines(
|
||||||
|
[
|
||||||
|
" def check():",
|
||||||
|
"> assert 1 == 2",
|
||||||
|
"E assert 1 == 2",
|
||||||
|
"E -1",
|
||||||
|
"E +2",
|
||||||
|
"",
|
||||||
|
"pdb.py:2: AssertionError",
|
||||||
|
"*= 1 failed in *",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
assert result.ret == 1
|
||||||
|
|
Loading…
Reference in New Issue