summaryrefslogtreecommitdiff
path: root/Lib/test/test_file.py
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2008-12-13 15:36:49 +0000
committerMartin v. Löwis <martin@v.loewis.de>2008-12-13 15:36:49 +0000
commit084486b234b0b78bde371c5c227bd4951ed6acde (patch)
treebed33623723b6a52629eed03f818d7151447f3fb /Lib/test/test_file.py
parent710fb8bf4597f1c81f1fc50a6b174fc04c68dc42 (diff)
downloadcpython-git-084486b234b0b78bde371c5c227bd4951ed6acde.tar.gz
Issue #1706039: Support continued reading from a file even after
EOF was hit.
Diffstat (limited to 'Lib/test/test_file.py')
-rw-r--r--Lib/test/test_file.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/Lib/test/test_file.py b/Lib/test/test_file.py
index ba6ea47edf..830871098e 100644
--- a/Lib/test/test_file.py
+++ b/Lib/test/test_file.py
@@ -355,6 +355,48 @@ class StdoutTests(unittest.TestCase):
finally:
sys.stdout = save_stdout
+ def testReadAfterEOF(self):
+ # Regression test for SF bug #1523853.
+ # Verify read works after hitting EOF
+
+ # Prepare the testfile
+ teststring = "spam"
+ bag = open(TESTFN, "w")
+ bag.write(teststring)
+ bag.close()
+
+ # And buf for readinto
+ buf = array("c", " "*len(teststring))
+
+ # Test for appropriate errors mixing read* and iteration
+ methods = [("readline", ()), ("read",()), ("readlines", ()),
+ ("readinto", (buf,))]
+
+ for attr in 'r', 'rU':
+ for methodname, args in methods:
+ f = open(TESTFN, "rU")
+ f.seek(0, 2)
+ meth = getattr(f, methodname)
+ meth(*args) # hits EOF
+ try:
+ # Writing the same file with another file descriptor
+ append = open(TESTFN, "a+")
+ append.write(teststring)
+ append.flush()
+ append.close()
+ try:
+ meth = getattr(f, methodname)
+ if methodname == 'readlines':
+ self.failUnlessEqual(meth(*args), [teststring])
+ elif methodname == 'readinto':
+ meth(*args)
+ self.failUnlessEqual(buf.tostring(), teststring)
+ else:
+ self.failUnlessEqual(meth(*args), teststring)
+ except ValueError:
+ self.fail("read* failed after hitting EOF")
+ finally:
+ f.close()
def test_main():
# Historically, these tests have been sloppy about removing TESTFN.