-
-
Notifications
You must be signed in to change notification settings - Fork 252
Expand file tree
/
Copy pathtest_interpreter.py
More file actions
95 lines (76 loc) · 2.53 KB
/
test_interpreter.py
File metadata and controls
95 lines (76 loc) · 2.53 KB
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import sys
import unittest
from curtsies.fmtfuncs import bold, green, magenta, cyan, red, plain
from bpython.curtsiesfrontend import interpreter
pypy = "PyPy" in sys.version
class Interpreter(interpreter.Interp):
def __init__(self):
super().__init__()
self.a = []
self.write = self.a.append
class TestInterpreter(unittest.TestCase):
def test_syntaxerror(self):
i = Interpreter()
i.runsource("1.1.1.1")
expected = (
" File "
+ green('"<input>"')
+ ", line "
+ bold(magenta("1"))
+ "\n 1.1.1.1\n ^^\n"
+ bold(red("SyntaxError"))
+ ": "
+ cyan("invalid syntax")
+ "\n"
)
a = i.a
self.assertMultiLineEqual(str(plain("").join(a)), str(expected))
self.assertEqual(plain("").join(a), expected)
def test_traceback(self):
i = Interpreter()
def f():
return 1 / 0
def gfunc():
return f()
i.runsource("gfunc()")
global_not_found = "name 'gfunc' is not defined"
if (3, 13) <= sys.version_info[:2] or pypy:
expected = (
"Traceback (most recent call last):\n File "
+ green('"<input>"')
+ ", line "
+ bold(magenta("1"))
+ ", in "
+ cyan("<module>")
+ "\n gfunc()"
+ "\n ^^^^^\n"
+ bold(red("NameError"))
+ ": "
+ cyan(global_not_found)
+ "\n"
)
else:
expected = (
"Traceback (most recent call last):\n File "
+ green('"<input>"')
+ ", line "
+ bold(magenta("1"))
+ ", in "
+ cyan("<module>")
+ "\n gfunc()"
+ "\n ^^^^^\n"
+ bold(red("NameError"))
+ ": "
+ cyan(global_not_found)
+ "\n"
)
a = i.a
self.assertMultiLineEqual(str(expected), str(plain("").join(a)))
self.assertEqual(expected, plain("").join(a))
def test_getsource_works_on_interactively_defined_functions(self):
source = "def foo(x):\n return x + 1\n"
i = interpreter.Interp()
i.runsource(source)
import inspect
inspected_source = inspect.getsource(i.locals["foo"])
self.assertEqual(inspected_source, source)