test: isolate CLI output capture with monkeypatch/redirect to fix stdout corruption in full suite runs (Issue #178)
- Replace raw patch("sys.stdout") and contextlib.redirect_stderr with pytest MonkeyPatch or contextlib redirect scoped to main calls in CLI tests (create_*, prs, python_cli, manage_labels, merge_pr, review_pr).
- Add regression tests in test_review_proofs.py for stdout/stderr remaining usable.
- Ensures normal pytest summary output without junitxml workaround; improves review validation reporting per #173.
- No behavior change to production code or gates.
Refs #178
This commit is contained in:
@@ -14,6 +14,7 @@ each precondition of a blind queue review:
|
||||
|
||||
These are the harness assertions from the issue's Required behavior 7.
|
||||
"""
|
||||
import io
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
@@ -463,5 +464,30 @@ class TestFinalReport(unittest.TestCase):
|
||||
self.assertFalse(report["merge_allowed"])
|
||||
|
||||
|
||||
class TestStdoutIsolation(unittest.TestCase):
|
||||
"""Regression test for #178: tests must not close or corrupt stdout/stderr
|
||||
(prevents need for junitxml workaround in full suite runs and review validation).
|
||||
"""
|
||||
|
||||
def test_stdout_remains_usable(self):
|
||||
"""After typical test activity (mocks, redirects, prints from mains), stdout should be usable."""
|
||||
# Verify not closed
|
||||
self.assertFalse(getattr(sys.stdout, "closed", False))
|
||||
# Should be able to write (even if captured by pytest)
|
||||
try:
|
||||
sys.stdout.write("")
|
||||
sys.stdout.flush()
|
||||
except Exception as exc:
|
||||
self.fail(f"stdout write failed after test activity: {exc}")
|
||||
|
||||
def test_stderr_remains_usable(self):
|
||||
self.assertFalse(getattr(sys.stderr, "closed", False))
|
||||
try:
|
||||
sys.stderr.write("")
|
||||
sys.stderr.flush()
|
||||
except Exception as exc:
|
||||
self.fail(f"stderr write failed: {exc}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user