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

alexandre.vassalotti python-checkins at python.org
Thu Aug 16 22:55:27 CEST 2007


Author: alexandre.vassalotti
Date: Thu Aug 16 22:55:25 2007
New Revision: 57101

Modified:
   python/branches/alex-py3k/Lib/test/test_memoryio.py
   python/branches/alex-py3k/Modules/_stringiomodule.c
Log:
Make the close() method of StringIO do nothing.
Update test.


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 22:55:25 2007
@@ -40,8 +40,6 @@
         self.write_ops(memio)
         memio = self.ioclass()
         self.write_ops(memio)
-        memio.close()
-        self.assertRaises(ValueError, memio.write, buf)
 
     def test_writelines(self):
         buf = self.buftype("1234567890")
@@ -49,8 +47,6 @@
 
         memio.writelines([buf] * 100)
         self.assertEqual(memio.getvalue(), buf * 100)
-        memio.close()
-        self.assertRaises(ValueError, memio.writelines, buf)
 
     def test_writelines_error(self):
         memio = self.ioclass()
@@ -73,8 +69,6 @@
         memio.write(buf)
         self.assertEqual(memio.getvalue(), buf[:4] + buf)
         self.assertRaises(ValueError, memio.truncate, -1)
-        memio.close()
-        self.assertRaises(ValueError, memio.truncate)
 
     def test_init(self):
         buf = self.buftype("1234567890")
@@ -92,8 +86,6 @@
         self.assertEqual(memio.read(), buf)
         self.assertEqual(memio.read(), self.EOF)
         self.assertEqual(memio.tell(), 10)
-        memio.close()
-        self.assertRaises(ValueError, memio.read)
 
     def test_readline(self):
         buf = self.buftype("1234567890\n")
@@ -106,8 +98,6 @@
         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()
-        self.assertRaises(ValueError, memio.readline)
 
     def test_readlines(self):
         buf = self.buftype("1234567890\n")
@@ -118,8 +108,6 @@
         self.assertEqual(memio.readlines(), [buf[5:]] + [buf] * 9)
         memio.seek(0)
         self.assertEqual(memio.readlines(15), [buf] * 2)
-        memio.close()
-        self.assertRaises(ValueError, memio.readlines)
 
     def test_iterator(self):
         buf = self.buftype("1234567890\n")
@@ -139,8 +127,6 @@
             self.assertEqual(line, buf)
             i += 1
         self.assertEqual(i, 10)
-        memio.close()
-        self.assertRaises(ValueError, memio.__next__)
 
     def test_getvalue(self):
         buf = self.buftype("1234567890")
@@ -151,8 +137,6 @@
         self.assertEqual(memio.getvalue(), buf)
         memio = self.ioclass(buf * 1000)
         self.assertEqual(memio.getvalue()[-3:], self.buftype("890"))
-        memio.close()
-        self.assertRaises(ValueError, memio.getvalue)
 
     def test_seek(self):
         buf = self.buftype("1234567890")
@@ -164,8 +148,6 @@
 
         memio.seek(3)
         self.assertEqual(buf[3:], memio.read())
-        memio.close()
-        self.assertRaises(ValueError, memio.seek, 3)
 
     def test_tell(self):
         buf = self.buftype("1234567890")
@@ -176,16 +158,12 @@
         self.assertEqual(memio.tell(), 5)
         memio.seek(10000)
         self.assertEqual(memio.tell(), 10000)
-        memio.close()
-        self.assertRaises(ValueError, memio.tell)
 
     def test_flush(self):
         buf = self.buftype("1234567890")
         memio = self.ioclass(buf)
 
         self.assertEqual(memio.flush(), None)
-        memio.close()
-        self.assertRaises(ValueError, memio.flush)
 
     def test_flags(self):
         memio = self.ioclass()
@@ -195,12 +173,6 @@
         self.assertEqual(memio.seekable(), True)
         self.assertEqual(memio.isatty(), False)
         self.assertEqual(memio.closed, False)
-        memio.close()
-        self.assertEqual(memio.writable(), True) # closed
-        self.assertEqual(memio.readable(), True)
-        self.assertEqual(memio.seekable(), True)
-        self.assertRaises(ValueError, memio.isatty)
-        self.assertEqual(memio.closed, True)
 
     def test_subclassing(self):
         buf = self.buftype("1234567890")
