tests: fix test_repr_traceback_with_invalid_cwd

This never worked as expected (since a912d3745), and only py38-windows
triggered the mocked `os.getcwd` unintentionally, via `inspect`.
This commit is contained in:
Daniel Hahler 2020-01-21 20:06:14 +01:00
parent 38538c6c6d
commit 79ae86cc3f
1 changed files with 33 additions and 7 deletions

View File

@ -13,7 +13,7 @@ from _pytest._code.code import ExceptionChainRepr
from _pytest._code.code import ExceptionInfo
from _pytest._code.code import FormattedExcinfo
from _pytest._io import TerminalWriter
from _pytest.pytester import LineMatcher
try:
import importlib
@ -776,14 +776,43 @@ raise ValueError()
)
excinfo = pytest.raises(ValueError, mod.entry)
p = FormattedExcinfo()
p = FormattedExcinfo(abspath=False)
raised = 0
orig_getcwd = os.getcwd
def raiseos():
raise OSError(2)
nonlocal raised
if sys._getframe().f_back.f_code.co_name == "checked_call":
# Only raise with expected calls, but not via e.g. inspect for
# py38-windows.
raised += 1
raise OSError(2, "custom_oserror")
return orig_getcwd()
monkeypatch.setattr(os, "getcwd", raiseos)
assert p._makepath(__file__) == __file__
p.repr_traceback(excinfo)
assert raised == 1
repr_tb = p.repr_traceback(excinfo)
matcher = LineMatcher(str(repr_tb).splitlines())
matcher.fnmatch_lines(
[
"def entry():",
"> f(0)",
"",
"{}:5: ".format(mod.__file__),
"_ _ *",
"",
" def f(x):",
"> raise ValueError(x)",
"E ValueError: 0",
"",
"{}:3: ValueError".format(mod.__file__),
]
)
assert raised == 3
def test_repr_excinfo_addouterr(self, importasmod, tw_mock):
mod = importasmod(
@ -1201,8 +1230,6 @@ raise ValueError()
real traceback, such as those raised in a subprocess submitted by the multiprocessing
module (#1984).
"""
from _pytest.pytester import LineMatcher
exc_handling_code = " from e" if reason == "cause" else ""
mod = importasmod(
"""
@ -1321,7 +1348,6 @@ def test_exception_repr_extraction_error_on_recursion():
Ensure we can properly detect a recursion error even
if some locals raise error on comparison (#2459).
"""
from _pytest.pytester import LineMatcher
class numpy_like:
def __eq__(self, other):