~ipython-dev/ipython/0.10.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
"""Test cpaste magic"""

tests = {'pass': ["> > > run()",
                  ">>> > 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)