aboutsummaryrefslogtreecommitdiff
path: root/tests/errors/dangling_quantifier.test.py
blob: 78239966e5f7fb4f0ca862452e876a513b62d201 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
"""Tests for :class:`DanglingQuantifierError` raised at emit time."""

import pytest

from edify import Pattern, RegexBuilder
from edify.errors.quantifier import DanglingQuantifierError


def test_to_regex_string_raises_when_a_bare_quantifier_has_no_operand():
    with pytest.raises(DanglingQuantifierError):
        RegexBuilder().exactly(3).to_regex_string()


def test_to_regex_string_raises_for_optional_with_no_operand():
    with pytest.raises(DanglingQuantifierError):
        RegexBuilder().optional().to_regex_string()


def test_to_regex_string_raises_for_zero_or_more_with_no_operand():
    with pytest.raises(DanglingQuantifierError):
        RegexBuilder().zero_or_more().to_regex_string()


def test_to_regex_string_raises_for_one_or_more_with_no_operand():
    with pytest.raises(DanglingQuantifierError):
        RegexBuilder().one_or_more().to_regex_string()


def test_to_regex_string_raises_for_between_with_no_operand():
    with pytest.raises(DanglingQuantifierError):
        RegexBuilder().between(2, 5).to_regex_string()


def test_pattern_to_regex_string_raises_when_a_bare_quantifier_has_no_operand():
    with pytest.raises(DanglingQuantifierError):
        Pattern().exactly(3).to_regex_string()


def test_to_regex_raises_when_a_bare_quantifier_has_no_operand():
    with pytest.raises(DanglingQuantifierError):
        RegexBuilder().at_least(2).to_regex()


def test_message_hints_at_appending_an_operand():
    with pytest.raises(DanglingQuantifierError, match="Append an element"):
        RegexBuilder().exactly(3).to_regex_string()


def test_dangling_quantifier_error_message_contains_expected_text():
    error = DanglingQuantifierError()
    assert "Dangling quantifier" in str(error)
    assert "no operand" in str(error)