Spaces:
Running
Running
"""Tests for distutils.log""" | |
import io | |
import sys | |
import unittest | |
from test.support import swap_attr, run_unittest | |
from distutils import log | |
class TestLog(unittest.TestCase): | |
def test_non_ascii(self): | |
# Issues #8663, #34421: test that non-encodable text is escaped with | |
# backslashreplace error handler and encodable non-ASCII text is | |
# output as is. | |
for errors in ('strict', 'backslashreplace', 'surrogateescape', | |
'replace', 'ignore'): | |
with self.subTest(errors=errors): | |
stdout = io.TextIOWrapper(io.BytesIO(), | |
encoding='cp437', errors=errors) | |
stderr = io.TextIOWrapper(io.BytesIO(), | |
encoding='cp437', errors=errors) | |
old_threshold = log.set_threshold(log.DEBUG) | |
try: | |
with swap_attr(sys, 'stdout', stdout), \ | |
swap_attr(sys, 'stderr', stderr): | |
log.debug('Dεbug\tMėssãge') | |
log.fatal('Fαtal\tÈrrōr') | |
finally: | |
log.set_threshold(old_threshold) | |
stdout.seek(0) | |
self.assertEqual(stdout.read().rstrip(), | |
'Dεbug\tM?ss?ge' if errors == 'replace' else | |
'Dεbug\tMssge' if errors == 'ignore' else | |
'Dεbug\tM\\u0117ss\\xe3ge') | |
stderr.seek(0) | |
self.assertEqual(stderr.read().rstrip(), | |
'Fαtal\t?rr?r' if errors == 'replace' else | |
'Fαtal\trrr' if errors == 'ignore' else | |
'Fαtal\t\\xc8rr\\u014dr') | |
def test_suite(): | |
return unittest.makeSuite(TestLog) | |
if __name__ == "__main__": | |
run_unittest(test_suite()) | |