mirror of
https://github.com/python/cpython.git
synced 2025-08-01 15:43:13 +00:00
Issue 5354: Provide a standardised testing mechanism for doing fresh imports of modules, including the ability to block extension modules in order to test the pure Python fallbacks
This commit is contained in:
parent
b524825788
commit
cd2e7042ae
4 changed files with 100 additions and 35 deletions
|
@ -7,23 +7,8 @@ import sys
|
|||
|
||||
# We do a bit of trickery here to be able to test both the C implementation
|
||||
# and the Python implementation of the module.
|
||||
|
||||
# Make it impossible to import the C implementation anymore.
|
||||
sys.modules['_heapq'] = 0
|
||||
# We must also handle the case that heapq was imported before.
|
||||
if 'heapq' in sys.modules:
|
||||
del sys.modules['heapq']
|
||||
|
||||
# Now we can import the module and get the pure Python implementation.
|
||||
import heapq as py_heapq
|
||||
|
||||
# Restore everything to normal.
|
||||
del sys.modules['_heapq']
|
||||
del sys.modules['heapq']
|
||||
|
||||
# This is now the module with the C implementation.
|
||||
import heapq as c_heapq
|
||||
|
||||
py_heapq = test_support.import_fresh_module('heapq', ['_heapq'])
|
||||
|
||||
class TestHeap(unittest.TestCase):
|
||||
module = None
|
||||
|
@ -193,6 +178,13 @@ class TestHeap(unittest.TestCase):
|
|||
class TestHeapPython(TestHeap):
|
||||
module = py_heapq
|
||||
|
||||
# As an early adopter, we sanity check the
|
||||
# test_support.import_fresh_module utility function
|
||||
def test_pure_python(self):
|
||||
self.assertFalse(sys.modules['heapq'] is self.module)
|
||||
self.assertTrue(hasattr(self.module.heapify, 'func_code'))
|
||||
|
||||
|
||||
class TestHeapC(TestHeap):
|
||||
module = c_heapq
|
||||
|
||||
|
@ -217,6 +209,12 @@ class TestHeapC(TestHeap):
|
|||
self.assertEqual(hsort(data, LT), target)
|
||||
self.assertEqual(hsort(data, LE), target)
|
||||
|
||||
# As an early adopter, we sanity check the
|
||||
# test_support.import_fresh_module utility function
|
||||
def test_accelerated(self):
|
||||
self.assertTrue(sys.modules['heapq'] is self.module)
|
||||
self.assertFalse(hasattr(self.module.heapify, 'func_code'))
|
||||
|
||||
|
||||
#==============================================================================
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue