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

1import pytest 

2 

3from .placeholders import ( 

4 _PLACEHOLDER_PREFIX, 

5 _PLACEHOLDER_SUFFIX, 

6 PlaceholderState, 

7 find_placeholders, 

8 make_placeholder, 

9 match_placeholders, 

10) 

11 

12 

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}" 

16 

17 

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" 

26 

27 

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) 

33 

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 == () 

38 

39 

40def test_placeholder_state() -> None: 

41 state = PlaceholderState() 

42 assert state.is_empty 

43 

44 p0 = state.add_placeholder(0) 

45 assert p0 == make_placeholder(0) 

46 assert not state.is_empty 

47 

48 p1 = state.add_placeholder(1) 

49 assert p1 == make_placeholder(1) 

50 

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 

56 

57 with pytest.raises(ValueError): 

58 state.remove_placeholders(f"Unknown placeholder: {make_placeholder(2)}")