mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
Fixed issue #4233.
Changed semantic of _fileio.FileIO's close() method on file objects with closefd=False. The file descriptor is still kept open but the file object behaves like a closed file. The FileIO object also got a new readonly attribute closefd. Approved by Barry
This commit is contained in:
parent
b37509b11b
commit
ecc42a2b82
4 changed files with 41 additions and 15 deletions
|
@ -272,6 +272,29 @@ class IOTest(unittest.TestCase):
|
|||
self.assertRaises(ValueError, io.open, support.TESTFN, 'w',
|
||||
closefd=False)
|
||||
|
||||
def testReadClosed(self):
|
||||
with io.open(support.TESTFN, "w") as f:
|
||||
f.write("egg\n")
|
||||
with io.open(support.TESTFN, "r") as f:
|
||||
file = io.open(f.fileno(), "r", closefd=False)
|
||||
self.assertEqual(file.read(), "egg\n")
|
||||
file.seek(0)
|
||||
file.close()
|
||||
self.assertRaises(ValueError, file.read)
|
||||
|
||||
def test_no_closefd_with_filename(self):
|
||||
# can't use closefd in combination with a file name
|
||||
self.assertRaises(ValueError, io.open, support.TESTFN, "r", closefd=False)
|
||||
|
||||
def test_closefd_attr(self):
|
||||
with io.open(support.TESTFN, "wb") as f:
|
||||
f.write(b"egg\n")
|
||||
with io.open(support.TESTFN, "r") as f:
|
||||
self.assertEqual(f.buffer.raw.closefd, True)
|
||||
file = io.open(f.fileno(), "r", closefd=False)
|
||||
self.assertEqual(file.buffer.raw.closefd, False)
|
||||
|
||||
|
||||
class MemorySeekTestMixin:
|
||||
|
||||
def testInit(self):
|
||||
|
@ -1237,15 +1260,6 @@ class MiscIOTest(unittest.TestCase):
|
|||
else:
|
||||
self.assert_(issubclass(obj, io.IOBase))
|
||||
|
||||
def test_fileio_warnings(self):
|
||||
with support.check_warnings() as w:
|
||||
self.assertEqual(w.warnings, [])
|
||||
self.assertRaises(TypeError, io.FileIO, [])
|
||||
self.assertEqual(w.warnings, [])
|
||||
self.assertRaises(ValueError, io.FileIO, "/some/invalid/name", "rt")
|
||||
self.assertEqual(w.warnings, [])
|
||||
|
||||
|
||||
def test_main():
|
||||
support.run_unittest(IOTest, BytesIOTest, StringIOTest,
|
||||
BufferedReaderTest, BufferedWriterTest,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue