mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #14055: Add __sizeof__ support to _elementtree.
This commit is contained in:
parent
1e5d0ff8a0
commit
bce166681c
3 changed files with 53 additions and 2 deletions
|
@ -1,5 +1,5 @@
|
|||
# xml.etree test for cElementTree
|
||||
|
||||
import sys, struct
|
||||
from test import support
|
||||
from test.support import import_fresh_module
|
||||
import unittest
|
||||
|
@ -40,6 +40,40 @@ class TestAcceleratorImported(unittest.TestCase):
|
|||
self.assertEqual(cET_alias.SubElement.__module__, '_elementtree')
|
||||
|
||||
|
||||
@unittest.skipUnless(cET, 'requires _elementtree')
|
||||
class SizeofTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
import _testcapi
|
||||
gc_headsize = _testcapi.SIZEOF_PYGC_HEAD
|
||||
# object header
|
||||
header = 'PP'
|
||||
if hasattr(sys, "gettotalrefcount"):
|
||||
# debug header
|
||||
header = 'PP' + header
|
||||
# fields
|
||||
element = header + '5P'
|
||||
self.elementsize = gc_headsize + struct.calcsize(element)
|
||||
# extra
|
||||
self.extra = struct.calcsize('PiiP4P')
|
||||
|
||||
def test_element(self):
|
||||
e = cET.Element('a')
|
||||
self.assertEqual(sys.getsizeof(e), self.elementsize)
|
||||
|
||||
def test_element_with_attrib(self):
|
||||
e = cET.Element('a', href='about:')
|
||||
self.assertEqual(sys.getsizeof(e),
|
||||
self.elementsize + self.extra)
|
||||
|
||||
def test_element_with_children(self):
|
||||
e = cET.Element('a')
|
||||
for i in range(5):
|
||||
cET.SubElement(e, 'span')
|
||||
# should have space for 8 children now
|
||||
self.assertEqual(sys.getsizeof(e),
|
||||
self.elementsize + self.extra +
|
||||
struct.calcsize('8P'))
|
||||
|
||||
def test_main():
|
||||
from test import test_xml_etree, test_xml_etree_c
|
||||
|
||||
|
@ -47,7 +81,8 @@ def test_main():
|
|||
support.run_unittest(
|
||||
MiscTests,
|
||||
TestAliasWorking,
|
||||
TestAcceleratorImported
|
||||
TestAcceleratorImported,
|
||||
SizeofTest,
|
||||
)
|
||||
|
||||
# Run the same test suite as the Python module
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue