summaryrefslogtreecommitdiff
path: root/unitTests.py
diff options
context:
space:
mode:
Diffstat (limited to 'unitTests.py')
-rw-r--r--unitTests.py52
1 files changed, 44 insertions, 8 deletions
diff --git a/unitTests.py b/unitTests.py
index 3508394..cd9406e 100644
--- a/unitTests.py
+++ b/unitTests.py
@@ -2845,14 +2845,28 @@ class OptionalEachTest(ParseTestCase):
def runTest1(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 runTest2(self):
from pyparsing import Word, alphanums, OneOrMore, Group, Regex, Optional
@@ -2906,12 +2920,34 @@ class OptionalEachTest(ParseTestCase):
42
""")
+ 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 runTest(self):
self.runTest1()
self.runTest2()
self.runTest3()
self.runTest4()
+ self.testParseExpressionsWithRegex()
class SumParseResultsTest(ParseTestCase):
def runTest(self):