]> granicus.if.org Git - python/commitdiff
Add some testing to verify which module was imported in ET tests.
authorEli Bendersky <eliben@gmail.com>
Mon, 20 May 2013 00:49:54 +0000 (17:49 -0700)
committerEli Bendersky <eliben@gmail.com>
Mon, 20 May 2013 00:49:54 +0000 (17:49 -0700)
This is useful when mucking with import_fresh_module to either force or block
importing of the _elementtree accelerator. These tests in place provide an
immediate indication whether the accelerator was actually imported and overrode
the classes it should have.

Lib/test/test_xml_etree.py
Lib/test/test_xml_etree_c.py

index 2222c86c29df0dbf3fe168b596fe3af85257376d..9d61ed7362b72bc3037e6b7c585e818b957a5d49 100644 (file)
@@ -10,6 +10,7 @@ import io
 import operator
 import pickle
 import sys
+import types
 import unittest
 import weakref
 
@@ -2398,8 +2399,11 @@ class NoAcceleratorTest(unittest.TestCase):
 
     # Test that the C accelerator was not imported for pyET
     def test_correct_import_pyET(self):
-        self.assertEqual(pyET.Element.__module__, 'xml.etree.ElementTree')
-        self.assertEqual(pyET.SubElement.__module__, 'xml.etree.ElementTree')
+        # The type of methods defined in Python code is types.FunctionType,
+        # while the type of methods defined inside _elementtree is
+        # <class 'wrapper_descriptor'>
+        self.assertIsInstance(pyET.Element.__init__, types.FunctionType)
+        self.assertIsInstance(pyET.XMLParser.__init__, types.FunctionType)
 
 # --------------------------------------------------------------------
 
index bcaa724344b983fe2e5efdca1a252ce4141b656f..b3ff7ae37d9f0c92efb784a1ef435db8ecb32854 100644 (file)
@@ -2,6 +2,7 @@
 import sys, struct
 from test import support
 from test.support import import_fresh_module
+import types
 import unittest
 
 cET = import_fresh_module('xml.etree.ElementTree',
@@ -33,14 +34,22 @@ class TestAliasWorking(unittest.TestCase):
 
 
 @unittest.skipUnless(cET, 'requires _elementtree')
+@support.cpython_only
 class TestAcceleratorImported(unittest.TestCase):
     # Test that the C accelerator was imported, as expected
     def test_correct_import_cET(self):
+        # SubElement is a function so it retains _elementtree as its module.
         self.assertEqual(cET.SubElement.__module__, '_elementtree')
 
     def test_correct_import_cET_alias(self):
         self.assertEqual(cET_alias.SubElement.__module__, '_elementtree')
 
+    def test_parser_comes_from_C(self):
+        # The type of methods defined in Python code is types.FunctionType,
+        # while the type of methods defined inside _elementtree is
+        # <class 'wrapper_descriptor'>
+        self.assertNotIsInstance(cET.Element.__init__, types.FunctionType)
+
 
 @unittest.skipUnless(cET, 'requires _elementtree')
 @support.cpython_only