summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorptmcg <ptmcg@austin.rr.com>2020-02-23 20:46:37 -0600
committerptmcg <ptmcg@austin.rr.com>2020-02-23 20:46:37 -0600
commit30e25f0b3ac2e585c996332147696898a2e42249 (patch)
tree49498538f835480beb88e387cb91f3727653650c /tests
parentecbe5446c71dc1670fbb404373356a916987730e (diff)
downloadpyparsing-git-30e25f0b3ac2e585c996332147696898a2e42249.tar.gz
Fix bug in Each when using Regex, Regex would get parsed twice (issue #183)
Diffstat (limited to 'tests')
-rw-r--r--tests/test_unit.py57
1 files changed, 44 insertions, 13 deletions
diff --git a/tests/test_unit.py b/tests/test_unit.py
index 605df3a..db3f4a3 100644
--- a/tests/test_unit.py
+++ b/tests/test_unit.py
@@ -3746,19 +3746,28 @@ class Test2_WithoutPackrat(ppt.TestParseResultsAsserts, TestCase):
def testOptionalEachTest1(self):
from pyparsing import Optional, Keyword
- the_input = "Major Tal Weiss"
- parser1 = (Optional("Tal") + Optional("Weiss")) & Keyword("Major")
- parser2 = Optional(Optional("Tal") + Optional("Weiss")) & Keyword("Major")
- p1res = parser1.parseString(the_input)
- p2res = parser2.parseString(the_input)
- self.assertEqual(
- p1res.asList(),
- p2res.asList(),
- "Each failed to match with nested Optionals, "
- + str(p1res.asList())
- + " should match "
- + str(p2res.asList()),
- )
+ for the_input in [
+ "Tal Weiss Major",
+ "Tal Major",
+ "Weiss Major",
+ "Major",
+ "Major Tal",
+ "Major Weiss",
+ "Major Tal Weiss",
+ ]:
+ print(the_input)
+ parser1 = (Optional("Tal") + Optional("Weiss")) & Keyword("Major")
+ parser2 = Optional(Optional("Tal") + Optional("Weiss")) & Keyword("Major")
+ p1res = parser1.parseString(the_input)
+ p2res = parser2.parseString(the_input)
+ self.assertEqual(
+ p1res.asList(),
+ p2res.asList(),
+ "Each failed to match with nested Optionals, "
+ + str(p1res.asList())
+ + " should match "
+ + str(p2res.asList()),
+ )
def testOptionalEachTest2(self):
from pyparsing import Word, alphanums, OneOrMore, Group, Regex, Optional
@@ -6741,6 +6750,28 @@ class Test2_WithoutPackrat(ppt.TestParseResultsAsserts, TestCase):
except Exception as e:
self.fail("raised warning when it should not have")
+ def testParseExpressionsWithRegex(self):
+ from itertools import product
+ match_empty_regex = pp.Regex(r"[a-z]*")
+ match_nonempty_regex = pp.Regex(r"[a-z]+")
+
+ parser_classes = pp.ParseExpression.__subclasses__()
+ test_string = "abc def"
+ expected = ["abc"]
+ for expr, cls in product((match_nonempty_regex, match_empty_regex), parser_classes):
+ print(expr, cls)
+ parser = cls([expr])
+ parsed_result = parser.parseString(test_string)
+ print(parsed_result.dump())
+ self.assertParseResultsEquals(parsed_result, expected)
+
+ for expr, cls in product((match_nonempty_regex, match_empty_regex), (pp.MatchFirst, pp.Or)):
+ parser = cls([expr, expr])
+ print(parser)
+ parsed_result = parser.parseString(test_string)
+ print(parsed_result.dump())
+ self.assertParseResultsEquals(parsed_result, expected)
+
def testAssertParseAndCheckDict(self):
"""test assertParseAndCheckDict in test framework"""