Add some testing to verify which module was imported in ET tests.
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.
This commit is contained in:
parent
3a36756ba1
commit
e26fa1bdcb
|
@ -10,6 +10,7 @@ import io
|
||||||
import operator
|
import operator
|
||||||
import pickle
|
import pickle
|
||||||
import sys
|
import sys
|
||||||
|
import types
|
||||||
import unittest
|
import unittest
|
||||||
import weakref
|
import weakref
|
||||||
|
|
||||||
|
@ -2398,8 +2399,11 @@ class NoAcceleratorTest(unittest.TestCase):
|
||||||
|
|
||||||
# Test that the C accelerator was not imported for pyET
|
# Test that the C accelerator was not imported for pyET
|
||||||
def test_correct_import_pyET(self):
|
def test_correct_import_pyET(self):
|
||||||
self.assertEqual(pyET.Element.__module__, 'xml.etree.ElementTree')
|
# The type of methods defined in Python code is types.FunctionType,
|
||||||
self.assertEqual(pyET.SubElement.__module__, 'xml.etree.ElementTree')
|
# 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)
|
||||||
|
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import sys, struct
|
import sys, struct
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import import_fresh_module
|
from test.support import import_fresh_module
|
||||||
|
import types
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
cET = import_fresh_module('xml.etree.ElementTree',
|
cET = import_fresh_module('xml.etree.ElementTree',
|
||||||
|
@ -33,14 +34,22 @@ class TestAliasWorking(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipUnless(cET, 'requires _elementtree')
|
@unittest.skipUnless(cET, 'requires _elementtree')
|
||||||
|
@support.cpython_only
|
||||||
class TestAcceleratorImported(unittest.TestCase):
|
class TestAcceleratorImported(unittest.TestCase):
|
||||||
# Test that the C accelerator was imported, as expected
|
# Test that the C accelerator was imported, as expected
|
||||||
def test_correct_import_cET(self):
|
def test_correct_import_cET(self):
|
||||||
|
# SubElement is a function so it retains _elementtree as its module.
|
||||||
self.assertEqual(cET.SubElement.__module__, '_elementtree')
|
self.assertEqual(cET.SubElement.__module__, '_elementtree')
|
||||||
|
|
||||||
def test_correct_import_cET_alias(self):
|
def test_correct_import_cET_alias(self):
|
||||||
self.assertEqual(cET_alias.SubElement.__module__, '_elementtree')
|
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')
|
@unittest.skipUnless(cET, 'requires _elementtree')
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
|
|
Loading…
Reference in New Issue