##// END OF EJS Templates
update copyright to 2011/20xx-2011...
update copyright to 2011/20xx-2011 Closes #1033 (rebased to prevent recursive merge). Closes #2. 459 *.py files in : 39 empty files 176 files without copyright 36 have copyright but don't cite the dev team 208 have copyright and cite the dev team ----------------------------------------- 0 not up to date (cite dev team but not right year) FYI, list of files that don't have copyright (and are not empty..) [ 'IPython/config/profile/cluster/ipython_config.py', 'IPython/config/profile/math/ipython_config.py', 'IPython/config/profile/pylab/ipython_config.py', 'IPython/config/profile/pysh/ipython_config.py', 'IPython/config/profile/python3/ipython_config.py', 'IPython/config/profile/sympy/ipython_config.py', 'IPython/core/shadowns.py', 'IPython/core/tests/refbug.py', 'IPython/core/tests/simpleerr.py', 'IPython/core/tests/tclass.py', 'IPython/core/tests/test_application.py', 'IPython/core/tests/test_autocall.py', 'IPython/core/tests/test_completer.py', 'IPython/core/tests/test_fakemodule.py', 'IPython/core/tests/test_formatters.py', 'IPython/core/tests/test_handlers.py', 'IPython/core/tests/test_history.py', 'IPython/core/tests/test_imports.py', 'IPython/core/tests/test_iplib.py', 'IPython/core/tests/test_logger.py', 'IPython/core/tests/test_magic.py', 'IPython/core/tests/test_plugin.py', 'IPython/core/tests/test_prefilter.py', 'IPython/core/tests/test_profile.py', 'IPython/core/tests/test_run.py', 'IPython/core/tests/test_splitinput.py', 'IPython/deathrow/astyle.py', 'IPython/deathrow/dtutils.py', 'IPython/deathrow/Gnuplot2.py', 'IPython/deathrow/GnuplotInteractive.py', 'IPython/deathrow/GnuplotRuntime.py', 'IPython/deathrow/gui/wx/ipshell_nonblocking.py', 'IPython/deathrow/gui/wx/ipython_history.py', 'IPython/deathrow/gui/wx/thread_ex.py', 'IPython/deathrow/ibrowse.py', 'IPython/deathrow/igrid.py', 'IPython/deathrow/ipipe.py', 'IPython/deathrow/ipy_defaults.py', 'IPython/deathrow/ipy_kitcfg.py', 'IPython/deathrow/ipy_legacy.py', 'IPython/deathrow/ipy_p4.py', 'IPython/deathrow/ipy_profile_none.py', 'IPython/deathrow/ipy_profile_numpy.py', 'IPython/deathrow/ipy_profile_scipy.py', 'IPython/deathrow/ipy_profile_sh.py', 'IPython/deathrow/ipy_traits_completer.py', 'IPython/deathrow/ipy_vimserver.py', 'IPython/deathrow/numeric_formats.py', 'IPython/deathrow/oldfrontend/process/__init__.py', 'IPython/deathrow/oldfrontend/wx/ipythonx.py', 'IPython/deathrow/scitedirector.py', 'IPython/deathrow/tests/test_prefilter.py', 'IPython/deathrow/twshell.py', 'IPython/extensions/__init__.py', 'IPython/extensions/autoreload.py', 'IPython/extensions/storemagic.py', 'IPython/extensions/tests/test_autoreload.py', 'IPython/external/__init__.py', 'IPython/external/argparse/__init__.py', 'IPython/external/decorator/__init__.py', 'IPython/external/decorators/__init__.py', 'IPython/external/decorators/_decorators.py', 'IPython/external/decorators/_numpy_testing_noseclasses.py', 'IPython/external/decorators/_numpy_testing_utils.py', 'IPython/external/guid/__init__.py', 'IPython/external/Itpl/__init__.py', 'IPython/external/mglob/__init__.py', 'IPython/external/mglob/_mglob.py', 'IPython/external/path/__init__.py', 'IPython/external/path/_path.py', 'IPython/external/pexpect/__init__.py', 'IPython/external/pyparsing/__init__.py', 'IPython/external/qt.py', 'IPython/external/qt_for_kernel.py', 'IPython/external/simplegeneric/__init__.py', 'IPython/external/simplegeneric/_simplegeneric.py', 'IPython/frontend/html/notebook/__init__.py', 'IPython/frontend/html/notebook/tests/test_kernelsession.py', 'IPython/frontend/qt/base_frontend_mixin.py', 'IPython/frontend/qt/console/ansi_code_processor.py', 'IPython/frontend/qt/console/bracket_matcher.py', 'IPython/frontend/qt/console/call_tip_widget.py', 'IPython/frontend/qt/console/completion_lexer.py', 'IPython/frontend/qt/console/completion_widget.py', 'IPython/frontend/qt/console/console_widget.py', 'IPython/frontend/qt/console/history_console_widget.py', 'IPython/frontend/qt/console/ipython_widget.py', 'IPython/frontend/qt/console/kill_ring.py', 'IPython/frontend/qt/console/mainwindow.py', 'IPython/frontend/qt/console/pygments_highlighter.py', 'IPython/frontend/qt/console/qtconsoleapp.py', 'IPython/frontend/qt/console/rich_ipython_widget.py', 'IPython/frontend/qt/console/styles.py', 'IPython/frontend/qt/console/tests/test_ansi_code_processor.py', 'IPython/frontend/qt/console/tests/test_completion_lexer.py', 'IPython/frontend/qt/console/tests/test_kill_ring.py', 'IPython/frontend/qt/kernelmanager.py', 'IPython/frontend/qt/rich_text.py', 'IPython/frontend/qt/svg.py', 'IPython/frontend/qt/util.py', 'IPython/kernel/__init__.py', 'IPython/lib/clipboard.py', 'IPython/lib/display.py', 'IPython/lib/irunner.py', 'IPython/lib/security.py', 'IPython/lib/tests/test_imports.py', 'IPython/lib/tests/test_irunner.py', 'IPython/lib/tests/test_irunner_pylab_magic.py', 'IPython/lib/tests/test_security.py', 'IPython/nbformat/v1/tests/nbexamples.py', 'IPython/nbformat/v1/tests/test_json.py', 'IPython/nbformat/v1/tests/test_nbbase.py', 'IPython/nbformat/v2/tests/nbexamples.py', 'IPython/nbformat/v2/tests/test_json.py', 'IPython/nbformat/v2/tests/test_nbbase.py', 'IPython/nbformat/v2/tests/test_nbpy.py', 'IPython/quarantine/clearcmd.py', 'IPython/quarantine/envpersist.py', 'IPython/quarantine/ext_rescapture.py', 'IPython/quarantine/ipy_app_completers.py', 'IPython/quarantine/ipy_completers.py', 'IPython/quarantine/ipy_editors.py', 'IPython/quarantine/ipy_exportdb.py', 'IPython/quarantine/ipy_extutil.py', 'IPython/quarantine/ipy_fsops.py', 'IPython/quarantine/ipy_gnuglobal.py', 'IPython/quarantine/ipy_jot.py', 'IPython/quarantine/ipy_lookfor.py', 'IPython/quarantine/ipy_profile_doctest.py', 'IPython/quarantine/ipy_pydb.py', 'IPython/quarantine/ipy_rehashdir.py', 'IPython/quarantine/ipy_render.py', 'IPython/quarantine/ipy_server.py', 'IPython/quarantine/ipy_signals.py', 'IPython/quarantine/ipy_synchronize_with.py', 'IPython/quarantine/ipy_system_conf.py', 'IPython/quarantine/ipy_which.py', 'IPython/quarantine/ipy_winpdb.py', 'IPython/quarantine/ipy_workdir.py', 'IPython/quarantine/jobctrl.py', 'IPython/quarantine/ledit.py', 'IPython/quarantine/win32clip.py', 'IPython/testing/mkdoctests.py', 'IPython/testing/plugin/dtexample.py', 'IPython/testing/plugin/ipdoctest.py', 'IPython/testing/plugin/iptest.py', 'IPython/testing/plugin/setup.py', 'IPython/testing/plugin/show_refs.py', 'IPython/testing/plugin/simple.py', 'IPython/testing/plugin/simplevars.py', 'IPython/testing/plugin/test_ipdoctest.py', 'IPython/testing/plugin/test_refs.py', 'IPython/testing/skipdoctest.py', 'IPython/testing/tests/test_decorators.py', 'IPython/utils/autoattr.py', 'IPython/utils/nested_context.py', 'IPython/utils/pickleshare.py', 'IPython/utils/py3compat.py', 'IPython/utils/PyColorize.py', 'IPython/utils/rlineimpl.py', 'IPython/utils/strdispatch.py', 'IPython/utils/tempdir.py', 'IPython/utils/tests/test_imports.py', 'IPython/utils/tests/test_wildcard.py', 'IPython/utils/upgradedir.py', 'IPython/zmq/completer.py', 'IPython/zmq/displayhook.py', 'IPython/zmq/entry_point.py', 'IPython/zmq/frontend.py', 'IPython/zmq/iostream.py', 'IPython/zmq/ipkernel.py', 'IPython/zmq/log.py', 'IPython/zmq/parentpoller.py', 'IPython/zmq/pykernel.py', 'IPython/zmq/pylab/backend_inline.py', 'IPython/zmq/zmqshell.py' ]

