[Python-checkins] r57104 - in python/branches/alex-py3k: Lib/test/test_memoryio.py Modules/_bytesiomodule.c

alexandre.vassalotti python-checkins at python.org
Thu Aug 16 23:49:04 CEST 2007


Author: alexandre.vassalotti
Date: Thu Aug 16 23:49:02 2007
New Revision: 57104

Modified:
   python/branches/alex-py3k/Lib/test/test_memoryio.py
   python/branches/alex-py3k/Modules/_bytesiomodule.c
Log:
Make the close method of ByteIO objects do nothing.
Update tests.


Modified: python/branches/alex-py3k/Lib/test/test_memoryio.py
==============================================================================
--- python/branches/alex-py3k/Lib/test/test_memoryio.py	(original)
+++ python/branches/alex-py3k/Lib/test/test_memoryio.py	Thu Aug 16 23:49:02 2007
@@ -40,6 +40,8 @@
         self.write_ops(memio)
         memio = self.ioclass()
         self.write_ops(memio)
+        memio.close()
+        memio.write(buf)
 
     def test_writelines(self):
         buf = self.buftype("1234567890")
@@ -47,6 +49,8 @@
 
         memio.writelines([buf] * 100)
         self.assertEqual(memio.getvalue(), buf * 100)
+        memio.close()
+        memio.writelines([buf])
 
     def test_writelines_error(self):
         memio = self.ioclass()
@@ -69,6 +73,8 @@
         memio.write(buf)
         self.assertEqual(memio.getvalue(), buf[:4] + buf)
         self.assertRaises(ValueError, memio.truncate, -1)
+        memio.close()
+        memio.truncate(0)
 
     def test_init(self):
         buf = self.buftype("1234567890")
@@ -86,6 +92,8 @@
         self.assertEqual(memio.read(), buf)
         self.assertEqual(memio.read(), self.EOF)
         self.assertEqual(memio.tell(), 10)
+        memio.close()
+        memio.read()
 
     def test_readline(self):
         buf = self.buftype("1234567890\n")
@@ -98,6 +106,8 @@
         self.assertEqual(memio.readline(5), buf[:5])
         self.assertEqual(memio.readline(5), buf[5:10])
         self.assertEqual(memio.readline(5), buf[10:15])
+        memio.close()
+        memio.readline()
 
     def test_readlines(self):
         buf = self.buftype("1234567890\n")
@@ -108,6 +118,8 @@
         self.assertEqual(memio.readlines(), [buf[5:]] + [buf] * 9)
         memio.seek(0)
         self.assertEqual(memio.readlines(15), [buf] * 2)
+        memio.close()
+        memio.readlines()
 
     def test_iterator(self):
         buf = self.buftype("1234567890\n")
@@ -127,6 +139,12 @@
             self.assertEqual(line, buf)
             i += 1
         self.assertEqual(i, 10)
+        memio = self.ioclass(buf * 2)
+        memio.close()
+        i = 0
+        for line in memio:
+            i += 1
+        self.assertEqual(i, 2)
 
     def test_getvalue(self):
         buf = self.buftype("1234567890")
@@ -137,6 +155,9 @@
         self.assertEqual(memio.getvalue(), buf)
         memio = self.ioclass(buf * 1000)
         self.assertEqual(memio.getvalue()[-3:], self.buftype("890"))
+        memio = self.ioclass(buf)
+        memio.close()
+        self.assertEqual(memio.getvalue(), buf)
 
     def test_seek(self):
         buf = self.buftype("1234567890")
@@ -148,6 +169,8 @@
 
         memio.seek(3)
         self.assertEqual(buf[3:], memio.read())
+        memio.close()
+        memio.seek(0)
 
     def test_tell(self):
         buf = self.buftype("1234567890")
@@ -158,12 +181,16 @@
         self.assertEqual(memio.tell(), 5)
         memio.seek(10000)
         self.assertEqual(memio.tell(), 10000)
+        memio.close()
+        memio.tell()
 
     def test_flush(self):
         buf = self.buftype("1234567890")
         memio = self.ioclass(buf)
 
         self.assertEqual(memio.flush(), None)
+        memio.close()
+        memio.flush()
 
     def test_flags(self):
         memio = self.ioclass()
@@ -173,6 +200,12 @@
         self.assertEqual(memio.seekable(), True)
         self.assertEqual(memio.isatty(), False)
         self.assertEqual(memio.closed, False)
+        memio.close()
+        self.assertEqual(memio.writable(), True)
+        self.assertEqual(memio.readable(), True)
+        self.assertEqual(memio.seekable(), True)
+        self.assertEqual(memio.isatty(), False)
+        self.assertEqual(memio.closed, False)
 
     def test_subclassing(self):
         buf = self.buftype("1234567890")
@@ -193,31 +226,6 @@
         self.assertEqual(memio.write(buf), len(buf))
         self.assertEqual(memio.getvalue(), buf + buf)
 
-    def test_close(self):
-        buf = self.buftype("1234567890")
-        memio = self.ioclass(buf)
-
-        # close() does nothing.
-        memio.close()
-        self.assertEqual(memio.getvalue(), buf)
-
-        # Just check if methods are still functioning.
-        memio.write(buf)
-        memio.truncate(len(buf))
-        memio.seek(2)
-        memio.flush()
-        memio.tell()
-        memio.read()
-        memio.writelines([buf + self.buftype("\n")] * 5)
-        memio.readline()
-        memio.readlines()
-
-        self.assertEqual(memio.writable(), True)
-        self.assertEqual(memio.readable(), True)
-        self.assertEqual(memio.seekable(), True)
-        self.assertEqual(memio.isatty(), False)
-        self.assertEqual(memio.closed, False)
-
 
 class PyBytesIOTest(MemoryTestMixin, unittest.TestCase):
     buftype = bytes
