Skip to content

Commit 6f05f65

Browse files
ometa: Fix most tests.
1 parent e270e1c commit 6f05f65

File tree

4 files changed

+35
-20
lines changed

4 files changed

+35
-20
lines changed

ometa/interp.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -272,14 +272,16 @@ def parse_Many(self, expr, ans=None):
272272
collecting the results into a list. Implementation of '*'.
273273
"""
274274
ans = ans or []
275+
err = None
275276
while True:
276277
try:
277278
m = self.input
278279
for x in self._eval(expr):
279280
if x is _feed_me: yield x
280281
ans.append(x[0])
281282
self.currentError = x[1]
282-
except ParseError as err:
283+
except ParseError as error:
284+
err = error
283285
self.input = m
284286
break
285287
yield ans, err
@@ -313,6 +315,8 @@ def parse_Repeat(self, min, max, expr):
313315
else:
314316
max = self._localsStack[-1][max.data]
315317

318+
e = None
319+
316320
if min == max == 0:
317321
yield '', None
318322
return
@@ -332,7 +336,8 @@ def parse_Repeat(self, min, max, expr):
332336
if x is _feed_me: yield x
333337
v, e = x
334338
ans.append(v)
335-
except ParseError as e:
339+
except ParseError as err:
340+
e = err
336341
self.input = m
337342
break
338343
yield ans, e
@@ -468,7 +473,7 @@ def rule_letter(self):
468473
except EOFError:
469474
yield _feed_me
470475
val, p = self.input.head()
471-
if val in string.letters:
476+
if val in string.ascii_letters:
472477
self.input = self.input.tail()
473478
yield val, p
474479
else:
@@ -490,7 +495,7 @@ def rule_digit(self):
490495
raise self.err(p.withMessage(expected("digit")))
491496

492497
def err(self, e):
493-
e.input = ''.join(e.input)
498+
e.input = ''.join(str(i) for i in e.input)
494499
raise e
495500

496501
class GrammarInterpreter(object):
@@ -511,7 +516,7 @@ def __init__(self, grammar, base, globals=None):
511516
def apply(self, input, rulename, tree=False):
512517
self.run = self.base(input, self._globals, tree=tree)
513518
#XXX hax, fix grammar parser to distinguish tree from nontree grammars
514-
if not isinstance(self.run.input.data, basestring):
519+
if not isinstance(self.run.input.data, str):
515520
tree = True
516521
self.run.tree = True
517522
v, err = self._apply(self.run, rulename, ())
@@ -567,12 +572,14 @@ def _eval(self, run, expr):
567572

568573
elif name in ("Many", "Many1"):
569574
ans = [self._eval(run, args[0])[0]] if name == "Many1" else []
575+
err = None
570576
while True:
571577
try:
572578
m = run.input
573579
v, _ = self._eval(run, args[0])
574580
ans.append(v)
575-
except ParseError as err:
581+
except ParseError as e:
582+
err = e
576583
run.input = m
577584
break
578585
return ans, err
@@ -591,6 +598,7 @@ def _eval(self, run, expr):
591598
if min == max == 0:
592599
return "", None
593600
ans = []
601+
e = None
594602
for i in range(min):
595603
v, e = self._eval(run, args[2])
596604
ans.append(v)
@@ -600,7 +608,8 @@ def _eval(self, run, expr):
600608
m = run.input
601609
v, e = self._eval(run, args[2])
602610
ans.append(v)
603-
except ParseError as e:
611+
except ParseError as err:
612+
e = err
604613
run.input = m
605614
break
606615
return ans, e

ometa/test/test_pymeta.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1487,22 +1487,24 @@ def test_rawReporting(self):
14871487

14881488
#matching "some" means second branch of 'start' is taken
14891489
self.assertEqual(e.position, 23)
1490-
self.assertEqual(e.error, [('expected', "token", "bananas"),
1491-
('expected', 'token', "bacon"),
1492-
('expected', "token", "robots"),
1493-
('expected', "token", "americans")])
1490+
self.assertEqual(set(e.error),
1491+
set([('expected', "token", "bananas"),
1492+
('expected', 'token', "bacon"),
1493+
('expected', "token", "robots"),
1494+
('expected', "token", "americans")]))
14941495

14951496
e = self.assertRaises(ParseError, g.start,
14961497
"crazy horse likes mountains")
14971498

14981499
#no "some" means first branch of 'start' is taken...
14991500
#but second is also viable
15001501
self.assertEqual(e.position, 18)
1501-
self.assertEqual(e.error, [('expected', "token", "some"),
1502-
('expected', "token", "bananas"),
1503-
('expected', 'token', "bacon"),
1504-
('expected', "token", "robots"),
1505-
('expected', "token", "americans")])
1502+
self.assertEqual(set(e.error),
1503+
set([('expected', "token", "some"),
1504+
('expected', "token", "bananas"),
1505+
('expected', 'token', "bacon"),
1506+
('expected', "token", "robots"),
1507+
('expected', "token", "americans")]))
15061508

15071509

15081510
def test_formattedReporting(self):

ometa/test/test_runtime.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,9 @@ def test_orErrorTie(self):
172172
lambda: o.token("foz"),
173173
lambda: o.token("f")])
174174
self.assertEqual(e.args[0], 2)
175-
self.assertEqual(e.args[1], [expected("token", "fog")[0],
176-
expected("token", "foz")[0]])
175+
self.assertEqual(set(e.args[1]),
176+
set([expected("token", "fog")[0],
177+
expected("token", "foz")[0]]))
177178

178179

179180
def test_notError(self):

ometa/test/test_tube.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
from __future__ import absolute_import
22

33
import unittest
4-
from twisted.python.compat import iterbytes
5-
64

75
from ometa.grammar import OMeta
86
from ometa.tube import TrampolinedParser
97

108

9+
def iterbytes(originalBytes):
10+
for i in range(len(originalBytes)):
11+
yield originalBytes[i:i+1]
12+
13+
1114
class TrampolinedReceiver():
1215
"""
1316
Receive and store the passed in data.

0 commit comments

Comments
 (0)