mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
parent
513e9b4f61
commit
2380feeff8
2 changed files with 61 additions and 3 deletions
|
@ -319,8 +319,8 @@ class _fileobject(object):
|
||||||
self._wbuf.append(data)
|
self._wbuf.append(data)
|
||||||
self._wbuf_len += len(data)
|
self._wbuf_len += len(data)
|
||||||
if (self._wbufsize == 0 or
|
if (self._wbufsize == 0 or
|
||||||
self._wbufsize == 1 and '\n' in data or
|
(self._wbufsize == 1 and '\n' in data) or
|
||||||
self._wbuf_len >= self._wbufsize):
|
(self._wbufsize > 1 and self._wbuf_len >= self._wbufsize)):
|
||||||
self.flush()
|
self.flush()
|
||||||
|
|
||||||
def writelines(self, list):
|
def writelines(self, list):
|
||||||
|
|
|
@ -962,8 +962,8 @@ class FileObjectClassTestCase(SocketConnectedTest):
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.serv_file.close()
|
self.serv_file.close()
|
||||||
self.assertTrue(self.serv_file.closed)
|
self.assertTrue(self.serv_file.closed)
|
||||||
self.serv_file = None
|
|
||||||
SocketConnectedTest.tearDown(self)
|
SocketConnectedTest.tearDown(self)
|
||||||
|
self.serv_file = None
|
||||||
|
|
||||||
def clientSetUp(self):
|
def clientSetUp(self):
|
||||||
SocketConnectedTest.clientSetUp(self)
|
SocketConnectedTest.clientSetUp(self)
|
||||||
|
@ -1151,6 +1151,64 @@ class LineBufferedFileObjectClassTestCase(FileObjectClassTestCase):
|
||||||
|
|
||||||
bufsize = 1 # Default-buffered for reading; line-buffered for writing
|
bufsize = 1 # Default-buffered for reading; line-buffered for writing
|
||||||
|
|
||||||
|
class SocketMemo(object):
|
||||||
|
"""A wrapper to keep track of sent data, needed to examine write behaviour"""
|
||||||
|
def __init__(self, sock):
|
||||||
|
self._sock = sock
|
||||||
|
self.sent = []
|
||||||
|
|
||||||
|
def send(self, data, flags=0):
|
||||||
|
n = self._sock.send(data, flags)
|
||||||
|
self.sent.append(data[:n])
|
||||||
|
return n
|
||||||
|
|
||||||
|
def sendall(self, data, flags=0):
|
||||||
|
self._sock.sendall(data, flags)
|
||||||
|
self.sent.append(data)
|
||||||
|
|
||||||
|
def __getattr__(self, attr):
|
||||||
|
return getattr(self._sock, attr)
|
||||||
|
|
||||||
|
def getsent(self):
|
||||||
|
return [e.tobytes() if isinstance(e, memoryview) else e for e in self.sent]
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
FileObjectClassTestCase.setUp(self)
|
||||||
|
self.serv_file._sock = self.SocketMemo(self.serv_file._sock)
|
||||||
|
|
||||||
|
def testLinebufferedWrite(self):
|
||||||
|
# Write two lines, in small chunks
|
||||||
|
msg = MSG.strip()
|
||||||
|
print >> self.serv_file, msg,
|
||||||
|
print >> self.serv_file, msg
|
||||||
|
|
||||||
|
# second line:
|
||||||
|
print >> self.serv_file, msg,
|
||||||
|
print >> self.serv_file, msg,
|
||||||
|
print >> self.serv_file, msg
|
||||||
|
|
||||||
|
# third line
|
||||||
|
print >> self.serv_file, ''
|
||||||
|
|
||||||
|
self.serv_file.flush()
|
||||||
|
|
||||||
|
msg1 = "%s %s\n"%(msg, msg)
|
||||||
|
msg2 = "%s %s %s\n"%(msg, msg, msg)
|
||||||
|
msg3 = "\n"
|
||||||
|
self.assertEqual(self.serv_file._sock.getsent(), [msg1, msg2, msg3])
|
||||||
|
|
||||||
|
def _testLinebufferedWrite(self):
|
||||||
|
msg = MSG.strip()
|
||||||
|
msg1 = "%s %s\n"%(msg, msg)
|
||||||
|
msg2 = "%s %s %s\n"%(msg, msg, msg)
|
||||||
|
msg3 = "\n"
|
||||||
|
l1 = self.cli_file.readline()
|
||||||
|
self.assertEqual(l1, msg1)
|
||||||
|
l2 = self.cli_file.readline()
|
||||||
|
self.assertEqual(l2, msg2)
|
||||||
|
l3 = self.cli_file.readline()
|
||||||
|
self.assertEqual(l3, msg3)
|
||||||
|
|
||||||
|
|
||||||
class SmallBufferedFileObjectClassTestCase(FileObjectClassTestCase):
|
class SmallBufferedFileObjectClassTestCase(FileObjectClassTestCase):
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue