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>
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
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"
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
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.
--- /dev/null
+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.