mirror of
https://github.com/python/cpython.git
synced 2025-09-09 18:32:22 +00:00
Issue #8533: revert r80694; try a different fix: regrtest uses backslashreplace
error handler for stdout to avoid UnicodeEncodeError (write non-ASCII character to stdout using ASCII encoding)
This commit is contained in:
parent
4d39f6e09a
commit
f58087ba29
3 changed files with 16 additions and 5 deletions
|
@ -376,6 +376,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
|
||||||
elif o in ('-j', '--multiprocess'):
|
elif o in ('-j', '--multiprocess'):
|
||||||
use_mp = int(a)
|
use_mp = int(a)
|
||||||
elif o == '--slaveargs':
|
elif o == '--slaveargs':
|
||||||
|
replace_stdout()
|
||||||
args, kwargs = json.loads(a)
|
args, kwargs = json.loads(a)
|
||||||
try:
|
try:
|
||||||
result = runtest(*args, **kwargs)
|
result = runtest(*args, **kwargs)
|
||||||
|
@ -514,6 +515,8 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
|
||||||
else:
|
else:
|
||||||
tests = iter(selected)
|
tests = iter(selected)
|
||||||
|
|
||||||
|
replace_stdout()
|
||||||
|
|
||||||
if use_mp:
|
if use_mp:
|
||||||
try:
|
try:
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
@ -727,6 +730,14 @@ def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS):
|
||||||
tests.append(modname)
|
tests.append(modname)
|
||||||
return stdtests + sorted(tests)
|
return stdtests + sorted(tests)
|
||||||
|
|
||||||
|
def replace_stdout():
|
||||||
|
"""Set stdout encoder error handler to backslashreplace (as stderr error
|
||||||
|
handler) to avoid UnicodeEncodeError when printing a traceback"""
|
||||||
|
stdout = sys.stdout
|
||||||
|
sys.stdout = open(stdout.fileno(), 'w',
|
||||||
|
encoding=stdout.encoding,
|
||||||
|
errors="backslashreplace")
|
||||||
|
|
||||||
def runtest(test, verbose, quiet,
|
def runtest(test, verbose, quiet,
|
||||||
testdir=None, huntrleaks=False, debug=False, use_resources=None):
|
testdir=None, huntrleaks=False, debug=False, use_resources=None):
|
||||||
"""Run a single test.
|
"""Run a single test.
|
||||||
|
@ -939,8 +950,8 @@ def runtest_inner(test, verbose, quiet,
|
||||||
print("test", test, "crashed --", str(type) + ":", value)
|
print("test", test, "crashed --", str(type) + ":", value)
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
if verbose or debug:
|
if verbose or debug:
|
||||||
traceback.print_exc(file=sys.stderr)
|
traceback.print_exc(file=sys.stdout)
|
||||||
sys.stderr.flush()
|
sys.stdout.flush()
|
||||||
return FAILED, test_time
|
return FAILED, test_time
|
||||||
else:
|
else:
|
||||||
if refleak:
|
if refleak:
|
||||||
|
|
|
@ -1020,7 +1020,7 @@ def check_impl_detail(**guards):
|
||||||
def _run_suite(suite):
|
def _run_suite(suite):
|
||||||
"""Run tests from a unittest.TestSuite-derived class."""
|
"""Run tests from a unittest.TestSuite-derived class."""
|
||||||
if verbose:
|
if verbose:
|
||||||
runner = unittest.TextTestRunner(sys.stderr, verbosity=2)
|
runner = unittest.TextTestRunner(sys.stdout, verbosity=2)
|
||||||
else:
|
else:
|
||||||
runner = BasicTestRunner()
|
runner = BasicTestRunner()
|
||||||
|
|
||||||
|
|
|
@ -1201,8 +1201,8 @@ Documentation
|
||||||
Tests
|
Tests
|
||||||
-----
|
-----
|
||||||
|
|
||||||
- Issue #8533: Write tracebacks and failed tests to sys.stderr instead of
|
- Issue #8533: regrtest uses backslashreplace error handler for stdout to avoid
|
||||||
sys.stdout to avoid UnicodeEncodeError (use backslashreplace error handler)
|
UnicodeEncodeError (write non-ASCII character to stdout using ASCII encoding)
|
||||||
|
|
||||||
- Issue #8576: Remove use of find_unused_port() in test_smtplib and
|
- Issue #8576: Remove use of find_unused_port() in test_smtplib and
|
||||||
test_multiprocessing. Patch by Paul Moore.
|
test_multiprocessing. Patch by Paul Moore.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue