gh-75245: Support line buffering in socket.makefile() (GH-12370) · python/cpython@dbac03b

GitHub

@@ -1969,6 +1969,25 @@ def test_makefile_mode(self):

19691969withsock.makefile(mode, encoding=encoding) asfp:

19701970self.assertEqual(fp.mode, mode)

197119711972+deftest_makefile_line_buffering(self):

1973+withsocket.socket() assock:

1974+formodein'r', 'w':

1975+withself.subTest(mode=mode):

1976+withsock.makefile(mode, buffering=1,

1977+encoding="utf-8") asfp:

1978+self.assertTrue(fp.line_buffering)

1979+1980+deftest_makefile_line_buffering_binary(self):

1981+# Line buffering is not supported in binary mode, as in open().

1982+withsocket.socket() assock:

1983+formodein'rb', 'wb':

1984+withself.subTest(mode=mode):

1985+withself.assertWarnsRegex(

1986+RuntimeWarning,

1987+"line buffering .* isn't supported in binary "

1988+"mode"):

1989+sock.makefile(mode, buffering=1).close()

1990+19721991deftest_makefile_invalid_mode(self):

19731992formodein'rt', 'x', '+', 'a':

19741993withself.subTest(mode=mode):

@@ -5761,10 +5780,20 @@ def testReadline(self):

57615780# Performing file readline test

57625781line=self.read_file.readline()

57635782self.assertEqual(line, self.read_msg)

5783+# Readline mode

5784+ifself.bufsize==1andself.read_mode=="r":

5785+self.assertTrue(self.read_file.line_buffering)

5764578657655787def_testReadline(self):

57665788self.write_file.write(self.write_msg)

5767-self.write_file.flush()

5789+# Readline mode: no need to flush

5790+ifself.bufsize==1andself.write_mode=="w":

5791+self.assertTrue(self.write_file.line_buffering)

5792+else:

5793+self.write_file.flush()

5794+# Prevent garbage collection from flushing

5795+# until the server has finished

5796+self.assertTrue(self.serv_finished.wait(5.0))

5768579757695798deftestCloseAfterMakefile(self):

57705799# The file returned by makefile should keep the socket open.

@@ -5922,11 +5951,6 @@ def _testWriteNonBlocking(self):

59225951self.serv_skipped="failed to saturate the socket buffer"

59235952592459535925-classLineBufferedFileObjectClassTestCase(FileObjectClassTestCase):

5926-5927-bufsize=1# Default-buffered for reading; line-buffered for writing

5928-5929-59305954classSmallBufferedFileObjectClassTestCase(FileObjectClassTestCase):

5931595559325956bufsize=2# Exercise the buffering code

@@ -5962,6 +5986,16 @@ class UnicodeReadWriteFileObjectClassTestCase(FileObjectClassTestCase):

59625986newline=''

59635987596459885989+classUnicodeLineBufferedFileObjectClassTestCase(FileObjectClassTestCase):

5990+5991+bufsize=1# Default-buffered for reading; line-buffered for writing

5992+read_mode='r'

5993+read_msg=MSG.decode('utf-8')

5994+write_mode='w'

5995+write_msg=MSG.decode('utf-8')

5996+newline=''

5997+5998+59655999classNetworkConnectionTest(object):

59666000"""Prove network connection."""

59676001