]> granicus.if.org Git - python/commitdiff
Make the test more resilient to test-run order (closes #15075)
authorEli Bendersky <eliben@gmail.com>
Sat, 16 Jun 2012 03:47:44 +0000 (06:47 +0300)
committerEli Bendersky <eliben@gmail.com>
Sat, 16 Jun 2012 03:47:44 +0000 (06:47 +0300)
Lib/test/test_xml_etree.py

index 24ecae5acada29edbd25452328bc30427ef68472..c1fc955da6a7262c25858413ff2514f8e938a9db 100644 (file)
@@ -1279,8 +1279,7 @@ def xinclude_loader(href, parse="xml", encoding=None):
     except KeyError:
         raise OSError("resource not found")
     if parse == "xml":
-        from xml.etree.ElementTree import XML
-        return XML(data)
+        data = ET.XML(data)
     return data
 
 def xinclude():
@@ -2011,12 +2010,20 @@ class TreeBuilderTest(unittest.TestCase):
              'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'))
 
 
-@unittest.skip('Unstable due to module monkeypatching')
 class XincludeTest(unittest.TestCase):
+    def _my_loader(self, href, parse):
+        # Used to avoid a test-dependency problem where the default loader
+        # of ElementInclude uses the pyET parser for cET tests.
+        if parse == 'xml':
+            with open(href, 'rb') as f:
+                return ET.parse(f).getroot()
+        else:
+            return None
+
     def test_xinclude_default(self):
         from xml.etree import ElementInclude
         doc = xinclude_loader('default.xml')
-        ElementInclude.include(doc)
+        ElementInclude.include(doc, self._my_loader)
         s = serialize(doc)
         self.assertEqual(s.strip(), '''<document>
   <p>Example.</p>
@@ -2308,11 +2315,16 @@ def test_main(module=None):
             NoAcceleratorTest,
             ])
 
-    support.run_unittest(*test_classes)
+    try:
+        support.run_unittest(*test_classes)
+
+        # XXX the C module should give the same warnings as the Python module
+        with CleanContext(quiet=(module is not pyET)):
+            support.run_doctest(sys.modules[__name__], verbosity=True)
+    finally:
+        # don't interfere with subsequent tests
+        ET = pyET = None
 
-    # XXX the C module should give the same warnings as the Python module
-    with CleanContext(quiet=(module is not pyET)):
-        support.run_doctest(sys.modules[__name__], verbosity=True)
 
 if __name__ == '__main__':
     test_main()