diff options
Diffstat (limited to 'unitTests.py')
-rw-r--r-- | unitTests.py | 52 |
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): |