##// END OF EJS Templates
Use StringIO.StringIO on Python 2....
Use StringIO.StringIO on Python 2. io.StringIO is strict about unicode, StringIO.StringIO isn't.

File last commit:

r13366:518e26e1
r13366:518e26e1
Show More
test_irunner.py
184 lines | 3.8 KiB | text/x-python | PythonLexer
fperez
New system for interactively running scripts. After a submission by Ken...
r302 """Test suite for the irunner module.
Not the most elegant or fine-grained, but it does cover at least the bulk
functionality."""
Matthias BUSSONNIER
use print function in module with `print >>`
r7817 from __future__ import print_function
fperez
New system for interactively running scripts. After a submission by Ken...
r302
# Global to make tests extra verbose and help debugging
VERBOSE = True
# stdlib imports
fperez
Close #147
r635 import sys
fperez
New system for interactively running scripts. After a submission by Ken...
r302 import unittest
# IPython imports
Fernando Perez
Fix up and move old irunner tests into proper test suite.
r2652 from IPython.lib import irunner
Thomas Kluyver
Use StringIO.StringIO on Python 2....
r13366 from IPython.utils.py3compat import doctest_refactor_print, PY3
if PY3:
from io import StringIO
else:
from StringIO import StringIO
fperez
New system for interactively running scripts. After a submission by Ken...
r302
# Testing code begins
class RunnerTestCase(unittest.TestCase):
fperez
Close #147
r635 def setUp(self):
Thomas Kluyver
Use StringIO.StringIO on Python 2....
r13366 self.out = StringIO()
fperez
Close #147
r635 #self.out = sys.stdout
fperez
New system for interactively running scripts. After a submission by Ken...
r302 def _test_runner(self,runner,source,output):
"""Test that a given runner's input/output match."""
runner.run_source(source)
fperez
Close #147
r635 out = self.out.getvalue()
#out = ''
fperez
New system for interactively running scripts. After a submission by Ken...
r302 # this output contains nasty \r\n lineends, and the initial ipython
Fernando Perez
Fix up and move old irunner tests into proper test suite.
r2652 # banner. clean it up for comparison, removing lines of whitespace
output_l = [l for l in output.splitlines() if l and not l.isspace()]
out_l = [l for l in out.splitlines() if l and not l.isspace()]
fperez
New system for interactively running scripts. After a submission by Ken...
r302 mismatch = 0
Fernando Perez
Fix up and move old irunner tests into proper test suite.
r2652 if len(output_l) != len(out_l):
Thomas Kluyver
Put information in failure message for mismatched # lines in irunner.
r3718 message = ("Mismatch in number of lines\n\n"
"Expected:\n"
"~~~~~~~~~\n"
"%s\n\n"
"Got:\n"
"~~~~~~~~~\n"
"%s"
) % ("\n".join(output_l), "\n".join(out_l))
self.fail(message)
fperez
New system for interactively running scripts. After a submission by Ken...
r302 for n in range(len(output_l)):
fperez
Close #147
r635 # Do a line-by-line comparison
fperez
New system for interactively running scripts. After a submission by Ken...
r302 ol1 = output_l[n].strip()
ol2 = out_l[n].strip()
if ol1 != ol2:
mismatch += 1
if VERBOSE:
Matthias BUSSONNIER
use print function in module with `print >>`
r7817 print('<<< line %s does not match:' % n)
print(repr(ol1))
print(repr(ol2))
print('>>>')
Bradley M. Froehle
s/assert_/assertTrue/
r7876 self.assertTrue(mismatch==0,'Number of mismatched lines: %s' %
mismatch)
fperez
New system for interactively running scripts. After a submission by Ken...
r302
def testIPython(self):
"""Test the IPython runner."""
Thomas Kluyver
Update irunner to work in Python 3.
r5431 source = doctest_refactor_print("""
fperez
New system for interactively running scripts. After a submission by Ken...
r302 print 'hello, this is python'
# some more code
x=1;y=2
x+y**2
# An example of autocall functionality
from math import *
autocall 1
cos pi
autocall 0
cos pi
cos(pi)
for i in range(5):
Thomas Kluyver
Update irunner to work in Python 3.
r5431 print i
fperez
New system for interactively running scripts. After a submission by Ken...
r302
print "that's all folks!"
Thomas Kluyver
Remove capitalised exit forms.
r3725 exit
Thomas Kluyver
Update irunner to work in Python 3.
r5431 """)
output = doctest_refactor_print("""\
fperez
New system for interactively running scripts. After a submission by Ken...
r302 In [1]: print 'hello, this is python'
hello, this is python
fperez
Close #147
r635 # some more code
In [2]: x=1;y=2
fperez
New system for interactively running scripts. After a submission by Ken...
r302
fperez
Close #147
r635 In [3]: x+y**2
Out[3]: 5
fperez
New system for interactively running scripts. After a submission by Ken...
r302
fperez
Close #147
r635 # An example of autocall functionality
In [4]: from math import *
fperez
New system for interactively running scripts. After a submission by Ken...
r302
fperez
Close #147
r635 In [5]: autocall 1
fperez
New system for interactively running scripts. After a submission by Ken...
r302 Automatic calling is: Smart
fperez
Close #147
r635 In [6]: cos pi
fperez
New system for interactively running scripts. After a submission by Ken...
r302 ------> cos(pi)
fperez
Close #147
r635 Out[6]: -1.0
fperez
New system for interactively running scripts. After a submission by Ken...
r302
fperez
Close #147
r635 In [7]: autocall 0
fperez
New system for interactively running scripts. After a submission by Ken...
r302 Automatic calling is: OFF
fperez
Close #147
r635 In [8]: cos pi
Thomas Kluyver
Fix subtle bug with error message on Python 2.6 - code to be compiled must end in a newline....
r3850 File "<ipython-input-8-6bd7313dd9a9>", line 1
fperez
New system for interactively running scripts. After a submission by Ken...
r302 cos pi
^
Thomas Kluyver
Fix subtle bug with error message on Python 2.6 - code to be compiled must end in a newline....
r3850 SyntaxError: invalid syntax
fperez
Close #147
r635
fperez
New system for interactively running scripts. After a submission by Ken...
r302
fperez
Close #147
r635 In [9]: cos(pi)
Out[9]: -1.0
fperez
New system for interactively running scripts. After a submission by Ken...
r302
fperez
Close #147
r635 In [10]: for i in range(5):
Thomas Kluyver
Update irunner to work in Python 3.
r5431 ....: print i
fperez
Close #147
r635 ....:
Thomas Kluyver
Update irunner to work in Python 3.
r5431 0
1
2
3
4
fperez
New system for interactively running scripts. After a submission by Ken...
r302
fperez
Close #147
r635 In [11]: print "that's all folks!"
fperez
New system for interactively running scripts. After a submission by Ken...
r302 that's all folks!
fperez
Close #147
r635
Thomas Kluyver
Remove capitalised exit forms.
r3725 In [12]: exit
Thomas Kluyver
Update irunner to work in Python 3.
r5431 """)
fperez
Close #147
r635 runner = irunner.IPythonRunner(out=self.out)
fperez
New system for interactively running scripts. After a submission by Ken...
r302 self._test_runner(runner,source,output)
def testPython(self):
"""Test the Python runner."""
Thomas Kluyver
Fix irunner tests when $PYTHONSTARTUP is set....
r8837 runner = irunner.PythonRunner(out=self.out, args=['-E'])
Thomas Kluyver
Update irunner to work in Python 3.
r5431 source = doctest_refactor_print("""
fperez
New system for interactively running scripts. After a submission by Ken...
r302 print 'hello, this is python'
# some more code
x=1;y=2
x+y**2
from math import *
cos(pi)
for i in range(5):
Thomas Kluyver
Update irunner to work in Python 3.
r5431 print i
fperez
New system for interactively running scripts. After a submission by Ken...
r302
print "that's all folks!"
Thomas Kluyver
Update irunner to work in Python 3.
r5431 """)
output = doctest_refactor_print("""\
fperez
New system for interactively running scripts. After a submission by Ken...
r302 >>> print 'hello, this is python'
hello, this is python
fperez
Close #147
r635
# some more code
>>> x=1;y=2
fperez
New system for interactively running scripts. After a submission by Ken...
r302 >>> x+y**2
5
fperez
Close #147
r635
fperez
New system for interactively running scripts. After a submission by Ken...
r302 >>> from math import *
>>> cos(pi)
-1.0
fperez
Close #147
r635
fperez
New system for interactively running scripts. After a submission by Ken...
r302 >>> for i in range(5):
Thomas Kluyver
Update irunner to work in Python 3.
r5431 ... print i
fperez
New system for interactively running scripts. After a submission by Ken...
r302 ...
Thomas Kluyver
Update irunner to work in Python 3.
r5431 0
1
2
3
4
fperez
New system for interactively running scripts. After a submission by Ken...
r302 >>> print "that's all folks!"
fperez
Close #147
r635 that's all folks!
Thomas Kluyver
Update irunner to work in Python 3.
r5431 """)
fperez
New system for interactively running scripts. After a submission by Ken...
r302 self._test_runner(runner,source,output)