def test_concatenation(self): assert parse_regex(" foo bar ") == Concatenation( Symbol("foo"), Symbol("bar"), ) assert parse_regex(" foo bar baz ") == Concatenation( Symbol("foo"), Concatenation( Symbol("bar"), Symbol("baz"), ), )
def test_union(self): assert parse_regex(" foo | ") == Union( Symbol("foo"), None, ) assert parse_regex(" foo | bar ") == Union( Symbol("foo"), Symbol("bar"), ) assert parse_regex(" foo | bar | baz ") == Union( Union( Symbol("foo"), Symbol("bar"), ), Symbol("baz"), )
def test_parentheses(self): assert parse_regex(" (foo) (bar baz) * (qux quo)") == Concatenation( Symbol("foo"), Concatenation( Star(Concatenation( Symbol("bar"), Symbol("baz"), ), ), Concatenation( Symbol("qux"), Symbol("quo"), ), ), )
def test_wildcard(self): assert parse_regex(" . ") == Symbol(".")
def test_symbol(self): assert parse_regex(" foo ") == Symbol("foo")
def test_empty(self): assert parse_regex(" ") is None
def test_unmatched_opening_parentheses(self): with pytest.raises(SymbolRegexSyntaxError, match=r"Unmatched parentheses"): parse_regex(" ( ( foo )")
def test_modifier_at_start_of_expression(self): with pytest.raises(SymbolRegexSyntaxError, match=r"Modifier at start of expression"): parse_regex(" ? foo ")
def test_modifier_before_parenthesis(self): with pytest.raises(SymbolRegexSyntaxError, match=r"Modifier before '\(' at position 1"): parse_regex(" ( ? foo ) ")
def test_modifier_before_union(self): with pytest.raises(SymbolRegexSyntaxError, match=r"Modifier before '\|' at position 2"): parse_regex("a | ? b")
def test_multiple_modifiers(self): with pytest.raises(SymbolRegexSyntaxError, match=r"Multiple modifiers at position 4"): parse_regex("foo ? *")
def test_query(self): assert parse_regex(" foo ? ") == Union(Symbol("foo"), None)
def test_plus(self): assert parse_regex(" foo + ") == Concatenation( Symbol("foo"), Star(Symbol("foo")), )
def test_star(self): assert parse_regex(" foo * ") == Star(Symbol("foo"))