Coverage for tdom / placeholders_test.py: 100%
37 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-17 23:32 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-17 23:32 +0000
1import pytest
3from .placeholders import (
4 _PLACEHOLDER_PREFIX,
5 _PLACEHOLDER_SUFFIX,
6 PlaceholderState,
7 find_placeholders,
8 make_placeholder,
9 match_placeholders,
10)
13def test_make_placeholder() -> None:
14 assert make_placeholder(0) == f"{_PLACEHOLDER_PREFIX}0{_PLACEHOLDER_SUFFIX}"
15 assert make_placeholder(42) == f"{_PLACEHOLDER_PREFIX}42{_PLACEHOLDER_SUFFIX}"
18def test_match_placeholders() -> None:
19 s = f"Start {_PLACEHOLDER_PREFIX}0{_PLACEHOLDER_SUFFIX} middle {_PLACEHOLDER_PREFIX}1{_PLACEHOLDER_SUFFIX} end"
20 matches = match_placeholders(s)
21 assert len(matches) == 2
22 assert matches[0].group(0) == f"{_PLACEHOLDER_PREFIX}0{_PLACEHOLDER_SUFFIX}"
23 assert matches[0][1] == "0"
24 assert matches[1].group(0) == f"{_PLACEHOLDER_PREFIX}1{_PLACEHOLDER_SUFFIX}"
25 assert matches[1][1] == "1"
28def test_find_placeholders() -> None:
29 s = f"Hello {_PLACEHOLDER_PREFIX}0{_PLACEHOLDER_SUFFIX}, today is {_PLACEHOLDER_PREFIX}1{_PLACEHOLDER_SUFFIX}."
30 pt = find_placeholders(s)
31 assert pt.strings == ("Hello ", ", today is ", ".")
32 assert pt.i_indexes == (0, 1)
34 literal_s = "No placeholders here."
35 literal_pt = find_placeholders(literal_s)
36 assert literal_pt.strings == (literal_s,)
37 assert literal_pt.i_indexes == ()
40def test_placeholder_state() -> None:
41 state = PlaceholderState()
42 assert state.is_empty
44 p0 = state.add_placeholder(0)
45 assert p0 == make_placeholder(0)
46 assert not state.is_empty
48 p1 = state.add_placeholder(1)
49 assert p1 == make_placeholder(1)
51 text = f"Values: {p0}, {p1}"
52 pt = state.remove_placeholders(text)
53 assert pt.strings == ("Values: ", ", ", "")
54 assert pt.i_indexes == (0, 1)
55 assert state.is_empty
57 with pytest.raises(ValueError):
58 state.remove_placeholders(f"Unknown placeholder: {make_placeholder(2)}")