|
|
import os.path
|
|
|
|
|
|
from tempfile import TemporaryDirectory
|
|
|
|
|
|
import IPython.testing.tools as tt
|
|
|
from IPython.utils.syspathcontext import prepended_to_syspath
|
|
|
|
|
|
ext1_content = """
|
|
|
def load_ipython_extension(ip):
|
|
|
print("Running ext1 load")
|
|
|
|
|
|
def unload_ipython_extension(ip):
|
|
|
print("Running ext1 unload")
|
|
|
"""
|
|
|
|
|
|
ext2_content = """
|
|
|
def load_ipython_extension(ip):
|
|
|
print("Running ext2 load")
|
|
|
"""
|
|
|
|
|
|
ext3_content = """
|
|
|
def load_ipython_extension(ip):
|
|
|
ip2 = get_ipython()
|
|
|
print(ip is ip2)
|
|
|
"""
|
|
|
|
|
|
def test_extension_loading():
|
|
|
em = get_ipython().extension_manager
|
|
|
with TemporaryDirectory() as td:
|
|
|
ext1 = os.path.join(td, "ext1.py")
|
|
|
with open(ext1, "w", encoding="utf-8") as f:
|
|
|
f.write(ext1_content)
|
|
|
|
|
|
ext2 = os.path.join(td, "ext2.py")
|
|
|
with open(ext2, "w", encoding="utf-8") as f:
|
|
|
f.write(ext2_content)
|
|
|
|
|
|
with prepended_to_syspath(td):
|
|
|
assert 'ext1' not in em.loaded
|
|
|
assert 'ext2' not in em.loaded
|
|
|
|
|
|
# Load extension
|
|
|
with tt.AssertPrints("Running ext1 load"):
|
|
|
assert em.load_extension('ext1') is None
|
|
|
assert 'ext1' in em.loaded
|
|
|
|
|
|
# Should refuse to load it again
|
|
|
with tt.AssertNotPrints("Running ext1 load"):
|
|
|
assert em.load_extension('ext1') == 'already loaded'
|
|
|
|
|
|
# Reload
|
|
|
with tt.AssertPrints("Running ext1 unload"):
|
|
|
with tt.AssertPrints("Running ext1 load", suppress=False):
|
|
|
em.reload_extension('ext1')
|
|
|
|
|
|
# Unload
|
|
|
with tt.AssertPrints("Running ext1 unload"):
|
|
|
assert em.unload_extension('ext1') is None
|
|
|
|
|
|
# Can't unload again
|
|
|
with tt.AssertNotPrints("Running ext1 unload"):
|
|
|
assert em.unload_extension('ext1') == 'not loaded'
|
|
|
assert em.unload_extension('ext2') == 'not loaded'
|
|
|
|
|
|
# Load extension 2
|
|
|
with tt.AssertPrints("Running ext2 load"):
|
|
|
assert em.load_extension('ext2') is None
|
|
|
|
|
|
# Can't unload this
|
|
|
assert em.unload_extension('ext2') == 'no unload function'
|
|
|
|
|
|
# But can reload it
|
|
|
with tt.AssertPrints("Running ext2 load"):
|
|
|
em.reload_extension('ext2')
|
|
|
|
|
|
|
|
|
def test_extension_builtins():
|
|
|
em = get_ipython().extension_manager
|
|
|
with TemporaryDirectory() as td:
|
|
|
ext3 = os.path.join(td, "ext3.py")
|
|
|
with open(ext3, "w", encoding="utf-8") as f:
|
|
|
f.write(ext3_content)
|
|
|
|
|
|
assert 'ext3' not in em.loaded
|
|
|
|
|
|
with prepended_to_syspath(td):
|
|
|
# Load extension
|
|
|
with tt.AssertPrints("True"):
|
|
|
assert em.load_extension('ext3') is None
|
|
|
assert 'ext3' in em.loaded
|
|
|
|
|
|
|
|
|
def test_non_extension():
|
|
|
em = get_ipython().extension_manager
|
|
|
assert em.load_extension("sys") == "no load function"
|
|
|
|