Coverage report: 100%

Files Functions Classes

coverage.py v7.10.3, created at 2026-08-22 19:08 +0000

File function statements missing excluded coverage
meta_tags_parser/__init__.py (no function) 5 0 0 100%
meta_tags_parser/download.py download_page_sync 1 0 0 100%
meta_tags_parser/download.py download_page_async 2 0 0 100%
meta_tags_parser/download.py (no function) 7 0 0 100%
meta_tags_parser/parse.py set_settings_for_meta_tags 1 0 0 100%
meta_tags_parser/parse.py resolve_active_options 1 0 0 100%
meta_tags_parser/parse.py _read_using_encoding 4 0 0 100%
meta_tags_parser/parse.py convert_source_to_text 10 0 0 100%
meta_tags_parser/parse.py _build_boundary_pattern 1 0 0 100%
meta_tags_parser/parse.py _find_boundary_cut_position 3 0 0 100%
meta_tags_parser/parse.py _extract_html_scan_window 5 0 0 100%
meta_tags_parser/parse.py _find_social_tag_name 4 0 0 100%
meta_tags_parser/parse.py _extract_social_tags_from_precursor 7 0 0 100%
meta_tags_parser/parse.py _extract_basic_tags_from_precursor 13 0 0 100%
meta_tags_parser/parse.py _match_social_prefix 1 0 0 100%
meta_tags_parser/parse.py _extract_all_other_tags_from_precursor 10 0 0 100%
meta_tags_parser/parse.py _prepare_normalized_meta_attrs 8 0 0 100%
meta_tags_parser/parse.py parse_meta_tags_from_source 12 0 0 100%
meta_tags_parser/parse.py (no function) 30 0 0 100%
meta_tags_parser/public.py parse_tags_from_url 1 0 0 100%
meta_tags_parser/public.py parse_tags_from_url_async 1 0 0 100%
meta_tags_parser/public.py parse_snippets_from_url 1 0 0 100%
meta_tags_parser/public.py parse_snippets_from_url_async 1 0 0 100%
meta_tags_parser/public.py (no function) 6 0 0 100%
meta_tags_parser/snippets.py _parse_dimension 6 0 0 100%
meta_tags_parser/snippets.py parse_snippets_from_source 15 0 0 100%
meta_tags_parser/snippets.py (no function) 5 0 0 100%
meta_tags_parser/structs.py _transform_tag_name 1 0 0 100%
meta_tags_parser/structs.py OneMetaTag.normalized_name 1 0 0 100%
meta_tags_parser/structs.py (no function) 59 0 0 100%
tests/__init__.py (no function) 0 0 0 100%
tests/conftest.py provide_faker_seed 1 0 0 100%
tests/conftest.py restore_global_settings 2 0 0 100%
tests/conftest.py _build_tag_content 5 0 0 100%
tests/conftest.py provide_fake_meta_page 13 0 0 100%
tests/conftest.py provide_html_file_paths 1 0 0 100%
tests/conftest.py (no function) 27 0 0 100%
tests/corpus_support.py CorpusPageInfo.read_page_bytes 1 0 0 100%
tests/corpus_support.py load_corpus_pages 2 0 0 100%
tests/corpus_support.py convert_meta_tags_to_pairs 1 0 0 100%
tests/corpus_support.py (no function) 17 0 0 100%
tests/factories.py OneMetaTagFactory.name 1 0 0 100%
tests/factories.py SettingsFromUserFactory.what_to_parse 2 0 0 100%
tests/factories.py SettingsFromUserFactory.boundary_tags 1 0 0 100%
tests/factories.py SettingsFromUserFactory.fallback_limit_chars 1 0 0 100%
tests/factories.py SettingsFromUserFactory.max_scan_chars 1 0 0 100%
tests/factories.py SettingsFromUserFactory.hard_limit_chars 1 0 0 100%
tests/factories.py (no function) 29 0 0 100%
tests/integration/__init__.py (no function) 0 0 0 100%
tests/integration/test_captured_pages.py _read_captured_page 1 0 0 100%
tests/integration/test_captured_pages.py _find_tag_value 2 0 0 100%
tests/integration/test_captured_pages.py test_captured_page_is_parsed_as_expected 7 0 0 100%
tests/integration/test_captured_pages.py test_captured_page_snippet 5 0 0 100%
tests/integration/test_captured_pages.py test_all_captured_pages_are_covered 1 0 0 100%
tests/integration/test_captured_pages.py (no function) 15 0 0 100%
tests/integration/test_malformed_html.py test_unclosed_tag_does_not_hide_earlier_tags 4 0 0 100%
tests/integration/test_malformed_html.py test_degenerate_pages_never_raise 4 0 0 100%
tests/integration/test_malformed_html.py test_leading_byte_order_mark_does_not_break_the_title 1 0 0 100%
tests/integration/test_malformed_html.py test_attribute_without_closing_quote_yields_no_social_tags 4 0 0 100%
tests/integration/test_malformed_html.py test_arbitrary_text_is_parsed_without_errors 5 0 0 100%
tests/integration/test_malformed_html.py test_bytes_with_unusable_declared_charset_are_still_parsed 2 0 0 100%
tests/integration/test_malformed_html.py (no function) 17 0 0 100%
tests/integration/test_parse_meta_tags.py test_parse_title_and_social_tags_from_static_page 6 0 0 100%
tests/integration/test_parse_meta_tags.py test_twitter_tags_are_read_from_both_attributes 3 0 0 100%
tests/integration/test_parse_meta_tags.py test_open_graph_tags_are_read_only_from_the_property_attribute 3 0 0 100%
tests/integration/test_parse_meta_tags.py test_duplicated_basic_tags_keep_the_first_value_and_do_not_hide_the_rest 3 0 0 100%
tests/integration/test_parse_meta_tags.py test_basic_tags_never_exceed_the_known_tag_names 4 0 0 100%
tests/integration/test_parse_meta_tags.py test_tags_without_content_are_skipped 2 0 0 100%
tests/integration/test_parse_meta_tags.py test_upper_case_markup_is_normalized 2 0 0 100%
tests/integration/test_parse_meta_tags.py test_html_entities_are_decoded 3 0 0 100%
tests/integration/test_parse_meta_tags.py test_source_can_be_passed_as_bytes 3 0 0 100%
tests/integration/test_parse_meta_tags.py test_tags_after_the_head_are_ignored_by_default 3 0 0 100%
tests/integration/test_parse_meta_tags.py test_parse_from_generated_page 6 0 0 100%
tests/integration/test_parse_meta_tags.py test_only_the_leading_social_prefix_is_stripped 2 0 0 100%
tests/integration/test_parse_meta_tags.py (no function) 21 0 0 100%
tests/integration/test_parse_settings.py test_what_to_parse_limits_the_result 3 0 0 100%
tests/integration/test_parse_settings.py test_global_settings_are_used_and_can_be_restored 9 0 0 100%
tests/integration/test_parse_settings.py test_explicit_options_win_over_global_settings 4 0 0 100%
tests/integration/test_parse_settings.py test_snippets_follow_global_settings_too 3 0 0 100%
tests/integration/test_parse_settings.py test_snippets_ignore_body_tags_with_default_settings 1 0 0 100%
tests/integration/test_parse_settings.py (no function) 11 0 0 100%
tests/integration/test_public_api.py _build_mock_transport 2 0 0 100%
tests/integration/test_public_api.py _build_mock_transport._handle_request 3 0 0 100%
tests/integration/test_public_api.py provide_recorded_request 8 0 0 100%
tests/integration/test_public_api.py provide_recorded_request._handle_sync_get 4 0 0 100%
tests/integration/test_public_api.py provide_recorded_request._make_async_client 3 0 0 100%
tests/integration/test_public_api.py test_sync_download_follows_redirects_and_sets_a_timeout 5 0 0 100%
tests/integration/test_public_api.py test_async_download_follows_redirects_and_sets_a_timeout 4 0 0 100%
tests/integration/test_public_api.py test_custom_timeout_is_passed_through 2 0 0 100%
tests/integration/test_public_api.py test_parse_tags_from_url 4 0 0 100%
tests/integration/test_public_api.py test_parse_snippets_from_url 3 0 0 100%
tests/integration/test_public_api.py test_options_reach_the_parser_through_the_url_helpers 3 0 0 100%
tests/integration/test_public_api.py test_async_url_helpers 4 0 0 100%
tests/integration/test_public_api.py (no function) 28 0 0 100%
tests/integration/test_real_world_corpus.py test_real_page_matches_the_reference_parser 8 0 0 100%
tests/integration/test_real_world_corpus.py test_full_scan_starts_with_the_head_tags 5 0 0 100%
tests/integration/test_real_world_corpus.py test_real_page_snippets_take_the_first_value 7 0 0 100%
tests/integration/test_real_world_corpus.py test_real_page_invariants 9 0 0 100%
tests/integration/test_real_world_corpus.py test_corpus_covers_many_sites_languages_and_encodings 9 0 0 100%
tests/integration/test_real_world_corpus.py test_every_corpus_page_records_its_origin 6 0 0 100%
tests/integration/test_real_world_corpus.py (no function) 24 0 0 100%
tests/integration/test_snippets.py test_snippets_are_stable_across_repeated_parsing 1 0 0 100%
tests/integration/test_snippets.py test_snippets_are_empty_without_social_tags 4 0 0 100%
tests/integration/test_snippets.py test_first_duplicated_tag_wins 4 0 0 100%
tests/integration/test_snippets.py test_unknown_social_tags_do_not_reach_the_snippet 2 0 0 100%
tests/integration/test_snippets.py test_snippets_accept_bytes 2 0 0 100%
tests/integration/test_snippets.py test_image_width_examples 2 0 0 100%
tests/integration/test_snippets.py test_any_title_survives_the_round_trip 2 0 0 100%
tests/integration/test_snippets.py (no function) 19 0 0 100%
tests/reference_parser.py ReferenceHeadParser.__init__ 5 0 0 100%
tests/reference_parser.py ReferenceHeadParser.handle_starttag 11 0 0 100%
tests/reference_parser.py ReferenceHeadParser.handle_endtag 4 0 0 100%
tests/reference_parser.py ReferenceHeadParser.handle_data 2 0 0 100%
tests/reference_parser.py _read_attribute 1 0 0 100%
tests/reference_parser.py _collect_social_tags 6 0 0 100%
tests/reference_parser.py _collect_basic_tags 7 0 0 100%
tests/reference_parser.py _collect_other_tags 1 0 0 100%
tests/reference_parser.py extract_reference_tags 5 0 0 100%
tests/reference_parser.py (no function) 19 0 0 100%
tests/unit/__init__.py (no function) 0 0 0 100%
tests/unit/test_decode_source.py test_convert_source_to_text_honours_declared_charset 2 0 0 100%
tests/unit/test_decode_source.py test_convert_source_to_text_honours_http_equiv_declaration 2 0 0 100%
tests/unit/test_decode_source.py test_convert_source_to_text_honours_byte_order_mark 3 0 0 100%
tests/unit/test_decode_source.py test_convert_source_to_text_survives_non_text_charsets 2 0 0 100%
tests/unit/test_decode_source.py test_convert_source_to_text_ignores_unknown_charset 2 0 0 100%
tests/unit/test_decode_source.py test_convert_source_to_text_falls_back_to_utf8_without_declaration 1 0 0 100%
tests/unit/test_decode_source.py test_convert_source_to_text_never_raises_on_broken_bytes 1 0 0 100%
tests/unit/test_decode_source.py test_convert_source_to_text_returns_text_for_any_input 1 0 0 100%
tests/unit/test_decode_source.py (no function) 19 0 0 100%
tests/unit/test_dimension_parsing.py test_parse_dimension_examples 1 0 0 100%
tests/unit/test_dimension_parsing.py test_parse_dimension_matches_the_ascii_digit_rule 4 0 0 100%
tests/unit/test_dimension_parsing.py (no function) 11 0 0 100%
tests/unit/test_reference_parser.py test_reference_stops_at_the_body_start_tag 4 0 0 100%
tests/unit/test_reference_parser.py test_reference_stops_at_the_head_end_tag 2 0 0 100%
tests/unit/test_reference_parser.py test_reference_applies_the_documented_grouping 7 0 0 100%
tests/unit/test_reference_parser.py test_reference_normalizes_windows_newlines 2 0 0 100%
tests/unit/test_reference_parser.py (no function) 6 0 0 100%
tests/unit/test_scan_window.py test_scan_window_cuts_at_the_first_boundary 1 0 0 100%
tests/unit/test_scan_window.py test_scan_window_respects_hard_limit_chars 5 0 0 100%
tests/unit/test_scan_window.py test_scan_window_keeps_whole_head_when_hard_limit_is_larger 3 0 0 100%
tests/unit/test_scan_window.py test_scan_window_applies_hard_limit_on_the_fallback_path 3 0 0 100%
tests/unit/test_scan_window.py test_scan_window_falls_back_when_no_boundary_is_found 4 0 0 100%
tests/unit/test_scan_window.py test_scan_window_ignores_boundary_beyond_max_scan_chars 5 0 0 100%
tests/unit/test_scan_window.py test_scan_window_supports_custom_boundary_tags 3 0 0 100%
tests/unit/test_scan_window.py test_scan_window_is_not_shifted_by_multi_character_lowercasing 4 0 0 100%
tests/unit/test_scan_window.py test_scan_window_stops_at_head_end 3 0 0 100%
tests/unit/test_scan_window.py test_scan_window_always_returns_a_prefix 4 0 0 100%
tests/unit/test_scan_window.py (no function) 23 0 0 100%
tests/unit/test_structs.py test_structs_are_frozen 2 0 0 100%
tests/unit/test_structs.py test_normalized_name_replaces_colons 1 0 0 100%
tests/unit/test_structs.py test_tag_name_cache_is_bounded 1 0 0 100%
tests/unit/test_structs.py test_snippet_dimension_fields_exist_on_the_snippet_struct 1 0 0 100%
tests/unit/test_structs.py test_default_settings_parse_everything 2 0 0 100%
tests/unit/test_structs.py test_normalized_name_never_contains_colons 2 0 0 100%
tests/unit/test_structs.py (no function) 15 0 0 100%
Total   878 0 0 100%

No items found using the specified filter.