Skip to content

Commit d83ff10

Browse files
authored
Merge pull request pypy#5301 from Neppord/clean-tests-in-rlib-parsing
Replace a test class that has only a single test method with function
2 parents eccefec + a3efb0f commit d83ff10

File tree

2 files changed

+52
-37
lines changed

2 files changed

+52
-37
lines changed

rpython/rlib/parsing/test/test_translate.py

Lines changed: 13 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,9 @@
11
from rpython.rlib.parsing.lexer import *
22
# Unused, but needed for some obscure reason
33
from rpython.rlib.parsing.makepackrat import BacktrackException, Status
4-
from rpython.rlib.parsing.regex import *
54
from rpython.rlib.parsing.parsing import *
65
from rpython.translator.c.test.test_genc import compile
76

8-
9-
class TestTranslateLexer(object):
10-
def get_lexer(self, rexs, names, ignore=None):
11-
return Lexer(rexs, names, ignore)
12-
13-
def test_translate_simple(self):
14-
digits = RangeExpression("0", "9")
15-
lower = RangeExpression("a", "z")
16-
upper = RangeExpression("A", "Z")
17-
keywords = StringExpression("if") | StringExpression("else") | StringExpression("def") | StringExpression("class")
18-
underscore = StringExpression("_")
19-
atoms = lower + (upper | lower | digits | underscore).kleene()
20-
vars = underscore | (upper + (upper | lower | underscore | digits).kleene())
21-
integers = StringExpression("0") | (RangeExpression("1", "9") + digits.kleene())
22-
white = StringExpression(" ")
23-
l1 = self.get_lexer([keywords, atoms, vars, integers, white], ["KEYWORD", "ATOM", "VAR", "INT", "WHITE"])
24-
l2 = self.get_lexer([keywords, atoms, vars, integers, white], ["KEYWORD", "ATOM", "VAR", "INT", "WHITE"], ["WHITE"])
25-
def lex(s, ignore=False):
26-
if ignore:
27-
tokens = l2.tokenize(s)
28-
else:
29-
tokens = l1.tokenize(s)
30-
return "-%-".join([t.name for t in tokens])
31-
res = lex("if A a 12341 0 else").split("-%-")
32-
assert res == ("KEYWORD WHITE VAR WHITE ATOM WHITE INT WHITE "
33-
"INT WHITE KEYWORD").split()
34-
res = lex("if A a 12341 0 else", True).split("-%-")
35-
assert res == "KEYWORD VAR ATOM INT INT KEYWORD".split()
36-
func = compile(lex, [str, bool])
37-
res = lex("if A a 12341 0 else", False).split("-%-")
38-
assert res == ("KEYWORD WHITE VAR WHITE ATOM WHITE INT WHITE "
39-
"INT WHITE KEYWORD").split()
40-
res = lex("if A a 12341 0 else", True).split("-%-")
41-
assert res == "KEYWORD VAR ATOM INT INT KEYWORD".split()
42-
43-
447
def test_translate_parser():
458
r0 = Rule("expression", [["additive", "EOF"]])
469
r1 = Rule("additive", [["multitive", "+", "additive"], ["multitive"]])
@@ -53,9 +16,11 @@ def test_translate_parser():
5316
data = [Token(c, i, SourcePos(i, 0, i))
5417
for i, c in enumerate(list("2*(3+4)") + ["EOF"])]
5518
print tree
19+
5620
def parse(choose):
5721
tree = p.parse(data, lazy=False)
5822
return tree.symbol + " " + "-%-".join([c.symbol for c in tree.children])
23+
5924
func = compile(parse, [bool])
6025
res1 = parse(True)
6126
res2 = func(True)
@@ -78,9 +43,11 @@ def test_translate_compiled_parser():
7843
for i, c in enumerate(list("2*(3+4)") + ["EOF"])]
7944
print tree
8045
p = kls()
46+
8147
def parse(choose):
8248
tree = p.parse(data)
8349
return tree.symbol + " " + "-%-".join([c.symbol for c in tree.children])
50+
8451
func = compile(parse, [bool])
8552
res1 = parse(True)
8653
res2 = func(True)
@@ -97,12 +64,14 @@ def test_translate_ast_visitor():
9764
primary: "(" <additive> ")" | <DECIMAL>;
9865
""")
9966
parse = make_parse_function(regexs, rules)
67+
10068
def f():
10169
tree = parse("(0 +! 10) *! (999 +! 10) +! 1")
10270
tree = ToAST().visit_additive(tree)
10371
assert len(tree) == 1
10472
tree = tree[0]
10573
return tree.symbol + " " + "-&-".join([c.symbol for c in tree.children])
74+
10675
res1 = f()
10776
func = compile(f, [])
10877
res2 = func()
@@ -130,27 +99,34 @@ class parser(PackratParser):
13099
simple:
131100
('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9');
132101
"""
102+
133103
print parser._code
104+
134105
def parse(s):
135106
p = parser(s)
136107
return p.expr()
108+
137109
res = parse("5-5-5")
138110
assert res == '((5 - 5) - 5)'
139111
func = compile(parse, [str])
140112
res = func("5-5-5")
141113
assert res == '((5 - 5) - 5)'
142114

115+
143116
def test_translate_pypackrat_regex():
144117
from rpython.rlib.parsing.pypackrat import PackratParser
145118
class parser(PackratParser):
146119
"""
147120
num:
148121
`([1-9][0-9]*)|0`;
149122
"""
123+
150124
print parser._code
125+
151126
def parse(s):
152127
p = parser(s)
153128
return p.num()
129+
154130
res = parse("1234")
155131
assert res == '1234'
156132
func = compile(parse, [str])
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from rpython.rlib.parsing.lexer import *
2+
from rpython.rlib.parsing.regex import *
3+
from rpython.translator.c.test.test_genc import compile
4+
5+
def test_translate_simple():
6+
digits = RangeExpression("0", "9")
7+
lower = RangeExpression("a", "z")
8+
upper = RangeExpression("A", "Z")
9+
keywords = StringExpression("if") | StringExpression("else") | StringExpression("def") | StringExpression("class")
10+
underscore = StringExpression("_")
11+
atoms = lower + (upper | lower | digits | underscore).kleene()
12+
vars = underscore | (upper + (upper | lower | underscore | digits).kleene())
13+
integers = StringExpression("0") | (RangeExpression("1", "9") + digits.kleene())
14+
white = StringExpression(" ")
15+
token_regexes = [keywords, atoms, vars, integers, white]
16+
names = ["KEYWORD", "ATOM", "VAR", "INT", "WHITE"]
17+
l1 = Lexer(token_regexes, names, None)
18+
l2 = Lexer(token_regexes, names, ["WHITE"])
19+
20+
def lex(s, ignore=False):
21+
if ignore:
22+
tokens = l2.tokenize(s)
23+
else:
24+
tokens = l1.tokenize(s)
25+
return "-%-".join([t.name for t in tokens])
26+
27+
res = lex("if A a 12341 0 else").split("-%-")
28+
assert res == ("KEYWORD WHITE VAR WHITE ATOM WHITE INT WHITE "
29+
"INT WHITE KEYWORD").split()
30+
res = lex("if A a 12341 0 else", True).split("-%-")
31+
assert res == "KEYWORD VAR ATOM INT INT KEYWORD".split()
32+
33+
func = compile(lex, [str, bool])
34+
res = func("if A a 12341 0 else", False).split("-%-")
35+
assert res == ("KEYWORD WHITE VAR WHITE ATOM WHITE INT WHITE "
36+
"INT WHITE KEYWORD").split()
37+
res = func("if A a 12341 0 else", True).split("-%-")
38+
assert res == "KEYWORD VAR ATOM INT INT KEYWORD".split()
39+

0 commit comments

Comments
 (0)