Commit 188ede67 authored by Antoine Pitrou's avatar Antoine Pitrou

Merge for issue #15744: add tests for the writelines() method of file objects.

parents 5fede313 2f9f260f
...@@ -10,6 +10,7 @@ from weakref import proxy ...@@ -10,6 +10,7 @@ from weakref import proxy
from functools import wraps from functools import wraps
from test.support import TESTFN, check_warnings, run_unittest, make_bad_fd from test.support import TESTFN, check_warnings, run_unittest, make_bad_fd
from collections import UserList
from _io import FileIO as _FileIO from _io import FileIO as _FileIO
...@@ -68,6 +69,27 @@ class AutoFileTests(unittest.TestCase): ...@@ -68,6 +69,27 @@ class AutoFileTests(unittest.TestCase):
n = self.f.readinto(a) n = self.f.readinto(a)
self.assertEqual(array('b', [1, 2]), a[:n]) self.assertEqual(array('b', [1, 2]), a[:n])
def testWritelinesList(self):
l = [b'123', b'456']
self.f.writelines(l)
self.f.close()
self.f = _FileIO(TESTFN, 'rb')
buf = self.f.read()
self.assertEqual(buf, b'123456')
def testWritelinesUserList(self):
l = UserList([b'123', b'456'])
self.f.writelines(l)
self.f.close()
self.f = _FileIO(TESTFN, 'rb')
buf = self.f.read()
self.assertEqual(buf, b'123456')
def testWritelinesError(self):
self.assertRaises(TypeError, self.f.writelines, [1, 2, 3])
self.assertRaises(TypeError, self.f.writelines, None)
self.assertRaises(TypeError, self.f.writelines, "abc")
def test_none_args(self): def test_none_args(self):
self.f.write(b"hi\nbye\nabc") self.f.write(b"hi\nbye\nabc")
self.f.close() self.f.close()
......
...@@ -32,7 +32,7 @@ import time ...@@ -32,7 +32,7 @@ import time
import unittest import unittest
import warnings import warnings
import weakref import weakref
from collections import deque from collections import deque, UserList
from itertools import cycle, count from itertools import cycle, count
from test import support from test import support
...@@ -1201,6 +1201,29 @@ class BufferedWriterTest(unittest.TestCase, CommonBufferedTests): ...@@ -1201,6 +1201,29 @@ class BufferedWriterTest(unittest.TestCase, CommonBufferedTests):
bufio.flush() bufio.flush()
self.assertEqual(b"abc", writer._write_stack[0]) self.assertEqual(b"abc", writer._write_stack[0])
def test_writelines(self):
l = [b'ab', b'cd', b'ef']
writer = self.MockRawIO()
bufio = self.tp(writer, 8)
bufio.writelines(l)
bufio.flush()
self.assertEqual(b''.join(writer._write_stack), b'abcdef')
def test_writelines_userlist(self):
l = UserList([b'ab', b'cd', b'ef'])
writer = self.MockRawIO()
bufio = self.tp(writer, 8)
bufio.writelines(l)
bufio.flush()
self.assertEqual(b''.join(writer._write_stack), b'abcdef')
def test_writelines_error(self):
writer = self.MockRawIO()
bufio = self.tp(writer, 8)
self.assertRaises(TypeError, bufio.writelines, [1, 2, 3])
self.assertRaises(TypeError, bufio.writelines, None)
self.assertRaises(TypeError, bufio.writelines, 'abc')
def test_destructor(self): def test_destructor(self):
writer = self.MockRawIO() writer = self.MockRawIO()
bufio = self.tp(writer, 8) bufio = self.tp(writer, 8)
...@@ -2304,6 +2327,28 @@ class TextIOWrapperTest(unittest.TestCase): ...@@ -2304,6 +2327,28 @@ class TextIOWrapperTest(unittest.TestCase):
reads += c reads += c
self.assertEqual(reads, "A"*127+"\nB") self.assertEqual(reads, "A"*127+"\nB")
def test_writelines(self):
l = ['ab', 'cd', 'ef']
buf = self.BytesIO()
txt = self.TextIOWrapper(buf)
txt.writelines(l)
txt.flush()
self.assertEqual(buf.getvalue(), b'abcdef')
def test_writelines_userlist(self):
l = UserList(['ab', 'cd', 'ef'])
buf = self.BytesIO()
txt = self.TextIOWrapper(buf)
txt.writelines(l)
txt.flush()
self.assertEqual(buf.getvalue(), b'abcdef')
def test_writelines_error(self):
txt = self.TextIOWrapper(self.BytesIO())
self.assertRaises(TypeError, txt.writelines, [1, 2, 3])
self.assertRaises(TypeError, txt.writelines, None)
self.assertRaises(TypeError, txt.writelines, b'abc')
def test_issue1395_1(self): def test_issue1395_1(self):
txt = self.TextIOWrapper(self.BytesIO(self.testdata), encoding="ascii") txt = self.TextIOWrapper(self.BytesIO(self.testdata), encoding="ascii")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment