mirror of
https://github.com/python/cpython.git
synced 2025-11-03 19:34:08 +00:00
Fix the tests of GC collection in ET.Element according to Benjamin's recommendations
This commit is contained in:
parent
c6897854f8
commit
a5e822045c
1 changed files with 19 additions and 21 deletions
|
|
@ -14,14 +14,14 @@
|
||||||
# Don't re-import "xml.etree.ElementTree" module in the docstring,
|
# Don't re-import "xml.etree.ElementTree" module in the docstring,
|
||||||
# except if the test is specific to the Python implementation.
|
# except if the test is specific to the Python implementation.
|
||||||
|
|
||||||
import gc
|
|
||||||
import html
|
import html
|
||||||
import io
|
import io
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
|
import weakref
|
||||||
|
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import findfile, import_fresh_module
|
from test.support import findfile, import_fresh_module, gc_collect
|
||||||
|
|
||||||
pyET = import_fresh_module('xml.etree.ElementTree', blocked=['_elementtree'])
|
pyET = import_fresh_module('xml.etree.ElementTree', blocked=['_elementtree'])
|
||||||
|
|
||||||
|
|
@ -1848,28 +1848,26 @@ class BasicElementTest(unittest.TestCase):
|
||||||
self.assertRaises(TypeError, e.insert, 0, 'foo')
|
self.assertRaises(TypeError, e.insert, 0, 'foo')
|
||||||
|
|
||||||
def test_cyclic_gc(self):
|
def test_cyclic_gc(self):
|
||||||
class ShowGC:
|
class Dummy:
|
||||||
def __init__(self, flaglist):
|
pass
|
||||||
self.flaglist = flaglist
|
|
||||||
def __del__(self):
|
|
||||||
self.flaglist.append(1)
|
|
||||||
|
|
||||||
# Test the shortest cycle: lst->element->lst
|
# Test the shortest cycle: d->element->d
|
||||||
fl = []
|
d = Dummy()
|
||||||
lst = [ShowGC(fl)]
|
d.dummyref = ET.Element('joe', attr=d)
|
||||||
lst.append(ET.Element('joe', attr=lst))
|
wref = weakref.ref(d)
|
||||||
del lst
|
del d
|
||||||
gc.collect()
|
gc_collect()
|
||||||
self.assertEqual(fl, [1])
|
self.assertIsNone(wref())
|
||||||
|
|
||||||
# A longer cycle: lst->e->e2->lst
|
# A longer cycle: d->e->e2->d
|
||||||
fl = []
|
|
||||||
e = ET.Element('joe')
|
e = ET.Element('joe')
|
||||||
lst = [ShowGC(fl), e]
|
d = Dummy()
|
||||||
e2 = ET.SubElement(e, 'foo', attr=lst)
|
d.dummyref = e
|
||||||
del lst, e, e2
|
wref = weakref.ref(d)
|
||||||
gc.collect()
|
e2 = ET.SubElement(e, 'foo', attr=d)
|
||||||
self.assertEqual(fl, [1])
|
del d, e, e2
|
||||||
|
gc_collect()
|
||||||
|
self.assertIsNone(wref())
|
||||||
|
|
||||||
|
|
||||||
class ElementTreeTest(unittest.TestCase):
|
class ElementTreeTest(unittest.TestCase):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue