Skip to content

Commit faf3d88

Browse files
refactor(test): Reorganise classes in test_treegen.py
1 parent 6369477 commit faf3d88

File tree

2 files changed

+63
-61
lines changed

2 files changed

+63
-61
lines changed

test/test_cstgen/.snapshots/test_treegen.txt

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/test_cstgen/test_treegen.py

Lines changed: 62 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,72 @@
66
from test.common import CommonTestCase
77

88

9-
class TestAutocat(CommonTestCase):
9+
# region ---- <Test Expressions> ----
10+
class TestExpr(CommonTestCase):
1011
def test_autocat(self):
1112
self.assertCstMatchesSnapshot('"abc" "="\n "1" .. a .. "b".d();')
1213

14+
def test_mod_supported(self):
15+
self.assertCstMatchesSnapshot('c=a%b;')
16+
1317

14-
class TreeGenTest(CommonTestCase):
18+
class TestItemChain(CommonTestCase):
1519
def test_item_chain(self):
1620
self.assertCstMatchesSnapshot('a[7].b.0.fn["c" .. 2] = fn(9).k[7 + r](3,);')
1721

1822
def test_fn_call_in_lvalue(self):
1923
self.assertCstMatchesSnapshot('a(7).b.0.fn()["c" .. 2] = fn(9).k[7 + r](3,);')
2024

25+
def test_empty_sqb_error(self):
26+
with self.assertRaises(LocatedCstError) as err:
27+
TreeGen(Tokenizer('v=a[]+b')).parse()
28+
exc = err.exception
29+
self.assertBetweenIncl(3, 4, exc.region.start)
30+
self.assertEqual(4, exc.region.end - 1)
31+
32+
def test_getattr__issue_09(self):
33+
t = Tokenizer('fn(call_arg).a;').tokenize()
34+
node = CstGen(t).parse()
35+
self.assertMatchesSnapshot(node, 'after_call')
36+
t = Tokenizer('(paren + x).b;').tokenize()
37+
node = CstGen(t).parse()
38+
self.assertMatchesSnapshot(node, 'after_paren')
39+
t = Tokenizer('"a string".b;').tokenize()
40+
node = CstGen(t).parse()
41+
self.assertMatchesSnapshot(node, 'after_string')
42+
43+
def test_getitem__issue_09(self):
44+
t = Tokenizer('fn(call_arg)[1];').tokenize()
45+
node = CstGen(t).parse()
46+
self.assertMatchesSnapshot(node, 'after_call')
47+
t = Tokenizer('(paren + x)[2];').tokenize()
48+
node = CstGen(t).parse()
49+
self.assertMatchesSnapshot(node, 'after_paren')
50+
t = Tokenizer('"a string"["key_" .. 3];').tokenize()
51+
node = CstGen(t).parse()
52+
self.assertMatchesSnapshot(node, 'after_string')
53+
# endregion </Test Expressions>
54+
55+
56+
# region ---- <Test Statements> ----
57+
class TestSmt(CommonTestCase):
2158
def test_aug_assign(self):
2259
self.assertCstMatchesSnapshot('a[1] += a.2;')
2360

24-
def test__mod_supported(self):
25-
self.assertCstMatchesSnapshot('c=a%b;')
61+
def test_empty_smt__issue_04(self):
62+
t = Tokenizer('let a=9;;').tokenize()
63+
node = CstGen(t).parse()
64+
self.assertMatchesSnapshot(node)
65+
66+
67+
class TestDecl(CommonTestCase):
68+
def test_empty_assign_source_error(self):
69+
t = Tokenizer('let a= ;').tokenize()
70+
with self.assertRaises(LocatedCstError) as err:
71+
CstGen(t).parse()
72+
self.assertBetweenIncl(5, 7, err.exception.region.start)
73+
self.assertBetweenIncl(7, 8, err.exception.region.end)
74+
self.assertContains(str(err.exception), "semi")
2675

