diff --git a/src/_pytest/capture.py b/src/_pytest/capture.py index 6d98676be5f..837ad831ece 100644 --- a/src/_pytest/capture.py +++ b/src/_pytest/capture.py @@ -374,15 +374,6 @@ def __init__( self.tmpfile = tmpfile self._state = "initialized" - def repr(self, class_name: str) -> str: - return "<{} {} _old={} _state={!r} tmpfile={!r}>".format( - class_name, - self.name, - (hasattr(self, "_old") and repr(self._old)) or "", - self._state, - self.tmpfile, - ) - def __repr__(self) -> str: return "<{} {} _old={} _state={!r} tmpfile={!r}>".format( self.__class__.__name__, @@ -996,6 +987,25 @@ def disabled(self) -> Generator[None]: # The fixtures. +@contextlib.contextmanager +def _capture_fixture( + request: SubRequest, + captureclass: type[CaptureBase[AnyStr]], + config: dict[str, Any] | None = None, +) -> Generator[CaptureFixture[AnyStr]]: + capman: CaptureManager = request.config.pluginmanager.getplugin("capturemanager") + capture_fixture = CaptureFixture( + captureclass, request, config=config, _ispytest=True + ) + capman.set_fixture(capture_fixture) + capture_fixture._start() + try: + yield capture_fixture + finally: + capture_fixture.close() + capman.unset_fixture() + + @fixture def capsys(request: SubRequest) -> Generator[CaptureFixture[str]]: r"""Enable text capturing of writes to ``sys.stdout`` and ``sys.stderr``. @@ -1015,13 +1025,8 @@ def test_output(capsys): captured = capsys.readouterr() assert captured.out == "hello\n" """ - capman: CaptureManager = request.config.pluginmanager.getplugin("capturemanager") - capture_fixture = CaptureFixture(SysCapture, request, _ispytest=True) - capman.set_fixture(capture_fixture) - capture_fixture._start() - yield capture_fixture - capture_fixture.close() - capman.unset_fixture() + with _capture_fixture(request, SysCapture) as fixture: + yield fixture @fixture @@ -1048,15 +1053,8 @@ def test_output(capteesys): captured = capteesys.readouterr() assert captured.out == "hello\n" """ - capman: CaptureManager = request.config.pluginmanager.getplugin("capturemanager") - capture_fixture = CaptureFixture( - SysCapture, request, config=dict(tee=True), _ispytest=True - ) - capman.set_fixture(capture_fixture) - capture_fixture._start() - yield capture_fixture - capture_fixture.close() - capman.unset_fixture() + with _capture_fixture(request, SysCapture, config={"tee": True}) as fixture: + yield fixture @fixture @@ -1078,13 +1076,8 @@ def test_output(capsysbinary): captured = capsysbinary.readouterr() assert captured.out == b"hello\n" """ - capman: CaptureManager = request.config.pluginmanager.getplugin("capturemanager") - capture_fixture = CaptureFixture(SysCaptureBinary, request, _ispytest=True) - capman.set_fixture(capture_fixture) - capture_fixture._start() - yield capture_fixture - capture_fixture.close() - capman.unset_fixture() + with _capture_fixture(request, SysCaptureBinary) as fixture: + yield fixture @fixture @@ -1106,13 +1099,8 @@ def test_system_echo(capfd): captured = capfd.readouterr() assert captured.out == "hello\n" """ - capman: CaptureManager = request.config.pluginmanager.getplugin("capturemanager") - capture_fixture = CaptureFixture(FDCapture, request, _ispytest=True) - capman.set_fixture(capture_fixture) - capture_fixture._start() - yield capture_fixture - capture_fixture.close() - capman.unset_fixture() + with _capture_fixture(request, FDCapture) as fixture: + yield fixture @fixture @@ -1135,10 +1123,5 @@ def test_system_echo(capfdbinary): assert captured.out == b"hello\n" """ - capman: CaptureManager = request.config.pluginmanager.getplugin("capturemanager") - capture_fixture = CaptureFixture(FDCaptureBinary, request, _ispytest=True) - capman.set_fixture(capture_fixture) - capture_fixture._start() - yield capture_fixture - capture_fixture.close() - capman.unset_fixture() + with _capture_fixture(request, FDCaptureBinary) as fixture: + yield fixture