##// END OF EJS Templates
use ROUTER/DEALER sockets for stdin...
use ROUTER/DEALER sockets for stdin stdin requests are now directed to the frontend that made the execution request that called raw_input. allow_stdin flag added to execution_request to indicate whether stdin_requests are allowed. StdInNotImplementedError exception class added to IPython.core.error, and is raised if raw_input is called from execute requests where allow_input is undefined. closes gh-673

File last commit:

r4896:a2d83e41
r4952:a2ac298e
Show More
test_run.py
210 lines | 6.1 KiB | text/x-python | PythonLexer
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 """Tests for code execution (%run and related), which is particularly tricky.
Because of how %run manages namespaces, and the fact that we are trying here to
verify subtle object deletion and reference counting issues, the %run tests
will be kept in this separate file. This makes it easier to aggregate in one
place the tricks needed to handle it; most other magics are much easier to test
and we do so in a common test_magic file.
"""
from __future__ import absolute_import
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import os
import sys
import tempfile
import nose.tools as nt
Min RK
fix various tests on Windows...
r4105 from nose import SkipTest
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414
from IPython.testing import decorators as dec
from IPython.testing import tools as tt
Thomas Kluyver
Fix almost all IPython.core tests for Python 3.
r4896 from IPython.utils import py3compat
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414
#-----------------------------------------------------------------------------
# Test functions begin
#-----------------------------------------------------------------------------
def doctest_refbug():
"""Very nasty problem with references held by multiple runs of a script.
Thomas Kluyver
Replace links to launchpad bugs in comments/docstrings with equivalent github links.
r3917 See: https://github.com/ipython/ipython/issues/141
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414
In [1]: _ip.clear_main_mod_cache()
# random
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 In [2]: %run refbug
In [3]: call_f()
lowercased: hello
In [4]: %run refbug
In [5]: call_f()
lowercased: hello
lowercased: hello
"""
def doctest_run_builtins():
r"""Check that %run doesn't damage __builtins__.
In [1]: import tempfile
In [2]: bid1 = id(__builtins__)
In [3]: fname = tempfile.mkstemp('.py')[1]
In [3]: f = open(fname,'w')
Thomas Kluyver
Fix various tests in IPython.core for Python 3.
r4895 In [4]: dummy= f.write('pass\n')
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414
In [5]: f.flush()
In [6]: t1 = type(__builtins__)
Fernando Perez
Do not call %run with quotes, since on Windows quotes aren't stripped....
r2484 In [7]: %run $fname
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414
In [7]: f.close()
In [8]: bid2 = id(__builtins__)
In [9]: t2 = type(__builtins__)
In [10]: t1 == t2
Out[10]: True
In [10]: bid1 == bid2
Out[10]: True
In [12]: try:
....: os.unlink(fname)
....: except:
....: pass
Bernardo B. Marques
remove all trailling spaces
r4872 ....:
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 """
Fernando Perez
Complete fix for __del__ errors with .reset(), add unit test.
r3107
Thomas Kluyver
Fix almost all IPython.core tests for Python 3.
r4896 @py3compat.doctest_refactor_print
Fernando Perez
Complete fix for __del__ errors with .reset(), add unit test.
r3107 def doctest_reset_del():
"""Test that resetting doesn't cause errors in __del__ methods.
In [2]: class A(object):
...: def __del__(self):
Thomas Kluyver
Make test work (i.e. it now fails, as expected).
r3156 ...: print str("Hi")
Bernardo B. Marques
remove all trailling spaces
r4872 ...:
Fernando Perez
Complete fix for __del__ errors with .reset(), add unit test.
r3107
In [3]: a = A()
In [4]: get_ipython().reset()
Thomas Kluyver
Make test work (i.e. it now fails, as expected).
r3156 Hi
Fernando Perez
Complete fix for __del__ errors with .reset(), add unit test.
r3107
In [5]: 1+1
Out[5]: 2
"""
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414
# For some tests, it will be handy to organize them in a class with a common
# setup that makes a temp file
Fernando Perez
Fix extensions test suite (small, but now it runs and passes!)
r2415 class TestMagicRunPass(tt.TempFileMixin):
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414
def setup(self):
"""Make a valid python temp file."""
self.mktmp('pass\n')
def run_tmpfile(self):
_ip = get_ipython()
# This fails on Windows if self.tmpfile.name has spaces or "~" in it.
# See below and ticket https://bugs.launchpad.net/bugs/366353
Fernando Perez
Do not call %run with quotes, since on Windows quotes aren't stripped....
r2484 _ip.magic('run %s' % self.fname)
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414
def test_builtins_id(self):
"""Check that %run doesn't damage __builtins__ """
_ip = get_ipython()
# Test that the id of __builtins__ is not modified by %run
bid1 = id(_ip.user_ns['__builtins__'])
self.run_tmpfile()
bid2 = id(_ip.user_ns['__builtins__'])
tt.assert_equals(bid1, bid2)
def test_builtins_type(self):
"""Check that the type of __builtins__ doesn't change with %run.
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 However, the above could pass if __builtins__ was already modified to
be a dict (it should be a module) by a previous use of %run. So we
also check explicitly that it really is a module:
"""
_ip = get_ipython()
self.run_tmpfile()
tt.assert_equals(type(_ip.user_ns['__builtins__']),type(sys))
def test_prompts(self):
"""Test that prompts correctly generate after %run"""
self.run_tmpfile()
_ip = get_ipython()
Brian Granger
Refactor of prompts and the displayhook....
r2781 p2 = str(_ip.displayhook.prompt2).strip()
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 nt.assert_equals(p2[:3], '...')
Fernando Perez
Fix extensions test suite (small, but now it runs and passes!)
r2415 class TestMagicRunSimple(tt.TempFileMixin):
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414
def test_simpledef(self):
"""Test that simple class definitions work."""
src = ("class foo: pass\n"
"def f(): return foo()")
self.mktmp(src)
Fernando Perez
More win32 test fixes and a new test....
r2451 _ip.magic('run %s' % self.fname)
Thomas Kluyver
Remove runlines method and calls to it.
r3752 _ip.run_cell('t = isinstance(f(), foo)')
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 nt.assert_true(_ip.user_ns['t'])
Fernando Perez
Various fixes for IPython.core tests to pass under win32.
r2446
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 def test_obj_del(self):
"""Test that object's __del__ methods are called on exit."""
Min RK
fix various tests on Windows...
r4105 if sys.platform == 'win32':
try:
import win32api
except ImportError:
raise SkipTest("Test requires pywin32")
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 src = ("class A(object):\n"
" def __del__(self):\n"
" print 'object A deleted'\n"
"a = A()\n")
Thomas Kluyver
Fix almost all IPython.core tests for Python 3.
r4896 self.mktmp(py3compat.doctest_refactor_print(src))
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 tt.ipexec_validate(self.fname, 'object A deleted')
Bernardo B. Marques
remove all trailling spaces
r4872
@dec.skip_known_failure
Paul Ivanov
test for GH-238 %run's aggressive name cleaning
r3502 def test_aggressive_namespace_cleanup(self):
"""Test that namespace cleanup is not too aggressive GH-238
Paul Ivanov
added the skip_known decorator
r3503
Returning from another run magic deletes the namespace"""
Paul Ivanov
test for GH-238 %run's aggressive name cleaning
r3502 # see ticket https://github.com/ipython/ipython/issues/238
class secondtmp(tt.TempFileMixin): pass
empty = secondtmp()
empty.mktmp('')
src = ("ip = get_ipython()\n"
"for i in range(5):\n"
" try:\n"
" ip.magic('run %s')\n"
" except NameError, e:\n"
" print i;break\n" % empty.fname)
Thomas Kluyver
Fix almost all IPython.core tests for Python 3.
r4896 self.mktmp(py3compat.doctest_refactor_print(src))
Paul Ivanov
test for GH-238 %run's aggressive name cleaning
r3502 _ip.magic('run %s' % self.fname)
Thomas Kluyver
Remove runlines method and calls to it.
r3752 _ip.run_cell('ip == get_ipython()')
Paul Ivanov
test for GH-238 %run's aggressive name cleaning
r3502 tt.assert_equals(_ip.user_ns['i'], 5)
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414
Fernando Perez
Various fixes for IPython.core tests to pass under win32.
r2446 @dec.skip_win32
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 def test_tclass(self):
mydir = os.path.dirname(__file__)
tc = os.path.join(mydir, 'tclass')
src = ("%%run '%s' C-first\n"
Thomas Kluyver
Make test of %run more rigorous.
r3763 "%%run '%s' C-second\n"
"%%run '%s' C-third\n") % (tc, tc, tc)
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 self.mktmp(src, '.ipy')
out = """\
Thomas Kluyver
Fix almost all IPython.core tests for Python 3.
r4896 ARGV 1-: [{u}'C-first']
ARGV 1-: [{u}'C-second']
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 tclass.py: deleting object: C-first
Thomas Kluyver
Fix almost all IPython.core tests for Python 3.
r4896 ARGV 1-: [{u}'C-third']
Thomas Kluyver
Shell's reset method clears namespace from last %run command.
r3762 tclass.py: deleting object: C-second
Thomas Kluyver
Make test of %run more rigorous.
r3763 tclass.py: deleting object: C-third
Fernando Perez
Massive amount of work to improve the test suite, restores doctests....
r2414 """
Thomas Kluyver
Fix almost all IPython.core tests for Python 3.
r4896 tt.ipexec_validate(self.fname, py3compat.u_format(out))