Coverage for tests/test_snippets.py: 100%

22 statements  

« prev     ^ index     » next       coverage.py v7.10.3, created at 2025-09-18 21:46 +0000

1import typing 

2 

3import hypothesis 

4import hypothesis.strategies as st 

5import pytest 

6 

7from meta_tags_parser import parse_snippets_from_source 

8from meta_tags_parser.snippets import _parse_dimension 

9 

10 

11@pytest.mark.parametrize( 

12 ("dimension_text", "expected_width"), 

13 [ 

14 ("", 0), 

15 ("123", 123), 

16 ("abc", 0), 

17 ("\u0665", 0), 

18 ("²", 0), 

19 ], 

20) 

21def test_parse_image_width(dimension_text: str, expected_width: int) -> None: 

22 html_text: typing.Final = f'<meta property="twitter:image:width" content="{dimension_text}">' 

23 parsed_snippets: typing.Final = parse_snippets_from_source(html_text) 

24 assert parsed_snippets.twitter.image_width == expected_width 

25 

26 

27UNICODE_DIGITS: typing.Final = st.characters(whitelist_categories=["Nd"]) 

28 

29 

30@hypothesis.settings(max_examples=20) 

31@hypothesis.given( 

32 dimension_text=st.one_of( 

33 st.integers(min_value=0, max_value=100).map(str), 

34 st.text(alphabet=UNICODE_DIGITS, min_size=1, max_size=8), 

35 st.text(alphabet=st.characters(blacklist_characters='<>"'), min_size=1, max_size=8), 

36 ) 

37) 

38def test_parse_image_width_property(dimension_text: str) -> None: 

39 html_text: typing.Final = f'<meta property="twitter:image:width" content="{dimension_text}">' 

40 parsed_snippets: typing.Final = parse_snippets_from_source(html_text) 

41 cleaned_text: typing.Final[str] = dimension_text.strip() 

42 expected_width: typing.Final[int] = int(cleaned_text) if cleaned_text.isascii() and cleaned_text.isdigit() else 0 

43 assert parsed_snippets.twitter.image_width == expected_width 

44 

45 

46def test_parse_dimension_empty_text_returns_zero() -> None: 

47 assert _parse_dimension(" ") == 0