|
|
"""Tests for the key iplib module, where the main ipython class is defined.
|
|
|
"""
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Module imports
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
# stdlib
|
|
|
import os
|
|
|
import shutil
|
|
|
import tempfile
|
|
|
|
|
|
# third party
|
|
|
import nose.tools as nt
|
|
|
|
|
|
# our own packages
|
|
|
from IPython.core import iplib
|
|
|
from IPython.core import ipapi
|
|
|
from IPython.testing import decorators as dec
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# 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.
|
|
|
|
|
|
# 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()
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Test functions
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
@dec.parametric
|
|
|
def test_reset():
|
|
|
"""reset must clear most namespaces."""
|
|
|
# The number of variables in the private user_config_ns is not zero, but it
|
|
|
# should be constant regardless of what we do
|
|
|
nvars_config_ns = len(ip.user_config_ns)
|
|
|
|
|
|
# Check that reset runs without error
|
|
|
ip.reset()
|
|
|
|
|
|
# Once we've reset it (to clear of any junk that might have been there from
|
|
|
# other tests, we can count how many variables are in the user's namespace
|
|
|
nvars_user_ns = len(ip.user_ns)
|
|
|
|
|
|
# Now add a few variables to user_ns, and check that reset clears them
|
|
|
ip.user_ns['x'] = 1
|
|
|
ip.user_ns['y'] = 1
|
|
|
ip.reset()
|
|
|
|
|
|
# Finally, check that all namespaces have only as many variables as we
|
|
|
# expect to find in them:
|
|
|
for ns in ip.ns_refs_table:
|
|
|
if ns is ip.user_ns:
|
|
|
nvars_expected = nvars_user_ns
|
|
|
elif ns is ip.user_config_ns:
|
|
|
nvars_expected = nvars_config_ns
|
|
|
else:
|
|
|
nvars_expected = 0
|
|
|
|
|
|
yield nt.assert_equals(len(ns), nvars_expected)
|
|
|
|