@@ -244,7 +252,7 @@
         self.assertEqual(memio.readinto(b), 0)
         self.assertEqual(b, b"")
         memio.close()
-        self.assertRaises(ValueError, memio.readinto, b)
+        memio.readinto(b)
 
     def test_overseek(self):
         buf = self.buftype("1234567890")

Modified: python/branches/alex-py3k/Modules/_bytesiomodule.c
==============================================================================
--- python/branches/alex-py3k/Modules/_bytesiomodule.c	(original)
+++ python/branches/alex-py3k/Modules/_bytesiomodule.c	Thu Aug 16 23:49:02 2007
@@ -12,15 +12,9 @@
 } BytesIOObject;
 
 
-static PyObject *
-err_closed(void)
-{
-    PyErr_SetString(PyExc_ValueError, "I/O operation on closed file");
-    return NULL;
-}
-
 /* Internal routine to get a line from the buffer of a BytesIO
-   object. Returns the number of bytes read. */
+   object. Returns the length between the current position to the
+   next newline character. */
 static Py_ssize_t
 get_line(BytesIOObject *self, char **output)
 {
@@ -101,17 +95,10 @@
     return len;
 }
 
-
 static PyObject *
 bytesio_get_closed(BytesIOObject *self)
 {
-    PyObject *result = Py_False;
-
-    if (self->buf == NULL)
-        result = Py_True;
-
-    Py_INCREF(result);
-    return result;
+    Py_RETURN_FALSE;
 }
 
 /* Generic getter for the writable, readable and seekable properties */
@@ -124,18 +111,12 @@
 static PyObject *
 bytesio_flush(BytesIOObject *self)
 {
-    if (self->buf == NULL)
-        return err_closed();
-
     Py_RETURN_NONE;
 }
 
 static PyObject *
 bytesio_getvalue(BytesIOObject *self)
 {
-    if (self->buf == NULL)
-        return err_closed();
-
     return PyBytes_FromStringAndSize(self->buf, self->string_size);
 }
 
@@ -146,11 +127,6 @@
     const char *bytes;
     Py_ssize_t len;
 
-    if (self->buf == NULL) {
-        err_closed();
-        return -1;
-    }
-
     self->pos = 0;
     self->string_size = 0;
 
@@ -173,18 +149,12 @@
 static PyObject *
 bytesio_isatty(BytesIOObject *self)
 {
-    if (self->buf == NULL)
-        return err_closed();
-
     Py_RETURN_FALSE;
 }
 
 static PyObject *
 bytesio_tell(BytesIOObject *self)
 {
-    if (self->buf == NULL)
-        return err_closed();
-
     return PyInt_FromSsize_t(self->pos);
 }
 
@@ -194,9 +164,6 @@
     Py_ssize_t len, n = -1;
     char *output;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     if (!PyArg_ParseTuple(args, "|n:read", &n))
         return NULL;
 
@@ -226,9 +193,6 @@
     Py_ssize_t n, size = -1;
     char *output;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     if (!PyArg_ParseTuple(args, "|i:readline", &size))
         return NULL;
 
@@ -250,9 +214,6 @@
     PyObject *result, *line;
     char *output;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     if (!PyArg_ParseTuple(args, "|i:readlines", &size))
         return NULL;
 
@@ -286,9 +247,6 @@
     void *raw_buffer;
     Py_ssize_t len;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     if (PyObject_AsWriteBuffer(buffer, &raw_buffer, &len) == -1)
         return NULL;
 
@@ -311,9 +269,6 @@
     /* Truncate to current position if no argument is passed. */
     size = self->pos;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     if (!PyArg_ParseTuple(args, "|n:truncate", &size))
         return NULL;
 
@@ -336,9 +291,6 @@
     char *next;
     Py_ssize_t n;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     n = get_line(self, &next);
 
     if (!next || n == 0)
@@ -353,9 +305,6 @@
     Py_ssize_t newpos, prevpos;
     int mode = 0;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     if (!PyArg_ParseTuple(args, "n|i:seek", &newpos, &mode))
         return NULL;
 
@@ -398,9 +347,6 @@
     const char *bytes;
     Py_ssize_t size, len;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     if (PyUnicode_Check(obj)) {
         bytes = PyUnicode_AsString(obj);
         size = strlen(bytes);
@@ -423,9 +369,6 @@
     PyObject *it, *item;
     PyObject *ret;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     it = PyObject_GetIter(v);
     if (it == NULL)
         return NULL;
@@ -449,13 +392,6 @@
 static PyObject *
 bytesio_close(BytesIOObject *self)
 {
-    if (self->buf != NULL) {
-        PyMem_Del(self->buf);
-        self->buf = NULL;
-    }
-
-    self->pos = self->string_size = self->buf_size = 0;
-
     Py_RETURN_NONE;
 }
 
@@ -565,7 +501,7 @@
 "Returns the new size.");
 
 PyDoc_STRVAR(BytesIO_close_doc,
-"close() -> None.  Close the file and release the resources held.");
+"close() -> None. Does nothing.");
 
 PyDoc_STRVAR(BytesIO_seek_doc,
 "seek(pos, whence=0) -> int.  Change stream position.\n"


More information about the Python-checkins mailing list