Merge pull request #10383 from gabriellandau/dont-pdb-break-for-skiptest-exceptions

This commit is contained in:
Zac Hatfield-Dodds 2022-10-15 11:14:26 -07:00 committed by GitHub
commit 3dac833a52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 3 deletions

View File

@ -129,6 +129,7 @@ Feng Ma
Florian Bruhin
Florian Dahlitz
Floris Bruynooghe
Gabriel Landau
Gabriel Reis
Garvit Shubham
Gene Wood

View File

@ -0,0 +1 @@
Do not break into pdb when ``raise unittest.SkipTest()`` appears top-level in a file.

View File

@ -3,6 +3,7 @@ import argparse
import functools
import sys
import types
import unittest
from typing import Any
from typing import Callable
from typing import Generator
@ -293,7 +294,9 @@ class PdbInvoke:
sys.stdout.write(out)
sys.stdout.write(err)
assert call.excinfo is not None
_enter_pdb(node, call.excinfo, report)
if not isinstance(call.excinfo.value, unittest.SkipTest):
_enter_pdb(node, call.excinfo, report)
def pytest_internalerror(self, excinfo: ExceptionInfo[BaseException]) -> None:
tb = _postmortem_traceback(excinfo)

View File

@ -20,9 +20,18 @@ def pdb_env(request):
pytester._monkeypatch.setenv("PDBPP_HIJACK_PDB", "0")
def runpdb_and_get_report(pytester: Pytester, source: str):
def runpdb(pytester: Pytester, source: str):
p = pytester.makepyfile(source)
result = pytester.runpytest_inprocess("--pdb", p)
return pytester.runpytest_inprocess("--pdb", p)
def runpdb_and_get_stdout(pytester: Pytester, source: str):
result = runpdb(pytester, source)
return result.stdout.str()
def runpdb_and_get_report(pytester: Pytester, source: str):
result = runpdb(pytester, source)
reports = result.reprec.getreports("pytest_runtest_logreport") # type: ignore[attr-defined]
assert len(reports) == 3, reports # setup/call/teardown
return reports[1]
@ -124,6 +133,16 @@ class TestPDB:
assert rep.skipped
assert len(pdblist) == 0
def test_pdb_on_top_level_raise_skiptest(self, pytester, pdblist) -> None:
stdout = runpdb_and_get_stdout(
pytester,
"""
import unittest
raise unittest.SkipTest("This is a common way to skip an entire file.")
""",
)
assert "entering PDB" not in stdout, stdout
def test_pdb_on_BdbQuit(self, pytester, pdblist) -> None:
rep = runpdb_and_get_report(
pytester,