test_deepreload.py
59 lines
| 2.1 KiB
| text/x-python
|
PythonLexer
Bradley M. Froehle
|
r6534 | # -*- coding: utf-8 -*- | ||
Bradley M. Froehle
|
r6533 | """Test suite for the deepreload module.""" | ||
Bradley M. Froehle
|
r6534 | #----------------------------------------------------------------------------- | ||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
Bradley M. Froehle
|
r6535 | import os | ||
import nose.tools as nt | ||||
Bradley M. Froehle
|
r6533 | from IPython.testing import decorators as dec | ||
Matthias Bussonnier
|
r21384 | from IPython.utils.py3compat import builtin_mod_name, PY3 | ||
Bradley M. Froehle
|
r6541 | from IPython.utils.syspathcontext import prepended_to_syspath | ||
Bradley M. Froehle
|
r6535 | from IPython.utils.tempdir import TemporaryDirectory | ||
Bradley M. Froehle
|
r6533 | from IPython.lib.deepreload import reload as dreload | ||
Bradley M. Froehle
|
r6534 | #----------------------------------------------------------------------------- | ||
# Test functions begin | ||||
#----------------------------------------------------------------------------- | ||||
Bradley M. Froehle
|
r6533 | @dec.skipif_not_numpy | ||
def test_deepreload_numpy(): | ||||
Bradley M. Froehle
|
r6535 | "Test that NumPy can be deep reloaded." | ||
Bradley M. Froehle
|
r6533 | import numpy | ||
Thomas Kluyver
|
r21550 | # TODO: Find a way to exclude all standard library modules from reloading. | ||
Bradley M. Froehle
|
r6533 | exclude = [ | ||
# Standard exclusions: | ||||
Thomas Kluyver
|
r13351 | 'sys', 'os.path', builtin_mod_name, '__main__', | ||
Bradley M. Froehle
|
r6533 | # Test-related exclusions: | ||
Thomas Kluyver
|
r21445 | 'unittest', 'UserDict', '_collections_abc', 'tokenize', | ||
Thomas Kluyver
|
r21446 | 'collections', 'collections.abc', | ||
Thomas Kluyver
|
r21551 | 'importlib', 'importlib.machinery', '_imp', | ||
'importlib._bootstrap', 'importlib._bootstrap_external', | ||||
'_frozen_importlib', '_frozen_importlib_external', | ||||
Bradley M. Froehle
|
r6533 | ] | ||
Matthias Bussonnier
|
r21384 | |||
Bradley M. Froehle
|
r6533 | dreload(numpy, exclude=exclude) | ||
Bradley M. Froehle
|
r6535 | |||
def test_deepreload(): | ||||
"Test that dreload does deep reloads and skips excluded modules." | ||||
with TemporaryDirectory() as tmpdir: | ||||
Bradley M. Froehle
|
r6541 | with prepended_to_syspath(tmpdir): | ||
with open(os.path.join(tmpdir, 'A.py'), 'w') as f: | ||||
f.write("class Object(object):\n pass\n") | ||||
with open(os.path.join(tmpdir, 'B.py'), 'w') as f: | ||||
f.write("import A\n") | ||||
import A | ||||
import B | ||||
# Test that A is not reloaded. | ||||
obj = A.Object() | ||||
dreload(B, exclude=['A']) | ||||
nt.assert_true(isinstance(obj, A.Object)) | ||||
# Test that A is reloaded. | ||||
obj = A.Object() | ||||
dreload(B) | ||||
nt.assert_false(isinstance(obj, A.Object)) | ||||