##// END OF EJS Templates
Make default argv for testing instances....
Make default argv for testing instances. This simple utility lets us ensure that all testing instances of ipython can be consistently initialized in an identical manner.

File last commit:

r1956:72f5e19e
r1965:2d66a78b
Show More
test_iplib.py
76 lines | 2.8 KiB | text/x-python | PythonLexer
Fernando Perez
Fix https://bugs.launchpad.net/ipython/+bug/239054...
r1859 """Tests for the key iplib module, where the main ipython class is defined.
"""
Fernando Perez
Make user_setup a top-level function in iplib and add better tests....
r1908 #-----------------------------------------------------------------------------
# Module imports
#-----------------------------------------------------------------------------
Fernando Perez
Fix https://bugs.launchpad.net/ipython/+bug/239054...
r1859
Fernando Perez
Make user_setup a top-level function in iplib and add better tests....
r1908 # stdlib
import os
import shutil
import tempfile
# third party
Fernando Perez
Fix https://bugs.launchpad.net/ipython/+bug/239054...
r1859 import nose.tools as nt
Fernando Perez
Make user_setup a top-level function in iplib and add better tests....
r1908 # our own packages
Fernando Perez
Fix tests when run outside iptest.
r1956 from IPython import ipapi, iplib
Fernando Perez
Make user_setup a top-level function in iplib and add better tests....
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
Allow user_setup to be called multiple times.
r1903
Fernando Perez
Fix tests when run outside iptest.
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
Make user_setup a top-level function in iplib and add better tests....
r1908 IP = ip.IP # This is the actual IPython shell 'raw' object.
#-----------------------------------------------------------------------------
# Test functions
#-----------------------------------------------------------------------------
Fernando Perez
Fix problems with multiline doctests and add docs about testing....
r1868
Fernando Perez
Fix https://bugs.launchpad.net/ipython/+bug/239054...
r1859 def test_reset():
"""reset must clear most namespaces."""
Fernando Perez
Allow user_setup to be called multiple times.
r1903 IP.reset() # first, it should run without error
Fernando Perez
Fix https://bugs.launchpad.net/ipython/+bug/239054...
r1859 # Then, check that most namespaces end up empty
Fernando Perez
Allow user_setup to be called multiple times.
r1903 for ns in IP.ns_refs_table:
if ns is IP.user_ns:
Fernando Perez
Fix https://bugs.launchpad.net/ipython/+bug/239054...
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
Allow user_setup to be called multiple times.
r1903
Fernando Perez
Make user_setup a top-level function in iplib and add better tests....
r1908 # make sure that user_setup can be run re-entrantly in 'install' mode.
Fernando Perez
Allow user_setup to be called multiple times.
r1903 def test_user_setup():
Fernando Perez
Make user_setup a top-level function in iplib and add better tests....
r1908 # use a lambda to pass kwargs to the generator
user_setup = lambda a,k: iplib.user_setup(*a,**k)
Fernando Perez
Small formatting fixes to address Jorgen's last code review.
r1922 kw = dict(mode='install', interactive=False)
Fernando Perez
Make user_setup a top-level function in iplib and add better tests....
r1908
# Call the user setup and verify that the directory exists
Fernando Perez
Small formatting fixes to address Jorgen's last code review.
r1922 yield user_setup, (ip.options.ipythondir,''), kw
yield os.path.isdir, ip.options.ipythondir
Fernando Perez
Make user_setup a top-level function in iplib and add better tests....
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
Small formatting fixes to address Jorgen's last code review.
r1922 yield user_setup, (tmpdir,''), kw
yield os.path.isdir, tmpdir
Fernando Perez
Make user_setup a top-level function in iplib and add better tests....
r1908 finally:
# In this case, clean up the temp dir once done
shutil.rmtree(tmpdir)