gh-140082: Forward colorizing from libregrtest to unittest (#140083)

libregrtest redirects test output to a file as part of its operation.
When `unittest` checks to see if it should colorize with
`isatty(sys.stdout)` that fails resulting in no colorizing of the
unittest output.

Update `libregrtest` to set `FORCE_COLOR=1` when redirecting test output
so that unittest will do color printing.

Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
Cody Maloney 2025-10-29 05:33:44 -07:00 committed by GitHub
parent 376559bf54
commit 6ff62ac4fb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 18 additions and 0 deletions

View file

@ -8,6 +8,7 @@ import sys
import unittest
from test import support
from test.support.os_helper import TESTFN_UNDECODABLE, FS_NONASCII
from _colorize import can_colorize # type: ignore[import-not-found]
from .filter import set_match_tests
from .runtests import RunTests
@ -139,3 +140,10 @@ def setup_tests(runtests: RunTests) -> None:
gc.set_threshold(runtests.gc_threshold)
random.seed(runtests.random_seed)
# sys.stdout is redirected to a StringIO in single process mode on which
# color auto-detect fails as StringIO is not a TTY. If the original
# sys.stdout supports color pass that through with FORCE_COLOR so that when
# results are printed, such as with -W, they get color.
if can_colorize(file=sys.stdout):
os.environ['FORCE_COLOR'] = "1"

View file

@ -1,6 +1,7 @@
import subprocess
import sys
import os
from _colorize import can_colorize # type: ignore[import-not-found]
from typing import Any, NoReturn
from test.support import os_helper, Py_DEBUG
@ -32,6 +33,12 @@ def create_worker_process(runtests: WorkerRunTests, output_fd: int,
env['TEMP'] = tmp_dir
env['TMP'] = tmp_dir
# The subcommand is run with a temporary output which means it is not a TTY
# and won't auto-color. The test results are printed to stdout so if we can
# color that have the subprocess use color.
if can_colorize(file=sys.stdout):
env['FORCE_COLOR'] = '1'
# Running the child from the same working directory as regrtest's original
# invocation ensures that TEMPDIR for the child is the same when
# sysconfig.is_python_build() is true. See issue 15300.

View file

@ -0,0 +1,3 @@
Update ``python -m test`` to set ``FORCE_COLOR=1`` when being run with color
enabled so that :mod:`unittest` which is run by it with redirected output will
output in color.