Commits

Eli Bendersky committed 5782efa

Make the test more resilient to test-run order (closes #15075)

Comments (0)

Files changed (1)

Lib/test/test_xml_etree.py

     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():
              '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>
             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)
+        # 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
+
 
 if __name__ == '__main__':
     test_main()