Coverage for tdom / placeholders_test.py: 100%
41 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-01-12 16:43 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-01-12 16:43 +0000
1import pytest
3from .placeholders import (
4 make_placeholder_config,
5 PlaceholderState,
6)
9def test_make_placeholder() -> None:
10 config = make_placeholder_config()
11 assert config.make_placeholder(0) == f"{config.prefix}0{config.suffix}"
12 assert config.make_placeholder(42) == f"{config.prefix}42{config.suffix}"
15def test_match_placeholders() -> None:
16 config = make_placeholder_config()
17 s = f"Start {config.prefix}0{config.suffix} middle {config.prefix}1{config.suffix} end"
18 matches = config.match_placeholders(s)
19 assert len(matches) == 2
20 assert matches[0].group(0) == f"{config.prefix}0{config.suffix}"
21 assert matches[0][1] == "0"
22 assert matches[1].group(0) == f"{config.prefix}1{config.suffix}"
23 assert matches[1][1] == "1"
26def test_find_placeholders() -> None:
27 config = make_placeholder_config()
28 s = f"Hello {config.prefix}0{config.suffix}, today is {config.prefix}1{config.suffix}."
29 pt = config.find_placeholders(s)
30 assert pt.strings == ("Hello ", ", today is ", ".")
31 assert pt.i_indexes == (0, 1)
33 literal_s = "No placeholders here."
34 literal_pt = config.find_placeholders(literal_s)
35 assert literal_pt.strings == (literal_s,)
36 assert literal_pt.i_indexes == ()
39def test_placeholder_state() -> None:
40 config = make_placeholder_config()
41 state = PlaceholderState(config=config)
42 assert state.is_empty
44 p0 = state.add_placeholder(0)
45 assert p0 == config.make_placeholder(0)
46 assert not state.is_empty
48 p1 = state.add_placeholder(1)
49 assert p1 == config.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: {config.make_placeholder(2)}")