def test_basic_pattern_matching(): # ( -a N [ -x Z ] ) pattern = Required(Option('a'), Argument('N'), Optional(Option('x'), Argument('Z'))) # -a N assert pattern.match([Option('a'), Argument(None, 9)]) == ( True, [], [Argument('N', 9)]) # -a -x N Z assert pattern.match([Option('a'), Option('x'), Argument(None, 9), Argument(None, 5)]) == ( True, [], [Argument('N', 9), Argument('Z', 5)]) # -x N Z # BZZ! assert pattern.match([Option('x'), Argument(None, 9), Argument(None, 5)]) == ( False, [Option('x'), Argument(None, 9), Argument(None, 5)], [])
def test_pattern_any_option(): pattern = AnyOptions() assert pattern.match([Option('a')]) == (True, [], []) assert pattern.match([Option('b')]) == (True, [], []) assert pattern.match([Option('l', 'long')]) == (True, [], []) assert pattern.match([Option(None, 'long')]) == (True, [], []) assert pattern.match([Option('a'), Option('b')]) == (True, [], []) assert pattern.match([Option('a'), Option(None, 'long')]) == (True, [], []) assert not pattern.match([Argument('N')])[0]