2776
def test_decl_no_value(self):
2877
self.assertCstMatchesSnapshot('let b;')
@@ -57,6 +106,14 @@ def test_repeat(self):
57106
self.assertCstMatchesSnapshot('repeat a || !b && c >= 6 {}')
58107
self.assertCstMatchesSnapshot('repeat!(7%8){(7.7).abc(6,7,8);}')
59108

109+
def test_empty_condition_error(self):
110+
t = Tokenizer('if {x();}').tokenize()
111+
with self.assertRaises(LocatedCstError) as err:
112+
CstGen(t).parse()
113+
self.assertBetweenIncl(0, 3, err.exception.region.start)
114+
self.assertBetweenIncl(2, 4, err.exception.region.end)
115+
self.assertContains(str(err.exception), "brace")
116+
60117
def test_else_if_else(self):
61118
self.assertCstMatchesSnapshot('if(1){}else if(a||!b&&c!=6){}')
62119
self.assertCstMatchesSnapshot('if(1){}else{a();}')
@@ -83,62 +140,7 @@ def test_one_param(self):
83140

84141
def test_two_param(self):
85142
self.assertCstMatchesSnapshot('def a(number a, string b){RESULT=a.."="..b;}')
86-
87-
88-
class TestTreeGenErrors(CommonTestCase):
89-
def test_empty_sqb_error(self):
90-
with self.assertRaises(LocatedCstError) as err:
91-
TreeGen(Tokenizer('v=a[]+b')).parse()
92-
exc = err.exception
93-
self.assertBetweenIncl(3, 4, exc.region.start)
94-
self.assertEqual(4, exc.region.end - 1)
95-
96-
97-
class TestItemChain(CommonTestCase):
98-
def test_getattr__issue_09(self):
99-
t = Tokenizer('fn(call_arg).a;').tokenize()
100-
node = CstGen(t).parse()
101-
self.assertMatchesSnapshot(node, 'after_call')
102-
t = Tokenizer('(paren + x).b;').tokenize()
103-
node = CstGen(t).parse()
104-
self.assertMatchesSnapshot(node, 'after_paren')
105-
t = Tokenizer('"a string".b;').tokenize()
106-
node = CstGen(t).parse()
107-
self.assertMatchesSnapshot(node, 'after_string')
108-
109-
def test_getitem__issue_09(self):
110-
t = Tokenizer('fn(call_arg)[1];').tokenize()
111-
node = CstGen(t).parse()
112-
self.assertMatchesSnapshot(node, 'after_call')
113-
t = Tokenizer('(paren + x)[2];').tokenize()
114-
node = CstGen(t).parse()
115-
self.assertMatchesSnapshot(node, 'after_paren')
116-
t = Tokenizer('"a string"["key_" .. 3];').tokenize()
117-
node = CstGen(t).parse()
118-
self.assertMatchesSnapshot(node, 'after_string')
119-
120-
121-
class TestEmptyExpr(CommonTestCase):
122-
def test_error_empty_assign_source(self):
123-
t = Tokenizer('let a= ;').tokenize()
124-
with self.assertRaises(LocatedCstError) as err:
125-
CstGen(t).parse()
126-
self.assertBetweenIncl(5, 7, err.exception.region.start)
127-
self.assertBetweenIncl(7, 8, err.exception.region.end)
128-
self.assertContains(str(err.exception), "semi")
129-
130-
def test_error_empty_condition(self):
131-
t = Tokenizer('if {x();}').tokenize()
132-
with self.assertRaises(LocatedCstError) as err:
133-
CstGen(t).parse()
134-
self.assertBetweenIncl(0, 3, err.exception.region.start)
135-
self.assertBetweenIncl(2, 4, err.exception.region.end)
136-
self.assertContains(str(err.exception), "brace")
137-
138-
def test_empty_expr_issue_04(self):
139-
t = Tokenizer('let a=9;;').tokenize()
140-
node = CstGen(t).parse()
141-
self.assertMatchesSnapshot(node)
143+
# endregion </Test Statements>
142144

143145

144146
if __name__ == '__main__':

0 commit comments

Comments
 (0)