[3.15] gh-139445: Skip pyrepl tests if the terminal is not supported (GH-154497) (GH-154529)

They were only skipped if TERM was unset or "dumb", but pyrepl also
needs the terminal to have several capabilities.
(cherry picked from commit 7745710bec)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Miss Islington (bot)
2026-07-23 13:15:08 +02:00
committed by GitHub
parent 41d7b3cf49
commit aed19a7cd3
+15 -2
View File
@@ -13,7 +13,7 @@ import sys
import tempfile
from functools import partial
from pkgutil import ModuleInfo
from unittest import TestCase, skipUnless, skipIf, SkipTest
from unittest import TestCase, skipUnless, SkipTest
from unittest.mock import Mock, patch
import warnings
from test.support import (
@@ -37,6 +37,7 @@ from .support import (
code_to_events,
)
from _colorize import ANSIColors, get_theme
from _pyrepl import terminfo
from _pyrepl.console import Event
from _pyrepl.completing_reader import stripcolor
from _pyrepl._module_completer import (
@@ -1998,8 +1999,20 @@ class TestDumbTerminal(ReplTestCase):
self.assertNotIn("Traceback", output)
def supports_pyrepl():
# pyrepl falls back to the basic REPL if the terminal lacks any of the
# capabilities which UnixConsole requires. This covers an unset or
# "dumb" TERM as well, they are resolved to the "dumb" capabilities.
try:
info = terminfo.TermInfo(None)
except Exception:
return False
return all(info.get(cap) is not None
for cap in ("bel", "clear", "cup", "el"))
@skipUnless(pty, "requires pty")
@skipIf((os.environ.get("TERM") or "dumb") == "dumb", "can't use pyrepl in dumb terminal")
@skipUnless(supports_pyrepl(), "can't use pyrepl in this terminal")
class TestMain(ReplTestCase):
def setUp(self):
# Cleanup from PYTHON* variables to isolate from local