bpo-32424: Improve test coverage for xml.etree.ElementTree (GH-12891)

* Fix typo in test_cyclic_gc subtest
* Improve test coverage for xml.etree.ElementTree
This commit is contained in:
Gordon P. Hemsley 2019-04-28 00:41:43 -04:00 committed by Stefan Behnel
parent 21a9ba1992
commit 50fed0b64f
4 changed files with 89 additions and 2 deletions

View File

@ -9,6 +9,7 @@ import copy
import functools import functools
import html import html
import io import io
import itertools
import locale import locale
import operator import operator
import pickle import pickle
@ -1929,6 +1930,88 @@ class BugsTest(unittest.TestCase):
class BasicElementTest(ElementTestCase, unittest.TestCase): class BasicElementTest(ElementTestCase, unittest.TestCase):
def test___init__(self):
tag = "foo"
attrib = { "zix": "wyp" }
element_foo = ET.Element(tag, attrib)
# traits of an element
self.assertIsInstance(element_foo, ET.Element)
self.assertIn("tag", dir(element_foo))
self.assertIn("attrib", dir(element_foo))
self.assertIn("text", dir(element_foo))
self.assertIn("tail", dir(element_foo))
# string attributes have expected values
self.assertEqual(element_foo.tag, tag)
self.assertIsNone(element_foo.text)
self.assertIsNone(element_foo.tail)
# attrib is a copy
self.assertIsNot(element_foo.attrib, attrib)
self.assertEqual(element_foo.attrib, attrib)
# attrib isn't linked
attrib["bar"] = "baz"
self.assertIsNot(element_foo.attrib, attrib)
self.assertNotEqual(element_foo.attrib, attrib)
def test___copy__(self):
element_foo = ET.Element("foo", { "zix": "wyp" })
element_foo.append(ET.Element("bar", { "baz": "qix" }))
element_foo2 = copy.copy(element_foo)
# elements are not the same
self.assertIsNot(element_foo2, element_foo)
# string attributes are equal
self.assertEqual(element_foo2.tag, element_foo.tag)
self.assertEqual(element_foo2.text, element_foo.text)
self.assertEqual(element_foo2.tail, element_foo.tail)
# number of children is the same
self.assertEqual(len(element_foo2), len(element_foo))
# children are the same
for (child1, child2) in itertools.zip_longest(element_foo, element_foo2):
self.assertIs(child1, child2)
# attrib is a copy
self.assertEqual(element_foo2.attrib, element_foo.attrib)
def test___deepcopy__(self):
element_foo = ET.Element("foo", { "zix": "wyp" })
element_foo.append(ET.Element("bar", { "baz": "qix" }))
element_foo2 = copy.deepcopy(element_foo)
# elements are not the same
self.assertIsNot(element_foo2, element_foo)
# string attributes are equal
self.assertEqual(element_foo2.tag, element_foo.tag)
self.assertEqual(element_foo2.text, element_foo.text)
self.assertEqual(element_foo2.tail, element_foo.tail)
# number of children is the same
self.assertEqual(len(element_foo2), len(element_foo))
# children are not the same
for (child1, child2) in itertools.zip_longest(element_foo, element_foo2):
self.assertIsNot(child1, child2)
# attrib is a copy
self.assertIsNot(element_foo2.attrib, element_foo.attrib)
self.assertEqual(element_foo2.attrib, element_foo.attrib)
# attrib isn't linked
element_foo.attrib["bar"] = "baz"
self.assertIsNot(element_foo2.attrib, element_foo.attrib)
self.assertNotEqual(element_foo2.attrib, element_foo.attrib)
def test_augmentation_type_errors(self): def test_augmentation_type_errors(self):
e = ET.Element('joe') e = ET.Element('joe')
self.assertRaises(TypeError, e.append, 'b') self.assertRaises(TypeError, e.append, 'b')
@ -1984,9 +2067,9 @@ class BasicElementTest(ElementTestCase, unittest.TestCase):
e1 = ET.Element('e1') e1 = ET.Element('e1')
e2 = ET.Element('e2') e2 = ET.Element('e2')
e3 = ET.Element('e3') e3 = ET.Element('e3')
e1.append(e2)
e2.append(e2)
e3.append(e1) e3.append(e1)
e2.append(e3)
e1.append(e2)
wref = weakref.ref(e1) wref = weakref.ref(e1)
del e1, e2, e3 del e1, e2, e3
gc_collect() gc_collect()

View File

@ -647,6 +647,7 @@ Christian Heimes
Thomas Heller Thomas Heller
Malte Helmert Malte Helmert
Lance Finn Helsten Lance Finn Helsten
Gordon P. Hemsley
Jonathan Hendry Jonathan Hendry
Nathan Henrie Nathan Henrie
Michael Henry Michael Henry

View File

@ -0,0 +1,2 @@
Fix typo in test_cyclic_gc() test for xml.etree.ElementTree. Patch by Gordon
P. Hemsley.

View File

@ -0,0 +1 @@
Improve test coverage for xml.etree.ElementTree. Patch by Gordon P. Hemsley.