@@ -221,6 +193,31 @@
         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

Modified: python/branches/alex-py3k/Modules/_stringiomodule.c
==============================================================================
--- python/branches/alex-py3k/Modules/_stringiomodule.c	(original)
+++ python/branches/alex-py3k/Modules/_stringiomodule.c	Thu Aug 16 22:55:25 2007
@@ -12,13 +12,6 @@
 } StringIOObject;
 
 
-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 StringIO
    object. Returns the length between the current position to the
    next newline character. */
@@ -101,17 +94,11 @@
     return len;
 }
 
-
 static PyObject *
 stringio_get_closed(StringIOObject *self)
 {
-    PyObject *result = Py_False;
-
-    if (self->buf == NULL)
-        result = Py_True;
-
-    Py_INCREF(result);
-    return result;
+    /* close() does nothing, so the object can't be closed */
+    Py_RETURN_FALSE;
 }
 
 /* Generic getter for the writable, readable and seekable properties */
@@ -124,18 +111,12 @@
 static PyObject *
 stringio_flush(StringIOObject *self)
 {
-    if (self->buf == NULL)
-        return err_closed();
-
     Py_RETURN_NONE;
 }
 
 static PyObject *
 stringio_getvalue(StringIOObject *self)
 {
-    if (self->buf == NULL)
-        return err_closed();
-
     return PyUnicode_FromUnicode(self->buf, self->string_size);
 }
 
@@ -143,11 +124,6 @@
 static int
 stringio_setvalue(StringIOObject *self, PyObject *value)
 {
-    if (self->buf == NULL) {
-        err_closed();
-        return -1;
-    }
-
     self->pos = 0;
     self->string_size = 0;
 
@@ -172,18 +148,12 @@
 static PyObject *
 stringio_isatty(StringIOObject *self)
 {
-    if (self->buf == NULL)
-        return err_closed();
-
     Py_RETURN_FALSE;
 }
 
 static PyObject *
 stringio_tell(StringIOObject *self)
 {
-    if (self->buf == NULL)
-        return err_closed();
-
     return PyInt_FromSsize_t(self->pos);
 }
 
@@ -193,9 +163,6 @@
     Py_ssize_t len, n = -1;
     Py_UNICODE *output;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     if (!PyArg_ParseTuple(args, "|n:read", &n))
         return NULL;
 
@@ -219,9 +186,6 @@
     Py_ssize_t n, size = -1;
     Py_UNICODE *output;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     if (!PyArg_ParseTuple(args, "|i:readline", &size))
         return NULL;
 
@@ -243,9 +207,6 @@
     PyObject *result, *line;
     Py_UNICODE *output;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     if (!PyArg_ParseTuple(args, "|i:readlines", &size))
         return NULL;
 
@@ -281,9 +242,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;
 
@@ -306,9 +264,6 @@
     Py_UNICODE *next;
     Py_ssize_t n;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     n = get_line(self, &next);
 
     if (!next || n == 0)
@@ -323,9 +278,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;
 
@@ -368,9 +320,6 @@
     const Py_UNICODE *str;
     Py_ssize_t size, n;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     if (PyUnicode_Check(obj)) {
         str = PyUnicode_AsUnicode(obj);
         size = PyUnicode_GetSize(obj);
@@ -394,9 +343,6 @@
     PyObject *it, *item;
     PyObject *ret;
 
-    if (self->buf == NULL)
-        return err_closed();
-
     it = PyObject_GetIter(v);
     if (it == NULL)
         return NULL;
@@ -420,13 +366,6 @@
 static PyObject *
 stringio_close(StringIOObject *self)
 {
-    if (self->buf != NULL) {
-        PyMem_Del(self->buf);
-        self->buf = NULL;
-    }
-
-    self->pos = self->string_size = self->buf_size = 0;
-
     Py_RETURN_NONE;
 }
 
@@ -524,7 +463,7 @@
 "Returns the new size.");
 
 PyDoc_STRVAR(StringIO_close_doc,
-"close() -> None.  Close the file and release the resources held.");
+"close() -> None. Does nothing.");
 
 PyDoc_STRVAR(StringIO_seek_doc,
 "seek(pos, whence=0) -> int.  Change stream position.\n"


More information about the Python-checkins mailing list