def test_abstract_and(): forward = DummyPosition() & 'E' backward = 'E' & DummyPosition() assert forward != backward assert forward == Sequence(DummyPosition(), 'E') assert backward == Sequence('E', DummyPosition()) forward = DummyPosition() & 'ED' backward = 'ED' & DummyPosition() assert forward != backward assert forward == Sequence(DummyPosition(), 'E', 'D') assert backward == Sequence('E', 'D', DummyPosition()) forward = DummyPosition() & DummyPosition() assert forward == Sequence(DummyPosition(), DummyPosition()) forward = DummyPosition() & Literal('E') backward = Literal('E') & DummyPosition() assert forward != backward assert forward == Sequence(DummyPosition(), Literal('E')) assert backward == Sequence(Literal('E'), DummyPosition()) forward = DummyPosition() & Sequence('E') backward = Sequence('E') & DummyPosition() assert forward != backward assert forward == Sequence(DummyPosition(), 'E') assert backward == Sequence('E', DummyPosition()) forward = DummyPosition() & Sequence('E', 'D') backward = Sequence('E', 'D') & DummyPosition() assert forward != backward assert forward == Sequence(DummyPosition(), 'E', 'D') assert backward == Sequence('E', 'D', DummyPosition()) forward = DummyPosition() & Range('E') backward = Range('E') & DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Range('E')) assert backward == Group(Range('E'), DummyPosition()) forward = DummyPosition() & Range(('E', 'D')) backward = Range(('E', 'D')) & DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Range(('E', 'D'))) assert backward == Group(Range(('E', 'D')), DummyPosition()) forward = DummyPosition() & Group(*(DummyPosition(), )) backward = Group(*(DummyPosition(), )) & DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Group(*(DummyPosition(), ))) assert backward == Group(Group(*(DummyPosition(), )), DummyPosition()) forward = DummyPosition() & Group(*(DummyPosition(), DummyPosition())) backward = Group(*(DummyPosition(), DummyPosition())) & DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Group(*(DummyPosition(), DummyPosition()))) assert backward == Group(Group(*(DummyPosition(), DummyPosition())), DummyPosition())
def test_or(): exp = Group(Literal('+'), Literal('-'), OR=True, repetition=Quantification(min=0, max=1)) assert format(exp) == r'(\+|\-)?' exp |= Decimal() | Group(Decimal(), Literal('.'), Decimal()) assert format(exp) == r'((\+|\-)?|(\d|(\d\.\d)))' assert str( exp ) == "((+<OR>-)<0,1GREATEST><OR>(<D><OR>(<D>.<D>)<1,1GREATEST>)<1,1GREATEST>)<1,1GREATEST>"
def test_literal_illegal(): with pytest.raises(ValueError): Literal(None) with pytest.raises(ValueError): Literal('foo') with pytest.raises(ValueError): Literal('') with pytest.raises(ValueError): Literal(42) with pytest.raises(ValueError): Literal(None) literal = Literal('A') with pytest.raises(ValueError): Literal(literal)
def test_literal(): literal = Literal('a') assert str(literal) == 'a' literal = Literal('Z') assert str(literal) == 'Z' literal = Literal('!') assert str(literal) == '!' literal = Literal(' ') assert str(literal) == ' ' literal = Literal('a') assert str(literal) == 'a' literal = Literal('\u03A9') assert str(literal) == '\u03A9'
def test_literal_or_illegal(): with pytest.raises(TypeError): forward = Literal('R') | None with pytest.raises(TypeError): backward = None | Literal('R') with pytest.raises(TypeError): forward = Literal('R') | '' with pytest.raises(TypeError): backward = '' | Literal('R') with pytest.raises(TypeError): forward = Literal('R') | 42 with pytest.raises(TypeError): backward = 42 | Literal('R')
def test_literal_and_illegal(): with pytest.raises(TypeError): forward = Literal('R') & None with pytest.raises(TypeError): backward = None & Literal('R') with pytest.raises(TypeError): forward = Literal('R') & '' with pytest.raises(TypeError): backward = '' & Literal('R') with pytest.raises(TypeError): forward = Literal('R') & 42 with pytest.raises(TypeError): backward = 42 & Literal('R')
def test_range_and(): forward = Range('A') & 'B' backward = 'A' & Range('B') assert forward != backward assert forward == Group(Range('A'), Literal('B')) assert backward == Group(Literal('A'), Range('B')) forward = Range('A') & 'BC' backward = 'A' & Range('B', 'C') assert forward != backward assert forward == Group(Range('A'), Sequence('BC')) assert backward == Group(Literal('A'), Range('B', 'C')) forward = Range('A', 'B') & 'C' backward = 'AB' & Range('C') assert forward != backward assert forward == Group(Range('A', 'B'), Literal('C')) assert backward == Group(Sequence('AB'), Range('C')) forward = Range('A', 'B') & 'CD' backward = 'AB' & Range('C', 'D') assert forward != backward assert forward == Group(Range('A', 'B'), Sequence('CD')) assert backward == Group(Sequence('AB'), Range('C', 'D')) forward = Range('A') & 'BCDE' backward = 'A' & Range(('B', 'E')) assert forward != backward assert forward == Group(Range('A'), Sequence('BCDE')) assert backward == Group(Literal('A'), Range(('B', 'E'))) forward = Range(('A', 'D')) & 'E' backward = 'ABCD' & Range('E') assert forward != backward assert forward == Group(Range(('A', 'D')), Literal('E')) assert backward == Group(Sequence('ABCD'), Range('E')) forward = Range(('A', 'C')) & 'DE' backward = 'AB' & Range(('C', 'E')) assert forward != backward assert forward == Group(Range(('A', 'C')), Sequence('DE')) assert backward == Group(Sequence('AB'), Range(('C', 'E')))
(Quantification(min=10, max=0, greedy=True), '{10,}'), (Quantification(min=10, max=10, greedy=True), '{10}'), (Quantification(min=10, max=9999, greedy=True), '{10,9999}'), (Quantification(min=10, max=0, greedy=False), '{10,}?'), (Quantification(min=10, max=10, greedy=False), '{10}?'), (Quantification(min=10, max=9999, greedy=False), '{10,9999}?'), (Quantification(min=9999, max=0, greedy=True), '{9999,}'), (Quantification(min=9999, max=9999, greedy=True), '{9999}'), (Quantification(min=9999, max=0, greedy=False), '{9999,}?'), (Quantification(min=9999, max=9999, greedy=False), '{9999}?'), ]) def test_format_quantification(quantity, expected): assert _format_quantification(quantity) == expected @pytest.mark.parametrize("literal,expected", [ (Literal('A'), 'A'), (Literal('z'), 'z'), (Literal('0'), '0'), (Literal('1'), '1'), (Literal('\u03A9'), '\u03A9'), (Literal('\u03B8'), '\u03B8'), (Literal('|'), r'\|'), (Literal('^'), r'\^'), (Literal('('), r'\('), (Literal(']'), r'\]'), (Literal('$'), r'\$'), (Literal('*'), r'\*'), (Literal('~'), r'\~'), (Literal('\\'), '\\\\'), ]) def test_format_literal(literal, expected):
def test_literal_and(): forward = Literal('R') & 'E' backward = 'R' & Literal('E') assert forward == backward assert forward == Sequence('R', 'E') forward = Literal('R') & 'ED' backward = 'RE' & Literal('D') assert forward == backward assert forward == Sequence('R', 'E', 'D') forward = Literal('R') & Literal('E') assert forward == Sequence('R', 'E') forward = Literal('R') & Sequence('E') backward = Sequence('R') & Literal('E') assert forward == backward assert forward == Sequence('R', 'E') forward = Literal('R') & Sequence('E', 'D') backward = Sequence('R', 'E') & Literal('D') assert forward == backward assert forward == Sequence('R', 'E', 'D') forward = Literal('R') & Range('E') backward = Range('R') & Literal('E') assert forward != backward assert forward == Group(Literal('R'), Range('E')) assert backward == Group(Range('R'), Literal('E')) forward = Literal('R') & Range(('E', 'D')) backward = Range(('R', 'E')) & Literal('D') assert forward != backward assert forward == Group(Literal('R'), Range(('E', 'D'))) assert backward == Group(Range(('R', 'E')), Literal('D')) forward = Literal('R') & Group(*(Literal('E'), )) backward = Group(*(Literal('R'), )) & Literal('E') assert forward != backward assert forward == Group(Literal('R'), Group(*(Literal('E'), ))) assert backward == Group(Group(*(Literal('R'), )), Literal('E')) forward = Literal('R') & Group(*(Literal('E'), Literal('D'))) backward = Group(*(Literal('R'), Literal('E'))) & Literal('D') assert forward != backward assert forward == Group(Literal('R'), Group(*(Literal('E'), Literal('D')))) assert backward == Group(Group(*(Literal('R'), Literal('E'))), Literal('D'))
def test_sequence_or(): forward = Sequence('A') | 'B' backward = 'A' | Sequence('B') assert forward != backward assert forward == Group(Sequence('A'), Literal('B'), OR=True) assert backward == Group(Literal('A'), Sequence('B'), OR=True) forward = Sequence('A') | 'BC' backward = 'A' | Sequence('BC') assert forward != backward assert forward == Group(Sequence('A'), Sequence('BC'), OR=True) assert backward == Group(Literal('A'), Sequence('BC'), OR=True) forward = Sequence('AB') | 'C' backward = 'AB' | Sequence('C') assert forward != backward assert forward == Group(Sequence('AB'), Literal('C'), OR=True) assert backward == Group(Sequence('AB'), Sequence('C'), OR=True) forward = Sequence('AB') | 'CD' backward = 'AB' | Sequence('CD') assert forward == backward assert forward == Group(Sequence('A', 'B'), Sequence('C', 'D'), OR=True) forward = Sequence('A') | Sequence('B') assert forward == Group(Sequence('A'), Sequence('B'), OR=True) forward = Sequence('AB') | Sequence('CD') assert forward == Group(Sequence('AB'), Sequence('CD'), OR=True) forward = Sequence('A') | Sequence('BC') backward = Sequence('AB') | Sequence('C') assert forward != backward assert forward == Group(Sequence('A'), Sequence('BC'), OR=True) assert backward == Group(Sequence('AB'), Sequence('C'), OR=True) forward = Sequence('A', 'B', 'C') | Sequence('D', 'E') backward = Sequence('A', 'B') | Sequence('C', 'D', 'E') assert forward != backward assert forward == Group(Sequence('ABC'), Sequence('DE'), OR=True) assert backward == Group(Sequence('AB'), Sequence('CDE'), OR=True) forward = Sequence('A') | Range('B') backward = Range('A') | Sequence('B') assert forward != backward assert forward == Group(Sequence('A'), Range('B'), OR=True) assert backward == Group(Range('A'), Sequence('B'), OR=True) forward = Sequence('A') | Range('B', 'C', 'D') backward = Range('A') | Sequence('B', 'C', 'D') assert forward != backward assert forward == Group(Sequence('A'), Range('B', 'C', 'D'), OR=True) assert backward == Group(Range('A'), Sequence('B', 'C', 'D'), OR=True) forward = Sequence('A', 'B', 'C') | Range('D') backward = Range('A', 'B', 'C') | Sequence('D') assert forward != backward assert forward == Group(Sequence('A', 'B', 'C'), Range('D'), OR=True) assert backward == Group(Range('A', 'B', 'C'), Sequence('D'), OR=True) forward = Sequence('A', 'B', 'C') | Range('D', 'E', 'F') backward = Range('A', 'B', 'C') | Sequence('D', 'E', 'F') assert forward != backward assert forward == Group(Sequence('A', 'B', 'C'), Range('D', 'E', 'F'), OR=True) assert backward == Group(Range('A', 'B', 'C'), Sequence('D', 'E', 'F'), OR=True) forward = Sequence('A') | Group(Literal('B')) backward = Group(Literal('A')) | Sequence('B') assert forward != backward assert forward == Group(Sequence('A'), Group(Literal('B')), OR=True) assert backward == Group(Group(Literal('A')), Sequence('B'), OR=True) forward = Sequence('A') | Group(Sequence('B', 'C', 'D')) backward = Group(Literal('A')) | Sequence('B', 'C', 'D') assert forward != backward assert forward == Group(Sequence('A'), Group(Sequence('B', 'C', 'D')), OR=True) assert backward == Group(Group(Literal('A')), Sequence('B', 'C', 'D'), OR=True) forward = Sequence('A', 'B', 'C') | Group(Literal('D')) backward = Group(Sequence('A', 'B', 'C')) | Sequence('D') assert forward != backward assert forward == Group(Sequence('A', 'B', 'C'), Group(Literal('D')), OR=True) assert backward == Group(Group(Sequence('A', 'B', 'C')), Sequence('D'), OR=True) forward = Sequence('A', 'B', 'C') | Group(Sequence('D', 'E', 'F')) backward = Group(Sequence('A', 'B', 'C')) | Sequence('D', 'E', 'F') assert forward != backward assert forward == Group(Sequence('A', 'B', 'C'), Group(Sequence('D', 'E', 'F')), OR=True) assert backward == Group(Group(Sequence('A', 'B', 'C')), Sequence('D', 'E', 'F'), OR=True)
def test_sequence_and(): forward = Sequence('A') & 'B' backward = 'A' & Sequence('B') assert forward == backward assert forward == Sequence('AB') forward = Sequence('A') & 'BC' backward = 'A' & Sequence('BC') assert forward == backward assert forward == Sequence('ABC') forward = Sequence('AB') & 'C' backward = 'AB' & Sequence('C') assert forward == backward assert forward == Sequence('ABC') forward = Sequence('AB') & 'CD' backward = 'AB' & Sequence('CD') assert forward == backward assert forward == Sequence('A', 'B', 'C', 'D') forward = Sequence('A') & Sequence('B') assert forward == Sequence('A', 'B') forward = Sequence('AB') & Sequence('CD') assert forward == Sequence('AB', 'CD') forward = Sequence('A') & Sequence('BC') backward = Sequence('AB') & Sequence('C') assert forward == backward assert forward == Sequence('ABC') forward = Sequence('A', 'B', 'C') & Sequence('D', 'E') backward = Sequence('A', 'B') & Sequence('C', 'D', 'E') assert forward == backward assert forward == Sequence('A', 'B', 'C', 'D', 'E') forward = Sequence('A') & Range('B') backward = Range('A') & Sequence('B') assert forward != backward assert forward == Group(Sequence('A'), Range('B')) assert backward == Group(Range('A'), Sequence('B')) forward = Sequence('A') & Range('B', 'C', 'D') backward = Range('A') & Sequence('B', 'C', 'D') assert forward != backward assert forward == Group(Sequence('A'), Range('B', 'C', 'D')) assert backward == Group(Range('A'), Sequence('B', 'C', 'D')) forward = Sequence('A', 'B', 'C') & Range('D') backward = Range('A', 'B', 'C') & Sequence('D') assert forward != backward assert forward == Group(Sequence('A', 'B', 'C'), Range('D')) assert backward == Group(Range('A', 'B', 'C'), Sequence('D')) forward = Sequence('A', 'B', 'C') & Range('D', 'E', 'F') backward = Range('A', 'B', 'C') & Sequence('D', 'E', 'F') assert forward != backward assert forward == Group(Sequence('A', 'B', 'C'), Range('D', 'E', 'F')) assert backward == Group(Range('A', 'B', 'C'), Sequence('D', 'E', 'F')) forward = Sequence('A') & Group(Literal('B')) backward = Group(Literal('A')) & Sequence('B') assert forward != backward assert forward == Group(Sequence('A'), Group(Literal('B'))) assert backward == Group(Group(Literal('A')), Sequence('B')) forward = Sequence('A') & Group(Sequence('B', 'C', 'D')) backward = Group(Literal('A')) & Sequence('B', 'C', 'D') assert forward != backward assert forward == Group(Sequence('A'), Group(Sequence('B', 'C', 'D'))) assert backward == Group(Group(Literal('A')), Sequence('B', 'C', 'D')) forward = Sequence('A', 'B', 'C') & Group(Literal('D')) backward = Group(Sequence('A', 'B', 'C')) & Sequence('D') assert forward != backward assert forward == Group(Sequence('A', 'B', 'C'), Group(Literal('D'))) assert backward == Group(Group(Sequence('A', 'B', 'C')), Sequence('D')) forward = Sequence('A', 'B', 'C') & Group(Sequence('D', 'E', 'F')) backward = Group(Sequence('A', 'B', 'C')) & Sequence('D', 'E', 'F') assert forward != backward assert forward == Group(Sequence('A', 'B', 'C'), Group(Sequence('D', 'E', 'F'))) assert backward == Group(Group(Sequence('A', 'B', 'C')), Sequence('D', 'E', 'F'))
def test_abstract_or(): forward = DummyPosition() | 'E' backward = 'E' | DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Literal('E'), OR=True) assert backward == Group(Literal('E'), DummyPosition(), OR=True) forward = DummyPosition() | 'ED' backward = 'ED' | DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Sequence('E', 'D'), OR=True) assert backward == Group(Sequence('E', 'D'), DummyPosition(), OR=True) forward = DummyPosition() | DummyPosition() assert forward == Group(DummyPosition(), DummyPosition(), OR=True) forward = DummyPosition() | Literal('E') backward = Literal('E') | DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Literal('E'), OR=True) assert backward == Group(Literal('E'), DummyPosition(), OR=True) forward = DummyPosition() | Sequence('E') backward = Sequence('E') | DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Sequence('E'), OR=True) assert backward == Group(Sequence('E'), DummyPosition(), OR=True) forward = DummyPosition() | Sequence('E', 'D') backward = Sequence('E', 'D') | DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Sequence('E', 'D'), OR=True) assert backward == Group(Sequence('E', 'D'), DummyPosition(), OR=True) forward = DummyPosition() | Range('E') backward = Range('E') | DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Range('E'), OR=True) assert backward == Group(Range('E'), DummyPosition(), OR=True) forward = DummyPosition() | Range('E', 'D') backward = Range('E', 'D') | DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Range('E', 'D'), OR=True) assert backward == Group(Range('E', 'D'), DummyPosition(), OR=True) forward = DummyPosition() | Group(*(DummyPosition(), )) backward = Group(*(DummyPosition(), )) | DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Group(*(DummyPosition(), )), OR=True) assert backward == Group(Group(*(DummyPosition(), )), DummyPosition(), OR=True) forward = DummyPosition() | Group(*(DummyPosition(), DummyPosition())) backward = Group(*(DummyPosition(), DummyPosition())) | DummyPosition() assert forward != backward assert forward == Group(DummyPosition(), Group(*(DummyPosition(), DummyPosition())), OR=True) assert backward == Group(Group(*(DummyPosition(), DummyPosition())), DummyPosition(), OR=True)
def test_literal_or(): forward = Literal('R') | 'E' backward = 'R' | Literal('E') assert forward == backward assert forward == Range('R', 'E') forward = Literal('R') | 'ED' backward = 'RE' | Literal('D') assert forward != backward assert forward == Group(Literal('R'), Sequence('E', 'D'), OR=True) assert backward == Group(Sequence('R', 'E'), Literal('D'), OR=True) forward = Literal('R') | Literal('E') assert forward == Range('R', 'E') forward = Literal('R') | Sequence('E') backward = Sequence('R') | Literal('E') assert forward != backward assert forward == Group(Literal('R'), Sequence('E'), OR=True) assert backward == Group(Sequence('R'), Literal('E'), OR=True) forward = Literal('R') | Sequence('E', 'D') backward = Sequence('R', 'E') | Literal('D') assert forward != backward assert forward == Group(Literal('R'), Sequence('E', 'D'), OR=True) assert backward == Group(Sequence('R', 'E'), Literal('D'), OR=True) forward = Literal('R') | Range('E') backward = Range('R') | Literal('E') assert forward == backward assert forward == Range('R', 'E') assert backward == Range('R', 'E') forward = Literal('R') | Range('E', 'D') backward = Range('R', 'E') | Literal('D') assert forward == backward assert forward == Range('R', 'E', 'D') assert backward == Range('R', 'E', 'D') forward = Literal('R') | Group(*(Literal('E'), )) backward = Group(*(Literal('R'), )) | Literal('E') assert forward != backward assert forward == Group(Literal('R'), Group(*(Literal('E'), )), OR=True) assert backward == Group(Group(*(Literal('R'), )), Literal('E'), OR=True) forward = Literal('R') | Group(*(Literal('E'), Literal('D'))) backward = Group(*(Literal('R'), Literal('E'))) | Literal('D') assert forward != backward assert forward == Group(Literal('R'), Group(*(Literal('E'), Literal('D'))), OR=True) assert backward == Group(Group(*(Literal('R'), Literal('E'))), Literal('D'), OR=True)