[Python-checkins] cpython: Fix the tests of GC collection in ET.Element according to Benjamin's

eli.bendersky python-checkins at python.org
Sat Mar 31 12:57:01 CEST 2012


http://hg.python.org/cpython/rev/5b3a44f22470
changeset:   76005:5b3a44f22470
user:        Eli Bendersky <eliben at gmail.com>
date:        Sat Mar 31 13:55:38 2012 +0300
summary:
  Fix the tests of GC collection in ET.Element according to Benjamin's recommendations

files:
  Lib/test/test_xml_etree.py |  40 ++++++++++++-------------
  1 files changed, 19 insertions(+), 21 deletions(-)


diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -14,14 +14,14 @@
 # Don't re-import "xml.etree.ElementTree" module in the docstring,
 # except if the test is specific to the Python implementation.
 
-import gc
 import html
 import io
 import sys
 import unittest
+import weakref
 
 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'])
 
@@ -1848,28 +1848,26 @@
         self.assertRaises(TypeError, e.insert, 0, 'foo')
 
     def test_cyclic_gc(self):
-        class ShowGC:
-            def __init__(self, flaglist):
-                self.flaglist = flaglist
-            def __del__(self):
-                self.flaglist.append(1)
+        class Dummy:
+            pass
 
-        # Test the shortest cycle: lst->element->lst
-        fl = []
-        lst = [ShowGC(fl)]
-        lst.append(ET.Element('joe', attr=lst))
-        del lst
-        gc.collect()
-        self.assertEqual(fl, [1])
+        # Test the shortest cycle: d->element->d
+        d = Dummy()
+        d.dummyref = ET.Element('joe', attr=d)
+        wref = weakref.ref(d)
+        del d
+        gc_collect()
+        self.assertIsNone(wref())
 
-        # A longer cycle: lst->e->e2->lst
-        fl = []
+        # A longer cycle: d->e->e2->d
         e = ET.Element('joe')
-        lst = [ShowGC(fl), e]
-        e2 = ET.SubElement(e, 'foo', attr=lst)
-        del lst, e, e2
-        gc.collect()
-        self.assertEqual(fl, [1])
+        d = Dummy()
+        d.dummyref = e
+        wref = weakref.ref(d)
+        e2 = ET.SubElement(e, 'foo', attr=d)
+        del d, e, e2
+        gc_collect()
+        self.assertIsNone(wref())
 
 
 class ElementTreeTest(unittest.TestCase):

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list