[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