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:
parent
21a9ba1992
commit
50fed0b64f
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix typo in test_cyclic_gc() test for xml.etree.ElementTree. Patch by Gordon
|
||||||
|
P. Hemsley.
|
|
@ -0,0 +1 @@
|
||||||
|
Improve test coverage for xml.etree.ElementTree. Patch by Gordon P. Hemsley.
|
Loading…
Reference in New Issue