File last commit:

r5390:c82649ea
r5390:c82649ea
Show More
test_prefilterfrontend.py
268 lines | 7.8 KiB | text/x-python | PythonLexer
# encoding: utf-8
"""
Test process execution and IO redirection.
"""
__docformat__ = "restructuredtext en"
#-------------------------------------------------------------------------------
# Copyright (C) 2008-2011 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is
# in the file COPYING, distributed as part of this software.
#-------------------------------------------------------------------------------
from copy import copy, deepcopy
from cStringIO import StringIO
import string
import sys
from nose.tools import assert_equal
from IPython.frontend.prefilterfrontend import PrefilterFrontEnd
from IPython.testing.globalipapp import get_ipython
#-----------------------------------------------------------------------------
# Support utilities
#-----------------------------------------------------------------------------
class TestPrefilterFrontEnd(PrefilterFrontEnd):
input_prompt_template = string.Template('')
output_prompt_template = string.Template('')
banner = ''
def __init__(self):
self.out = StringIO()
PrefilterFrontEnd.__init__(self)
# Some more code for isolation (yeah, crazy)
self._on_enter()
self.out.flush()
self.out.reset()
self.out.truncate()
def write(self, string, *args, **kwargs):
self.out.write(string)
def _on_enter(self):
self.input_buffer += '\n'
PrefilterFrontEnd._on_enter(self)
def isolate_ipython0(func):
""" Decorator to isolate execution that involves an iptyhon0.
Notes
-----
Apply only to functions with no arguments. Nose skips functions
with arguments.
"""
def my_func():
ip0 = get_ipython()
if ip0 is None:
return func()
# We have a real ipython running...
user_ns = ip0.user_ns
user_global_ns = ip0.user_global_ns
# Previously the isolation was attempted with a deep copy of the user
# dicts, but we found cases where this didn't work correctly. I'm not
# quite sure why, but basically it did damage the user namespace, such
# that later tests stopped working correctly. Instead we use a simpler
# approach, just computing the list of added keys to the namespace and
# eliminating those afterwards. Existing keys that may have been
# modified remain modified. So far this has proven to be robust.
# Compute set of old local/global keys
old_locals = set(user_ns.keys())
old_globals = set(user_global_ns.keys())
try:
out = func()
finally:
# Find new keys, and if any, remove them
new_locals = set(user_ns.keys()) - old_locals
new_globals = set(user_global_ns.keys()) - old_globals
for k in new_locals:
del user_ns[k]
for k in new_globals:
del user_global_ns[k]
return out
my_func.__name__ = func.__name__
return my_func
#-----------------------------------------------------------------------------
# Tests
#-----------------------------------------------------------------------------
@isolate_ipython0
def test_execution():
""" Test execution of a command.
"""
f = TestPrefilterFrontEnd()
f.input_buffer = 'print(1)'
f._on_enter()
out_value = f.out.getvalue()
assert_equal(out_value, '1\n')
@isolate_ipython0
def test_multiline():
""" Test execution of a multiline command.
"""
f = TestPrefilterFrontEnd()
f.input_buffer = 'if True:'
f._on_enter()
f.input_buffer += 'print 1'
f._on_enter()
out_value = f.out.getvalue()
yield assert_equal, out_value, ''
f._on_enter()
out_value = f.out.getvalue()
yield assert_equal, out_value, '1\n'
f = TestPrefilterFrontEnd()
f.input_buffer='(1 +'
f._on_enter()
f.input_buffer += '0)'
f._on_enter()
out_value = f.out.getvalue()
yield assert_equal, out_value, ''
f._on_enter()
out_value = f.out.getvalue()
yield assert_equal, out_value, '1\n'
@isolate_ipython0
def test_capture():
""" Test the capture of output in different channels.
"""
# Test on the OS-level stdout, stderr.
f = TestPrefilterFrontEnd()
f.input_buffer = \
'import os; out=os.fdopen(1, "w"); out.write("1") ; out.flush()'
f._on_enter()
out_value = f.out.getvalue()
yield assert_equal, out_value, '1'
f = TestPrefilterFrontEnd()
f.input_buffer = \
'import os; out=os.fdopen(2, "w"); out.write("1") ; out.flush()'
f._on_enter()
out_value = f.out.getvalue()
yield assert_equal, out_value, '1'
@isolate_ipython0
def test_magic():
""" Test the magic expansion and history.
This test is fairly fragile and will break when magics change.
"""
f = TestPrefilterFrontEnd()
# Before checking the interactive namespace, make sure it's clear (it can
# otherwise pick up things stored in the user's local db)
f.input_buffer += '%reset -f'
f._on_enter()
f.complete_current_input()
# Now, run the %who magic and check output
f.input_buffer += '%who'
f._on_enter()
out_value = f.out.getvalue()
assert_equal(out_value, 'Interactive namespace is empty.\n')
@isolate_ipython0
def test_help():
""" Test object inspection.
"""
f = TestPrefilterFrontEnd()
f.input_buffer += "def f():"
f._on_enter()
f.input_buffer += "'foobar'"
f._on_enter()
f.input_buffer += "pass"
f._on_enter()
f._on_enter()
f.input_buffer += "f?"
f._on_enter()
assert 'traceback' not in f.last_result
## XXX: ipython doctest magic breaks this. I have no clue why
#out_value = f.out.getvalue()
#assert out_value.split()[-1] == 'foobar'
@isolate_ipython0
def test_completion_simple():
""" Test command-line completion on trivial examples.
"""
f = TestPrefilterFrontEnd()
f.input_buffer = 'zzza = 1'
f._on_enter()
f.input_buffer = 'zzzb = 2'
f._on_enter()
f.input_buffer = 'zz'
f.complete_current_input()
out_value = f.out.getvalue()
yield assert_equal, out_value, '\nzzza zzzb '
yield assert_equal, f.input_buffer, 'zzz'
@isolate_ipython0
def test_completion_parenthesis():
""" Test command-line completion when a parenthesis is open.
"""
f = TestPrefilterFrontEnd()
f.input_buffer = 'zzza = 1'
f._on_enter()
f.input_buffer = 'zzzb = 2'
f._on_enter()
f.input_buffer = 'map(zz'
f.complete_current_input()
out_value = f.out.getvalue()
yield assert_equal, out_value, '\nzzza zzzb '
yield assert_equal, f.input_buffer, 'map(zzz'
@isolate_ipython0
def test_completion_indexing():
""" Test command-line completion when indexing on objects.
"""
f = TestPrefilterFrontEnd()
f.input_buffer = 'a = [0]'
f._on_enter()
f.input_buffer = 'a[0].'
f.complete_current_input()
if sys.version_info[:2] >= (2,6):
# In Python 2.6, ints picked up a few non __ methods, so now there are
# no completions.
assert_equal(f.input_buffer, 'a[0].')
else:
# Right answer for 2.4/2.5
assert_equal(f.input_buffer, 'a[0].__')
@isolate_ipython0
def test_completion_equal():
""" Test command-line completion when the delimiter is "=", not " ".
"""
f = TestPrefilterFrontEnd()
f.input_buffer = 'a=1.'
f.complete_current_input()
if sys.version_info[:2] >= (2,6):
# In Python 2.6, ints picked up a few non __ methods, so now there are
# no completions.
assert_equal(f.input_buffer, 'a=1.')
else:
# Right answer for 2.4/2.5
assert_equal(f.input_buffer, 'a=1.__')
if __name__ == '__main__':
test_magic()
test_help()
test_execution()
test_multiline()
test_capture()
test_completion_simple()
test_completion_complex()