Issue #25788: fileinput.hook_encoded() now supports an "errors" argument

for passing to open.  Original patch by Joseph Hackman.
This commit is contained in:
Serhiy Storchaka 2016-04-27 23:13:46 +03:00
parent 258a5d4dcb
commit b275210a3b
6 changed files with 40 additions and 6 deletions

View file

@ -945,7 +945,8 @@ class Test_hook_encoded(unittest.TestCase):
def test(self):
encoding = object()
result = fileinput.hook_encoded(encoding)
errors = object()
result = fileinput.hook_encoded(encoding, errors=errors)
fake_open = InvocationRecorder()
original_open = builtins.open
@ -963,8 +964,26 @@ class Test_hook_encoded(unittest.TestCase):
self.assertIs(args[0], filename)
self.assertIs(args[1], mode)
self.assertIs(kwargs.pop('encoding'), encoding)
self.assertIs(kwargs.pop('errors'), errors)
self.assertFalse(kwargs)
def test_errors(self):
with open(TESTFN, 'wb') as f:
f.write(b'\x80abc')
self.addCleanup(safe_unlink, TESTFN)
def check(errors, expected_lines):
with FileInput(files=TESTFN, mode='r',
openhook=hook_encoded('utf-8', errors=errors)) as fi:
lines = list(fi)
self.assertEqual(lines, expected_lines)
check('ignore', ['abc'])
with self.assertRaises(UnicodeDecodeError):
check('strict', ['abc'])
check('replace', ['\ufffdabc'])
check('backslashreplace', ['\\x80abc'])
def test_modes(self):
with open(TESTFN, 'wb') as f:
# UTF-7 is a convenient, seldom used encoding