commit:     25489cb82817ba84298702a0fd12ff176f7a1348
Author:     Brian Harring <ferringb <AT> gmail <DOT> com>
AuthorDate: Mon Nov 24 21:04:22 2025 +0000
Commit:     Brian Harring <ferringb <AT> gmail <DOT> com>
CommitDate: Mon Nov 24 21:34:36 2025 +0000
URL:        
https://gitweb.gentoo.org/proj/pkgcore/snakeoil.git/commit/?id=25489cb8

chore: update test hack for the moved python ticket.

2010 it was https://bugs.python.org/issue7567, now
it's https://github.com/python/cpython/issues/51816 .

Python's still broke, however, thus force the test
into a subprocess.  GH plays nice with this however,
so run it.

Signed-off-by: Brian Harring <ferringb <AT> gmail.com>

 tests/test_formatters.py | 57 +++++++++++++++++++++++++++---------------------
 1 file changed, 32 insertions(+), 25 deletions(-)

diff --git a/tests/test_formatters.py b/tests/test_formatters.py
index b594a5d..2b7552b 100644
--- a/tests/test_formatters.py
+++ b/tests/test_formatters.py
@@ -1,3 +1,4 @@
+import contextlib
 import curses
 import os
 import pty
@@ -5,11 +6,14 @@ from io import BytesIO
 from tempfile import TemporaryFile
 
 import pytest
+
 from snakeoil import formatters
 from snakeoil.test import protect_process
 
-# protect against python issue 7567 for the curses module.
-issue7567 = protect_process
+# protect against python GH #51816 for the curses module.
+# Short version: it hard locks the term mode and can't be updated,
+# thus we do the nasty in a subprocess.
+pythonGHissue51816 = protect_process
 
 
 class TestPlainTextFormatter:
@@ -165,7 +169,7 @@ class TerminfoFormatterTest:
             result,
         )
 
-    @issue7567
+    @pythonGHissue51816
     def test_terminfo(self):
         esc = "\x1b["
         stream = TemporaryFile()
@@ -213,7 +217,7 @@ class TerminfoFormatterTest:
         with pytest.raises(formatters.TerminfoUnsupported):
             formatters.TerminfoFormatter(stream, term="dumb")
 
-    @issue7567
+    @pythonGHissue51816
     def test_title(self):
         stream = TemporaryFile()
         try:
@@ -225,11 +229,12 @@ class TerminfoFormatterTest:
         assert b"\x1b]0;TITLE\x07" == stream.read()
 
 
-def _with_term(term, func, *args, **kwargs):
[email protected]
+def forced_term(term):
     orig_term = os.environ.get("TERM")
     try:
         os.environ["TERM"] = term
-        return func(*args, **kwargs)
+        yield
     finally:
         if orig_term is None:
             del os.environ["TERM"]
@@ -245,36 +250,38 @@ def _get_pty_pair(encoding="ascii"):
     return master, out
 
 
[email protected](
-    reason="this currently breaks on github ci due to the issue7567 workaround"
-)
 class TestGetFormatter:
-    @issue7567
+    @pythonGHissue51816
     def test_dumb_terminal(self):
         master, _out = _get_pty_pair()
-        formatter = _with_term("dumb", formatters.get_formatter, master)
-        assert isinstance(formatter, formatters.PlainTextFormatter)
+        with forced_term("dumb"):
+            formatter = formatters.get_formatter(master)
+            assert isinstance(formatter, formatters.PlainTextFormatter)
 
-    @issue7567
+    @pythonGHissue51816
     def test_vt100_terminal(self):
         master, _out = _get_pty_pair()
-        formatter = _with_term("vt100", formatters.get_formatter, master)
-        assert isinstance(formatter, formatters.PlainTextFormatter)
+        with forced_term("vt100"):
+            formatter = formatters.get_formatter(master)
+            assert isinstance(formatter, formatters.PlainTextFormatter)
 
-    @issue7567
+    @pythonGHissue51816
     def test_smart_terminal(self):
         master, _out = _get_pty_pair()
-        formatter = _with_term("xterm", formatters.get_formatter, master)
-        assert isinstance(formatter, formatters.TerminfoFormatter)
+        with forced_term("xterm"):
+            formatter = formatters.get_formatter(master)
+            assert isinstance(formatter, formatters.TerminfoFormatter)
 
-    @issue7567
+    @pythonGHissue51816
     def test_not_a_tty(self):
-        stream = TemporaryFile()
-        formatter = _with_term("xterm", formatters.get_formatter, stream)
-        assert isinstance(formatter, formatters.PlainTextFormatter)
+        with TemporaryFile() as stream:
+            with forced_term("xterm"):
+                formatter = formatters.get_formatter(stream)
+                assert isinstance(formatter, formatters.PlainTextFormatter)
 
-    @issue7567
+    @pythonGHissue51816
     def test_no_fd(self):
         stream = BytesIO()
-        formatter = _with_term("xterm", formatters.get_formatter, stream)
-        assert isinstance(formatter, formatters.PlainTextFormatter)
+        with forced_term("xterm"):
+            formatter = formatters.get_formatter(stream)
+            assert isinstance(formatter, formatters.PlainTextFormatter)

Reply via email to