diff --git a/src/_pytest/capture.py b/src/_pytest/capture.py index 3f9c60fb9a0..f538b67eceb 100644 --- a/src/_pytest/capture.py +++ b/src/_pytest/capture.py @@ -388,6 +388,7 @@ def __init__(self, targetfd: int) -> None: TemporaryFile(buffering=0), # type: ignore[arg-type] encoding="utf-8", errors="replace", + newline="", write_through=True, ) if targetfd in patchsysdict: diff --git a/testing/test_capture_capfd_cr.py b/testing/test_capture_capfd_cr.py new file mode 100644 index 00000000000..d922079fb91 --- /dev/null +++ b/testing/test_capture_capfd_cr.py @@ -0,0 +1,19 @@ +import sys + + +def test_capfd_includes_carriage_return(capfd): + print("Greetings from DOS", end="\r") + out, err = capfd.readouterr() + assert out.endswith("\r") + + +def test_capfd_preserves_crlf(capfd): + print("X\r\nY", end="", flush=True) + out, err = capfd.readouterr() + assert "\r\n" in out + + +def test_capfd_stderr_includes_carriage_return(capfd): + print("Greetings from stderr", end="\r", file=sys.stderr) + out, err = capfd.readouterr() + assert err.endswith("\r")