Merged revisions 76805 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r76805 | benjamin.peterson | 2009-12-13 13:19:07 -0600 (Sun, 13 Dec 2009) | 7 lines

  accept None as the same as having passed no argument in file types #7349

  This is for consistency with imitation file objects like StringIO and BytesIO.

  This commit also adds a few tests, where they were lacking for concerned
  methods.
........
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 150eff4..2f76fed 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -336,7 +336,7 @@
             self.assertEqual(f.readline(2), b"xy")
             self.assertEqual(f.readline(4), b"zzy\n")
             self.assertEqual(f.readline(), b"foo\x00bar\n")
-            self.assertEqual(f.readline(), b"another line")
+            self.assertEqual(f.readline(None), b"another line")
             self.assertRaises(TypeError, f.readline, 5.3)
         with self.open(support.TESTFN, "r") as f:
             self.assertRaises(TypeError, f.readline, 5.3)
@@ -647,9 +647,10 @@
         self.assertEquals(b"abc", bufio.read())
 
     def test_read(self):
-        rawio = self.MockRawIO((b"abc", b"d", b"efg"))
-        bufio = self.tp(rawio)
-        self.assertEquals(b"abcdef", bufio.read(6))
+        for arg in (None, 7):
+            rawio = self.MockRawIO((b"abc", b"d", b"efg"))
+            bufio = self.tp(rawio)
+            self.assertEquals(b"abcdefg", bufio.read(arg))
         # Invalid args
         self.assertRaises(ValueError, bufio.read, -2)
 
@@ -666,6 +667,7 @@
         self.assertEquals(b"efg", bufio.read1(100))
         self.assertEquals(rawio._reads, 3)
         self.assertEquals(b"", bufio.read1(100))
+        self.assertEquals(rawio._reads, 4)
         # Invalid args
         self.assertRaises(ValueError, bufio.read1, -1)
 
@@ -684,6 +686,14 @@
         self.assertEquals(bufio.readinto(b), 0)
         self.assertEquals(b, b"gf")
 
+    def test_readlines(self):
+        def bufio():
+            rawio = self.MockRawIO((b"abc\n", b"d\n", b"ef"))
+            return self.tp(rawio)
+        self.assertEquals(bufio().readlines(), [b"abc\n", b"d\n", b"ef"])
+        self.assertEquals(bufio().readlines(5), [b"abc\n", b"d\n"])
+        self.assertEquals(bufio().readlines(None), [b"abc\n", b"d\n", b"ef"])
+
     def test_buffering(self):
         data = b"abcdefghi"
         dlen = len(data)
@@ -1123,6 +1133,14 @@
         self.assertEqual(pair.read(3), b"abc")
         self.assertEqual(pair.read(1), b"d")
         self.assertEqual(pair.read(), b"ef")
+        pair = self.tp(self.BytesIO(b"abc"), self.MockRawIO())
+        self.assertEqual(pair.read(None), b"abc")
+
+    def test_readlines(self):
+        pair = lambda: self.tp(self.BytesIO(b"abc\ndef\nh"), self.MockRawIO())
+        self.assertEqual(pair().readlines(), [b"abc\n", b"def\n", b"h"])
+        self.assertEqual(pair().readlines(), [b"abc\n", b"def\n", b"h"])
+        self.assertEqual(pair().readlines(5), [b"abc\n", b"def\n"])
 
     def test_read1(self):
         # .read1() is delegated to the underlying reader object, so this test
@@ -1773,6 +1791,8 @@
                 self.assertEquals(f.read(), "abc")
                 cookie = f.tell()
                 self.assertEquals(f.seek(0), 0)
+                self.assertEquals(f.read(None), "abc")
+                f.seek(0)
                 self.assertEquals(f.read(2), "ab")
                 self.assertEquals(f.read(1), "c")
                 self.assertEquals(f.read(1), "")
@@ -1943,6 +1963,14 @@
             reads += c
         self.assertEquals(reads, "AA\nBB")
 
+    def test_readlines(self):
+        txt = self.TextIOWrapper(self.BytesIO(b"AA\nBB\nCC"))
+        self.assertEqual(txt.readlines(), ["AA\n", "BB\n", "CC"])
+        txt.seek(0)
+        self.assertEqual(txt.readlines(None), ["AA\n", "BB\n", "CC"])
+        txt.seek(0)
+        self.assertEqual(txt.readlines(5), ["AA\n", "BB\n"])
+
     # read in amounts equal to TextIOWrapper._CHUNK_SIZE which is 128.
     def test_read_by_chunk(self):
         # make sure "\r\n" straddles 128 char boundary.