##// END OF EJS Templates
-revised code to correct ehaviour under linux....
-revised code to correct ehaviour under linux. -temporary disabled %cpaste due to regression under linux.

File last commit:

r1001:d36f053f
r1153:4fa91668
Show More
test_cpaste.ipy
61 lines | 1.3 KiB | text/plain | TextLexer
"""Test cpaste magic"""
tests = {'pass': ["> > > run()",
">>> > run()",
"+++ run()",
"++ run()"],
'fail': ["+ + run()",
" ++ run()"]}
from StringIO import StringIO
import sys
stdin_save = sys.stdin
# NOTE: no blank lines allowed in function definition
def testcase(code,should_fail=False):
"""Execute code via 'cpaste' and ensure it was executed, unless
should_fail is set.
"""
_ip.user_ns['code_ran'] = False
#
src = StringIO()
src.write('\n')
src.write(code)
src.write('\n--\n')
src.seek(0)
#
sys.stdin = src
try:
cpaste
except:
if not should_fail:
raise AssertionError("Failure not expected : '%s'" %
code)
else:
assert code_ran
if should_fail:
raise AssertionError("Failure expected : '%s'" % code)
#
finally:
sys.stdin = stdin_save
#
def run():
"""Marker function: sets a flag when executed.
"""
_ip.user_ns['code_ran'] = True
return 'run' # return string so '+ run()' doesn't result in success
### Actual testing happens here
for code in tests['pass']:
testcase(code)
for code in tests['fail']:
testcase(code,should_fail=True)