Issue 14178: _elementtree problem deleting slices with steps != +1 (original) (raw)

These are tests from lxml's ET compatibility test suite that now fail in ElementTree:

def test_delslice_step(self):
    Element = self.etree.Element
    SubElement = self.etree.SubElement

    a = Element('a')
    b = SubElement(a, 'b')
    c = SubElement(a, 'c')
    d = SubElement(a, 'd')
    e = SubElement(a, 'e')

    del a[1::2]
    self.assertEquals(
        [b, d],
        list(a))

def test_delslice_step_negative(self):
    Element = self.etree.Element
    SubElement = self.etree.SubElement

    a = Element('a')
    b = SubElement(a, 'b')
    c = SubElement(a, 'c')
    d = SubElement(a, 'd')
    e = SubElement(a, 'e')

    del a[::-1]
    self.assertEquals(
        [],
        list(a))

def test_delslice_step_negative2(self):
    Element = self.etree.Element
    SubElement = self.etree.SubElement

    a = Element('a')
    b = SubElement(a, 'b')
    c = SubElement(a, 'c')
    d = SubElement(a, 'd')
    e = SubElement(a, 'e')

    del a[::-2]
    self.assertEquals(
        [b, d],
        list(a))

The error messages go like this:

del a[1::2]
ValueError: attempt to assign sequence of size 0 to extended slice of size 2
del a[::-1]
ValueError: attempt to assign sequence of size 0 to extended slice of size 4
del a[::-2]
ValueError: attempt to assign sequence of size 0 to extended slice of size 2

Additionally, I get this error:

self.assertNotEquals(None, e.code)
AttributeError: 'ParseError' object has no attribute 'code'

for this test:

required_versions_ET['test_feed_parser_error_position'] = (1,3)
def test_feed_parser_error_position(self):
    ParseError = self.etree.ParseError
    parser = self.etree.XMLParser()
    try:
        parser.close()
    except ParseError:
        e = sys.exc_info()[1]
        self.assertNotEquals(None, e.code)
        self.assertNotEquals(0, e.code)
        self.assert_(isinstance(e.position, tuple))
        self.assert_(e.position >= (0, 0))

The complete test suite is here:

https://github.com/lxml/lxml/blob/master/src/lxml/tests/test_elementtree.py