mirror of https://github.com/python/cpython
SF bug #770485: cStringIO does not set closed attr
This commit is contained in:
parent
6e13bcc7b1
commit
5475f2394a
|
@ -55,6 +55,16 @@ class TestGenericStringIO(unittest.TestCase):
|
||||||
f.close()
|
f.close()
|
||||||
self.assertRaises(ValueError, f.write, 'frobnitz')
|
self.assertRaises(ValueError, f.write, 'frobnitz')
|
||||||
|
|
||||||
|
def test_closed_flag(self):
|
||||||
|
f = self.MODULE.StringIO()
|
||||||
|
self.assertEqual(f.closed, False)
|
||||||
|
f.close()
|
||||||
|
self.assertEqual(f.closed, True)
|
||||||
|
f = self.MODULE.StringIO("abc")
|
||||||
|
self.assertEqual(f.closed, False)
|
||||||
|
f.close()
|
||||||
|
self.assertEqual(f.closed, True)
|
||||||
|
|
||||||
def test_iterator(self):
|
def test_iterator(self):
|
||||||
eq = self.assertEqual
|
eq = self.assertEqual
|
||||||
unless = self.failUnless
|
unless = self.failUnless
|
||||||
|
|
|
@ -18,6 +18,8 @@ Core and builtins
|
||||||
Extension modules
|
Extension modules
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- cStringIO now supports the f.closed attribute.
|
||||||
|
|
||||||
- The signal module now exposes SIGRTMIN and SIGRTMAX (if available).
|
- The signal module now exposes SIGRTMIN and SIGRTMAX (if available).
|
||||||
|
|
||||||
Library
|
Library
|
||||||
|
|
|
@ -87,6 +87,22 @@ IO__opencheck(IOobject *self) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
IO_get_closed(IOobject *self, void *closure)
|
||||||
|
{
|
||||||
|
PyObject *result = Py_False;
|
||||||
|
|
||||||
|
if (self->buf == NULL)
|
||||||
|
result = Py_True;
|
||||||
|
Py_INCREF(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyGetSetDef file_getsetlist[] = {
|
||||||
|
{"closed", (getter)IO_get_closed, NULL, "True if the file is closed"},
|
||||||
|
{0},
|
||||||
|
};
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
IO_flush(IOobject *self, PyObject *unused) {
|
IO_flush(IOobject *self, PyObject *unused) {
|
||||||
|
|
||||||
|
@ -455,6 +471,7 @@ static struct PyMethodDef O_methods[] = {
|
||||||
static PyMemberDef O_memberlist[] = {
|
static PyMemberDef O_memberlist[] = {
|
||||||
{"softspace", T_INT, offsetof(Oobject, softspace), 0,
|
{"softspace", T_INT, offsetof(Oobject, softspace), 0,
|
||||||
"flag indicating that a space needs to be printed; used by print"},
|
"flag indicating that a space needs to be printed; used by print"},
|
||||||
|
/* getattr(f, "closed") is implemented without this table */
|
||||||
{NULL} /* Sentinel */
|
{NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -498,7 +515,8 @@ static PyTypeObject Otype = {
|
||||||
PyObject_SelfIter, /*tp_iter */
|
PyObject_SelfIter, /*tp_iter */
|
||||||
(iternextfunc)IO_iternext, /*tp_iternext */
|
(iternextfunc)IO_iternext, /*tp_iternext */
|
||||||
O_methods, /*tp_methods */
|
O_methods, /*tp_methods */
|
||||||
O_memberlist /*tp_members */
|
O_memberlist, /*tp_members */
|
||||||
|
file_getsetlist, /*tp_getset */
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -614,7 +632,9 @@ static PyTypeObject Itype = {
|
||||||
0, /* tp_weaklistoffset */
|
0, /* tp_weaklistoffset */
|
||||||
PyObject_SelfIter, /* tp_iter */
|
PyObject_SelfIter, /* tp_iter */
|
||||||
(iternextfunc)IO_iternext, /* tp_iternext */
|
(iternextfunc)IO_iternext, /* tp_iternext */
|
||||||
I_methods /* tp_methods */
|
I_methods, /* tp_methods */
|
||||||
|
0, /* tp_members */
|
||||||
|
file_getsetlist, /* tp_getset */
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
|
Loading…
Reference in New Issue