| 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% |