diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2020-01-02 12:24:20 +0100 |
---|---|---|
committer | Stefan Behnel <stefan_ml@behnel.de> | 2020-01-02 12:24:20 +0100 |
commit | 41cc5f378e2454ff1cabe5d227242cce211a3a2b (patch) | |
tree | fd3180bc816375a38dceb3760c9fb9b6076bb4c5 /src/lxml | |
parent | 7432362b539fde2c90780e86cb749a40ec017e7a (diff) | |
download | python-lxml-41cc5f378e2454ff1cabe5d227242cce211a3a2b.tar.gz |
LP#1857794: Tail text of nodes that get removed from a document using item deletion disappeared silently instead of sticking with the node that was removed.
Diffstat (limited to 'src/lxml')
-rw-r--r-- | src/lxml/etree.pyx | 1 | ||||
-rw-r--r-- | src/lxml/tests/test_elementtree.py | 28 |
2 files changed, 28 insertions, 1 deletions
diff --git a/src/lxml/etree.pyx b/src/lxml/etree.pyx index 1859386c..c4d1d9db 100644 --- a/src/lxml/etree.pyx +++ b/src/lxml/etree.pyx @@ -782,7 +782,6 @@ cdef public class _Element [ type LxmlElementType, object LxmlElement ]: c_node = _findChild(self._c_node, x) if c_node is NULL: raise IndexError, f"index out of range: {x}" - _removeText(c_node.next) _removeNode(self._doc, c_node) def __deepcopy__(self, memo): diff --git a/src/lxml/tests/test_elementtree.py b/src/lxml/tests/test_elementtree.py index 820d7591..78d8964d 100644 --- a/src/lxml/tests/test_elementtree.py +++ b/src/lxml/tests/test_elementtree.py @@ -1689,15 +1689,28 @@ class _ETreeTestCaseBase(HelperTestCase): self.assertEqual('{http://huhu}bump1', foo[0][0].tag) self.assertEqual('{http://huhu}bump2', foo[0][1].tag) + def test_delitem_tail_dealloc(self): + ElementTree = self.etree.ElementTree + f = BytesIO('<a><b></b>B2<c></c>C2</a>') + doc = ElementTree(file=f) + a = doc.getroot() + del a[0] + self.assertXML( + _bytes('<a><c></c>C2</a>'), + a) + def test_delitem_tail(self): ElementTree = self.etree.ElementTree f = BytesIO('<a><b></b>B2<c></c>C2</a>') doc = ElementTree(file=f) a = doc.getroot() + b, c = a del a[0] self.assertXML( _bytes('<a><c></c>C2</a>'), a) + self.assertEqual("B2", b.tail) + self.assertEqual("C2", c.tail) def test_clear(self): Element = self.etree.Element @@ -2383,15 +2396,30 @@ class _ETreeTestCaseBase(HelperTestCase): [b, d], list(a)) + def test_delslice_child_tail_dealloc(self): + ElementTree = self.etree.ElementTree + f = BytesIO('<a><b></b>B2<c></c>C2<d></d>D2<e></e>E2</a>') + doc = ElementTree(file=f) + a = doc.getroot() + del a[1:3] + self.assertXML( + _bytes('<a><b></b>B2<e></e>E2</a>'), + a) + def test_delslice_child_tail(self): ElementTree = self.etree.ElementTree f = BytesIO('<a><b></b>B2<c></c>C2<d></d>D2<e></e>E2</a>') doc = ElementTree(file=f) a = doc.getroot() + b, c, d, e = a del a[1:3] self.assertXML( _bytes('<a><b></b>B2<e></e>E2</a>'), a) + self.assertEqual("B2", b.tail) + self.assertEqual("C2", c.tail) + self.assertEqual("D2", d.tail) + self.assertEqual("E2", e.tail) def test_delslice_tail(self): XML = self.etree.XML |