projetAnsible/myenv/lib/python3.12/site-packages/arpeggio/tests/test_separators.py
2024-12-09 06:16:28 +01:00

62 lines
1.4 KiB
Python

from __future__ import unicode_literals
import pytest # noqa
# Grammar
from arpeggio import ZeroOrMore, OneOrMore, UnorderedGroup, \
ParserPython, NoMatch, EOF
def test_zeroormore_with_separator():
def grammar():
return ZeroOrMore(['a', 'b'], sep=','), EOF
parser = ParserPython(grammar, reduce_tree=False)
result = parser.parse('a, b, b, b, a')
assert result
with pytest.raises(NoMatch):
parser.parse('a, b a')
def test_oneormore_with_ordered_choice_separator():
def grammar():
return OneOrMore(['a', 'b'], sep=[',', ';']), EOF
parser = ParserPython(grammar, reduce_tree=False)
result = parser.parse('a, a; a, b, a; a')
assert result
with pytest.raises(NoMatch):
parser.parse('a, b a')
with pytest.raises(NoMatch):
parser.parse('a, b: a')
def test_unordered_group_with_separator():
def grammar():
return UnorderedGroup('a', 'b', 'c', sep=[',', ';']), EOF
parser = ParserPython(grammar, reduce_tree=False)
result = parser.parse('b , a, c')
assert result
result = parser.parse('b , c; a')
assert result
# Check separator matching
with pytest.raises(NoMatch):
parser.parse('a, b c')
with pytest.raises(NoMatch):
parser.parse('a, c: a')
# Each element must be matched exactly once
with pytest.raises(NoMatch):
parser.parse('a, b, b; c')
with pytest.raises(NoMatch):
parser.parse('a, c')