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
« prev ^ index » next coverage.py v7.10.3, created at 2025-09-18 21:46 +0000
1import typing
3import hypothesis
4import hypothesis.strategies as st
5import pytest
7from meta_tags_parser import parse_snippets_from_source
8from meta_tags_parser.snippets import _parse_dimension
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
27UNICODE_DIGITS: typing.Final = st.characters(whitelist_categories=["Nd"])
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
46def test_parse_dimension_empty_text_returns_zero() -> None:
47 assert _parse_dimension(" ") == 0