58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
"""Test lazymod.py"""
|
|
|
|
|
|
import sys
|
|
import unittest
|
|
|
|
from xmodule.capa.safe_exec.lazymod import LazyModule
|
|
|
|
|
|
class ModuleIsolation(object):
|
|
"""
|
|
Manage changes to sys.modules so that we can roll back imported modules.
|
|
|
|
Create this object, it will snapshot the currently imported modules. When
|
|
you call `clean_up()`, it will delete any module imported since its creation.
|
|
"""
|
|
def __init__(self):
|
|
# Save all the names of all the imported modules.
|
|
self.mods = set(sys.modules)
|
|
|
|
def clean_up(self): # lint-amnesty, pylint: disable=missing-function-docstring
|
|
# Get a list of modules that didn't exist when we were created
|
|
new_mods = [m for m in sys.modules if m not in self.mods]
|
|
# and delete them all so another import will run code for real again.
|
|
for m in new_mods:
|
|
del sys.modules[m]
|
|
|
|
|
|
class TestLazyMod(unittest.TestCase): # lint-amnesty, pylint: disable=missing-class-docstring
|
|
|
|
def setUp(self):
|
|
super(TestLazyMod, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
|
# Each test will remove modules that it imported.
|
|
self.addCleanup(ModuleIsolation().clean_up)
|
|
|
|
def test_simple(self):
|
|
# Import some stdlib module that has not been imported before
|
|
module_name = 'colorsys'
|
|
if module_name in sys.modules:
|
|
# May have been imported during test discovery, remove it again
|
|
del sys.modules[module_name]
|
|
assert module_name not in sys.modules
|
|
colorsys = LazyModule(module_name)
|
|
hsv = colorsys.rgb_to_hsv(.3, .4, .2)
|
|
assert hsv[0] == 0.25
|
|
|
|
def test_dotted(self):
|
|
# wsgiref is a module with submodules that is not already imported.
|
|
# Any similar module would do. This test demonstrates that the module
|
|
# is not already imported
|
|
module_name = 'wsgiref.util'
|
|
if module_name in sys.modules:
|
|
# May have been imported during test discovery, remove it again
|
|
del sys.modules[module_name]
|
|
assert module_name not in sys.modules
|
|
wsgiref_util = LazyModule(module_name)
|
|
assert wsgiref_util.guess_scheme({}) == 'http'
|