Coverage report: 100%

Files Functions Classes

coverage.py v7.10.3, created at 2026-09-13 18:40 +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 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) 23 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/test_captured_pages.py _read_captured_page 1 0 0 100%
tests/test_captured_pages.py _find_tag_value 2 0 0 100%
tests/test_captured_pages.py test_captured_page_is_parsed_as_expected 7 0 0 100%
tests/test_captured_pages.py test_captured_page_snippet 5 0 0 100%
tests/test_captured_pages.py test_all_captured_pages_are_covered 1 0 0 100%
tests/test_captured_pages.py (no function) 15 0 0 100%
tests/test_malformed_html.py test_unclosed_tag_does_not_hide_earlier_tags 4 0 0 100%
tests/test_malformed_html.py test_degenerate_pages_never_raise 4 0 0 100%
tests/test_malformed_html.py test_leading_byte_order_mark_does_not_break_the_title 1 0 0 100%
tests/test_malformed_html.py test_attribute_without_closing_quote_yields_no_social_tags 4 0 0 100%
tests/test_malformed_html.py test_arbitrary_text_is_parsed_without_errors 5 0 0 100%
tests/test_malformed_html.py (no function) 15 0 0 100%
tests/test_parse_meta_tags.py test_parse_title_and_social_tags_from_static_page 6 0 0 100%
tests/test_parse_meta_tags.py test_twitter_tags_are_read_from_both_attributes 3 0 0 100%
tests/test_parse_meta_tags.py test_open_graph_tags_are_read_only_from_the_property_attribute 3 0 0 100%
tests/test_parse_meta_tags.py test_duplicated_basic_tags_keep_the_first_value_and_do_not_hide_the_rest 3 0 0 100%
tests/test_parse_meta_tags.py test_basic_tags_never_exceed_the_known_tag_names 4 0 0 100%
tests/test_parse_meta_tags.py test_tags_without_content_are_skipped 2 0 0 100%
tests/test_parse_meta_tags.py test_upper_case_markup_is_normalized 2 0 0 100%
tests/test_parse_meta_tags.py test_html_entities_are_decoded 3 0 0 100%
tests/test_parse_meta_tags.py test_results_handed_to_the_user_are_immutable 6 0 0 100%
tests/test_parse_meta_tags.py test_tags_after_the_head_are_ignored_by_default 3 0 0 100%
tests/test_parse_meta_tags.py test_parse_from_generated_page 6 0 0 100%
tests/test_parse_meta_tags.py test_only_the_leading_social_prefix_is_stripped 2 0 0 100%
tests/test_parse_meta_tags.py (no function) 22 0 0 100%
tests/test_parse_settings.py test_what_to_parse_limits_the_result 3 0 0 100%
tests/test_parse_settings.py test_global_settings_are_used_and_can_be_restored 9 0 0 100%
tests/test_parse_settings.py test_explicit_options_win_over_global_settings 4 0 0 100%
tests/test_parse_settings.py test_snippets_follow_global_settings_too 3 0 0 100%
tests/test_parse_settings.py test_snippets_ignore_body_tags_with_default_settings 1 0 0 100%
tests/test_parse_settings.py test_hard_limit_chars_cuts_the_markup_that_is_looked_at 3 0 0 100%
tests/test_parse_settings.py test_hard_limit_larger_than_the_head_keeps_every_tag 2 0 0 100%
tests/test_parse_settings.py test_fallback_limit_decides_when_the_page_has_no_boundary_tag 4 0 0 100%
tests/test_parse_settings.py test_boundary_beyond_max_scan_chars_is_not_looked_for 4 0 0 100%
tests/test_parse_settings.py test_custom_boundary_tags_change_where_scanning_stops 3 0 0 100%
tests/test_parse_settings.py test_multi_character_lowercasing_does_not_shift_the_boundary 5 0 0 100%
tests/test_parse_settings.py test_generated_settings_never_fill_parts_that_were_not_requested 5 0 0 100%
tests/test_parse_settings.py (no function) 27 0 0 100%
tests/test_public_api.py _build_mock_transport 2 0 0 100%
tests/test_public_api.py _build_mock_transport._handle_request 3 0 0 100%
tests/test_public_api.py provide_recorded_request 8 0 0 100%
tests/test_public_api.py provide_recorded_request._handle_sync_get 4 0 0 100%
tests/test_public_api.py provide_recorded_request._make_async_client 3 0 0 100%
tests/test_public_api.py test_sync_download_follows_redirects_and_sets_a_timeout 5 0 0 100%
tests/test_public_api.py test_async_download_follows_redirects_and_sets_a_timeout 4 0 0 100%
tests/test_public_api.py test_custom_timeout_is_passed_through 2 0 0 100%
tests/test_public_api.py test_parse_tags_from_url 4 0 0 100%
tests/test_public_api.py test_parse_snippets_from_url 3 0 0 100%
tests/test_public_api.py test_options_reach_the_parser_through_the_url_helpers 3 0 0 100%
tests/test_public_api.py test_async_url_helpers 4 0 0 100%
tests/test_public_api.py (no function) 28 0 0 100%
tests/test_real_world_corpus.py test_package_and_reference_agree_on_the_documented_rules 7 0 0 100%
tests/test_real_world_corpus.py test_package_and_reference_stop_at_the_body_start_tag 5 0 0 100%
tests/test_real_world_corpus.py test_real_page_matches_the_reference_parser 8 0 0 100%
tests/test_real_world_corpus.py test_full_scan_starts_with_the_head_tags 5 0 0 100%
tests/test_real_world_corpus.py test_real_page_snippets_take_the_first_value 7 0 0 100%
tests/test_real_world_corpus.py test_real_page_invariants 9 0 0 100%
tests/test_real_world_corpus.py test_corpus_covers_many_sites_languages_and_encodings 9 0 0 100%
tests/test_real_world_corpus.py test_every_corpus_page_records_its_origin 6 0 0 100%
tests/test_real_world_corpus.py (no function) 31 0 0 100%
tests/test_snippets.py test_snippets_are_stable_across_repeated_parsing 1 0 0 100%
tests/test_snippets.py test_snippets_are_empty_without_social_tags 4 0 0 100%
tests/test_snippets.py test_first_duplicated_tag_wins 4 0 0 100%
tests/test_snippets.py test_unknown_social_tags_do_not_reach_the_snippet 2 0 0 100%
tests/test_snippets.py test_snippets_accept_bytes 2 0 0 100%
tests/test_snippets.py test_image_width_examples 2 0 0 100%
tests/test_snippets.py test_image_dimensions_follow_the_ascii_digit_rule 3 0 0 100%
tests/test_snippets.py test_any_title_survives_the_round_trip 2 0 0 100%
tests/test_snippets.py (no function) 24 0 0 100%
tests/test_source_encodings.py _build_page_source 1 0 0 100%
tests/test_source_encodings.py test_declared_charset_is_honoured 4 0 0 100%
tests/test_source_encodings.py test_http_equiv_charset_declaration_is_honoured 2 0 0 100%
tests/test_source_encodings.py test_byte_order_mark_wins_over_the_default_encoding 4 0 0 100%
tests/test_source_encodings.py test_missing_declaration_falls_back_to_utf8 1 0 0 100%
tests/test_source_encodings.py test_charset_that_cannot_decode_text_does_not_break_parsing 2 0 0 100%
tests/test_source_encodings.py test_charset_that_mangles_the_page_still_returns_a_result 2 0 0 100%
tests/test_source_encodings.py test_undecodable_bytes_are_dropped_instead_of_raising 1 0 0 100%
tests/test_source_encodings.py test_arbitrary_bytes_are_parsed_without_errors 2 0 0 100%
tests/test_source_encodings.py (no function) 21 0 0 100%
Total   828 0 0 100%

No items found using the specified filter.