mirror of
https://github.com/python/cpython.git
synced 2025-11-24 20:30:18 +00:00
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:
parent
376559bf54
commit
6ff62ac4fb
3 changed files with 18 additions and 0 deletions
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue