diff options
Diffstat (limited to 'tests/files/tests.py')
| -rw-r--r-- | tests/files/tests.py | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/tests/files/tests.py b/tests/files/tests.py index be243b2527..f2f1df3626 100644 --- a/tests/files/tests.py +++ b/tests/files/tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from io import BytesIO +from io import BytesIO, StringIO import os import gzip import tempfile @@ -72,6 +72,54 @@ class FileTests(unittest.TestCase): file = File(BytesIO(b'one\ntwo\nthree')) self.assertEqual(list(file), [b'one\n', b'two\n', b'three']) + def test_file_iteration_windows_newlines(self): + """ + #8149 - File objects with \r\n line endings should yield lines + when iterated over. + """ + f = File(BytesIO(b'one\r\ntwo\r\nthree')) + self.assertEqual(list(f), [b'one\r\n', b'two\r\n', b'three']) + + def test_file_iteration_mac_newlines(self): + """ + #8149 - File objects with \r line endings should yield lines + when iterated over. + """ + f = File(BytesIO(b'one\rtwo\rthree')) + self.assertEqual(list(f), [b'one\r', b'two\r', b'three']) + + def test_file_iteration_mixed_newlines(self): + f = File(BytesIO(b'one\rtwo\nthree\r\nfour')) + self.assertEqual(list(f), [b'one\r', b'two\n', b'three\r\n', b'four']) + + def test_file_iteration_with_unix_newline_at_chunk_boundary(self): + f = File(BytesIO(b'one\ntwo\nthree')) + # Set chunk size to create a boundary after \n: + # b'one\n... + # ^ + f.DEFAULT_CHUNK_SIZE = 4 + self.assertEqual(list(f), [b'one\n', b'two\n', b'three']) + + def test_file_iteration_with_windows_newline_at_chunk_boundary(self): + f = File(BytesIO(b'one\r\ntwo\r\nthree')) + # Set chunk size to create a boundary between \r and \n: + # b'one\r\n... + # ^ + f.DEFAULT_CHUNK_SIZE = 4 + self.assertEqual(list(f), [b'one\r\n', b'two\r\n', b'three']) + + def test_file_iteration_with_mac_newline_at_chunk_boundary(self): + f = File(BytesIO(b'one\rtwo\rthree')) + # Set chunk size to create a boundary after \r: + # b'one\r... + # ^ + f.DEFAULT_CHUNK_SIZE = 4 + self.assertEqual(list(f), [b'one\r', b'two\r', b'three']) + + def test_file_iteration_with_text(self): + f = File(StringIO('one\ntwo\nthree')) + self.assertEqual(list(f), ['one\n', 'two\n', 'three']) + class NoNameFileTestCase(unittest.TestCase): """ |
