##// END OF EJS Templates
Merge branch 'formatters' of http://github.com/rkern/ipython into rkern-formatters
Merge branch 'formatters' of http://github.com/rkern/ipython into rkern-formatters

File last commit:

r3175:c94126c2
r3221:ead71f34 merge
Show More
test_irunner.py
162 lines | 3.2 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."""
# Global to make tests extra verbose and help debugging
VERBOSE = True
# stdlib imports
import cStringIO as StringIO
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
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):
self.out = StringIO.StringIO()
#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):
self.fail('mismatch in number of lines')
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:
print '<<< line %s does not match:' % n
print repr(ol1)
print repr(ol2)
print '>>>'
self.assert_(mismatch==0,'Number of mismatched lines: %s' %
mismatch)
def testIPython(self):
"""Test the IPython runner."""
source = """
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):
print i,
print "that's all folks!"
%Exit
"""
output = """\
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
Fernando Perez
Complete implementation of interactive traceback support....
r3175 File "<ipython-input-8-6bd7313dd9a9>", line 1
fperez
New system for interactively running scripts. After a submission by Ken...
r302 cos pi
^
Fernando Perez
Fix up and move old irunner tests into proper test suite.
r2652 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):
....: print i,
....:
fperez
New system for interactively running scripts. After a submission by Ken...
r302 0 1 2 3 4
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
In [12]: %Exit
"""
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."""
fperez
Close #147
r635 runner = irunner.PythonRunner(out=self.out)
fperez
New system for interactively running scripts. After a submission by Ken...
r302 source = """
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):
print i,
print "that's all folks!"
"""
output = """\
>>> 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):
... print i,
...
0 1 2 3 4
>>> print "that's all folks!"
fperez
Close #147
r635 that's all folks!
"""
fperez
New system for interactively running scripts. After a submission by Ken...
r302 self._test_runner(runner,source,output)