test_iplib.py
76 lines
| 2.8 KiB
| text/x-python
|
PythonLexer
Fernando Perez
|
r1859 | """Tests for the key iplib module, where the main ipython class is defined. | ||
""" | ||||
Fernando Perez
|
r1908 | #----------------------------------------------------------------------------- | ||
# Module imports | ||||
#----------------------------------------------------------------------------- | ||||
Fernando Perez
|
r1859 | |||
Fernando Perez
|
r1908 | # stdlib | ||
import os | ||||
import shutil | ||||
import tempfile | ||||
# third party | ||||
Fernando Perez
|
r1859 | import nose.tools as nt | ||
Fernando Perez
|
r1908 | # our own packages | ||
Fernando Perez
|
r1956 | from IPython import ipapi, iplib | ||
Fernando Perez
|
r1908 | |||
#----------------------------------------------------------------------------- | ||||
# Globals | ||||
#----------------------------------------------------------------------------- | ||||
# Useful global ipapi object and main IPython one. Unfortunately we have a | ||||
# long precedent of carrying the 'ipapi' global object which is injected into | ||||
# the system namespace as _ip, but that keeps a pointer to the actual IPython | ||||
# InteractiveShell instance, which is named IP. Since in testing we do need | ||||
# access to the real thing (we want to probe beyond what ipapi exposes), make | ||||
# here a global reference to each. In general, things that are exposed by the | ||||
# ipapi instance should be read from there, but we also will often need to use | ||||
# the actual IPython one. | ||||
Fernando Perez
|
r1903 | |||
Fernando Perez
|
r1956 | # Get the public instance of IPython, and if it's None, make one so we can use | ||
# it for testing | ||||
ip = ipapi.get() | ||||
if ip is None: | ||||
# IPython not running yet, make one from the testing machinery for | ||||
# consistency when the test suite is being run via iptest | ||||
from IPython.testing.plugin import ipdoctest | ||||
ip = ipapi.get() | ||||
Fernando Perez
|
r1908 | IP = ip.IP # This is the actual IPython shell 'raw' object. | ||
#----------------------------------------------------------------------------- | ||||
# Test functions | ||||
#----------------------------------------------------------------------------- | ||||
Fernando Perez
|
r1868 | |||
Fernando Perez
|
r1859 | def test_reset(): | ||
"""reset must clear most namespaces.""" | ||||
Fernando Perez
|
r1903 | IP.reset() # first, it should run without error | ||
Fernando Perez
|
r1859 | # Then, check that most namespaces end up empty | ||
Fernando Perez
|
r1903 | for ns in IP.ns_refs_table: | ||
if ns is IP.user_ns: | ||||
Fernando Perez
|
r1859 | # The user namespace is reset with some data, so we can't check for | ||
# it being empty | ||||
continue | ||||
nt.assert_equals(len(ns),0) | ||||
Fernando Perez
|
r1903 | |||
Fernando Perez
|
r1908 | # make sure that user_setup can be run re-entrantly in 'install' mode. | ||
Fernando Perez
|
r1903 | def test_user_setup(): | ||
Fernando Perez
|
r1908 | # use a lambda to pass kwargs to the generator | ||
user_setup = lambda a,k: iplib.user_setup(*a,**k) | ||||
Fernando Perez
|
r1922 | kw = dict(mode='install', interactive=False) | ||
Fernando Perez
|
r1908 | |||
# Call the user setup and verify that the directory exists | ||||
Fernando Perez
|
r1922 | yield user_setup, (ip.options.ipythondir,''), kw | ||
yield os.path.isdir, ip.options.ipythondir | ||||
Fernando Perez
|
r1908 | |||
# Now repeat the operation with a non-existent directory. Check both that | ||||
# the call succeeds and that the directory is created. | ||||
tmpdir = tempfile.mktemp(prefix='ipython-test-') | ||||
try: | ||||
Fernando Perez
|
r1922 | yield user_setup, (tmpdir,''), kw | ||
yield os.path.isdir, tmpdir | ||||
Fernando Perez
|
r1908 | finally: | ||
# In this case, clean up the temp dir once done | ||||
shutil.rmtree(tmpdir) | ||||