-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_eof_handling.py
More file actions
211 lines (145 loc) · 6.3 KB
/
test_eof_handling.py
File metadata and controls
211 lines (145 loc) · 6.3 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
from parser.operators import BINARY_OPS
from test.common import CommonTestCase
class TestCstGenEof(CommonTestCase):
def test__at_expr_end(self):
self.assertFailsGracefullyCST('a.b()')
def test__at_assign_end(self):
self.assertFailsGracefullyCST('a.b = 8')
def test__at_let_end(self):
self.assertFailsGracefullyCST('let a = 3')
def test__at_global_end(self):
self.assertFailsGracefullyCST('global a = 3')
def test__at_decl_item_begin(self):
self.assertFailsGracefullyCST('let')
def test__at_decl_item_could_be_eq(self):
self.assertFailsGracefullyCST('let a')
def test__at_decl_item_after_eq(self):
self.assertFailsGracefullyCST('let a=')
def test__at_def_start(self):
self.assertFailsGracefullyCST('def')
def test__at_def_name(self):
self.assertFailsGracefullyCST('def a')
def test__at_def_lpar(self):
self.assertFailsGracefullyCST('def a(')
def test__at_def_param_type(self):
self.assertFailsGracefullyCST('def a(t1')
def test__at_def_param_value(self):
self.assertFailsGracefullyCST('def a(t1 name')
def test__at_def_param_comma(self):
self.assertFailsGracefullyCST('def a(t1 name,')
def test__at_def_param_second_type(self):
self.assertFailsGracefullyCST('def a(t1 name,t2')
def test__at_def_param_second_name(self):
self.assertFailsGracefullyCST('def a(t1 name,t2 name2')
def test__at_def_param_second_comma(self):
self.assertFailsGracefullyCST('def a(t1 name,t2 name2,')
def test__at_def_rpar_noargs(self):
self.assertFailsGracefullyCST('def a()')
def test__at_def_rpar_1_arg_comma(self):
self.assertFailsGracefullyCST('def a(t1 name,)')
def test__at_def_rpar_1_arg_no_comma(self):
self.assertFailsGracefullyCST('def a(t1 name)')
def test__at_def_rpar_2_arg(self):
self.assertFailsGracefullyCST('def a(t1 name,t2 name2)')
def test__at_def_lbrace(self):
self.assertFailsGracefullyCST('def a(t1 name,t2 name2){')
def test__at_def_rbrace(self):
self.assertValidParseCST('def a(t1 name,t2 name2){}')
def test__at_block_no_semi(self):
self.assertFailsGracefullyCST('def a(t1 name,t2 name2){let a=1')
def test__at_block_semi(self):
self.assertFailsGracefullyCST('def a(t1 name,t2 name2){let a=1;')
def test__common_flow_kwd(self):
for name in ('while', 'repeat', 'while'):
with self.subTest(name=name):
self.assertFailsGracefullyCST(f'{name}')
def test__common_flow_cond(self):
for name in ('while', 'repeat', 'while'):
with self.subTest(name=name):
self.assertFailsGracefullyCST(f'{name} a+1')
def test__common_flow_lbrace(self):
for name in ('while', 'repeat', 'while'):
with self.subTest(name=name):
self.assertFailsGracefullyCST(f'{name} a + 1 {{')
def test__if_full(self):
self.assertValidParseCST('if a+1{}')
def test__else_or_elseif__else(self):
self.assertFailsGracefullyCST('if 1{}else')
def test__elseif_else_if(self):
self.assertFailsGracefullyCST('if 1{}else if')
def test__elseif_expr(self):
self.assertFailsGracefullyCST('if 1{}else if 2')
def test__elseif_lbrace(self):
self.assertFailsGracefullyCST('if 1{}else if 2{')
def test__else_lbrace(self):
self.assertFailsGracefullyCST('if 1{}else {')
def test__call_args_lpar(self):
self.assertFailsGracefullyCST('a(')
def test__call_args_arg1(self):
self.assertFailsGracefullyCST('a(a')
def test__call_args_arg1_comma(self):
self.assertFailsGracefullyCST('a(a,')
def test__call_args_comma_rpar(self):
self.assertFailsGracefullyCST('a(a,)')
def test__call_args_rpar(self):
self.assertFailsGracefullyCST('a(a)')
def test__call_args_noargs(self):
self.assertFailsGracefullyCST('a()')
def test__string_single(self):
self.assertFailsGracefullyCST('"a"')
def test__string_autocat(self):
self.assertFailsGracefullyCST('"a""b"')
def test__number_single(self):
self.assertFailsGracefullyCST('5')
def test__lpar(self):
self.assertFailsGracefullyCST('(')
def test__lpar_expr(self):
self.assertFailsGracefullyCST('(a')
def test__basic_chain_ident_only(self):
self.assertFailsGracefullyCST('a')
def test__basic_chain_dot(self):
self.assertFailsGracefullyCST('a.')
def test__basic_chain_dot_attr(self):
self.assertFailsGracefullyCST('a.b')
def test__basic_chain_lsqb(self):
self.assertFailsGracefullyCST('a[')
def test__basic_chain_getitem_expr(self):
self.assertFailsGracefullyCST('a[b')
def test__basic_chain_rsqb_full(self):
self.assertFailsGracefullyCST('a[b]')
def test__basic_chain_rsqb_empty(self):
self.assertFailsGracefullyCST('a[]')
def test__basic_chain_call_lpar(self):
self.assertFailsGracefullyCST('a(')
def test__basic_chain_call_inner(self):
self.assertFailsGracefullyCST('a(b')
def test__basic_chain_call_rpar_full(self):
self.assertFailsGracefullyCST('a(b)')
def test__basic_chain_call_rpar_empty(self):
self.assertFailsGracefullyCST('a()')
def test__unaries_single(self):
self.assertFailsGracefullyCST('+')
def test__unaries_many(self):
self.assertFailsGracefullyCST('-+--!')
def test__unaries_many_expr(self):
self.assertFailsGracefullyCST('-+--!a')
def test__pow_op(self):
self.assertFailsGracefullyCST('a**')
def test__pow_rhs_unary(self):
self.assertFailsGracefullyCST('a**-')
def test__pow_rhs_unary_expr(self):
self.assertFailsGracefullyCST('a**-a')
def test__pow_rhs_expr(self):
self.assertFailsGracefullyCST('a**b')
def test__bin_op__op(self):
for op in BINARY_OPS:
with self.subTest(op=op):
self.assertFailsGracefullyCST(f'a{op}')
def test__bin_op__expr(self):
for op in BINARY_OPS:
with self.subTest(op=op):
self.assertFailsGracefullyCST(f'a{op}b')
def test__bin_op__success(self):
for op in BINARY_OPS:
with self.subTest(op=op):
self.assertValidParseCST(f'a{op}b;')