cpython: 4d5417444961 (original) (raw)

--- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -2350,6 +2350,7 @@ class ElementSlicingTest(unittest.TestCa self.assertEqual(e[-2].tag, 'a8') self.assertRaises(IndexError, lambda: e[12])

def test_getslice_range(self): e = self._make_elem_with_children(6) @@ -2368,12 +2369,17 @@ class ElementSlicingTest(unittest.TestCa self.assertEqual(self._elem_tags(e[::3]), ['a0', 'a3', 'a6', 'a9']) self.assertEqual(self._elem_tags(e[::8]), ['a0', 'a8']) self.assertEqual(self._elem_tags(e[1::8]), ['a1', 'a9'])

def test_getslice_negative_steps(self): e = self._make_elem_with_children(4) self.assertEqual(self._elem_tags(e[::-1]), ['a3', 'a2', 'a1', 'a0']) self.assertEqual(self._elem_tags(e[::-2]), ['a3', 'a1'])

def test_delslice(self): e = self._make_elem_with_children(4) @@ -2400,6 +2406,75 @@ class ElementSlicingTest(unittest.TestCa del e[::2] self.assertEqual(self._subelem_tags(e), ['a1'])

+

+

+

+

+

+

+

+

+

+

+

+ class IOTest(unittest.TestCase): def tearDown(self):

--- a/Modules/_elementtree.c +++ b/Modules/elementtree.c @@ -1711,7 +1711,7 @@ element_ass_subscr(PyObject* self, PyOb Py_ssize_t start, stop, step, slicelen, newlen, cur, i; PyObject* recycle = NULL;

if (!self->extra) { if (create_extra(self, NULL) < 0) @@ -1790,21 +1790,21 @@ element_ass_subscr(PyObject* self_, PyOb Py_XDECREF(recycle); return 0; }

+

if (step != 1 && newlen != slicelen) {

@@ -1816,9 +1816,7 @@ element_ass_subscr(PyObject* self_, PyOb /* Resize before creating the recycle bin, to prevent refleaks. */ if (newlen > slicelen) { if (element_resize(self, newlen - slicelen) < 0) {

@@ -1829,9 +1827,7 @@ element_ass_subscr(PyObject* self_, PyOb we're done modifying the element */ recycle = PyList_New(slicelen); if (!recycle) {

@@ -1859,9 +1855,7 @@ element_ass_subscr(PyObject* self_, PyOb self->extra->length += newlen - slicelen;

/* discard the recycle bin, and everything in it */ Py_XDECREF(recycle);