summaryrefslogtreecommitdiff
path: root/testing/test_runner.py
diff options
context:
space:
mode:
authorAnton <44246099+antonblr@users.noreply.github.com>2020-12-15 03:02:32 -0800
committerGitHub <noreply@github.com>2020-12-15 13:02:32 +0200
commit8eef8c6004af955f1074905e9656480eeeb3bb67 (patch)
tree892cef18cfba8ec7fcf6e82a96c49fbb8250499a /testing/test_runner.py
parentcb8142b8eccfa2fedd058c101230f1235e461f3b (diff)
downloadpytest-8eef8c6004af955f1074905e9656480eeeb3bb67.tar.gz
tests: Migrate to pytester - incremental update (#8145)
Diffstat (limited to 'testing/test_runner.py')
-rw-r--r--testing/test_runner.py253
1 files changed, 129 insertions, 124 deletions
diff --git a/testing/test_runner.py b/testing/test_runner.py
index a1f1db48d..8ce0f6735 100644
--- a/testing/test_runner.py
+++ b/testing/test_runner.py
@@ -2,26 +2,28 @@ import inspect
import os
import sys
import types
+from pathlib import Path
from typing import Dict
from typing import List
from typing import Tuple
from typing import Type
-import py
-
-import _pytest._code
import pytest
from _pytest import outcomes
from _pytest import reports
from _pytest import runner
+from _pytest._code import ExceptionInfo
+from _pytest._code.code import ExceptionChainRepr
from _pytest.config import ExitCode
+from _pytest.monkeypatch import MonkeyPatch
from _pytest.outcomes import OutcomeException
+from _pytest.pytester import Pytester
class TestSetupState:
- def test_setup(self, testdir) -> None:
+ def test_setup(self, pytester: Pytester) -> None:
ss = runner.SetupState()
- item = testdir.getitem("def test_func(): pass")
+ item = pytester.getitem("def test_func(): pass")
values = [1]
ss.prepare(item)
ss.addfinalizer(values.pop, colitem=item)
@@ -29,15 +31,15 @@ class TestSetupState:
ss._pop_and_teardown()
assert not values
- def test_teardown_exact_stack_empty(self, testdir) -> None:
- item = testdir.getitem("def test_func(): pass")
+ def test_teardown_exact_stack_empty(self, pytester: Pytester) -> None:
+ item = pytester.getitem("def test_func(): pass")
ss = runner.SetupState()
ss.teardown_exact(item, None)
ss.teardown_exact(item, None)
ss.teardown_exact(item, None)
- def test_setup_fails_and_failure_is_cached(self, testdir) -> None:
- item = testdir.getitem(
+ def test_setup_fails_and_failure_is_cached(self, pytester: Pytester) -> None:
+ item = pytester.getitem(
"""
def setup_module(mod):
raise ValueError(42)
@@ -48,7 +50,7 @@ class TestSetupState:
pytest.raises(ValueError, lambda: ss.prepare(item))
pytest.raises(ValueError, lambda: ss.prepare(item))
- def test_teardown_multiple_one_fails(self, testdir) -> None:
+ def test_teardown_multiple_one_fails(self, pytester: Pytester) -> None:
r = []
def fin1():
@@ -60,7 +62,7 @@ class TestSetupState:
def fin3():
r.append("fin3")
- item = testdir.getitem("def test_func(): pass")
+ item = pytester.getitem("def test_func(): pass")
ss = runner.SetupState()
ss.addfinalizer(fin1, item)
ss.addfinalizer(fin2, item)
@@ -70,7 +72,7 @@ class TestSetupState:
assert err.value.args == ("oops",)
assert r == ["fin3", "fin1"]
- def test_teardown_multiple_fail(self, testdir) -> None:
+ def test_teardown_multiple_fail(self, pytester: Pytester) -> None:
# Ensure the first exception is the one which is re-raised.
# Ideally both would be reported however.
def fin1():
@@ -79,7 +81,7 @@ class TestSetupState:
def fin2():
raise Exception("oops2")
- item = testdir.getitem("def test_func(): pass")
+ item = pytester.getitem("def test_func(): pass")
ss = runner.SetupState()
ss.addfinalizer(fin1, item)
ss.addfinalizer(fin2, item)
@@ -87,7 +89,7 @@ class TestSetupState:
ss._callfinalizers(item)
assert err.value.args == ("oops2",)
- def test_teardown_multiple_scopes_one_fails(self, testdir) -> None:
+ def test_teardown_multiple_scopes_one_fails(self, pytester: Pytester) -> None:
module_teardown = []
def fin_func():
@@ -96,7 +98,7 @@ class TestSetupState:
def fin_module():
module_teardown.append("fin_module")
- item = testdir.getitem("def test_func(): pass")
+ item = pytester.getitem("def test_func(): pass")
ss = runner.SetupState()
ss.addfinalizer(fin_module, item.listchain()[-2])
ss.addfinalizer(fin_func, item)
@@ -107,8 +109,8 @@ class TestSetupState:
class BaseFunctionalTests:
- def test_passfunction(self, testdir) -> None:
- reports = testdir.runitem(
+ def test_passfunction(self, pytester: Pytester) -> None:
+ reports = pytester.runitem(
"""
def test_func():
pass
@@ -120,8 +122,8 @@ class BaseFunctionalTests:
assert rep.outcome == "passed"
assert not rep.longrepr
- def test_failfunction(self, testdir) -> None:
- reports = testdir.runitem(
+ def test_failfunction(self, pytester: Pytester) -> None:
+ reports = pytester.runitem(
"""
def test_func():
assert 0
@@ -135,8 +137,8 @@ class BaseFunctionalTests:
assert rep.outcome == "failed"
# assert isinstance(rep.longrepr, ReprExceptionInfo)
- def test_skipfunction(self, testdir) -> None:
- reports = testdir.runitem(
+ def test_skipfunction(self, pytester: Pytester) -> None:
+ reports = pytester.runitem(
"""
import pytest
def test_func():
@@ -155,8 +157,8 @@ class BaseFunctionalTests:
# assert rep.skipped.location.path
# assert not rep.skipped.failurerepr
- def test_skip_in_setup_function(self, testdir) -> None:
- reports = testdir.runitem(
+ def test_skip_in_setup_function(self, pytester: Pytester) -> None:
+ reports = pytester.runitem(
"""
import pytest
def setup_function(func):
@@ -176,8 +178,8 @@ class BaseFunctionalTests:
assert len(reports) == 2
assert reports[1].passed # teardown
- def test_failure_in_setup_function(self, testdir) -> None:
- reports = testdir.runitem(
+ def test_failure_in_setup_function(self, pytester: Pytester) -> None:
+ reports = pytester.runitem(
"""
import pytest
def setup_function(func):
@@ -193,8 +195,8 @@ class BaseFunctionalTests:
assert rep.when == "setup"
assert len(reports) == 2
- def test_failure_in_teardown_function(self, testdir) -> None:
- reports = testdir.runitem(
+ def test_failure_in_teardown_function(self, pytester: Pytester) -> None:
+ reports = pytester.runitem(
"""
import pytest
def teardown_function(func):
@@ -213,8 +215,8 @@ class BaseFunctionalTests:
# assert rep.longrepr.reprcrash.lineno == 3
# assert rep.longrepr.reprtraceback.reprentries
- def test_custom_failure_repr(self, testdir) -> None:
- testdir.makepyfile(
+ def test_custom_failure_repr(self, pytester: Pytester) -> None:
+ pytester.makepyfile(
conftest="""
import pytest
class Function(pytest.Function):
@@ -222,7 +224,7 @@ class BaseFunctionalTests:
return "hello"
"""
)
- reports = testdir.runitem(
+ reports = pytester.runitem(
"""
import pytest
def test_func():
@@ -238,8 +240,8 @@ class BaseFunctionalTests:
# assert rep.failed.where.path.basename == "test_func.py"
# assert rep.failed.failurerepr == "hello"
- def test_teardown_final_returncode(self, testdir) -> None:
- rec = testdir.inline_runsource(
+ def test_teardown_final_returncode(self, pytester: Pytester) -> None:
+ rec = pytester.inline_runsource(
"""
def test_func():
pass
@@ -249,8 +251,8 @@ class BaseFunctionalTests:
)
assert rec.ret == 1
- def test_logstart_logfinish_hooks(self, testdir) -> None:
- rec = testdir.inline_runsource(
+ def test_logstart_logfinish_hooks(self, pytester: Pytester) -> None:
+ rec = pytester.inline_runsource(
"""
import pytest
def test_func():
@@ -266,8 +268,8 @@ class BaseFunctionalTests:
assert rep.nodeid == "test_logstart_logfinish_hooks.py::test_func"
assert rep.location == ("test_logstart_logfinish_hooks.py", 1, "test_func")
- def test_exact_teardown_issue90(self, testdir) -> None:
- rec = testdir.inline_runsource(
+ def test_exact_teardown_issue90(self, pytester: Pytester) -> None:
+ rec = pytester.inline_runsource(
"""
import pytest
@@ -306,9 +308,9 @@ class BaseFunctionalTests:
assert reps[5].nodeid.endswith("test_func")
assert reps[5].failed
- def test_exact_teardown_issue1206(self, testdir) -> None:
+ def test_exact_teardown_issue1206(self, pytester: Pytester) -> None:
"""Issue shadowing error with wrong number of arguments on teardown_method."""
- rec = testdir.inline_runsource(
+ rec = pytester.inline_runsource(
"""
import pytest
@@ -335,14 +337,19 @@ class BaseFunctionalTests:
assert reps[2].nodeid.endswith("test_method")
assert reps[2].failed
assert reps[2].when == "teardown"
- assert reps[2].longrepr.reprcrash.message in (
+ longrepr = reps[2].longrepr
+ assert isinstance(longrepr, ExceptionChainRepr)
+ assert longrepr.reprcrash
+ assert longrepr.reprcrash.message in (
"TypeError: teardown_method() missing 2 required positional arguments: 'y' and 'z'",
# Python >= 3.10
"TypeError: TestClass.teardown_method() missing 2 required positional arguments: 'y' and 'z'",
)
- def test_failure_in_setup_function_ignores_custom_repr(self, testdir) -> None:
- testdir.makepyfile(
+ def test_failure_in_setup_function_ignores_custom_repr(
+ self, pytester: Pytester
+ ) -> None:
+ pytester.makepyfile(
conftest="""
import pytest
class Function(pytest.Function):
@@ -350,7 +357,7 @@ class BaseFunctionalTests:
assert 0
"""
)
- reports = testdir.runitem(
+ reports = pytester.runitem(
"""
def setup_function(func):
raise ValueError(42)
@@ -369,9 +376,9 @@ class BaseFunctionalTests:
# assert rep.outcome.where.path.basename == "test_func.py"
# assert instanace(rep.failed.failurerepr, PythonFailureRepr)
- def test_systemexit_does_not_bail_out(self, testdir) -> None:
+ def test_systemexit_does_not_bail_out(self, pytester: Pytester) -> None:
try:
- reports = testdir.runitem(
+ reports = pytester.runitem(
"""
def test_func():
raise SystemExit(42)
@@ -383,9 +390,9 @@ class BaseFunctionalTests:
assert rep.failed
assert rep.when == "call"
- def test_exit_propagates(self, testdir) -> None:
+ def test_exit_propagates(self, pytester: Pytester) -> None:
try:
- testdir.runitem(
+ pytester.runitem(
"""
import pytest
def test_func():
@@ -405,9 +412,9 @@ class TestExecutionNonForked(BaseFunctionalTests):
return f
- def test_keyboardinterrupt_propagates(self, testdir) -> None:
+ def test_keyboardinterrupt_propagates(self, pytester: Pytester) -> None:
try:
- testdir.runitem(
+ pytester.runitem(
"""
def test_func():
raise KeyboardInterrupt("fake")
@@ -420,8 +427,8 @@ class TestExecutionNonForked(BaseFunctionalTests):
class TestSessionReports:
- def test_collect_result(self, testdir) -> None:
- col = testdir.getmodulecol(
+ def test_collect_result(self, pytester: Pytester) -> None:
+ col = pytester.getmodulecol(
"""
def test_func1():
pass
@@ -489,8 +496,8 @@ def test_callinfo() -> None:
@pytest.mark.xfail
-def test_runtest_in_module_ordering(testdir) -> None:
- p1 = testdir.makepyfile(
+def test_runtest_in_module_ordering(pytester: Pytester) -> None:
+ p1 = pytester.makepyfile(
"""
import pytest
def pytest_runtest_setup(item): # runs after class-level!
@@ -517,7 +524,7 @@ def test_runtest_in_module_ordering(testdir) -> None:
del item.function.mylist
"""
)
- result = testdir.runpytest(p1)
+ result = pytester.runpytest(p1)
result.stdout.fnmatch_lines(["*2 passed*"])
@@ -547,8 +554,8 @@ def test_pytest_fail() -> None:
assert s.startswith("Failed")
-def test_pytest_exit_msg(testdir) -> None:
- testdir.makeconftest(
+def test_pytest_exit_msg(pytester: Pytester) -> None:
+ pytester.makeconftest(
"""
import pytest
@@ -556,7 +563,7 @@ def test_pytest_exit_msg(testdir) -> None:
pytest.exit('oh noes')
"""
)
- result = testdir.runpytest()
+ result = pytester.runpytest()
result.stderr.fnmatch_lines(["Exit: oh noes"])
@@ -570,22 +577,22 @@ def _strip_resource_warnings(lines):
]
-def test_pytest_exit_returncode(testdir) -> None:
- testdir.makepyfile(
+def test_pytest_exit_returncode(pytester: Pytester) -> None:
+ pytester.makepyfile(
"""\
import pytest
def test_foo():
pytest.exit("some exit msg", 99)
"""
)
- result = testdir.runpytest()
+ result = pytester.runpytest()
result.stdout.fnmatch_lines(["*! *Exit: some exit msg !*"])
assert _strip_resource_warnings(result.stderr.lines) == []
assert result.ret == 99
# It prints to stderr also in case of exit during pytest_sessionstart.
- testdir.makeconftest(
+ pytester.makeconftest(
"""\
import pytest
@@ -593,7 +600,7 @@ def test_pytest_exit_returncode(testdir) -> None:
pytest.exit("during_sessionstart", 98)
"""
)
- result = testdir.runpytest()
+ result = pytester.runpytest()
result.stdout.fnmatch_lines(["*! *Exit: during_sessionstart !*"])
assert _strip_resource_warnings(result.stderr.lines) == [
"Exit: during_sessionstart"
@@ -601,9 +608,9 @@ def test_pytest_exit_returncode(testdir) -> None:
assert result.ret == 98
-def test_pytest_fail_notrace_runtest(testdir) -> None:
+def test_pytest_fail_notrace_runtest(pytester: Pytester) -> None:
"""Test pytest.fail(..., pytrace=False) does not show tracebacks during test run."""
- testdir.makepyfile(
+ pytester.makepyfile(
"""
import pytest
def test_hello():
@@ -612,14 +619,14 @@ def test_pytest_fail_notrace_runtest(testdir) -> None:
pytest.fail("world", pytrace=False)
"""
)
- result = testdir.runpytest()
+ result = pytester.runpytest()
result.stdout.fnmatch_lines(["world", "hello"])
result.stdout.no_fnmatch_line("*def teardown_function*")
-def test_pytest_fail_notrace_collection(testdir) -> None:
+def test_pytest_fail_notrace_collection(pytester: Pytester) -> None:
"""Test pytest.fail(..., pytrace=False) does not show tracebacks during collection."""
- testdir.makepyfile(
+ pytester.makepyfile(
"""
import pytest
def some_internal_function():
@@ -627,17 +634,17 @@ def test_pytest_fail_notrace_collection(testdir) -> None:
some_internal_function()
"""
)
- result = testdir.runpytest()
+ result = pytester.runpytest()
result.stdout.fnmatch_lines(["hello"])
result.stdout.no_fnmatch_line("*def some_internal_function()*")
-def test_pytest_fail_notrace_non_ascii(testdir) -> None:
+def test_pytest_fail_notrace_non_ascii(pytester: Pytester) -> None:
"""Fix pytest.fail with pytrace=False with non-ascii characters (#1178).
This tests with native and unicode strings containing non-ascii chars.
"""
- testdir.makepyfile(
+ pytester.makepyfile(
"""\
import pytest
@@ -645,28 +652,28 @@ def test_pytest_fail_notrace_non_ascii(testdir) -> None:
pytest.fail('oh oh: ☺', pytrace=False)
"""
)
- result = testdir.runpytest()
+ result = pytester.runpytest()
result.stdout.fnmatch_lines(["*test_hello*", "oh oh: ☺"])
result.stdout.no_fnmatch_line("*def test_hello*")
-def test_pytest_no_tests_collected_exit_status(testdir) -> None:
- result = testdir.runpytest()
+def test_pytest_no_tests_collected_exit_status(pytester: Pytester) -> None:
+ result = pytester.runpytest()
result.stdout.fnmatch_lines(["*collected 0 items*"])
assert result.ret == ExitCode.NO_TESTS_COLLECTED
- testdir.makepyfile(
+ pytester.makepyfile(
test_foo="""
def test_foo():
assert 1
"""
)
- result = testdir.runpytest()
+ result = pytester.runpytest()
result.stdout.fnmatch_lines(["*collected 1 item*"])
result.stdout.fnmatch_lines(["*1 passed*"])
assert result.ret == ExitCode.OK
- result = testdir.runpytest("-k nonmatch")
+ result = pytester.runpytest("-k nonmatch")
result.stdout.fnmatch_lines(["*collected 1 item*"])
result.stdout.fnmatch_lines(["*1 deselected*"])
assert result.ret == ExitCode.NO_TESTS_COLLECTED
@@ -677,7 +684,7 @@ def test_exception_printing_skip() -> None:
try:
pytest.skip("hello")
except pytest.skip.Exception:
- excinfo = _pytest._code.ExceptionInfo.from_current()
+ excinfo = ExceptionInfo.from_current()
s = excinfo.exconly(tryshort=True)
assert s.startswith("Skipped")
@@ -698,10 +705,10 @@ def test_importorskip(monkeypatch) -> None:
excrepr = excinfo.getrepr()
assert excrepr is not None
assert excrepr.reprcrash is not None
- path = py.path.local(excrepr.reprcrash.path)
+ path = Path(excrepr.reprcrash.path)
# check that importorskip reports the actual call
# in this test the test_runner.py file
- assert path.purebasename == "test_runner"
+ assert path.stem == "test_runner"
pytest.raises(SyntaxError, pytest.importorskip, "x y z")
pytest.raises(SyntaxError, pytest.importorskip, "x=y")
mod = types.ModuleType("hello123")
@@ -712,9 +719,7 @@ def test_importorskip(monkeypatch) -> None:
mod2 = pytest.importorskip("hello123", minversion="1.3")
assert mod2 == mod
except pytest.skip.Exception: # pragma: no cover
- assert False, "spurious skip: {}".format(
- _pytest._code.ExceptionInfo.from_current()
- )
+ assert False, f"spurious skip: {ExceptionInfo.from_current()}"
def test_importorskip_imports_last_module_part() -> None:
@@ -732,14 +737,12 @@ def test_importorskip_dev_module(monkeypatch) -> None:
with pytest.raises(pytest.skip.Exception):
pytest.importorskip("mockmodule1", minversion="0.14.0")
except pytest.skip.Exception: # pragma: no cover
- assert False, "spurious skip: {}".format(
- _pytest._code.ExceptionInfo.from_current()
- )
+ assert False, f"spurious skip: {ExceptionInfo.from_current()}"
-def test_importorskip_module_level(testdir) -> None:
+def test_importorskip_module_level(pytester: Pytester) -> None:
"""`importorskip` must be able to skip entire modules when used at module level."""
- testdir.makepyfile(
+ pytester.makepyfile(
"""
import pytest
foobarbaz = pytest.importorskip("foobarbaz")
@@ -748,13 +751,13 @@ def test_importorskip_module_level(testdir) -> None:
pass
"""
)
- result = testdir.runpytest()
+ result = pytester.runpytest()
result.stdout.fnmatch_lines(["*collected 0 items / 1 skipped*"])
-def test_importorskip_custom_reason(testdir) -> None:
+def test_importorskip_custom_reason(pytester: Pytester) -> None:
"""Make sure custom reasons are used."""
- testdir.makepyfile(
+ pytester.makepyfile(
"""
import pytest
foobarbaz = pytest.importorskip("foobarbaz2", reason="just because")
@@ -763,13 +766,13 @@ def test_importorskip_custom_reason(testdir) -> None:
pass
"""
)
- result = testdir.runpytest("-ra")
+ result = pytester.runpytest("-ra")
result.stdout.fnmatch_lines(["*just because*"])
result.stdout.fnmatch_lines(["*collected 0 items / 1 skipped*"])
-def test_pytest_cmdline_main(testdir) -> None:
- p = testdir.makepyfile(
+def test_pytest_cmdline_main(pytester: Pytester) -> None:
+ p = pytester.makepyfile(
"""
import pytest
def test_hello():
@@ -786,8 +789,8 @@ def test_pytest_cmdline_main(testdir) -> None:
assert ret == 0
-def test_unicode_in_longrepr(testdir) -> None:
- testdir.makeconftest(
+def test_unicode_in_longrepr(pytester: Pytester) -> None:
+ pytester.makeconftest(
"""\
import pytest
@pytest.hookimpl(hookwrapper=True)
@@ -798,19 +801,19 @@ def test_unicode_in_longrepr(testdir) -> None:
rep.longrepr = 'ä'
"""
)
- testdir.makepyfile(
+ pytester.makepyfile(
"""
def test_out():
assert 0
"""
)
- result = testdir.runpytest()
+ result = pytester.runpytest()
assert result.ret == 1
assert "UnicodeEncodeError" not in result.stderr.str()
-def test_failure_in_setup(testdir) -> None:
- testdir.makepyfile(
+def test_failure_in_setup(pytester: Pytester) -> None:
+ pytester.makepyfile(
"""
def setup_module():
0/0
@@ -818,24 +821,26 @@ def test_failure_in_setup(testdir) -> None:
pass
"""
)
- result = testdir.runpytest("--tb=line")
+ result = pytester.runpytest("--tb=line")
result.stdout.no_fnmatch_line("*def setup_module*")
-def test_makereport_getsource(testdir) -> None:
- testdir.makepyfile(
+def test_makereport_getsource(pytester: Pytester) -> None:
+ pytester.makepyfile(
"""
def test_foo():
if False: pass
else: assert False
"""
)
- result = testdir.runpytest()
+ result = pytester.runpytest()
result.stdout.no_fnmatch_line("*INTERNALERROR*")
result.stdout.fnmatch_lines(["*else: assert False*"])
-def test_makereport_getsource_dynamic_code(testdir, monkeypatch) -> None:
+def test_makereport_getsource_dynamic_code(
+ pytester: Pytester, monkeypatch: MonkeyPatch
+) -> None:
"""Test that exception in dynamically generated code doesn't break getting the source line."""
import inspect
@@ -849,7 +854,7 @@ def test_makereport_getsource_dynamic_code(testdir, monkeypatch) -> None:
monkeypatch.setattr(inspect, "findsource", findsource)
- testdir.makepyfile(
+ pytester.makepyfile(
"""
import pytest
@@ -861,7 +866,7 @@ def test_makereport_getsource_dynamic_code(testdir, monkeypatch) -> None:
assert False
"""
)
- result = testdir.runpytest("-vv")
+ result = pytester.runpytest("-vv")
result.stdout.no_fnmatch_line("*INTERNALERROR*")
result.stdout.fnmatch_lines(["*test_fix*", "*fixture*'missing'*not found*"])
@@ -896,12 +901,12 @@ def test_store_except_info_on_error() -> None:
assert not hasattr(sys, "last_traceback")
-def test_current_test_env_var(testdir, monkeypatch) -> None:
+def test_current_test_env_var(pytester: Pytester, monkeypatch: MonkeyPatch) -> None:
pytest_current_test_vars: List[Tuple[str, str]] = []
monkeypatch.setattr(
sys, "pytest_current_test_vars", pytest_current_test_vars, raising=False
)
- testdir.makepyfile(
+ pytester.makepyfile(
"""
import pytest
import sys
@@ -917,7 +922,7 @@ def test_current_test_env_var(testdir, monkeypatch) -> None:
sys.pytest_current_test_vars.append(('call', os.environ['PYTEST_CURRENT_TEST']))
"""
)
- result = testdir.runpytest_inprocess()
+ result = pytester.runpytest_inprocess()
assert result.ret == 0
test_id = "test_current_test_env_var.py::test"
assert pytest_current_test_vars == [
@@ -934,8 +939,8 @@ class TestReportContents:
def getrunner(self):
return lambda item: runner.runtestprotocol(item, log=False)
- def test_longreprtext_pass(self, testdir) -> None:
- reports = testdir.runitem(
+ def test_longreprtext_pass(self, pytester: Pytester) -> None:
+ reports = pytester.runitem(
"""
def test_func():
pass
@@ -944,9 +949,9 @@ class TestReportContents:
rep = reports[1]
assert rep.longreprtext == ""
- def test_longreprtext_skip(self, testdir) -> None:
+ def test_longreprtext_skip(self, pytester: Pytester) -> None:
"""TestReport.longreprtext can handle non-str ``longrepr`` attributes (#7559)"""
- reports = testdir.runitem(
+ reports = pytester.runitem(
"""
import pytest
def test_func():
@@ -957,22 +962,22 @@ class TestReportContents:
assert isinstance(call_rep.longrepr, tuple)
assert "Skipped" in call_rep.longreprtext
- def test_longreprtext_collect_skip(self, testdir) -> None:
+ def test_longreprtext_collect_skip(self, pytester: Pytester) -> None:
"""CollectReport.longreprtext can handle non-str ``longrepr`` attributes (#7559)"""
- testdir.makepyfile(
+ pytester.makepyfile(
"""
import pytest
pytest.skip(allow_module_level=True)
"""
)
- rec = testdir.inline_run()
+ rec = pytester.inline_run()
calls = rec.getcalls("pytest_collectreport")
_, call = calls
assert isinstance(call.report.longrepr, tuple)
assert "Skipped" in call.report.longreprtext
- def test_longreprtext_failure(self, testdir) -> None:
- reports = testdir.runitem(
+ def test_longreprtext_failure(self, pytester: Pytester) -> None:
+ reports = pytester.runitem(
"""
def test_func():
x = 1
@@ -982,8 +987,8 @@ class TestReportContents:
rep = reports[1]
assert "assert 1 == 4" in rep.longreprtext
- def test_captured_text(self, testdir) -> None:
- reports = testdir.runitem(
+ def test_captured_text(self, pytester: Pytester) -> None:
+ reports = pytester.runitem(
"""
import pytest
import sys
@@ -1012,8 +1017,8 @@ class TestReportContents:
assert call.capstderr == "setup: stderr\ncall: stderr\n"
assert teardown.capstderr == "setup: stderr\ncall: stderr\nteardown: stderr\n"
- def test_no_captured_text(self, testdir) -> None:
- reports = testdir.runitem(
+ def test_no_captured_text(self, pytester: Pytester) -> None:
+ reports = pytester.runitem(
"""
def test_func():
pass
@@ -1023,8 +1028,8 @@ class TestReportContents:
assert rep.capstdout == ""
assert rep.capstderr == ""
- def test_longrepr_type(self, testdir) -> None:
- reports = testdir.runitem(
+ def test_longrepr_type(self, pytester: Pytester) -> None:
+ reports = pytester.runitem(
"""
import pytest
def test_func():
@@ -1032,7 +1037,7 @@ class TestReportContents:
"""
)
rep = reports[1]
- assert isinstance(rep.longrepr, _pytest._code.code.ExceptionRepr)
+ assert isinstance(rep.longrepr, ExceptionChainRepr)
def test_outcome_exception_bad_msg() -> None: