[INFO] fetching crate readex 0.19.2...
[INFO] testing readex-0.19.2 against 1.99.0-beta.8 for beta-1.100-2
[INFO] extracting crate readex 0.19.2 into /workspace/builds/worker-2-tc1/source
[INFO] started tweaking crates.io crate readex 0.19.2
[INFO] finished tweaking crates.io crate readex 0.19.2
[INFO] tweaked toml for crates.io crate readex 0.19.2 written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate readex 0.19.2 on toolchain 1.99.0-beta.8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate readex 0.19.2 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded web_atoms v0.2.4
[INFO] [stderr]   Downloaded markup5ever_rcdom v0.39.0+unofficial
[INFO] [stderr]   Downloaded tendril v0.5.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c
[INFO] running `Command { std: "docker" "start" "423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling phf_shared v0.13.1
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling quote v1.0.45
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling new_debug_unreachable v1.0.6
[INFO] [stderr]    Compiling precomputed-hash v0.1.1
[INFO] [stderr]    Compiling utf-8 v0.7.6
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling tendril v0.5.0
[INFO] [stderr]    Compiling tinyvec_macros v0.1.1
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling phf_generator v0.13.1
[INFO] [stderr]    Compiling phf v0.13.1
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling tinyvec v1.11.0
[INFO] [stderr]    Compiling string_cache_codegen v0.6.1
[INFO] [stderr]    Compiling phf_codegen v0.13.1
[INFO] [stderr]    Compiling web_atoms v0.2.4
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling unicode-normalization v0.1.25
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling string_cache v0.9.0
[INFO] [stderr]    Compiling markup5ever v0.39.0
[INFO] [stderr]    Compiling xml5ever v0.39.0
[INFO] [stderr]    Compiling html5ever v0.39.0
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling markup5ever_rcdom v0.39.0+unofficial
[INFO] [stderr]    Compiling readex v0.19.2 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 29.63s
[INFO] running `Command { std: "docker" "inspect" "423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling typenum v1.20.0
[INFO] [stderr]    Compiling cpufeatures v0.2.17
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling readex v0.19.2 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 22.14s
[INFO] running `Command { std: "docker" "inspect" "423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.10s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/readex-ce2cef957e8e840b)
[INFO] [stdout] 
[INFO] [stdout] running 2586 tests
[INFO] [stdout] test htmldate::core::tests::compare_reference_returns_reference_on_failure ... ok
[INFO] [stdout] test htmldate::core::tests::date_attributes_contains_known_keys ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_class_without_title_or_text_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_class_short_text_dropped ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_data_utime_newest_keeps_first_when_second_older ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_data_utime_numeric_arm ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_data_utime_original_arm_sets_reference ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_data_utime_original_picks_oldest_of_two ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_data_utime_non_numeric_continues ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_class_title_invalid_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_class_title_original_valid_returns_immediately ... ok
[INFO] [stdout] test htmldate::core::tests::compare_reference_returns_updated_timestamp ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_elements_finds_class_title ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_class_title_unparseable_does_not_break ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_class_title_not_original_uses_compare_reference ... ok
[INFO] [stdout] test htmldate::core::tests::examine_date_elements_no_match_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_no_abbr_elements_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_non_class_attrs_value_skipped ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_breaks_on_first_headerdate ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_copyrightyear_invalid_year_not_used ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_http_equiv_date_original_populates_headerdate ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_copyrightyear_used_as_reserve ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_copyrightyear_without_content_attr_skipped ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_itemprop_date_modified_populates_headerdate ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_http_equiv_last_modified_original_goes_to_reserve ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_http_equiv_unrelated_value_skipped ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_itemprop_modified_under_original_dropped ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_itemprop_prefers_datetime_attr_over_content ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_itemprop_published_under_not_original_dropped ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_itemprop_unparseable_content_sets_nothing ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_itemprop_unrelated_value_skipped ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_meta_http_equiv_last_modified ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_http_equiv_date_not_original_goes_to_reserve ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_meta_name_date_published ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_meta_itemprop_date_published ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_meta_pubdate_attr ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_meta_property_published ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_name_lastmod_populates_reserve_when_original ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_name_lastmod_populates_headerdate_when_not_original ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_meta_reaches_http_equiv_branch_without_attr ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_meta_with_datetime_but_no_content_runs_body ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_property_modified_with_not_original_populates_headerdate ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_property_published_with_not_original_goes_to_reserve ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_property_modified_under_original_goes_to_reserve ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_name_unknown_value_skipped ... ok
[INFO] [stdout] test htmldate::core::tests::examine_date_elements_uses_title_attribute ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_property_published_with_original_populates_headerdate ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_property_unparseable_content_sets_nothing ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_pubdate_attr_non_pubdate_value_ignored ... ok
[INFO] [stdout] test htmldate::core::tests::examine_text_scrubs_trailing_non_digits ... ok
[INFO] [stdout] test htmldate::core::tests::examine_text_rejects_too_short ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_skips_meta_without_content_or_datetime ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_class_entry_time_shortcut ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_class_updated_shortcut_when_not_original ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_elements_pubdate_shortcut ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_class_entry_date_shortcut ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_elements_uses_text_content_fallback ... ok
[INFO] [stdout] test htmldate::core::tests::examine_text_extracts_iso_date ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_no_elements_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_pubdate_non_match_uses_accumulator ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_pubdate_not_original_uses_accumulator ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_elements_uses_datetime_attribute ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_short_datetime_and_no_text_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_short_text_content_below_gate_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_shortcut_failed_parse_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_unrelated_class_falls_to_accumulator ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_default_picks_modification_date ... ok
[INFO] [stdout] test htmldate::core::tests::examine_header_og_url_populates_reserve ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_from_abbr_element ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_from_body_date_element ... ok
[INFO] [stdout] test htmldate::core::tests::examine_date_elements_over_max_candidates_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_from_canonical_url_date ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_extensive_free_text_skips_non_text_children ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_class_text_content_arm ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_short_datetime_falls_to_text_content ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_extensive_skips_too_short_and_too_long_segments ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_from_meta_article_published_time ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_from_time_element ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_from_jsonld_date_published ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_ignores_non_canonical_link_elements ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_honours_valid_custom_outputformat ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_rejects_invalid_outputformat ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_original_picks_publication_date ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_from_pure_english_text_date ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_skips_canonical_link_without_href ... ok
[INFO] [stdout] test htmldate::core::tests::itemprop_attrs_is_union ... ok
[INFO] [stdout] test htmldate::core::tests::make_date_accepts_valid_date ... ok
[INFO] [stdout] test htmldate::core::tests::make_date_rejects_day_over_thirty_one ... ok
[INFO] [stdout] test htmldate::core::tests::make_date_rejects_month_over_twelve ... ok
[INFO] [stdout] test htmldate::core::tests::make_date_rejects_zero_day ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_from_og_image_url_via_img_search ... ok
[INFO] [stdout] test htmldate::core::tests::make_date_rejects_zero_month ... ok
[INFO] [stdout] test htmldate::core::tests::normalize_match_two_digit_year_20xx ... ok
[INFO] [stdout] test htmldate::core::tests::normalize_match_ymd_four_digit_year ... ok
[INFO] [stdout] test htmldate::core::tests::normalize_match_zfills_single_digit_components ... ok
[INFO] [stdout] test htmldate::core::tests::recapture_ymd_groups_returns_none_for_non_matching_string ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_from_search_page_cascade ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_returns_none_when_not_extensive_and_no_signals ... ok
[INFO] [stdout] test htmldate::core::tests::normalize_match_two_digit_year_19xx ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_skips_link_without_rel_attribute ... ok
[INFO] [stdout] test htmldate::core::tests::examine_abbr_elements_over_max_candidates_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::examine_time_elements_over_max_candidates_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_datestrings_pattern_match ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_copyright_catchall_match ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_copyright_catchall_custom_format ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_copyright_text_only_returns_copyear ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_copyright_below_min_year_not_set_as_copyear ... ok
[INFO] [stdout] test htmldate::core::tests::find_date_returns_none_for_dateless_html ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_no_date_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_all_arms_miss_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_copyright_year_above_window_not_set ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_min_date_filter_rejects_old_year ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_mmyyyy_single_digit_month_padded ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_regex_parse_english_prose_arm ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_regex_parse_out_of_window_falls_through ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_mmyyyy_pattern_match ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_respects_custom_outputformat ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_regex_parse_at_or_after_copyear_returns_prose_date ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_select_ymd_pattern_match ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_simple_pattern_rejects_year_below_min ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_simple_pattern_rejects_w3_org_prefix ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_three_loose_pattern_match ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_simple_pattern_year_only_match ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_simple_year_above_max_dropped ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_regex_parse_below_copyear_uses_catchall ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_simple_year_below_copyear_uses_copyear_catchall ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_slashes_pattern_match ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_slashes_dot_separated_uses_second_alternative ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_simple_year_one_jan_before_min_month ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_empty_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_falls_back_when_only_one_year_captured ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_yyyymm_pattern_match ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_yyyymm_with_zero_copyear_emits_first_of_month ... ok
[INFO] [stdout] test htmldate::core::tests::search_pattern_matches_iso_date_in_text ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_yyyymm_validate_rejects_month_past_max ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_none_valid_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_three_pattern_url_form_match ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_no_years_captured_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::search_page_yyyymm_below_copyear_falls_through ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_recovery_catch_miss_on_no_year_first_pattern ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_original_picks_older ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_patterns_zero_wins_when_minority_ratio ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_one_year_out_of_window_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_over_max_returns_none ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_patterns_one_wins_on_majority_ratio ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_same_year_different_strings_takes_first ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_single_entry_short_circuits ... ok
[INFO] [stdout] test htmldate::extractors::tests::correct_year_2024_unchanged ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_finds_embedded_yyyymmdd_no_sep ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_accepts_feb_29_in_400_divisible_year ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_eight_digit_yyyymmdd ... ok
[INFO] [stdout] test htmldate::extractors::tests::correct_year_00_becomes_2000 ... ok
[INFO] [stdout] test htmldate::extractors::tests::correct_year_23_becomes_2023 ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_four_digit_prefix_shorter_than_eight_falls_to_else ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_handles_dmy_pattern_with_two_digit_year ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_some_valid_picks_validated_index ... ok
[INFO] [stdout] test htmldate::core::tests::select_candidate_tie_break_takes_first ... ok
[INFO] [stdout] test htmldate::extractors::tests::correct_year_98_becomes_1998 ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_invalid_ymd_day_falls_through_to_ym_pattern ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_finds_ymd_in_text ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_iso_date ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_out_of_range_returns_none ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_rejects_feb_29_in_non_400_century_year ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_ym_only_defaults_day_to_one ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_ym_pattern_month_year_reverse_arm ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_short_non_ascii_does_not_panic ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_uses_dateutil_fallback_for_yyyy_slash_mmdd ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_rejects_feb_29_in_non_leap_year ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_rejects_invalid_eight_digit_yyyymmdd ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_non_ascii_prefix_does_not_panic ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_ymd_pattern_out_of_range_returns_none ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_ymd_no_sep_out_of_range_falls_through ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_ym_pattern_zero_month_returns_none ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_ymd_no_sep_invalid_calendar_falls_through ... ok
[INFO] [stdout] test htmldate::extractors::tests::custom_parse_ym_pattern_out_of_range_returns_none ... ok
[INFO] [stdout] test htmldate::extractors::tests::external_date_parser_stub_returns_none ... ok
[INFO] [stdout] test htmldate::extractors::tests::extract_url_date_finds_dated_url ... ok
[INFO] [stdout] test htmldate::extractors::tests::extract_url_date_multiple_dates_picks_first ... ok
[INFO] [stdout] test htmldate::extractors::tests::extract_url_date_no_match_returns_none ... ok
[INFO] [stdout] test htmldate::extractors::tests::discard_unwanted_no_match_returns_empty ... ok
[INFO] [stdout] test htmldate::extractors::tests::idiosyncrasies_search_no_match_returns_none ... ok
[INFO] [stdout] test htmldate::extractors::tests::discard_unwanted_removes_archive_org_banner ... ok
[INFO] [stdout] test htmldate::extractors::tests::extract_url_date_none_input ... ok
[INFO] [stdout] test htmldate::extractors::tests::idiosyncrasies_search_matches_german_prefix ... ok
[INFO] [stdout] test htmldate::extractors::tests::idiosyncrasies_search_rejects_out_of_range_date ... ok
[INFO] [stdout] test htmldate::extractors::tests::img_search_returns_none_when_url_has_no_date ... ok
[INFO] [stdout] test htmldate::extractors::tests::extract_url_date_rejects_invalid_calendar_date ... ok
[INFO] [stdout] test htmldate::extractors::tests::idiosyncrasies_search_year_first_arm ... ok
[INFO] [stdout] test htmldate::extractors::tests::extract_url_date_rejects_zero_month ... ok
[INFO] [stdout] test htmldate::extractors::tests::img_search_no_match_returns_none ... ok
[INFO] [stdout] test htmldate::extractors::tests::img_search_finds_og_image_url ... ok
[INFO] [stdout] test htmldate::extractors::tests::img_search_returns_none_when_content_attr_missing ... ok
[INFO] [stdout] test htmldate::extractors::tests::json_search_skips_empty_script_body ... ok
[INFO] [stdout] test htmldate::extractors::tests::json_search_returns_none_when_no_script_tag ... ok
[INFO] [stdout] test htmldate::extractors::tests::json_search_skips_script_without_date_substring ... ok
[INFO] [stdout] test htmldate::extractors::tests::json_search_script_with_date_substring_but_no_iso_match ... ok
[INFO] [stdout] test htmldate::extractors::tests::pattern_search_rejects_out_of_range_candidate ... ok
[INFO] [stdout] test htmldate::extractors::tests::pattern_search_returns_none_when_no_match ... ok
[INFO] [stdout] test htmldate::extractors::tests::extract_url_date_out_of_range_rejected ... ok
[INFO] [stdout] test htmldate::extractors::tests::pattern_search_matches_timestamp_pattern ... ok
[INFO] [stdout] test htmldate::extractors::tests::regex_parse_abbreviated_month_form ... ok
[INFO] [stdout] test htmldate::extractors::tests::regex_parse_american_long_form ... ok
[INFO] [stdout] test htmldate::extractors::tests::regex_parse_english_long_form ... ok
[INFO] [stdout] test htmldate::extractors::tests::regex_parse_german_long_form ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_date_expr_custom_parse_miss_falls_through ... ok
[INFO] [stdout] test htmldate::extractors::tests::regex_parse_french_long_form ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_date_expr_rejects_via_discard_patterns ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_date_expr_returns_none_for_empty_input ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_date_expr_enters_extensive_gate_then_stub_returns_none ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_date_expr_returns_none_when_custom_parse_misses_and_not_extensive ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_date_expr_returns_via_custom_parse ... ok
[INFO] [stdout] test htmldate::extractors::tests::regex_parse_no_match_returns_none ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_date_expr_rejects_over_eighteen_digits ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_date_expr_rejects_under_four_digits ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_handles_negative_offset ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_handles_positive_offset ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_no_offset_sign_parses_date_only ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_offset_fails_at_first_minute_digit ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_offset_fails_at_second_hour_digit ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_offset_fails_at_second_minute_digit ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_partial_offset_not_stripped ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_rejects_bad_date_separator ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_rejects_bad_hour_minute_colon ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_rejects_bad_minute_second_colon ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_handles_space_separator ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_handles_z_suffix ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_rejects_bad_month_day_separator ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_rejects_out_of_range_hour ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_rejects_out_of_range_minute ... ok
[INFO] [stdout] test htmldate::extractors::tests::json_search_finds_date_modified ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_rejects_out_of_range_second ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_rejects_unexpected_length ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_date_expr_stub_external_returns_none ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_short_input_skips_offset_strip ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_fromisoformat_rejects_bad_separator ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_swap_values_no_swap_when_both_in_range ... ok
[INFO] [stdout] test htmldate::extractors::tests::json_search_finds_date_published ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::complete_url_matches_dated_url ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_swap_values_no_swap_when_day_too_large ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_swap_values_swaps_when_month_oversized ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::copyright_pattern_matches_symbol ... ok
[INFO] [stdout] test htmldate::extractors::tests::regex_parse_case_insensitive_month ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::complete_url_rejects_undated_url ... ok
[INFO] [stdout] test htmldate::extractors::tests::try_date_expr_returns_none_when_trim_empties_input ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::datestrings_catch_captures_components ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::datestrings_pattern_matches_compact_date ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::copyright_pattern_rejects_no_symbol ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::date_expressions_is_nonempty_string ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::json_modified_rejects_unrelated_field ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::long_text_pattern_matches_german ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::discard_patterns_drops_clock_only ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::long_text_pattern_matches_indonesian ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::discard_patterns_keeps_plain_date ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::datestrings_pattern_rejects_old_year ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::long_text_pattern_matches_italian_via_overlap ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::json_published_matches_jsonld_entry ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::long_text_pattern_matches_turkish ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::json_modified_matches_jsonld_entry ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::long_text_pattern_matches_english ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::mmyyyy_pattern_matches_month_year ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::mmyyyy_year_captures_trailing_year ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::months_table_has_twelve_entries ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::long_text_pattern_rejects_random_text ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::select_ymd_pattern_matches_dd_mm_yyyy_substring ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::simple_pattern_matches_year_in_text ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::simple_pattern_post_filter_keeps_normal_match ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::select_ymd_year_captures_trailing_year ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::simple_pattern_post_filter_rejects_w3_org_prefix ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::simple_pattern_post_filter_repeated_calls_are_consistent ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::long_text_pattern_matches_french ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::slashes_pattern_matches_two_digit_year ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::slashes_pattern_rejects_four_digit_year ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::text_date_pattern_rejects_letters_only ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::text_months_get_or_init_is_idempotent ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::mmyyyy_pattern_rejects_short_year ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::text_patterns_matches_english_prefix ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::text_patterns_matches_german_prefix ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::slashes_year_captures_trailing_two_digits ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::text_date_pattern_matches_separators ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::text_patterns_rejects_plain_paragraph ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::simple_pattern_post_filter_skips_into_multibyte_context ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::text_months_lookup_matches_months_table ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::text_patterns_matches_turkish_prefix ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::text_months_size_matches_months_total ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::three_comp_regex_a_rejects_short_year ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::three_comp_regex_b_matches_two_digit_year ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::three_loose_pattern_matches_loose_separators ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::three_loose_pattern_rejects_short_year ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::three_pattern_matches_url_fragment ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::three_comp_regex_b_rejects_text ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::timestamp_pattern_rejects_bare_date ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::three_catch_captures_components ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::three_loose_catch_captures_components ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::three_pattern_rejects_two_segments ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::three_comp_regex_a_matches_dd_mm_yyyy ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::xpath_prepends_match_python ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::year_pattern_matches_leading_year ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::year_pattern_rejects_year_in_middle ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::ym_pattern_rejects_three_components ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::two_comp_regex_matches_month_year ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::ymd_no_sep_pattern_matches_eight_digits ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::two_comp_regex_rejects_year_only ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::ymd_no_sep_pattern_rejects_short ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::timestamp_pattern_matches_iso_timestamp ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::yyyymm_pattern_matches_year_month ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::yyyymm_catch_captures_year_month ... ok
[INFO] [stdout] test htmldate::settings::tests::cache_size_matches_python ... ok
[INFO] [stdout] test htmldate::settings::tests::cleaning_list_matches_python ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::ymd_pattern_get_or_init_is_idempotent ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::simple_pattern_post_filter_safe_at_string_start ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::ymd_pattern_matches_iso_form ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::yyyymm_pattern_rejects_invalid_month ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::ymd_pattern_rejects_plain_year ... ok
[INFO] [stdout] test htmldate::settings::tests::max_file_size_matches_python ... ok
[INFO] [stdout] test htmldate::utils::tests::clean_html_removes_cleaning_list_tags ... ok
[INFO] [stdout] test htmldate::utils::tests::extractor_default_matches_documented_rust_defaults ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::ym_pattern_matches_year_month ... ok
[INFO] [stdout] test htmldate::regex_catalogues::tests::ymd_year_matches_leading_year ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_falls_back_when_isoformat_rejects ... ok
[INFO] [stdout] test htmldate::settings::tests::max_possible_candidates_matches_python ... ok
[INFO] [stdout] test htmldate::settings::tests::min_date_matches_python ... ok
[INFO] [stdout] test htmldate::utils::tests::extractor_new_assigns_fields_like_python_init ... ok
[INFO] [stdout] test htmldate::utils::tests::trim_text_collapses_interior_whitespace_runs ... ok
[INFO] [stdout] test htmldate::utils::tests::trim_text_strips_leading_and_trailing_whitespace ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_parses_full_iso_datetime ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_parses_iso_with_space_separator ... ok
[INFO] [stdout] test htmldate::utils::tests::trim_text_handles_empty_and_whitespace_only_inputs ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_rejects_invalid_calendar_in_long_form ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_rejects_bad_year_month_separator ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_rejects_iso_with_wrong_separator ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_rejects_bad_month_day_separator ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_rejects_out_of_range_hour ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_rejects_bad_time_separator ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_rejects_out_of_range_minute ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_parses_iso_with_time_component ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_rejects_bad_minute_second_colon ... ok
[INFO] [stdout] test htmldate::validators::tests::check_extracted_reference_rejects_out_of_window_timestamp ... ok
[INFO] [stdout] test htmldate::validators::tests::compare_values_original_with_zero_reference_takes_timestamp ... ok
[INFO] [stdout] test htmldate::validators::tests::compare_values_returns_i64_not_tuple ... ok
[INFO] [stdout] test htmldate::validators::tests::compare_values_returns_reference_on_parse_failure ... ok
[INFO] [stdout] test htmldate::validators::tests::convert_date_errors_when_iso_fast_path_rejects_input ... ok
[INFO] [stdout] test htmldate::validators::tests::convert_date_identity_short_circuits ... ok
[INFO] [stdout] test htmldate::validators::tests::compare_values_original_true_prefers_earlier ... ok
[INFO] [stdout] test htmldate::validators::tests::check_extracted_reference_returns_some_for_in_range_timestamp ... ok
[INFO] [stdout] test htmldate::validators::tests::convert_date_translates_formats ... ok
[INFO] [stdout] test htmldate::validators::tests::convert_date_returns_err_on_unparseable_input ... ok
[INFO] [stdout] test htmldate::validators::tests::convert_date_translates_iso_input_to_european_output ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_rejects_out_of_range_second ... ok
[INFO] [stdout] test htmldate::validators::tests::convert_date_translates_non_iso_input_to_iso_output ... ok
[INFO] [stdout] test htmldate::validators::tests::check_date_input_returns_default_for_none ... ok
[INFO] [stdout] test htmldate::validators::tests::filter_ymd_candidate_copyear_zero_short_circuits_year_check ... ok
[INFO] [stdout] test htmldate::validators::tests::check_extracted_reference_returns_none_for_non_positive_reference ... ok
[INFO] [stdout] test htmldate::validators::tests::check_extracted_reference_returns_none_on_format_emit_failure ... ok
[INFO] [stdout] test htmldate::validators::tests::compare_values_original_false_prefers_later ... ok
[INFO] [stdout] test htmldate::validators::tests::filter_ymd_candidate_rejects_out_of_range_date ... ok
[INFO] [stdout] test htmldate::validators::tests::filter_ymd_candidate_returns_none_for_no_match ... ok
[INFO] [stdout] test htmldate::validators::tests::filter_ymd_candidate_rejects_year_below_copyear ... ok
[INFO] [stdout] test htmldate::validators::tests::format_emit_writes_t_directive_as_hms ... ok
[INFO] [stdout] test htmldate::validators::tests::format_emit_rejects_trailing_percent_in_format ... ok
[INFO] [stdout] test htmldate::validators::tests::format_parse_accepts_t_directive_for_time ... ok
[INFO] [stdout] test htmldate::validators::tests::filter_ymd_candidate_returns_converted_date_for_valid_input ... ok
[INFO] [stdout] test htmldate::validators::tests::filter_ymd_candidate_keeps_year_at_or_above_copyear ... ok
[INFO] [stdout] test htmldate::validators::tests::format_parse_accepts_literal_percent_escape ... ok
[INFO] [stdout] test htmldate::validators::tests::format_emit_rejects_unknown_directive ... ok
[INFO] [stdout] test htmldate::validators::tests::format_parse_rejects_short_day_field ... ok
[INFO] [stdout] test htmldate::validators::tests::format_parse_rejects_t_directive_with_bad_separator ... ok
[INFO] [stdout] test htmldate::validators::tests::format_parse_rejects_format_without_year_directive ... ok
[INFO] [stdout] test htmldate::validators::tests::format_parse_rejects_invalid_calendar_day ... ok
[INFO] [stdout] test htmldate::validators::tests::format_parse_rejects_non_digit_in_numeric_field ... ok
[INFO] [stdout] test htmldate::validators::tests::format_parse_rejects_unknown_directive ... ok
[INFO] [stdout] test htmldate::validators::tests::get_max_date_defaults_to_far_future_sentinel ... ok
[INFO] [stdout] test htmldate::validators::tests::get_max_date_passes_through_explicit_datetime ... ok
[INFO] [stdout] test htmldate::validators::tests::get_max_date_with_uses_injected_now ... ok
[INFO] [stdout] test htmldate::validators::tests::get_min_date_defaults_to_settings_min_date ... ok
[INFO] [stdout] test htmldate::validators::tests::get_min_date_falls_back_to_min_date_on_invalid_string ... ok
[INFO] [stdout] test htmldate::validators::tests::get_min_date_parses_iso_string ... ok
[INFO] [stdout] test htmldate::validators::tests::get_min_date_passes_through_explicit_datetime ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_accepts_boundary_dates ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_accepts_datetime_input_directly ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_accepts_feb_29_in_400_divisible_year ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_accepts_in_range_iso ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_accepts_non_iso_format_via_strptime ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_calendar_invalid_iso_date ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_date_after_latest ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_date_before_earliest ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_feb_29_in_century_non_leap_year ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_feb_29_in_non_leap_year ... ok
[INFO] [stdout] test htmldate::validators::tests::format_parse_rejects_literal_mismatch ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_feb_thirty ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_malformed_string ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_month_thirteen ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_non_digit_year_in_iso_fast_path ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_none_input ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_same_year_but_earlier_month_than_earliest ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_same_year_but_later_month_than_latest ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_too_short_iso_string ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_format_accepts_european_format ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_format_accepts_format_with_time ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_format_accepts_iso_format ... ok
[INFO] [stdout] test htmldate::validators::tests::format_parse_rejects_trailing_input_after_format_consumed ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_format_rejects_empty_string ... ok
[INFO] [stdout] test htmldate::validators::tests::format_parse_rejects_trailing_percent_in_format ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_format_longer_than_input ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_format_rejects_format_without_percent ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_format_rejects_trailing_percent ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_format_rejects_unknown_directive ... ok
[INFO] [stdout] test htmldate::validators::tests::is_valid_date_rejects_literal_mismatch_in_custom_format ... ok
[INFO] [stdout] test htmldate::validators::tests::plausible_year_filter_drops_unparsable_year_group_when_incomplete_false ... ok
[INFO] [stdout] test htmldate::validators::tests::get_max_date_parses_iso_string ... ok
[INFO] [stdout] test htmldate::validators::tests::get_max_date_with_falls_back_to_now_on_bad_string ... ok
[INFO] [stdout] test htmldate::validators::tests::plausible_year_filter_incomplete_century_20xx_arm ... ok
[INFO] [stdout] test htmldate::validators::tests::plausible_year_filter_handles_pattern_without_explicit_groups ... ok
[INFO] [stdout] test htmldate::validators::tests::plausible_year_filter_century_completion_on_incomplete ... ok
[INFO] [stdout] test htmldate::validators::tests::validate_and_convert_handles_str_input_iso ... ok
[INFO] [stdout] test htmldate::validators::tests::validate_and_convert_handles_str_input_non_iso ... ok
[INFO] [stdout] test htmldate::validators::tests::validate_and_convert_returns_none_for_none_input ... ok
[INFO] [stdout] test htmldate::validators::tests::validate_and_convert_returns_none_on_invalid_input ... ok
[INFO] [stdout] test htmldate::validators::tests::validate_and_convert_returns_some_on_valid_input ... ok
[INFO] [stdout] test htmldate::validators::tests::timestamp_negative_year_is_monotonic ... ok
[INFO] [stdout] test htmldate::validators::tests::plausible_year_filter_falls_back_to_group_zero_when_group1_empty ... ok
[INFO] [stdout] test htmldate::validators::tests::plausible_year_filter_drops_items_when_year_group_missing ... ok
[INFO] [stdout] test readability::clean::tests::aba_data_table_flag_survives_clean_conditionally_churn ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_ad_words_inner_text_removes ... ok
[INFO] [stdout] test htmldate::validators::tests::plausible_year_filter_century_guesser_uses_first_digit_of_captured_group ... ok
[INFO] [stdout] test htmldate::validators::tests::plausible_year_filter_drops_items_without_year_match ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_gallery_exception_false_when_no_images ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_bad_p_to_img_ratio ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_balanced_p_to_img_ratio_keeps_div ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_gallery_exception_aborts_on_multi_child_li ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_figure_child_bypasses_p_to_img_ratio ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_keeps_descendants_inside_data_table_ancestor ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_keeps_marked_data_table ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_keeps_node_with_data_table_descendant ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_loading_words_inner_text_removes ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_image_gallery_ul_is_kept ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_low_weight_linky ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_high_weight_mostly_links ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_list_density_treats_div_as_list ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_li_gt_p_outside_list ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_many_commas_keeps_div ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_no_op_when_flag_off ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_keeps_inside_code_ancestor ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_negative_weight_removes_before_comma_gate ... ok
[INFO] [stdout] test htmldate::validators::tests::plausible_year_filter_drops_years_outside_window ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_suspiciously_short ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_suspiciously_short_with_more_than_two_images ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_removes_low_weight_div_no_keep ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_multiple_embeds_removes ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_too_many_inputs_per_p ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_no_useful_content ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_single_embed_long_content_keeps ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_not_suspiciously_short_when_content_over_25 ... ok
[INFO] [stdout] test readability::clean::tests::clean_headers_no_op_when_weight_flag_off ... ok
[INFO] [stdout] test readability::clean::tests::clean_styles_removes_width_height_on_table_th_td ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_video_embed_attribute_keeps_node ... ok
[INFO] [stdout] test readability::clean::tests::clean_styles_returns_on_non_element_node ... ok
[INFO] [stdout] test readability::clean::tests::clean_styles_strips_presentational_attrs ... ok
[INFO] [stdout] test readability::clean::tests::has_ancestor_tag_default_max_depth_3 ... ok
[INFO] [stdout] test readability::clean::tests::has_ancestor_tag_filter_fn ... ok
[INFO] [stdout] test readability::clean::tests::remove_br_before_p_keeps_when_no_p_follows ... ok
[INFO] [stdout] test readability::clean::tests::clean_matched_nodes_removes_matching_descendants ... ok
[INFO] [stdout] test htmldate::validators::tests::plausible_year_filter_returns_in_range_years ... ok
[INFO] [stdout] test readability::clean::tests::clean_styles_skips_svg_subtree ... ok
[INFO] [stdout] test readability::clean::tests::remove_br_before_p_removes_when_p_follows ... ok
[INFO] [stdout] test readability::clean::tests::has_ancestor_tag_minus_one_is_unbounded ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_unmarked_table_falls_through_keep ... ok
[INFO] [stdout] test readability::clean::tests::replace_h1_with_h2_retags_all ... ok
[INFO] [stdout] test readability::clean::tests::share_strip_does_not_visit_top_level_e_itself_faithful ... ok
[INFO] [stdout] test readability::clean::tests::clean_headers_removes_negative_weight_h1_h2 ... ok
[INFO] [stdout] test readability::clean::tests::single_cell_table_does_not_unwrap_multi_row ... ok
[INFO] [stdout] test readability::clean::tests::single_cell_table_not_unwrapped_with_two_cells_in_row ... ok
[INFO] [stdout] test readability::clean::tests::single_cell_table_unwrap_handles_tbody ... ok
[INFO] [stdout] test readability::clean::tests::single_cell_table_unwraps_to_div_when_block_inside_cell ... ok
[INFO] [stdout] test readability::clean::tests::single_cell_table_unwraps_to_p_when_phrasing ... ok
[INFO] [stdout] test readability::clean::tests::text_density_ratio ... ok
[INFO] [stdout] test readability::dom::tests::append_child_moves_node_and_sets_parent ... ok
[INFO] [stdout] test readability::dom::tests::attribute_get_set_remove_roundtrip ... ok
[INFO] [stdout] test readability::dom::tests::body_and_root_element_resolve_on_full_document ... ok
[INFO] [stdout] test readability::dom::tests::children_is_element_only_child_nodes_is_all ... ok
[INFO] [stdout] test readability::dom::tests::clear_attributes_noop_on_text_node ... ok
[INFO] [stdout] test readability::dom::tests::content_score_set_get_default_none ... ok
[INFO] [stdout] test readability::dom::tests::clear_attributes_empties_attr_list ... ok
[INFO] [stdout] test readability::dom::tests::create_element_is_parentless_html_element ... ok
[INFO] [stdout] test readability::dom::tests::data_table_flag_set_get_clear ... ok
[INFO] [stdout] test readability::dom::tests::deep_clone_copies_attributes_and_text_and_descendant_tail ... ok
[INFO] [stdout] test readability::dom::tests::deep_clone_independence_from_source ... ok
[INFO] [stdout] test readability::dom::tests::deep_clone_recurses_into_nested_subtree ... ok
[INFO] [stdout] test readability::dom::tests::deep_clone_returns_detached_root ... ok
[INFO] [stdout] test readability::dom::tests::delete_with_tail_preserve_no_tail_just_removes ... ok
[INFO] [stdout] test readability::dom::tests::delete_with_tail_preserve_tail_multiple_consecutive_text_nodes ... ok
[INFO] [stdout] test readability::dom::tests::delete_with_tail_preserve_tail_no_prev_sibling_promotes_to_parent_text ... ok
[INFO] [stdout] test readability::dom::tests::delete_with_tail_preserve_tail_with_prev_element_inserts_text ... ok
[INFO] [stdout] test readability::dom::tests::delete_with_tail_preserve_tail_with_prev_text_appends ... ok
[INFO] [stdout] test readability::dom::tests::distinct_nodes_have_distinct_side_table_identity ... ok
[INFO] [stdout] test readability::dom::tests::document_order_triplets_mixed_text_comment_element_children ... ok
[INFO] [stdout] test readability::clean::tests::single_cell_table_not_unwrapped_with_thead_and_tbody ... ok
[INFO] [stdout] test readability::clean::tests::text_density_zero_text_returns_zero ... ok
[INFO] [stdout] test readability::dom::tests::document_order_triplets_nested_elements_preorder ... ok
[INFO] [stdout] test readability::dom::tests::document_order_triplets_root_with_text_and_tail ... ok
[INFO] [stdout] test readability::dom::tests::first_element_child_skips_leading_text_and_comment ... ok
[INFO] [stdout] test readability::dom::tests::document_order_triplets_single_root_no_children ... ok
[INFO] [stdout] test readability::dom::tests::get_elements_by_tag_name_document_order_descendants_only ... ok
[INFO] [stdout] test readability::dom::tests::get_all_nodes_with_tag_multi_tag_document_order ... ok
[INFO] [stdout] test readability::clean::tests::clean_conditionally_single_embed_short_content ... ok
[INFO] [stdout] test readability::dom::tests::get_elements_by_tag_name_star_matches_all_elements ... ok
[INFO] [stdout] test readability::dom::tests::delete_with_tail_preserve_detached_is_noop ... ok
[INFO] [stdout] test readability::dom::tests::class_and_id_default_empty_string ... ok
[INFO] [stdout] test readability::dom::tests::inner_text_empty_when_all_whitespace ... ok
[INFO] [stdout] test readability::dom::tests::get_next_node_traverses_depth_first_like_js ... ok
[INFO] [stdout] test readability::dom::tests::inner_text_js_space_includes_feff_and_nbsp_runs ... ok
[INFO] [stdout] test readability::dom::tests::get_next_node_ignore_self_and_kids_skips_subtree ... ok
[INFO] [stdout] test readability::dom::tests::inner_text_lone_nbsp_single_run_preserved_verbatim ... ok
[INFO] [stdout] test readability::dom::tests::insert_with_tail_no_tail_child_moves_plainly ... ok
[INFO] [stdout] test readability::dom::tests::next_element_sibling_skips_intervening_text ... ok
[INFO] [stdout] test readability::dom::tests::parent_of_document_is_none ... ok
[INFO] [stdout] test readability::dom::tests::inner_text_trims_and_collapses_runs ... ok
[INFO] [stdout] test readability::dom::tests::parse_strips_comment_tail_into_element_text ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_a_no_op_on_clean_html ... ok
[INFO] [stdout] test readability::dom::tests::inner_text_normalize_false_only_trims ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_b_strips_closing_br ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_c_strips_closing_br_case_insensitive ... ok
[INFO] [stdout] test readability::dom::tests::insert_with_tail_carries_tail_to_indexed_position ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_d_strips_closing_br_with_whitespace ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_e_rewrites_xmp_open_to_div ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_f_rewrites_xmp_case_insensitive ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_g_rewrites_stray_td_outside_table ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_h_leaves_td_inside_table_alone ... ok
[INFO] [stdout] test readability::dom::tests::parse_strips_comment_promotes_tail_to_sibling ... ok
[INFO] [stdout] test readability::dom::tests::parse_strips_html_comments ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_i_handles_nested_tables ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_j_preserves_attributes_on_cell_rewrite ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_o_saturating_table_depth ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_p_bare_trailing_lt_does_not_panic ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_q_br_close_without_closing_angle ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_r_other_lt_falls_through_when_triggers_present ... ok
[INFO] [stdout] test readability::dom::tests::inner_text_single_space_run_untouched ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_m_handles_multiple_shapes_together ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_l_rewrites_all_cell_tag_types ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_n_empty_input ... ok
[INFO] [stdout] test readability::clean::tests::share_strip_keeps_long_share_text ... ok
[INFO] [stdout] test readability::clean::tests::share_strip_removes_nested_short_share_widgets ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_stray_tbody_only_triggers_cell_rewrite ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_s_stray_td_then_table_with_cells ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_k_does_not_match_prefix_tags ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_t_close_cell_outside_table_rewritten ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_stray_th_only_triggers_cell_rewrite ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_u_close_cell_inside_table_preserved ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_v_no_lt_at_all_is_borrowed ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_w_form_feed_after_tag_name_accepted_as_boundary ... ok
[INFO] [stdout] test readability::dom::tests::remove_detaches_subtree ... ok
[INFO] [stdout] test readability::dom::tests::reparent_with_tail_carries_tail_to_destination ... ok
[INFO] [stdout] test readability::dom::tests::reparent_with_tail_no_tail_is_plain_move ... ok
[INFO] [stdout] test readability::dom::tests::replace_child_noop_when_old_not_a_child ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_stray_tfoot_only_triggers_cell_rewrite ... ok
[INFO] [stdout] test readability::dom::tests::preprocess_stray_tr_only_triggers_cell_rewrite ... ok
[INFO] [stdout] test readability::dom::tests::serialize_converted_tree_nested_with_mixed_content ... ok
[INFO] [stdout] test readability::dom::tests::serialize_converted_tree_omits_comments ... ok
[INFO] [stdout] test readability::dom::tests::replace_child_preserves_position ... ok
[INFO] [stdout] test readability::dom::tests::replace_element_tag_detached_builds_replacement_without_splice ... ok
[INFO] [stdout] test readability::dom::tests::serialize_converted_tree_text_escapes_lt_gt_amp ... ok
[INFO] [stdout] test readability::dom::tests::replace_element_tag_keeps_attributes_and_children ... ok
[INFO] [stdout] test readability::dom::tests::replace_element_tag_preserves_position_in_parent ... ok
[INFO] [stdout] test readability::dom::tests::serialize_converted_tree_attrs_in_source_order_with_escape ... ok
[INFO] [stdout] test readability::dom::tests::set_and_remove_attribute_noop_on_text_node ... ok
[INFO] [stdout] test readability::dom::tests::serialize_converted_tree_simple_element_long_form_empty ... ok
[INFO] [stdout] test readability::dom::tests::set_node_tag_no_score_entry_is_fine ... ok
[INFO] [stdout] test readability::dom::tests::set_node_tag_creates_new_element_moves_children_in_order ... ok
[INFO] [stdout] test readability::dom::tests::set_element_text_negative_arms ... ok
[INFO] [stdout] test readability::dom::tests::set_node_tag_transfers_score_and_data_table_flag ... ok
[INFO] [stdout] test readability::dom::tests::set_node_tag_detached_node_no_parent_splice ... ok
[INFO] [stdout] test readability::dom::tests::set_node_tag_clones_all_attributes ... ok
[INFO] [stdout] test readability::dom::tests::strip_element_detached_is_noop ... ok
[INFO] [stdout] test readability::dom::tests::tag_matches_rejects_prefix_collision ... ok
[INFO] [stdout] test readability::dom::tests::snapshot_is_true_snapshot_post_mutation_stable ... ok
[INFO] [stdout] test readability::dom::tests::tag_name_is_uppercase_local_name_is_lowercase ... ok
[INFO] [stdout] test readability::dom::tests::side_tables_are_point_query_only_by_construction ... ok
[INFO] [stdout] test readability::dom::tests::tail_concatenates_multiple_consecutive_text_siblings ... ok
[INFO] [stdout] test readability::dom::tests::tail_next_sibling_is_element_then_text_is_none ... ok
[INFO] [stdout] test readability::dom::tests::tail_empty_text_node_is_preserved_as_some_empty ... ok
[INFO] [stdout] test readability::dom::tests::tail_next_sibling_is_comment_then_text_promotes ... ok
[INFO] [stdout] test readability::dom::tests::set_tail_detached_and_empty_arms ... ok
[INFO] [stdout] test readability::dom::tests::text_content_cdata_in_html_is_bogus_comment_ignored ... ok
[INFO] [stdout] test readability::dom::tests::text_content_comment_node_ignored ... ok
[INFO] [stdout] test readability::dom::tests::text_content_entities_decoded_in_text_data ... ok
[INFO] [stdout] test readability::dom::tests::tail_no_next_sibling_is_none ... ok
[INFO] [stdout] test readability::dom::tests::text_content_empty_inline_element_contributes_nothing ... ok
[INFO] [stdout] test readability::dom::tests::tail_no_parent_at_all_is_none ... ok
[INFO] [stdout] test readability::dom::tests::text_content_adjacent_text_runs_concatenated_verbatim ... ok
[INFO] [stdout] test readability::dom::tests::tail_next_sibling_is_text_returns_its_data ... ok
[INFO] [stdout] test readability::dom::tests::text_content_implied_tbody_table_no_separator ... ok
[INFO] [stdout] test readability::dom::tests::text_content_misnested_block_in_p_no_separator ... ok
[INFO] [stdout] test readability::dom::tests::text_content_nested_tables_no_separator ... ok
[INFO] [stdout] test readability::dom::tests::text_content_no_separator_between_elements ... ok
[INFO] [stdout] test readability::dom::tests::text_content_of_comment_node_is_empty ... ok
[INFO] [stdout] test readability::dom::tests::text_content_of_text_node_itself_is_its_data ... ok
[INFO] [stdout] test readability::dom::tests::strip_element_empty_element_removed_no_children_moved ... ok
[INFO] [stdout] test readability::dom::tests::text_content_whitespace_preserved_not_normalized ... ok
[INFO] [stdout] test readability::dom::tests::strip_element_unwraps_children_into_parent_slot ... ok
[INFO] [stdout] test readability::dom::tests::text_content_nested_elements_no_separator ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_byline_itemprop_name_descendant_is_captured ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_byline_detect_short_circuits_when_metadata_byline_present ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_aria_modal_dialog_node_is_removed ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_article_dir_picks_up_ancestor_dir_attribute ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_byline_without_itemprop_name_falls_back_to_node_text ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_article_dir_empty_dir_attribute_is_skipped ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_aria_modal_alone_without_role_dialog_is_kept ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_byline_node_is_removed_and_captured ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_empty_body_uses_fake_div_fallback ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_alternative_candidates_unify_to_shared_ancestor ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_example_com_h1_duplicating_title_is_removed_faithful ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_div_phrasing_wrap_closes_paragraph_on_block_child ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_div_with_single_p_low_link_density_unwraps_to_p ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_div_leading_whitespace_does_not_create_paragraph ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_div_without_block_children_becomes_scored_p ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_node_with_non_unlikely_role_is_kept ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_header_duplicating_title_is_removed_from_body ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_hidden_display_none_subtree_is_removed ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_only_child_climb_breaks_on_multi_child_parent ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_strips_unlikely_candidate_by_class ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_body_with_unlikely_class_is_not_stripped ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_sibling_short_p_with_link_not_appended_clause_b ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_simple_article_selects_content_div ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_sibling_threshold_computed_arm_exceeds_floor ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_unlikely_class_inside_code_is_kept ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_short_article_triggers_retry_returns_longest ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_empty_div_section_header_are_removed ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_unlikely_class_inside_table_is_kept ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_unlikely_role_kept_when_strip_flag_cleared ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_unlikely_class_on_anchor_is_kept ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_sibling_same_empty_class_gets_no_content_bonus ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_unlikely_class_with_article_candidate_class_is_kept ... ok
[INFO] [stdout] test readability::grab_article::tests::retry_all_attempts_zero_chars_returns_none ... ok
[INFO] [stdout] test readability::grab_article::tests::has_ancestor_tag_direct_branches ... ok
[INFO] [stdout] test readability::grab_article::tests::retry_flag_sieve_clears_strip_then_weight_then_clean_in_order ... ok
[INFO] [stdout] test readability::grab_article::tests::page_wrap_fallback_arm_after_prep_article_removes_fake_div_faithful ... ok
[INFO] [stdout] test readability::grab_article::tests::retry_longest_attempt_fallback_picks_max_inner_text_len ... ok
[INFO] [stdout] test readability::grab_article::tests::page_wrap_prep_article_order_invariant ... ok
[INFO] [stdout] test readability::grab_article::tests::retry_longest_attempt_stable_sort_ties_keep_first ... ok
[INFO] [stdout] test readability::grab_article::tests::retry_none_attempt_short_circuits_no_push_no_sieve ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_unlikely_role_menu_node_is_stripped ... ok
[INFO] [stdout] test readability::grab_article::tests::page_wrap_non_fallback_arm_structure_and_text_invariant ... ok
[INFO] [stdout] test readability::grab_article::tests::sibling_append_link_dense_long_p_excluded ... ok
[INFO] [stdout] test readability::grab_article::tests::retry_text_ge_charthreshold_single_pass_no_retry ... ok
[INFO] [stdout] test readability::grab_article::tests::retry_nodekey_aba_attempt_doms_are_independent ... ok
[INFO] [stdout] test readability::grab_article::tests::grab_walk_up_tolerates_unscored_ancestors_after_unification ... ok
[INFO] [stdout] test readability::grab_article::tests::retry_reparse_attempts_are_isolated_no_state_bleed ... ok
[INFO] [stdout] test readability::grab_article::tests::sibling_append_index_walk_visits_every_sibling_once_in_order ... ok
[INFO] [stdout] test readability::grab_article::tests::sibling_append_nodekey_aba_setnodetag_transfer_holds ... ok
[INFO] [stdout] test readability::grab_article::tests::sibling_append_threshold_floor_and_content_bonus ... ok
[INFO] [stdout] test readability::grab_article::tests::sibling_append_preamble_content_trailing_all_included ... ok
[INFO] [stdout] test readability::helpers::tests::flags_default_all_set_and_remove_clears_one ... ok
[INFO] [stdout] test readability::helpers::tests::get_next_node_dfs_and_ignore_kids ... ok
[INFO] [stdout] test readability::helpers::tests::has_child_block_element_recursive ... ok
[INFO] [stdout] test readability::grab_article::tests::retry_charthreshold_500_constant_matches_readability_js ... ok
[INFO] [stdout] test readability::grab_article::tests::sibling_append_short_p_clause_b_period_rule ... ok
[INFO] [stdout] test readability::helpers::tests::is_phrasing_content_comment_node_is_not_phrasing ... ok
[INFO] [stdout] test readability::helpers::tests::inline_style_prop_skips_non_matching_declaration ... ok
[INFO] [stdout] test readability::helpers::tests::is_phrasing_content_ins_with_phrasing_kids_is_phrasing ... ok
[INFO] [stdout] test readability::helpers::tests::has_single_tag_inside_element_cases ... ok
[INFO] [stdout] test readability::helpers::tests::is_element_without_content_cases ... ok
[INFO] [stdout] test readability::helpers::tests::is_phrasing_content_del_with_phrasing_kids_is_phrasing ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_aria_hidden_empty_string_is_visible ... ok
[INFO] [stdout] test readability::helpers::tests::is_element_without_content_text_node_is_false ... ok
[INFO] [stdout] test readability::helpers::tests::is_phrasing_content_cases ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_display_none_important_case_insensitive ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_aria_hidden_true_with_fallback_image_is_visible ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_display_none_hidden ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_hidden_attr ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_other_property_with_important_does_not_match_display ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_plain_div_is_visible ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_visibility_hidden ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_display_none_important_extra_ws ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_visibility_hidden_important_is_hidden_cssom_faithful ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_display_none_important_is_hidden_cssom_faithful ... ok
[INFO] [stdout] test readability::helpers::tests::is_whitespace_non_br_element_is_not_whitespace ... ok
[INFO] [stdout] test readability::helpers::tests::is_whitespace_nonempty_text_is_not ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_aria_hidden_false_is_visible ... ok
[INFO] [stdout] test readability::helpers::tests::is_probably_visible_aria_hidden_true_is_hidden ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::caption_with_children_is_data ... ok
[INFO] [stdout] test readability::helpers::tests::is_whitespace_text_and_br ... ok
[INFO] [stdout] test readability::helpers::tests::strip_css_important_unit_cases ... ok
[INFO] [stdout] test readability::helpers::tests::next_node_skips_whitespace_text_only ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::caption_empty_is_not_data_via_caption_branch ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::data_y_descendant_th_is_data ... ok
[INFO] [stdout] test readability::helpers::tests::next_sibling_all_node_types ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::data_y_descendant_colgroup_is_data ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::nested_table_outer_is_layout_inner_is_data_or_not ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::data_y_descendant_thead_is_data ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::edgar_style_thead_table_marked_data_table ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::datatable_zero_is_layout ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::role_presentation_is_layout ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::five_cols_is_data ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::rowcol_colspan_widens_row ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::rowcol_rowspan_zero_string_is_one ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::four_cols_below_threshold_uses_final_size_check ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::rowcol_rowspan_2_adds_2_to_rows ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::rowcol_rowspan_garbage_is_one ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::rowcol_simple_2x3 ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::rowcol_rowspan_leading_whitespace ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::single_col_is_layout ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::summary_empty_is_not_data_via_summary_branch ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::rowcol_empty_table ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::single_row_is_layout ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::small_table_below_size_threshold_is_layout ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::summary_present_is_data ... ok
[INFO] [stdout] test readability::mark_data_tables::tests::ten_rows_is_data ... ok
[INFO] [stdout] test readability::helpers::tests::is_valid_byline_cases ... ok
[INFO] [stdout] test readability::grab_article::tests::sibling_append_setnodetag_to_div_and_alter_exception ... ok
[INFO] [stdout] test readability::metadata::tests::article_title_long_pipe_separator_keeps_shortened ... ok
[INFO] [stdout] test readability::metadata::tests::article_title_colon_long_prefix_keeps_full_title ... ok
[INFO] [stdout] test readability::metadata::tests::article_title_colon_space_no_heading_match_takes_after_last_colon ... ok
[INFO] [stdout] test readability::metadata::tests::article_title_pipe_separator_drops_last_part ... ok
[INFO] [stdout] test readability::metadata::tests::article_title_colon_after_last_short_falls_back_to_first_colon ... ok
[INFO] [stdout] test readability::metadata::tests::article_title_short_title_single_h1_used ... ok
[INFO] [stdout] test readability::metadata::tests::article_title_very_long_no_separator_multiple_h1_keeps_long_title ... ok
[INFO] [stdout] test readability::metadata::tests::byte_substring_swaps_when_start_exceeds_end ... ok
[INFO] [stdout] test readability::metadata::tests::canonical_url_picks_link_rel_canonical_href ... ok
[INFO] [stdout] test readability::metadata::tests::canonical_url_none_when_no_link ... ok
[INFO] [stdout] test readability::metadata::tests::canonical_url_returns_href_for_rel_canonical ... ok
[INFO] [stdout] test readability::metadata::tests::article_title_hier_separator_keeps_shortened_when_word_count_minus_one_matches ... ok
[INFO] [stdout] test readability::metadata::tests::canonical_url_skips_non_canonical_rel ... ok
[INFO] [stdout] test readability::metadata::tests::article_title_colon_with_matching_heading_uses_full ... ok
[INFO] [stdout] test readability::metadata::tests::article_title_separator_word_count_lt3_uses_lead_separator_replace ... ok
[INFO] [stdout] test readability::metadata::tests::article_title_plain_no_separator ... ok
[INFO] [stdout] test readability::metadata::tests::article_title_separator_short_first_part_strips_leading_segment ... ok
[INFO] [stdout] test readability::metadata::tests::canonical_url_none_when_absent_or_empty ... ok
[INFO] [stdout] test readability::metadata::tests::document_title_strips_and_collapses_ascii_ws ... ok
[INFO] [stdout] test readability::metadata::tests::is_url_like_recognises_schemes ... ok
[INFO] [stdout] test readability::metadata::tests::html_lang_returns_html_element_lang_attr ... ok
[INFO] [stdout] test readability::metadata::tests::is_url_like_rejects_invalid_scheme_char ... ok
[INFO] [stdout] test readability::metadata::tests::is_url_like_rejects_no_colon ... ok
[INFO] [stdout] test readability::metadata::tests::collect_meta_values_ignores_unmatched_name ... ok
[INFO] [stdout] test readability::metadata::tests::json_ld_article_type_matches_middle_substring ... ok
[INFO] [stdout] test readability::metadata::tests::is_url_like_rejects_leading_colon ... ok
[INFO] [stdout] test readability::metadata::tests::is_url_like_rejects_non_alpha_scheme_start ... ok
[INFO] [stdout] test readability::metadata::tests::json_ld_article_type_rejects_non_article ... ok
[INFO] [stdout] test readability::metadata::tests::html_lang_none_when_attr_absent ... ok
[INFO] [stdout] test readability::metadata::tests::json_ld_article_type_matches_api_reference_suffix ... ok
[INFO] [stdout] test readability::metadata::tests::collect_meta_values_name_author_populates_byline ... ok
[INFO] [stdout] test readability::metadata::tests::json_ld_title_prefers_headline_when_only_headline_similar ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_array_root_finds_article_inside ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_array_entry_with_non_string_type_skipped ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_author_empty_array_yields_no_byline ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_array_with_no_article_entry_falls_through ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_author_object_with_name_string ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_at_graph_resolution_finds_article_in_graph ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_author_object_no_name_field_yields_no_byline ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_at_graph_no_article_skips_to_next_script ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_array_find_first_then_context_fail_continues ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_author_array_first_has_no_name_yields_no_byline ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_context_object_no_vocab_rejected ... ok
[INFO] [stdout] test readability::metadata::tests::collect_meta_values_ignores_unmatched_property ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_description_populates_excerpt ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_empty_or_no_script_returns_empty ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_context_object_with_at_vocab_schema_org ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_date_published_populates_slot ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_malformed_json_swallowed_does_not_block_subsequent ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_graph_no_article_and_no_next_script_returns_empty ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_name_and_headline_differ_similarity_picks_one ... ok
[INFO] [stdout] test readability::metadata::tests::get_article_metadata_skips_whitespace_only_og_title ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_no_scripts_returns_default ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_graph_as_non_array_with_no_at_type_skipped ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_authors_array_joined_with_comma ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_missing_context_rejected ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_context_as_number_rejected ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_skips_script_with_no_type_attribute ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_publisher_without_name_yields_no_site_name ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_non_article_top_type_rejected ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_picks_first_article_object ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_title_from_headline_only ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_context_object_vocab_non_string_rejected ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_non_schema_org_context_skipped ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_context_object_vocab_non_schema_org_rejected ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_skips_script_with_wrong_type ... ok
[INFO] [stdout] test readability::metadata::tests::metadata_full_byline_article_author_url_is_rejected ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_title_missing_when_neither_name_nor_headline ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_title_when_name_equals_headline_uses_name_arm ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_strips_cdata_markers ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_top_type_as_array_rejected ... ok
[INFO] [stdout] test readability::metadata::tests::metadata_full_byline_dc_creator_precedence ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_title_diff_neither_matches_falls_back_to_name ... ok
[INFO] [stdout] test readability::metadata::tests::metadata_title_falls_back_to_get_article_title ... ok
[INFO] [stdout] test readability::metadata::tests::jsonld_title_from_name_only ... ok
[INFO] [stdout] test readability::metadata::tests::metadata_full_unescapes_html_entities_on_strings ... ok
[INFO] [stdout] test readability::metadata::tests::metadata_full_excerpt_precedence_og_description_beats_description ... ok
[INFO] [stdout] test readability::metadata::tests::metadata_title_ignores_empty_content_meta ... ok
[INFO] [stdout] test readability::metadata::tests::metadata_title_prefers_og_title_meta ... ok
[INFO] [stdout] test readability::metadata::tests::metadata_title_name_twitter_title ... ok
[INFO] [stdout] test readability::metadata::tests::metadata_title_skips_whitespace_only_meta_value ... ok
[INFO] [stdout] test readability::metadata::tests::schema_dot_org_matches_https_with_trailing_slash ... ok
[INFO] [stdout] test readability::metadata::tests::schema_dot_org_matches_http_variant ... ok
[INFO] [stdout] test readability::metadata::tests::schema_dot_org_rejects_other_host ... ok
[INFO] [stdout] test readability::metadata::tests::metadata_full_collects_og_byline_excerpt_site_name_published_time ... ok
[INFO] [stdout] test readability::metadata::tests::metadata_full_default_path_returns_only_title_when_no_meta ... ok
[INFO] [stdout] test readability::metadata::tests::metadata_full_jsonld_byline_beats_meta ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_empty_input_unchanged ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_named_entities ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_lone_ampersand_left_alone ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_numeric_entity_empty_digit_run_left_alone ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_preserves_utf8_multibyte ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_too_short_numeric_entity_left_alone ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_uppercase_hex_entity_decoded ... ok
[INFO] [stdout] test readability::metadata::tests::word_count_matches_js_split_semantics ... ok
[INFO] [stdout] test readability::parse_int::tests::parse_int_js_conformance_table ... ok
[INFO] [stdout] test readability::parse_int::tests::row_or_col_span_or_one_conformance ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_four_byte_codepoint_entity ... ok
[INFO] [stdout] test readability::parse_int::tests::rowspan_nan_string_treated_as_one ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_hex_entity_decoded ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_invalid_codepoints_replaced_by_fffd ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_numeric_entity_runs_to_end_without_semicolon ... ok
[INFO] [stdout] test readability::prep::tests::clean_embed_with_non_video_attribute_is_removed ... ok
[INFO] [stdout] test readability::prep::tests::clean_footer_is_removed_unconditionally ... ok
[INFO] [stdout] test readability::prep::tests::clean_object_with_video_url_in_text_is_kept ... ok
[INFO] [stdout] test readability::parse_int::tests::rowspan_zero_string_treated_as_one ... ok
[INFO] [stdout] test readability::prep::tests::clean_iframe_non_object_skips_object_text_check ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_numeric_decimal_and_hex ... ok
[INFO] [stdout] test readability::metadata::tests::unescape_numeric_entity_without_semicolon_left_alone ... ok
[INFO] [stdout] test readability::prep::tests::clean_removes_tag_and_keeps_video_embed ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_b64_svg_carve_out ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_b64_kept_when_payload_large_enough ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_b64_kept_when_no_other_image_attr ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_data_src_with_srcset_shape_value_goes_to_srcset ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_empty_figure_with_srcset_creates_img_with_srcset ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_data_defer_src_promotes_to_src ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_data_flickity_lazyload_promotes_to_src ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_alt_attr_is_skipped ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_empty_figure_creates_img_score_affecting_branch ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_b64_tiny_placeholder_src_removed ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_data_original_attr_promotes_to_src ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_empty_src_string_does_not_short_circuit ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_figure_with_inner_img_does_not_add_another ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_src_attr_is_skipped_in_iteration ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_srcset_attr_is_skipped_in_iteration ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_srcset_null_string_treated_as_absent ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_lazy_class_bypasses_short_circuit ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_non_image_attr_value_ignored ... ok
[INFO] [stdout] test readability::prep::tests::is_single_image_recursive_descent ... ok
[INFO] [stdout] test readability::prep::tests::post_process_content_runs_simplify_nested_elements ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_has_image_and_not_lazy_short_circuits ... ok
[INFO] [stdout] test readability::prep::tests::prep_document_strips_style_and_retags_font ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_img_with_data_src_promotes_to_src ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_picture_data_srcset_promotes_to_srcset ... ok
[INFO] [stdout] test readability::prep::tests::prep_article_clean_set_removes_aside_link_object ... ok
[INFO] [stdout] test readability::prep::tests::prep_article_full_empty_p_removal_keeps_text_and_img_paragraphs ... ok
[INFO] [stdout] test readability::prep::tests::prep_document_with_no_body_still_strips_styles ... ok
[INFO] [stdout] test readability::prep::tests::prep_article_removes_empty_p_keeps_content_and_img_p ... ok
[INFO] [stdout] test readability::prep::tests::remove_scripts_drops_script_and_noscript ... ok
[INFO] [stdout] test readability::prep::tests::replace_brs_double_br_becomes_p ... ok
[INFO] [stdout] test readability::prep::tests::replace_brs_single_br_untouched ... ok
[INFO] [stdout] test readability::prep::tests::replace_brs_move_loop_stops_on_br_chain_and_block ... ok
[INFO] [stdout] test readability::prep::tests::replace_brs_trims_trailing_whitespace_child_of_new_p ... ok
[INFO] [stdout] test readability::prep::tests::replace_brs_parent_p_retagged_to_div ... ok
[INFO] [stdout] test readability::prep::tests::replace_brs_two_separate_br_chains ... ok
[INFO] [stdout] test readability::prep::tests::simplify_nested_elements_preserves_text_content_invariant ... ok
[INFO] [stdout] test readability::prep::tests::simplify_nested_elements_skips_root_with_no_parent ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_copies_attribute_with_data_old_prefix_when_collision ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_copies_attr_with_image_extension_value ... ok
[INFO] [stdout] test readability::prep::tests::simplify_nested_elements_skips_readability_prefix_id ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_clean_conditionally_img_count_pin ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_empty_noscript_skipped ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_does_not_copy_non_source_attributes ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_keeps_img_by_value_regex_only ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_keeps_img_with_data_srcset ... ok
[INFO] [stdout] test readability::prep::tests::simplify_nested_elements_unwraps_single_section_child ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_keeps_img_with_data_src ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_keeps_img_with_srcset ... ok
[INFO] [stdout] test readability::prep::tests::simplify_nested_elements_unwraps_single_div_child ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_keeps_img_with_image_extension_value ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_no_prev_sibling_skips_unwrap ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_keeps_img_with_src ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_removes_img_with_non_image_attrs ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_removes_img_without_attrs ... ok
[INFO] [stdout] test readability::prep::tests::simplify_nested_elements_removes_empty_div_and_section ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_prev_with_img_descendant ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_unwraps_prev_img_when_placeholder_survives_pass1 ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_unwraps_prev_img_with_noscript_img ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_skips_when_same_value_already_present ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_skips_empty_attribute_values_during_copy ... ok
[INFO] [stdout] test readability::scoring::tests::char_count_commas ... ok
[INFO] [stdout] test readability::scoring::tests::class_weight_zero_when_flag_off ... ok
[INFO] [stdout] test readability::prep::tests::fix_lazy_images_text_content_invariant_on_pure_attribute_branches ... ok
[INFO] [stdout] test readability::scoring::tests::initialize_node_base_scores_plus_class_weight ... ok
[INFO] [stdout] test readability::scoring::tests::link_density_no_href_uses_coefficient_1 ... ok
[INFO] [stdout] test readability::scoring::tests::class_weight_positive_negative_class_and_id ... ok
[INFO] [stdout] test readability::scoring::tests::node_ancestors_bounded_and_unbounded ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_skips_when_prev_not_single_image ... ok
[INFO] [stdout] test readability::prep::tests::unwrap_noscript_images_skips_noscript_without_single_image ... ok
[INFO] [stdout] test readability::scoring::tests::text_similarity_empty_side_is_zero ... ok
[INFO] [stdout] test readability::scoring::tests::text_similarity_header_dup_threshold_case ... ok
[INFO] [stdout] test readability::scoring::tests::link_density_half_text_in_link ... ok
[INFO] [stdout] test readability::scoring::tests::link_density_hash_href_coefficient_0_3 ... ok
[INFO] [stdout] test readability::scoring::tests::link_density_zero_text_is_zero ... ok
[INFO] [stdout] test readability::scoring::tests::text_similarity_completely_different ... ok
[INFO] [stdout] test readability::scoring::tests::text_similarity_identical_is_one ... ok
[INFO] [stdout] test readability::scoring::tests::text_similarity_partial_overlap_exact_ratio ... ok
[INFO] [stdout] test readability::tests::parse_empty_document_returns_none_faithful_stage1c_retry_exhaustion ... ok
[INFO] [stdout] test readability::tests::parse_first_paragraph_excerpt_skips_whitespace_only_paragraph ... ok
[INFO] [stdout] test tests::content_too_short_display_carries_numbers ... ok
[INFO] [stdout] test tests::content_too_short_display_contains_words_and_threshold_labels ... ok
[INFO] [stdout] test readability::tests::parse_metadata_excerpt_wins_over_first_paragraph_fallback ... ok
[INFO] [stdout] test readability::tests::parse_include_html_populates_content_html_serializer ... ok
[INFO] [stdout] test readability::tests::parse_example_com_real_snapshot_shape_faithful ... ok
[INFO] [stdout] test tests::extract_error_debug_renders_variant_names ... ok
[INFO] [stdout] test tests::extract_error_implements_std_error_trait_for_both_variants ... ok
[INFO] [stdout] test readability::tests::parse_scripts_and_styles_removed_from_body_text ... ok
[INFO] [stdout] test tests::extract_empty_extraction_is_ok_not_error_bug_e2 ... ok
[INFO] [stdout] test tests::extract_handles_empty_html ... ok
[INFO] [stdout] test readability::tests::parse_first_paragraph_excerpt_fallback_when_no_metadata_excerpt ... ok
[INFO] [stdout] test tests::extract_default_options_returns_ok_on_empty_extraction ... ok
[INFO] [stdout] test tests::extract_populates_language_from_html_lang ... ok
[INFO] [stdout] test readability::regexps::tests::regexps_conformance_table ... ok
[INFO] [stdout] test tests::extract_doesnt_panic_on_malformed_html ... ok
[INFO] [stdout] test tests::extract_returns_ok_with_body_text_at_stage1a ... ok
[INFO] [stdout] test tests::extract_returns_ok_for_simple_article ... ok
[INFO] [stdout] test tests::extract_to_csv_default_options_returns_ok_on_empty_extraction ... ok
[INFO] [stdout] test tests::extract_invariant_default_options_match_no_options ... ok
[INFO] [stdout] test tests::extract_to_csv_empty_body_produces_valid_row ... ok
[INFO] [stdout] test tests::extract_is_extract_with_default_options ... ok
[INFO] [stdout] test tests::extract_to_csv_header_column_order_matches_python ... ok
[INFO] [stdout] test tests::extract_to_csv_quotes_fields_containing_delimiter_or_newline ... ok
[INFO] [stdout] test tests::extract_to_csv_positive_threshold_satisfied_returns_ok ... ok
[INFO] [stdout] test tests::extract_to_csv_respects_min_word_count ... ok
[INFO] [stdout] test tests::extract_to_csv_threshold_one_on_empty_returns_content_too_short ... ok
[INFO] [stdout] test tests::extract_falls_back_to_readability_on_short_own_extraction ... ok
[INFO] [stdout] test tests::extract_to_csv_renders_null_for_empty_fields ... ok
[INFO] [stdout] test tests::extract_to_json_default_options_returns_ok_on_empty_extraction ... ok
[INFO] [stdout] test tests::extract_to_csv_threshold_above_yield_rejects ... ok
[INFO] [stdout] test tests::extract_to_json_empty_body_returns_empty_text ... ok
[INFO] [stdout] test tests::extract_to_json_positive_threshold_satisfied_returns_ok ... ok
[INFO] [stdout] test tests::extract_to_csv_with_metadata_populates_metadata_columns ... ok
[INFO] [stdout] test tests::extract_to_csv_emits_header_plus_one_row ... ok
[INFO] [stdout] test tests::extract_to_json_is_always_parseable ... ok
[INFO] [stdout] test tests::extract_to_csv_is_tab_delimited_by_default ... ok
[INFO] [stdout] test tests::extract_to_json_threshold_above_yield_rejects ... ok
[INFO] [stdout] test tests::extract_populates_metadata_fields_from_og_tags ... ok
[INFO] [stdout] test tests::extract_to_markdown_default_options_returns_ok_on_empty_extraction ... ok
[INFO] [stdout] test tests::extract_to_markdown_nfc_normalises_output ... ok
[INFO] [stdout] test tests::extract_to_markdown_options_default_with_metadata_is_false ... ok
[INFO] [stdout] test tests::extract_to_json_threshold_one_on_empty_returns_content_too_short ... ok
[INFO] [stdout] test tests::extract_to_markdown_renders_bold_and_italic ... ok
[INFO] [stdout] test tests::extract_to_markdown_empty_body_returns_empty_string ... ok
[INFO] [stdout] test tests::extract_to_markdown_options_struct_update_syntax_works ... ok
[INFO] [stdout] test tests::extract_to_markdown_renders_code_blocks ... ok
[INFO] [stdout] test tests::extract_to_markdown_renders_heading_levels ... ok
[INFO] [stdout] test tests::extract_to_json_with_metadata_has_python_spec_key_set ... ok
[INFO] [stdout] test tests::extract_to_markdown_positive_threshold_satisfied_returns_ok ... ok
[INFO] [stdout] test tests::extract_to_markdown_renders_table ... ok
[INFO] [stdout] test tests::extract_to_markdown_renders_bullet_list ... ok
[INFO] [stdout] test tests::extract_to_markdown_renders_links_as_markdown ... ok
[INFO] [stdout] test tests::extract_to_markdown_respects_min_word_count ... ok
[INFO] [stdout] test tests::extract_to_markdown_renders_quoted_text ... ok
[INFO] [stdout] test tests::extract_to_json_without_metadata_only_text_and_comments ... ok
[INFO] [stdout] test tests::extract_to_markdown_threshold_one_on_empty_returns_content_too_short ... ok
[INFO] [stdout] test tests::extract_to_markdown_returns_formatted_body ... ok
[INFO] [stdout] test tests::extract_to_json_with_metadata_returns_valid_json ... ok
[INFO] [stdout] test tests::extract_to_markdown_threshold_above_yield_rejects ... ok
[INFO] [stdout] test tests::extract_to_markdown_without_metadata_emits_no_header ... ok
[INFO] [stdout] test tests::extract_to_markdown_with_metadata_emits_yaml_header ... ok
[INFO] [stdout] test tests::extract_to_tei_creation_block_has_download_date ... ok
[INFO] [stdout] test tests::extract_to_markdown_with_metadata_renders_categories_and_tags ... ok
[INFO] [stdout] test tests::extract_to_tei_default_options_returns_ok_on_empty_extraction ... ok
[INFO] [stdout] test tests::extract_to_tei_basic_article_yields_tei_root ... ok
[INFO] [stdout] test tests::extract_to_tei_always_extracts_metadata_for_header ... ok
[INFO] [stdout] test tests::extract_to_tei_declares_namespace_on_root ... ok
[INFO] [stdout] test tests::extract_to_tei_empty_body_produces_minimal_tei ... ok
[INFO] [stdout] test tests::extract_to_tei_emits_comments_div_when_no_comments ... ok
[INFO] [stdout] test tests::extract_to_tei_notesstmt_has_fingerprint_note ... ok
[INFO] [stdout] test tests::extract_to_tei_publicationstmt_includes_empty_p_when_no_license ... ok
[INFO] [stdout] test tests::extract_to_tei_positive_threshold_satisfied_returns_ok ... ok
[INFO] [stdout] test tests::extract_to_tei_encodingdesc_has_application_block ... ok
[INFO] [stdout] test tests::extract_to_tei_respects_min_word_count ... ok
[INFO] [stdout] test tests::extract_to_tei_output_is_parseable_by_html5_parser ... ok
[INFO] [stdout] test tests::extract_to_tei_threshold_above_yield_rejects ... ok
[INFO] [stdout] test tests::extract_to_tei_structure_has_header_and_text ... ok
[INFO] [stdout] test tests::extract_to_tei_threshold_one_on_empty_returns_content_too_short ... ok
[INFO] [stdout] test tests::extract_to_tei_strips_non_whitelisted_descendant_tags ... ok
[INFO] [stdout] test readability::regexps::tests::js_space_class_membership_matches_dom_is_js_space_set ... ok
[INFO] [stdout] test tests::extract_to_tei_output_is_nfc ... ok
[INFO] [stdout] test tests::extract_to_txt_default_options_returns_ok_on_empty_extraction ... ok
[INFO] [stdout] test tests::extract_to_txt_positive_threshold_satisfied_returns_ok ... ok
[INFO] [stdout] test tests::extract_to_xml_default_options_returns_ok_on_empty_extraction ... ok
[INFO] [stdout] test tests::extract_to_txt_returns_body_text_for_substantive_article ... ok
[INFO] [stdout] test tests::extract_to_tei_with_metadata_populates_full_header ... ok
[INFO] [stdout] test tests::extract_to_tei_url_renders_as_ptr_in_biblfull ... ok
[INFO] [stdout] test tests::extract_to_txt_threshold_one_on_empty_returns_content_too_short ... ok
[INFO] [stdout] test tests::extract_to_xml_indents_two_spaces_per_level ... ok
[INFO] [stdout] test tests::extract_to_xml_output_is_parseable_html_subset ... ok
[INFO] [stdout] test tests::extract_to_xml_empty_body_produces_minimal_doc ... ok
[INFO] [stdout] test tests::extract_to_xml_respects_min_word_count ... ok
[INFO] [stdout] test tests::extract_to_xml_threshold_above_yield_rejects ... ok
[INFO] [stdout] test tests::extract_to_xml_basic_article_yields_doc_main ... ok
[INFO] [stdout] test tests::extract_to_xml_threshold_one_on_empty_returns_content_too_short ... ok
[INFO] [stdout] test tests::extract_to_txt_threshold_above_yield_rejects ... ok
[INFO] [stdout] test tests::extract_to_xml_output_is_nfc ... ok
[INFO] [stdout] test tests::extract_to_xml_escapes_special_chars_in_body ... ok
[INFO] [stdout] test tests::extract_to_xml_positive_threshold_satisfied_returns_ok ... ok
[INFO] [stdout] test tests::extract_to_xml_with_metadata_populates_doc_attrs ... ok
[INFO] [stdout] test tests::extract_to_txt_with_metadata_emits_yaml_header ... ok
[INFO] [stdout] test tests::extract_via_readability_default_options_returns_ok_on_empty_extraction ... ok
[INFO] [stdout] test tests::extract_uses_jsonld_when_og_absent ... ok
[INFO] [stdout] test tests::extract_to_xml_strips_non_whitelisted_attrs ... ok
[INFO] [stdout] test tests::extract_to_xml_without_metadata_has_bare_doc_root ... ok
[INFO] [stdout] test tests::extract_via_readability_empty_title_maps_to_none ... ok
[INFO] [stdout] test tests::extract_via_readability_threshold_one_on_empty_returns_content_too_short ... ok
[INFO] [stdout] test tests::extract_via_readability_substantive_article_populates_text_and_title ... ok
[INFO] [stdout] test tests::extract_with_positive_threshold_satisfied_returns_ok ... ok
[INFO] [stdout] test tests::extract_via_readability_threshold_above_yield_rejects ... ok
[INFO] [stdout] test tests::extract_via_readability_include_html_populates_html_field ... ok
[INFO] [stdout] test tests::extract_via_readability_remains_available_for_m2_callers ... ok
[INFO] [stdout] test tests::extracted_constructs_with_all_fields ... ok
[INFO] [stdout] test tests::extracted_default_covers_new_fields ... ok
[INFO] [stdout] test tests::extract_via_readability_positive_threshold_satisfied_returns_ok ... ok
[INFO] [stdout] test tests::extract_with_threshold_above_yield_rejects ... ok
[INFO] [stdout] test tests::extracted_optional_fields_can_be_none_and_text_empty_is_valid ... ok
[INFO] [stdout] test tests::extract_with_returns_ok_at_stage1a ... ok
[INFO] [stdout] test tests::extracted_partial_struct_literal_compiles ... ok
[INFO] [stdout] test tests::extracted_image_from_og_image_meta ... ok
[INFO] [stdout] test tests::extracted_license_from_rel_license_link ... ok
[INFO] [stdout] test tests::extracted_pagetype_from_og_type_meta ... ok
[INFO] [stdout] test tests::extracted_categories_from_article_section_meta ... ok
[INFO] [stdout] test tests::extracted_new_fields_default_when_no_metadata ... ok
[INFO] [stdout] test tests::extracted_tags_from_article_tag_meta ... ok
[INFO] [stdout] test tests::metadata_canonical_populates_extracted_canonical_url_field ... ok
[INFO] [stdout] test tests::extracted_hostname_from_canonical_link ... ok
[INFO] [stdout] test tests::min_word_count_fires_content_too_short_when_text_under_threshold ... ok
[INFO] [stdout] test tests::metadata_lang_populates_extracted_language_field ... ok
[INFO] [stdout] test tests::not_implemented_display_is_sensible ... ok
[INFO] [stdout] test tests::options_default_field_values ... ok
[INFO] [stdout] test tests::options_is_clone_and_debug ... ok
[INFO] [stdout] test trafilatura::baseline::tests::article_path_short_article_does_not_register ... ok
[INFO] [stdout] test trafilatura::baseline::tests::article_path_two_articles_concatenate_temp_text ... ok
[INFO] [stdout] test trafilatura::baseline::tests::article_tag_path ... ok
[INFO] [stdout] test trafilatura::baseline::tests::baseline_empty_articlebody_string_still_adds_p ... ok
[INFO] [stdout] test trafilatura::baseline::tests::baseline_path4_resets_postbody_then_writes_one_p ... ok
[INFO] [stdout] test trafilatura::baseline::tests::baseline_postbody_is_owned_not_aliased_with_input_tree ... ok
[INFO] [stdout] test trafilatura::baseline::tests::baseline_returns_empty_on_only_whitespace_input ... ok
[INFO] [stdout] test trafilatura::baseline::tests::baseline_post_body_is_detached_body_element ... ok
[INFO] [stdout] test trafilatura::baseline::tests::basic_cleaning_drops_footer_id_div ... ok
[INFO] [stdout] test trafilatura::baseline::tests::body_fallback_path ... ok
[INFO] [stdout] test trafilatura::baseline::tests::basic_cleaning_drops_footer_aside_script_style ... ok
[INFO] [stdout] test trafilatura::baseline::tests::do_not_shortcircuit_basic_cleaning ... ok
[INFO] [stdout] test trafilatura::baseline::tests::html2txt_clean_false_preserves_script_text ... ok
[INFO] [stdout] test trafilatura::baseline::tests::html2txt_clean_true_strips_script ... ok
[INFO] [stdout] test trafilatura::baseline::tests::empty_input_yields_empty_baseline_output ... ok
[INFO] [stdout] test trafilatura::baseline::tests::html2txt_collapses_whitespace ... ok
[INFO] [stdout] test trafilatura::baseline::tests::html2txt_direct_empty_input_is_empty_string ... ok
[INFO] [stdout] test trafilatura::baseline::tests::html2txt_fallback_when_body_missing ... ok
[INFO] [stdout] test trafilatura::baseline::tests::iter_elements_by_tags_walks_document_order ... ok
[INFO] [stdout] test trafilatura::baseline::tests::itertext_text_tail_interleaving ... ok
[INFO] [stdout] test tests::extracted_existing_fields_unchanged_with_new_fields_present ... ok
[INFO] [stdout] test trafilatura::baseline::tests::itertext_nested_text_tail_interleaving ... ok
[INFO] [stdout] test trafilatura::baseline::tests::jsonld_articlebody_non_string_value_is_ignored ... ok
[INFO] [stdout] test trafilatura::baseline::tests::jsonld_array_root_swallowed ... ok
[INFO] [stdout] test trafilatura::baseline::tests::jsonld_articlebody_html_path ... ok
[INFO] [stdout] test trafilatura::baseline::tests::jsonld_empty_script_is_skipped ... ok
[INFO] [stdout] test trafilatura::baseline::tests::jsonld_missing_articlebody_key_falls_through ... ok
[INFO] [stdout] test trafilatura::baseline::tests::jsonld_script_without_articlebody_substring_is_skipped ... ok
[INFO] [stdout] test trafilatura::baseline::tests::jsonld_invalid_json_falls_through ... ok
[INFO] [stdout] test trafilatura::baseline::tests::jsonld_two_scripts_concatenate_temp_text ... ok
[INFO] [stdout] test trafilatura::baseline::tests::jsonld_articlebody_string_path ... ok
[INFO] [stdout] test trafilatura::baseline::tests::path4_body_only_whitespace_yields_empty_joined ... ok
[INFO] [stdout] test trafilatura::baseline::tests::path4_postbody_is_fresh_after_path3_partial_population ... ok
[INFO] [stdout] test trafilatura::baseline::tests::tag_set_dedup_hit_skips_duplicate_entry ... ok
[INFO] [stdout] test tests::min_word_count_passes_when_text_meets_threshold ... ok
[INFO] [stdout] test trafilatura::baseline::tests::trim_helper_matches_python_semantics ... ok
[INFO] [stdout] test trafilatura::baseline::tests::tag_set_path_dedupes ... ok
[INFO] [stdout] test trafilatura::baseline::tests::xpath_engine_handles_basic_clean_xpath ... ok
[INFO] [stdout] test trafilatura::baseline::tests::jsonld_short_articlebody_adds_p_then_falls_through_to_path2_return ... ok
[INFO] [stdout] test trafilatura::baseline::tests::xpath_engine_handles_jsonld_script_selector ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::cleaning_then_convert_serializes_to_xml_for_gate ... ok
[INFO] [stdout] test tests::min_word_count_does_not_fire_when_threshold_zero ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_link_renames_a_to_ref_and_resolves_relative_href ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_link_empty_href_sets_no_target ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_link_without_href_sets_no_target ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_link_without_base_url_uses_href_verbatim ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_quotes_pre_single_non_span_child_becomes_quote ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_blockquote_and_q_become_quote ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_default_strips_b_i_em_strong ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_br_hr_become_lb ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_del_s_strike_become_del_overstrike ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_details_becomes_div_summary_becomes_head ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_dl_dt_dd_become_list_items_with_pair_numbering ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_em_becomes_hi_rend_hash_i ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::cleaning_then_convert_produces_tei_like_tree ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::collect_link_info_lengths_and_shortelems ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_formatting_false_strips_nested_b_inside_i ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_link_passes_absolute_href_through_unchanged ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_formatting_true_clears_attributes_before_setting_rend ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_formatting_false_strips_u_tt_sub_sup_wrappers ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_formatting_true_rewrites_b_to_hi ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_formatting_true_rewrites_i_to_hi_italic ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_formatting_true_rewrites_kbd_samp_var_to_hi_t ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_formatting_true_rewrites_strong_to_hi_bold ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_formatting_true_rewrites_sub_sup_to_hi_with_distinct_rend ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_formatting_true_rewrites_tt_to_hi_teletype ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_h1_through_h6_become_head_rend_h_n ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_links_false_anchor_in_li_becomes_ref ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_links_false_anchor_in_p_becomes_ref ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_links_false_anchor_in_table_becomes_ref_when_tables_true ... ok
[INFO] [stdout] test tests::metadata_byline_populates_extracted_byline_field ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_ol_li_become_list_item_with_rend_ol ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_formatting_true_rewrites_u_to_hi_underline ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_images_true_renames_img_to_graphic ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_links_false_anchors_in_div_become_ref_others_stripped ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_links_true_no_url_keeps_relative_href_verbatim ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_plain_pre_becomes_quote ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::delete_by_link_density_removes_listed_elem_by_link_density_test_true ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::delete_by_link_density_includes_root_when_tag_matches ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::handle_textnode_filters_facebook_text ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::handle_textnode_lb_becomes_p_when_comments_fix_and_tail_only ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_links_true_resolves_relative_anchors_against_options_url ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::handle_textnode_lb_bypass_preserves_tail ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::handle_textnode_finish_dedup_drops_repeated_text ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::handle_textnode_moves_tail_to_text_when_text_absent ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::handle_textnode_lb_bypass_preserve_spaces_true_keeps_tail_untrimmed ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_pre_with_hljs_span_becomes_code_attrs_cleared ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_pre_with_single_span_becomes_code ... ok
[INFO] [stdout] test tests::include_html_false_is_byte_identical_to_default_path ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::link_density_test_no_refs_returns_false ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::link_density_test_all_empty_refs_returns_true ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::handle_textnode_returns_none_for_done_tag ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::handle_textnode_returns_none_for_empty_element ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::handle_textnode_trims_text_and_tail ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::has_ancestor_matching_table_ancestor_excluded_when_tables_false ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::link_density_test_non_p_no_next_sibling_limitlen_300 ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::link_density_test_tables_large_table_uses_50_percent_threshold ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::link_density_test_p_with_next_sibling_limitlen_30 ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::link_density_test_single_link_favor_precision_threshold_10 ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::link_density_test_single_link_not_dominant_falls_through ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::link_density_test_tables_threshold_200_chars ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::options_dedup_stub_returns_false_until_field_added ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::convert_tags_ul_ol_become_list_li_become_item ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::process_node_returns_none_for_done_tag ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::process_node_returns_none_for_empty_element ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::process_node_filters_via_textfilter ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::process_node_dedup_drops_repeated_text ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::process_node_lb_does_not_swap_tail ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::link_density_test_tables_link_dominated_returns_true ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::process_node_swaps_tail_to_text_when_text_absent ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::prune_html_keeps_nonempty_carriers ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::prune_unwanted_nodes_preserves_tail_on_removed_subtree ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::link_density_test_single_long_link_returns_true ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::prune_html_drops_empty_p_and_div ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::prune_unwanted_nodes_with_backup_true_keeps_tree_when_text_survives ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::sanitize_tree_links_true_skips_anchor_strip ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::sanitize_tree_duplicate_bad_tag_collected_once ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::prune_html_precision_focus_uses_no_tail_branch ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::prune_html_skips_tags_not_in_cut_empty_elems ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::prune_unwanted_nodes_removes_matched_subtree ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::sanitize_tree_strips_class_attributes_on_non_tei_wrappers ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::sanitize_tree_th_becomes_cell_with_role_head ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_applet ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_dialog ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_embed ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_form_subtree ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_button ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_frame_and_frameset ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_iframe ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_fieldset_legend ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_canvas_audio_video_picture_svg ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_input_and_textarea_standalone ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::prune_unwanted_nodes_with_backup_true_restores_when_threshold_trips ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_menu ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_object ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_noscript_and_noindex ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_select_options ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::sanitize_tree_preserves_substantive_content ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_drops_script_style_nav_footer ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_figure_with_descendant_table_becomes_div ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_images_false_default_removes_picture_and_img ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::sanitize_tree_removes_empty_paragraphs ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_nested_same_tag_detach_path ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_images_true_preserves_picture_wrapper_and_img ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_strips_meta_img_font ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_tables_false_drops_table_subtree ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::collect_itertext_joined_skips_empty_text_nodes ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::content_fingerprint_empty_content_handled ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_strips_tbody_thead_tfoot_keeps_rows ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::duplicate_test_default_max_repetitions_trips_on_fourth ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::duplicate_test_min_size_is_strict_greater_than ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::duplicate_test_node_trims_and_dispatches ... ok
[INFO] [stdout] test trafilatura::cleaning::tests::tree_cleaning_strips_abbr_cite_mark_small_address_dfn_wrappers ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::duplicate_test_records_short_text_too ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::content_fingerprint_same_content_same_value ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::content_fingerprint_hex_format ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::duplicate_test_returns_true_for_repeated_text ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::duplicate_test_node_empty_subtree_skips_gate ... ok
[INFO] [stdout] test tests::include_html_populates_html_field_when_true ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::content_fingerprint_corpus_snapshot_deterministic ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::duplicate_test_skips_short_text ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::is_similar_domain_different_brands_are_dissimilar ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::is_similar_domain_empty_string_handling ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::is_similar_domain_tld_swap_is_similar_per_python ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::is_similar_domain_www_prefix_is_still_similar ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::lru_cache_basic_contains_put ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::lru_cache_capacity_zero_is_inert ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::duplicate_test_node_walks_nested_elements ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::lru_cache_contains_absent_key_returns_false_without_touch ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::lru_cache_eviction_exactly_at_threshold_n ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::lru_cache_len_reflects_eviction ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::lru_cache_eviction_fills_then_evicts_in_fifo_order ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::lru_cache_clear_drops_everything ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::lru_cache_put_increments_existing_key ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::lru_test_singleton_is_shared_across_callers ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::sample_tokens_falls_through_to_smallest_threshold ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::lru_cache_touch_promotes_to_mru ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::lru_cache_touch_absent_key_is_noop ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::sample_tokens_returns_early_at_threshold_match ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::sample_tokens_strips_punctuation_and_filters_short ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::simhash_all_whitespace_input_collapses_to_empty_token_set ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::simhash_different_texts_high_hamming_distance ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::simhash_empty_string_handled_gracefully ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::sample_tokens_strips_to_empty_token_rejected ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::lru_cache_evicts_oldest_when_full ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::is_similar_domain_identical_inputs ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::sequence_ratio_empty_empty_returns_one ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::sequence_ratio_matches_python_difflib_on_known_cases ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::simhash_is_deterministic ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::simhash_nfc_invariant_for_ascii_input ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::simhash_with_length_clamps_to_64 ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::simhash_similarity_ratio_in_unit_interval ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::strip_extension_rejects_suffix_with_forward_slash ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::strip_extension_rejects_suffix_with_hash ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::strip_extension_strips_one_tld_only ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::strip_extension_rejects_suffix_with_question_mark ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_copyright_paragraph_marked_bad ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_ampersand_copy_literal_marked_bad ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_dom_path_with_select_marked_bad ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_heading_with_few_stopwords_marked_short_not_bad ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::simhash_similar_texts_low_hamming_distance ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_length_at_high_boundary_marked_neargood ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::simhash_similarity_against_self_is_unity ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_link_heavy_paragraph_marked_bad ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_no_headings_flag_clears_heading_bit ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::is_similar_domain_threshold_parameter ... ok
[INFO] [stdout] test trafilatura::deduplication::tests::simhash_new_produces_64_bit_value ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_short_with_link_chars_marked_bad ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_long_substantive_paragraph_marked_good ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_low_stopword_density_marked_bad ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_stamps_stopwords_count_cache ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::is_blank_free_helper_true_for_empty_and_whitespace ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_no_headings_false_sets_heading_bit ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::is_boilerplate_set_correctly_after_classify_and_revise ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_medium_stopword_density_marked_neargood ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_empty_text_marked_short_no_panic ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::classify_short_paragraph_marked_short ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::end_to_end_make_paragraphs_classify_revise_on_article ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::is_heading_path_single_non_digit_after_h_is_not_heading ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_marks_headings ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_simple_article ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::justext_rescue_builds_body_with_p_elements ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_br_br_starts_new_paragraph ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_skips_blank_text_nodes ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_breaks_on_block_level ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_skips_comment_child_no_sax_event ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_handles_nested_inline_tags ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_skips_paragraphs_with_zero_text ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_link_only_paragraph_full_link_density ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::paragraph_link_density_zero_for_empty_text ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_lone_br_injects_space ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_h10_in_path_not_heading ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_demotes_short_between_bad_paragraphs ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_demotes_short_mixed_bad_good_to_bad ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::paragraph_stage_5c_placeholders_are_none ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_heading_short_not_promoted_when_good_outside_distance ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_lurking_neargood_two_positions_away ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_tracks_link_chars ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::paragraph_word_count_counts_whitespace_separated_tokens ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::paragraph_is_blank_false_for_substantive ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::paragraph_is_blank_for_empty_text ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::paragraph_link_density_half_link_around_half ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_non_heading_short_not_promoted_in_phase1 ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_phase1_distance_accumulator_advances_past_bad ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_phase1_copies_cf_class_to_class_type ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_phase3_neargood_between_bads_becomes_bad ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_phase3_neargood_between_goods_becomes_good ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_phase1_heading_already_good_skips_rescue ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_phase4_no_good_in_range_keeps_bad ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_promotes_heading_before_good_content ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_phase4_skips_originally_bad_headings ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_short_promoted_when_lurking_neargood_to_left ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_short_promoted_when_lurking_neargood_to_right ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_promotes_short_between_good_paragraphs ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_short_alone_demoted_to_bad_off_both_boundaries ... ok
[INFO] [stdout] test trafilatura::justext_stoplists::tests::get_stoplist_french_has_known_words ... ok
[INFO] [stdout] test trafilatura::justext_stoplists::tests::get_stoplist_unknown_language_returns_empty ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::try_justext_none_language_falls_back_to_english ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::try_justext_returns_only_good_paragraphs ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_empty_body_iterates_without_crash ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::revise_phase4_rescues_heading_demoted_by_phase2 ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::make_paragraphs_skips_script_style ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_default_options_strip_span_path_runs ... ok
[INFO] [stdout] test trafilatura::justext_stoplists::tests::get_stoplist_english_returns_nonempty ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_exits_loop_when_multiple_children_found ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_images_false_default_skips_graphic_potential_tag ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_finds_article_paragraphs ... ok
[INFO] [stdout] test trafilatura::justext_core::tests::try_justext_handles_unknown_language_with_fallback ... ok
[INFO] [stdout] test trafilatura::justext_stoplists::tests::get_stoplists_returns_all_languages ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_forces_div_into_potential_when_ptest_empty ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_links_false_default_skips_ref_potential_tag ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_only_lb_descendants_triggers_subtree_fallback ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_precision_focus_uses_factor_one ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_preserves_ref_when_in_potential_tags ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_reattaches_same_tag_p_tail ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_returns_empty_body_for_no_content ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_preserves_same_tag_tail ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_skips_detached_orphan_elements_from_cluster_c ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_populates_potential_tags_from_options ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::add_sub_element_attrs_come_from_subelem_not_processed_child ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_tables_false_skips_table_potential_tags ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::add_sub_element_copies_multiple_attrs_in_order ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_trims_trailing_head_at_end ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_strips_ref_when_not_in_potential_tags ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::_extract_strips_span_when_not_in_potential_tags ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::define_cell_type_no_header_has_no_role ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::define_newelem_copies_tag_text_tail ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::define_newelem_no_op_when_processed_elem_is_none ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::add_sub_element_copies_text_tail_and_attrs ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::extract_comments_returns_empty_when_no_comments ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::extract_comments_finds_reddit_style_comments ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::extract_comments_strips_comment_discard_xpaths ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::define_cell_type_header_sets_role_head ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_code_blocks_marks_descendants_done ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_code_blocks_renames_to_code ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_formatting_previous_element_sibling_facade_smoke ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_formatting_wraps_in_p_when_parent_not_protected ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_formatting_wraps_when_no_parent_and_no_previous ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_formatting_previous_element_sibling_finds_protected_p ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_formatting_returns_naked_when_parent_protected ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::extract_content_returns_body_text_and_length_for_article ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::extract_content_strips_done_elements_with_content ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_formatting_returns_none_when_process_node_none ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_does_not_rewrite_relative_src ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_formatting_uses_previous_when_no_parent_but_previous_protected ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_copies_title_only_when_no_alt ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_does_not_copy_empty_alt_or_title ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_does_not_rewrite_single_slash_relative_url ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_copies_alt_only_when_no_title ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_falls_back_to_data_src_starts_with ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_copies_alt_and_title ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_keeps_https_src_unchanged ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_picks_data_src_when_src_missing ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_returns_none_for_image_with_explicit_empty_src ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_picks_src_attr ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_returns_none_for_truly_empty_data_src_scan ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_returns_none_when_no_src ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_scans_data_src_variants_via_for_else ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_empty_input_returns_none ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_merges_child_tail_onto_existing_subchild_tail ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_no_item_tail_skips_merge_branch ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_no_leading_text_no_synthetic_item ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_leaf_item_with_tail_merges_into_text ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_no_phantom_dup_when_first_inner_item_has_empty_text ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_non_leaf_item_tail_merges_to_last_subchild ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_renames_input_element_to_done ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_returns_none_when_no_text_chars ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_sets_child_tail_when_no_existing_subchild_tail ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_whitespace_only_leading_text_no_synthetic_item ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_other_elements_clears_attributes_on_div ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_other_elements_dispatches_w3_code_div_to_code_blocks ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_other_elements_div_with_text_returns_p_via_rename ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_other_elements_renames_div_to_p_when_text_present ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_other_elements_returns_none_for_done_tag ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_other_elements_returns_none_for_non_div_potential_tag ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_other_elements_returns_none_for_whitespace_only_div ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_other_elements_returns_none_when_tag_not_in_potential ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_clears_input_attributes ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_with_text_creates_item ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_image_rewrites_protocol_relative_url ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_empty_dispatches_to_process_node ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_descendant_items_processed ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_graphic_without_src_keeps_default_newsub ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_empty_item_dropped ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_graphic_dispatches_to_handle_image ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_p_child_text_merges_into_processed_text ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_preserves_lb_tail_text ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_preserves_trailing_lb_with_tail ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_ref_formatting_copies_target ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_hi_formatting_copies_rend ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_skips_unexpected_tags ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_hi_with_nested_children_strips_inner_tags ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_trims_trailing_lb_with_no_tail ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_preserves_rend_attribute ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_unknown_child_tag_is_skipped ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_strips_trailing_lb_without_tail ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_returns_none_when_no_children_or_text ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_ref_without_target_skips_attr_copy ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_quotes_dispatches_to_code_block_when_codey ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_quotes_preserves_non_quote_descendants ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_quotes_returns_none_for_empty ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_quotes_strips_nested_quote_tags ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_breaks_on_nested_table ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_quotes_dispatches_to_code_block_via_highlight_parent ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_quotes_dispatches_to_code_block_via_single_code_child ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_handles_malformed_colspan ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_drops_mid_cell_whitespace_tail_between_siblings ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_lists_emits_phantom_duplicate_for_nested_list_with_quote_child ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_marks_th_as_header_cell ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_non_leaf_cell_with_nested_hi_routes_through_handle_textnode ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_pops_span_attribute_from_residual_row ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_preserves_last_cell_child_trailing_whitespace_tail ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_cell_with_only_text_appended ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_converts_tr_td_to_row_cell ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_list_in_cell_recall_mode_processes_list ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_non_leaf_cell_with_nested_th_renames_to_cell ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_recovers_non_whitespace_mid_cell_code_tail ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_respects_colspan_in_max_cols ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_strips_thead_tbody_tfoot ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_returns_none_for_empty_table ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_returns_none_when_no_rows_survive ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_subsequent_th_not_marked_header_after_header_row ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_two_row_table_first_row_keeps_span_last_loses_it ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_three_rows_header_row_flag_short_circuits_on_left ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_falls_through_graphic_to_other_when_not_in_potential ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_falls_through_table_to_other_when_not_in_potential ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_lb_promotes_with_tail_value_as_p_text ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_lb_with_no_tail_returns_none ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_paragraphs_hi_without_rend_attr_sets_empty_rend ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_lb_with_padded_tail_promotes ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_lb_with_whitespace_tail_returns_none ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_routes_graphic_to_handle_image_when_gated ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_preserves_non_leaf_cell_tail_whitespace_for_pipe_newline_render ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_lb_with_tail_promotes_to_p ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_routes_head_to_handle_titles ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_single_column_no_span_attribute ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_routes_list_to_handle_lists ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_routes_code_to_handle_quotes ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_routes_table_to_handle_table_when_gated ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_routes_unknown_to_handle_other_elements ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_span_routes_to_handle_formatting ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_textelem_routes_p_to_handle_paragraphs ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_titles_deepcopy_path_with_only_whitespace_children ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_titles_no_children_goes_via_process_node ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_titles_with_children_uses_deepcopy_path ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_titles_returns_none_when_no_text_chars ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::is_code_block_element_false_when_parent_class_lacks_highlight ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::is_code_block_element_true_for_code_tag ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::is_code_block_element_true_for_lang_attr ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::is_code_block_element_true_for_highlight_parent_class ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::is_code_block_element_true_for_single_child_code ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::is_text_element_false_for_none ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::process_nested_elements_copies_child_text_when_no_descendants ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::process_nested_elements_list_descendant_returning_none_skips_append ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::process_nested_elements_renames_subelems_to_done ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::process_nested_elements_routes_list_descendant_through_handle_lists ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::is_code_block_element_false_for_plain_div ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::is_code_block_element_false_when_more_than_one_child ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::is_text_element_false_for_whitespace_only ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::module_constants_match_python ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::is_text_element_true_when_text_present ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::prune_unwanted_sections_drops_link_heavy_table ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::prune_unwanted_sections_precision_strips_trailing_head ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::prune_unwanted_sections_handles_table_at_root ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::prune_unwanted_sections_iterates_all_tables ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::recover_wild_text_appends_paragraphs_to_result_body ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::prune_unwanted_sections_recall_skips_teaser_prune ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::prune_unwanted_sections_strips_image_discard_targets_when_graphic_not_potential ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::prune_unwanted_sections_returns_tree_on_simple_input ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::prune_unwanted_sections_precision_runs_head_quote_link_density ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::recover_wild_text_recall_mode_includes_divs ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::update_elem_rendition_no_op_when_no_rend ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_ignores_unknown_property ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_preserves_description_when_some ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_preserves_image_when_some ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_preserves_image_when_some_og_image_key ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_preserves_image_when_some_og_image_url_key ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_preserves_pagetype_when_some ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::update_elem_rendition_copies_rend_attr ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::update_elem_rendition_no_op_when_rend_is_empty_string ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_preserves_site_name_when_some ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::recover_wild_text_with_ref_in_potential_strips_only_span ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_preserves_title_when_some ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::recover_wild_text_reattaches_same_tag_p_tail ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::recover_wild_text_returns_empty_when_tree_has_no_text_elements ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_writes_pagetype_from_og_type ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_writes_image_from_og_image_url ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_writes_site_name_when_none ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_writes_title_when_none ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_writes_description_when_none ... ok
[INFO] [stdout] test trafilatura::metadata::tests::cap_at_python_length_passes_exactly_10000_chars_unchanged ... ok
[INFO] [stdout] test trafilatura::metadata::tests::cap_at_python_length_passes_short_input_unchanged ... ok
[INFO] [stdout] test trafilatura::metadata::tests::cap_at_python_length_truncates_at_9999_with_ellipsis ... ok
[INFO] [stdout] test trafilatura::metadata::tests::cap_at_python_length_uses_char_count_not_byte_count ... ok
[INFO] [stdout] test trafilatura::metadata::tests::check_authors_keeps_non_blacklisted ... ok
[INFO] [stdout] test trafilatura::metadata::tests::check_authors_returns_none_when_all_blacklisted ... ok
[INFO] [stdout] test trafilatura::metadata::tests::check_authors_skips_empty_segments ... ok
[INFO] [stdout] test trafilatura::metadata::tests::civil_from_days_january_uses_mp_ge_10_branch ... ok
[INFO] [stdout] test trafilatura::metadata::tests::civil_from_days_pre_epoch_uses_negative_era_branch ... ok
[INFO] [stdout] test trafilatura::metadata::tests::clean_and_trim_metadata_applies_to_categories_and_tags ... ok
[INFO] [stdout] test trafilatura::metadata::tests::check_authors_all_empty_returns_none ... ok
[INFO] [stdout] test trafilatura::metadata::tests::clean_and_trim_metadata_idempotent_on_clean_input ... ok
[INFO] [stdout] test trafilatura::metadata::tests::clean_and_trim_metadata_leaves_none_slots_none ... ok
[INFO] [stdout] test trafilatura::metadata::tests::clean_and_trim_metadata_caps_long_description ... ok
[INFO] [stdout] test trafilatura::metadata::tests::clean_and_trim_metadata_preserves_clean_slots_byte_equal ... ok
[INFO] [stdout] test trafilatura::metadata::tests::clean_and_trim_metadata_strips_cf_from_title ... ok
[INFO] [stdout] test trafilatura::metadata::tests::clean_and_trim_metadata_strips_per_category_and_tag_entry ... ok
[INFO] [stdout] test trafilatura::metadata::tests::clean_and_trim_metadata_unescapes_title_entity ... ok
[INFO] [stdout] test trafilatura::metadata::tests::clean_and_trim_metadata_order_unescape_before_strip ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_writes_image_from_og_image ... ok
[INFO] [stdout] test trafilatura::metadata::tests::assign_og_property_writes_image_from_og_image_secure_url ... ok
[INFO] [stdout] test trafilatura::metadata::tests::clean_and_trim_metadata_strips_invisible_separator_from_description ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_article_publisher_does_not_overwrite_site_name ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_content_only_meta_without_itemprop_is_noop ... ok
[INFO] [stdout] test trafilatura::metadata::tests::clean_and_trim_metadata_order_cap_before_unescape_truncates_entity ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_article_tag_populates_tags ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_article_tag_empty_after_normalize_adds_no_tag ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_handles_itemprop_headline_and_author ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_itemprop_description_does_not_overwrite ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_itemprop_headline_does_not_overwrite_title ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_itemprop_description_populates_description_when_none ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_citation_author_populates_author ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_copyright_populates_site_name ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_application_name_becomes_backup_sitename ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_citation_title_populates_title_when_none ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_dc_creator_populates_author ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_dc_description_populates_description ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_keywords_empty_after_normalize_adds_no_tag ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_publisher_populates_site_name ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_keywords_populates_tags ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_sailthru_author_populates_author ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_parsely_tags_populates_tags ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_title_skipped_when_og_title_present ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_twitter_description_populates_description ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_twitter_site_becomes_backup_sitename ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_unknown_is_ignored ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_twitter_url_does_not_overwrite_existing_url ... ok
[INFO] [stdout] test trafilatura::main_extractor::tests::handle_table_cell_with_list_preserves_placeholder_marker ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_twitter_url_populates_url ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_twitter_site_does_not_overwrite_existing_site_name ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_itemprop_unknown_is_ignored ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_name_twitter_app_name_substring_becomes_backup_sitename ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_property_article_author_populates_author ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_og_type_populates_pagetype ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_property_image_does_not_overwrite_existing ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_property_twitter_image_populates_image ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_og_whitespace_content_is_skipped ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_property_article_publisher_populates_site_name ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_property_unknown_is_ignored ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_property_og_branch_short_circuits ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_strips_html_tags_from_content ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_second_og_url_does_not_overwrite ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_skips_meta_with_property_but_no_content ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_skips_missing_content_attribute ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_metadata_at_only_sitename_normalises_to_empty ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_second_description_does_not_overwrite ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_with_no_head_leaves_metadata_default ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_metadata_blank_html_lang_is_ignored ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_opengraph_skips_og_tag_without_content ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_opengraph_og_author_populates_author ... ok
[INFO] [stdout] test trafilatura::metadata::tests::examine_meta_skips_empty_content ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_metadata_no_root_element_is_noop ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_metadata_jsonld_categories_skip_url_fallback ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_metadata_combines_html_and_jsonld ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_metadata_lowercase_sitename_is_title_cased ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_metainfo_skips_overlong_match ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_metadata_xpath_author_with_empty_blacklist ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_metadata_drops_single_word_meta_author ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_empty_h2_returns_raw_title ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_falls_back_to_first_h1_when_multiple ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_multiple_h1_first_empty_falls_to_h2 ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_falls_back_to_first_h2 ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_keeps_dotful_title_half_as_last_resort ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_metadata_xpath_author_passes_non_matching_blacklist ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_falls_back_to_h2_when_no_h1 ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_single_empty_h1_falls_through ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_keeps_raw_title_as_final_fallback ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_xpath_skips_too_short_match ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_prefers_dotless_second_half_of_title ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_falls_back_to_first_h1_when_multiple_h1s ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_returns_none_for_empty_body ... ok
[INFO] [stdout] test trafilatura::metadata::tests::lookup_named_entity_returns_none_for_prefix_sentinel ... ok
[INFO] [stdout] test trafilatura::metadata::tests::lookup_named_entity_returns_decoded_real_entity ... ok
[INFO] [stdout] test trafilatura::metadata::tests::lookup_named_entity_returns_none_for_unknown ... ok
[INFO] [stdout] test trafilatura::metadata::tests::extract_title_uses_xpath_post_title_class ... ok
[INFO] [stdout] test trafilatura::metadata::tests::metadata_default_is_all_none ... ok
[INFO] [stdout] test trafilatura::metadata::tests::metadata_extracts_language ... ok
[INFO] [stdout] test trafilatura::metadata::tests::metadata_extracts_image_from_og ... ok
[INFO] [stdout] test trafilatura::metadata::tests::metadata_extracts_meta_author ... ok
[INFO] [stdout] test trafilatura::metadata::tests::metadata_extracts_og_title ... ok
[INFO] [stdout] test trafilatura::metadata::tests::metadata_falls_back_to_title_tag ... ok
[INFO] [stdout] test trafilatura::metadata::tests::metadata_extracts_h1_when_no_title_or_meta ... ok
[INFO] [stdout] test trafilatura::metadata::tests::metadata_extracts_site_name ... ok
[INFO] [stdout] test trafilatura::metadata::tests::metadata_normalizes_whitespace_in_author ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_drops_http_prefixed_input ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_drops_superstring_of_existing_author ... ok
[INFO] [stdout] test trafilatura::metadata::tests::metadata_extracts_description_from_og ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_dedupes_exact_match ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_drops_email_only_input ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_preserves_current_when_new_is_url ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_keeps_overlong_token_with_space ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_rejects_emails ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_keeps_overlong_hyphenated_token ... ok
[INFO] [stdout] test trafilatura::metadata::tests::metadata_respects_author_blacklist ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_no_entity_path_skips_unescape ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_joins_multiple_with_semicolon ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_rejects_urls ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_splits_on_and_keyword ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_skips_overlong_single_token ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_strips_by_prefix ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_splits_on_comma ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_strips_html_tags ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_strips_nickname_in_parens ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_strips_emojis ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_returns_none_when_only_pieces_become_empty ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_titlecases_all_caps_input ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_titlecases_lowercase_input ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_unescapes_ampersand_entity ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_unescapes_numeric_entity_marker ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_strips_twitter_handle ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_tags_strips_quotes ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_bare_ampersand_no_match ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_longest_prefix_fallback ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_named_with_semicolon ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_named_without_semicolon_legacy ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_numeric_decimal ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_numeric_hex ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_passthrough_no_ampersand ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_surrogate_yields_fffd ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_tags_returns_empty_for_whitespace_only ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_empty_input ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_two_codepoint_entity ... ok
[INFO] [stdout] test trafilatura::metadata::tests::replace_charref_hex_lowercase_x ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_invalid_codepoint_yields_empty_string ... ok
[INFO] [stdout] test trafilatura::metadata::tests::replace_charref_hex_uppercase_x ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_longest_named_entity ... ok
[INFO] [stdout] test trafilatura::metadata::tests::replace_charref_named_legacy_no_semicolon ... ok
[INFO] [stdout] test trafilatura::metadata::tests::python_html_unescape_windows_1252_substitution ... ok
[INFO] [stdout] test trafilatura::metadata::tests::replace_charref_numeric_invalid_codepoint_strips_to_empty ... ok
[INFO] [stdout] test trafilatura::metadata::tests::replace_charref_hex_with_no_digits_after_x_is_passthrough ... ok
[INFO] [stdout] test trafilatura::metadata::tests::replace_charref_named_amp ... ok
[INFO] [stdout] test trafilatura::metadata::tests::scan_charref_bare_ampersand_at_end_is_passthrough ... ok
[INFO] [stdout] test trafilatura::metadata::tests::replace_charref_numeric_unparseable_passes_verbatim ... ok
[INFO] [stdout] test trafilatura::metadata::tests::replace_charref_numeric_overflow_yields_replacement_char ... ok
[INFO] [stdout] test trafilatura::metadata::tests::split_title_on_separators_recognises_em_dash ... ok
[INFO] [stdout] test trafilatura::metadata::tests::split_title_leading_separator_empty_left_half_skipped ... ok
[INFO] [stdout] test trafilatura::metadata::tests::normalize_authors_dedupes_substring_authors ... ok
[INFO] [stdout] test trafilatura::metadata::tests::split_title_on_separators_returns_input_when_no_separator ... ok
[INFO] [stdout] test trafilatura::metadata::tests::replace_charref_unknown_named_falls_back_verbatim ... ok
[INFO] [stdout] test trafilatura::metadata::tests::split_title_separator_with_no_trailing_space_is_skipped ... ok
[INFO] [stdout] test trafilatura::metadata::tests::split_title_on_separators_strips_trailing_site_name ... ok
[INFO] [stdout] test trafilatura::metadata::tests::strip_simple_html_tags_empty_input_returns_empty ... ok
[INFO] [stdout] test trafilatura::metadata::tests::replace_charref_decimal_with_semicolon ... ok
[INFO] [stdout] test trafilatura::metadata::tests::strip_simple_html_tags_preserves_unclosed_bracket ... ok
[INFO] [stdout] test trafilatura::metadata::tests::strip_simple_html_tags_removes_simple_tag ... ok
[INFO] [stdout] test trafilatura::metadata::tests::strip_simple_html_tags_strips_multiple_tags ... ok
[INFO] [stdout] test trafilatura::metadata::tests::unescape_bare_hash_at_end_is_passthrough ... ok
[INFO] [stdout] test trafilatura::metadata::tests::unescape_cjk_with_ampersand_does_not_panic ... ok
[INFO] [stdout] test trafilatura::metadata::tests::unescape_numeric_digits_run_to_end_without_semicolon ... ok
[INFO] [stdout] test trafilatura::metadata::tests::unescape_interleaved_multi_entity_string ... ok
[INFO] [stdout] test trafilatura::metadata::tests::unescape_non_ampersand_unicode_passes_through ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::is_liveblog_with_updates_both_halves_true ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::is_liveblog_with_updates_no_type_false ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::is_liveblog_with_updates_no_updates_key_false ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::extract_author_names_given_family_non_string_yields_no_name ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::is_liveblog_with_updates_wrong_type_false ... ok
[INFO] [stdout] test trafilatura::metadata::tests::split_title_trailing_separator_empty_right_half_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::is_plausible_sitename_current_http_candidate_also_http_falls_through ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::is_plausible_sitename_longer_candidate_accepted ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::is_plausible_sitename_shorter_candidate_rejected ... ok
[INFO] [stdout] test trafilatura::metadata::tests::strip_simple_html_tags_breaks_on_nested_open_bracket ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::is_plausible_sitename_webpage_type_does_not_overwrite ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::is_plausible_sitename_url_current_replaced_by_name_candidate ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_article_section_array_skips_non_strings ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_article_section_number_is_noop ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_article_section_as_array_of_strings ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_article_section_skipped_when_already_set ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_at_type_array_first_non_string_is_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_at_type_as_list_of_strings_uses_first ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::is_plausible_sitename_empty_candidate_rejected ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_at_type_empty_array_is_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_as_number_is_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_at_type_as_object_is_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_email_address_is_rejected_by_merge ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_empty_after_tag_strip_yields_no_author ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_given_additional_family_joined_with_spaces ... ok
[INFO] [stdout] test trafilatura::metadata::tests::replace_charref_decimal_without_semicolon ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::is_plausible_sitename_no_or_empty_current_accepts ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_given_name_only_yields_no_author ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::extract_author_names_object_name_empty_after_strip_not_pushed ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_list_with_duplicates_is_deduped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_list_of_strings_is_filtered ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_list_of_mixed_keeps_valid_objects ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_name_as_empty_array_yields_no_author ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_name_as_number_is_none ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_object_with_array_type_filtered ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_object_with_no_recognised_keys_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_name_as_array_joined_with_semicolons ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_object_with_non_person_type_filtered ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_string_is_recursively_parsed_as_array ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_name_as_nested_object_with_name_field ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_string_is_recursively_parsed_as_object ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_string_parses_to_primitive_then_treated_as_name ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_author_string_url_is_rejected_by_merge ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_date_modified_used_when_no_published ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_date_published_beats_date_modified ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_empty_script_element_is_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_extracts_articlesection_to_categories ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_extracts_keywords_as_tags ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_extracts_date_published_to_date_field ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_extracts_publisher_name ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_extracts_simple_article_metadata ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_full_article_populates_every_slot ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_graph_as_null_yields_nothing ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_graph_as_string_is_ignored ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_given_and_family_name ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_extracts_top_level_array ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_graph_as_single_object ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_graph_multi_entity_article_org_person_webpage ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_handles_author_as_list ... ok
[INFO] [stdout] test trafilatura::metadata::tests::scan_charref_hash_with_no_digits_is_passthrough ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_handles_author_as_string ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_handles_graph_wrapper ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_handles_multiple_scripts ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_handles_author_as_object ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_headline_beats_name_in_title_resolution ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_image_array_first_non_supported_is_noop ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_image_as_bare_string ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_image_as_array_first_object_with_url ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_image_as_array_first_string ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_image_object_without_url_yields_no_image ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_image_empty_array_yields_no_image ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_liveblog_no_updates_key_falls_back_to_default_walker ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_keywords_as_array ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_liveblog_updates_as_array ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_keywords_comma_string_skips_blank_parts ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_keywords_non_supported_carrier_is_noop ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_image_object_url_field ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_liveblog_updates_as_single_object ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_missing_at_type_is_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_missing_context_still_walked_via_widening ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_no_root_element_is_noop ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_publisher_alternatename_final_fallback ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_person_top_level_writes_author ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_non_object_array_entries_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_publisher_legalname_fallback ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_publisher_empty_name_does_not_overwrite ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_non_schema_org_explicit_context_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_publisher_name_non_string_ignored ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_root_bare_string_yields_no_metadata ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_root_null_yields_no_metadata ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_root_number_yields_no_metadata ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_walk_article_does_not_overwrite_existing_date ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_schema_org_context_without_graph_walks_parent_directly ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_person_top_level_with_url_name_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_title_falls_back_to_name_when_no_headline ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_walk_article_does_not_overwrite_existing_image ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_walk_article_does_not_overwrite_existing_title ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_image_as_number_is_noop ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_pagetype_from_article_type ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::matches_schema_org_http_and_https_accepted ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::matches_schema_org_none_is_false ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::merge_author_appends_distinct_with_semicolon ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::merge_author_blank_candidate_preserves_current ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::merge_author_dedupes_exact_match ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::merge_author_initializes_from_none ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::merge_author_url_candidate_with_none_current_returns_none ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::merge_author_initializes_from_empty_string ... ok
[INFO] [stdout] test trafilatura::justext_stoplists::tests::get_stoplist_consistent_with_get_stoplists ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::normalize_json_decodes_valid_unicode_escape ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::normalize_json_plain_string_bypasses_escape_branch ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::normalize_json_decodes_unicode_escape_and_strips_control_escapes ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::normalize_json_drops_lone_surrogate_escape ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::normalize_json_string_strips_tags_and_trims ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_whitespace_only_script_is_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_does_not_overwrite_existing_title ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_mixed_blocks_each_contributes ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_handles_garbage_input_without_panic ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_author_all_tags_after_strip_not_accumulated ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_author_without_space_breaks_loop ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::jsonld_skips_invalid_json ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_no_name_or_headline_keys_leaves_title_none ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_not_invoked_on_well_formed_json ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_no_recoverable_fields_leaves_metadata_unchanged ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_pagetype_non_ogtype_not_assigned ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_articlesection_substring_present_but_regex_no_match ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_handles_single_quoted_json ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_pagetype_ogtype_match_assigned ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_recovers_article_section_as_category ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_recovers_headline_as_title ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_publisher_substring_present_but_regex_no_match ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_publisher_with_comma_in_name_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_recovers_author_via_author_1_alternative ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_recovers_articlesection_category ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_recovers_multiple_spaced_authors ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_publisher_with_comma_rejected ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_type_present_but_regex_no_match_sets_no_pagetype ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::process_parent_person_http_name_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::process_parent_person_type_with_no_name_key_writes_no_author ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::process_parent_publisher_implausible_candidate_does_not_overwrite ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::process_parent_publisher_type_with_no_name_keys_sets_no_sitename ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_recovers_person_author ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_recovers_publisher_as_sitename ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::process_parent_unrecognised_type_falls_through_cascade ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::strip_simple_html_tags_nested_lt_does_not_swallow_text ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_recovers_name_as_title_when_no_headline ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::strip_simple_html_tags_removes_basic_tags ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::walk_article_datemodified_fills_date_when_no_datepublished ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::strip_simple_html_tags_unclosed_tag_preserved ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::walk_article_datepublished_empty_after_strip_leaves_date_none ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::walk_article_headline_empty_after_strip_leaves_title_none ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::walk_article_image_string_empty_after_strip_leaves_image_none ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::walk_article_keywords_array_empty_entry_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::walk_article_articlesection_string_empty_after_strip_adds_nothing ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::walk_article_keywords_string_empty_part_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::walk_article_name_empty_after_strip_leaves_title_none ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_category_from_post_info_div ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_category_meta_article_section_fallback ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_category_meta_subject_name_fallback ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_category_meta_fallback_only_when_xpath_empty ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_category_section_meta_whitespace_content_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_category_section_meta_without_content_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_with_js_comments_still_recovers_section ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_dedupes_repeated_text ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::walk_article_keywords_array_non_string_element_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_unterminated_string_still_surfaces_publisher ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_link_based_tag ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_first_winning_xpath_short_circuits ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::walk_article_articlesection_array_empty_entry_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::parse_error_strips_imageobject_before_author_extraction ... ok
[INFO] [stdout] test trafilatura::metadata_jsonld::tests::walk_article_datemodified_empty_after_strip_leaves_date_none ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_from_meta_keywords ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_skips_anchor_without_href_attr ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_skips_matching_anchor_with_empty_text ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_category_section_meta_dedupes_duplicate_content ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_tag_does_not_use_meta_fallback ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_date_from_article_published_time ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_date_from_meta_name_date ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_skips_anchor_without_matching_href ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_date_from_time_element ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_date_from_pure_text_date_works_with_htmldate ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_date_returns_none_when_root_missing ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_domain_empty_authority_returns_none ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_domain_short_remainder_falls_to_www_strip ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_domain_simple ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_domain_single_label_host_falls_to_www_strip ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_catstags_returns_empty_when_no_body ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_date_returns_none_for_empty_html ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_domain_psl_fallback_strips_www ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_domain_returns_none_for_empty ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_domain_returns_none_for_no_scheme ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_domain_strips_port ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_domain_strips_subdomain_keeps_registered ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_domain_strips_userinfo ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_div_footer_anchor_with_href_strict_text_match ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_div_footer_anchor_href_no_license_match_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_div_footer_anchor_without_href_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_div_footer_skips_when_not_footer ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_from_div_class_footer_with_cc_href ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_footer_anchor_with_href_no_match_no_text_returns_none ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_rel_license_returns_none_when_empty_text_and_no_regex ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_rel_license_returns_text_when_text_arm_wins ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_returns_none_when_no_rel_no_footer ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_skips_footer_anchor_without_href ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_from_div_id_footer ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_alternate_without_hreflang_is_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_from_footer_link_with_text_match ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_rel_license_whitespace_text_returns_none ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_alternate_x_default_without_href_falls_through ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_domain_userinfo_with_empty_host_returns_none ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_rel_license_empty_text_no_href_match_returns_none ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_link_without_rel_attribute_is_ignored ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_normalises_uppercase_scheme_and_host ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_rejects_invalid_and_uses_default ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_relative_canonical_with_no_og_base_falls_back ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_relative_ignores_non_og_twitter_meta_then_repairs ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_metadata_e2e_populates_all_fields_when_present ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_from_creative_commons_link ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_relative_og_content_without_base_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_falls_back_to_og_url ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_relative_og_meta_without_content_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_repairs_relative_via_og_url ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_from_link_canonical ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_canonical_link_without_href_falls_through ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_base_element_without_href_falls_through ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_repairs_relative_via_twitter_meta ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_with_alternate_x_default ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_returns_none_with_no_head_and_no_default ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_absolute_path_replaces_entire_base_path ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_with_base_element ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_base_with_empty_scheme_returns_reference ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_license_returns_text_when_no_regex_match ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_empty_netloc_protocol_relative ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_empty_reference_returns_base ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_fragment_only_reference_keeps_path_and_query ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_whitespace_only_canonical_href_is_skipped ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_joins_relative_path_against_base_directory ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_joins_relative_path_against_base_with_trailing_slash ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_other_host_scheme_less_with_path ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_passes_absolute_other_host_through_unchanged ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_promotes_protocol_relative_to_http ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_passes_template_literal_through_unchanged ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_protocol_relative_same_host_inherits_scheme ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_base_with_invalid_scheme_char_returns_reference ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_query_only_reference_replaces_query ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_reference_scheme_with_dash_and_dot_is_recognised ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::extract_url_uses_default_url_fallback ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_reference_scheme_with_plus_is_recognised ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_same_host_with_scheme_resolves_via_urljoin ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::get_base_url_returns_none_for_empty_scheme ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::get_base_url_returns_none_for_missing_scheme ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::get_base_url_strips_path_query_fragment ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::href_matches_metatype_with_e_quirk ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::href_matches_metatype_with_i_quirk ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::href_matches_metatype_with_s ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::is_valid_url_accepts_http ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::is_valid_url_accepts_https_with_dotted_host ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::fix_relative_urls_joins_absolute_path_against_base_root ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::href_matches_metatype_plain ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::is_valid_url_accepts_localhost ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::href_matches_metatype_with_pipe_quirk ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::is_valid_url_accepts_uppercase_http_scheme ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::is_valid_url_accepts_uppercase_scheme ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::href_matches_metatype_rejects_partial_path ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::href_matches_metatype_rejects_unrelated ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::is_valid_url_rejects_ftp_scheme ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::is_valid_url_rejects_no_scheme ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::is_valid_url_rejects_scheme_only ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::is_valid_url_rejects_scheme_with_path_no_host ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::is_valid_url_rejects_single_label_host_not_localhost ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::line_processing_empty_returns_empty ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::line_processing_replaces_html_entities_then_trims ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::is_valid_url_accepts_userinfo_and_port ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_license_regex_extracts_by_nc_nd ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_license_regex_rejects_non_digit_version ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_license_regex_rejects_when_minor_not_digit ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_license_regex_rejects_when_third_char_not_dot ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_license_regex_rejects_zero_major_version ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_license_regex_returns_none_for_unrelated_href ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_text_license_regex_cc_prefix_without_version ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_text_license_regex_creative_commons_with_version ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_text_license_regex_rejects_unrelated_text ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_text_license_regex_rejects_prefix_without_space ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_license_regex_extracts_by_sa_4_0 ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::get_base_url_returns_none_for_empty_netloc ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_license_regex_extracts_zero ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_license_regex_rejects_missing_version ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_text_license_regex_rejects_zero_major_version ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_text_license_regex_rejects_token_without_prefix ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_text_license_regex_token_with_nondigit_major_keeps_base ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::is_valid_url_rejects_relative_url ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_text_license_regex_token_with_nondigit_minor_keeps_base ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::match_text_license_regex_token_with_nondot_keeps_base ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::meta_url_sitename_strips_w_digit_prefix ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::meta_url_sitename_returns_none_for_empty_host ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::meta_url_sitename_keeps_bare_host_no_prefix ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::meta_url_sitename_strips_www ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::meta_url_sitename_returns_none_for_non_http ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::meta_url_sitename_w_prefix_no_digits_keeps_host ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::normalize_url_collapses_double_slashes_in_path ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::normalize_url_no_scheme_returns_input_unchanged ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::normalize_url_keeps_dotdot_when_not_a_full_segment ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::normalize_url_percent_encodes_path ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::normalize_url_lowercases_scheme_and_netloc ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::normalize_url_strips_leading_dotdot_segments ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::strip_port_keeps_when_port_empty ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::strip_port_leaves_authority_when_no_colon ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::strip_scheme_handles_non_ascii_url_prefix ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::strip_www_prefix_no_www_returns_input ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::strip_www_prefix_with_digit_label_strips ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::strip_www_prefix_www_without_dot_returns_input ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::urljoin_base_without_path_synthesises_leading_slash ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::urljoin_base_without_scheme_returns_reference_verbatim ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::normalize_url_strips_trailing_dotdot_to_empty_path ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::urljoin_fragment_only_ref_drops_base_fragment_keeps_path ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::strip_port_keeps_when_colon_predecessor_is_digit ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::urljoin_fragment_only_ref_keeps_base_path_and_query ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::urljoin_protocol_relative_inherits_base_scheme_when_same_logic_path ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::meta_url_sitename_w_digits_without_dot_keeps_host ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::urljoin_query_only_ref_keeps_base_path_and_replaces_query ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_all_fields_set_in_source_order ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::urljoin_relative_path_against_root_base ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_author_only_attr_set ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::urljoin_same_host_with_scheme_returns_reference_verbatim ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_date_only_attr_set ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_description_only_attr_set ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_empty_metadata_sets_no_attributes ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_empty_string_skipped_for_all_optional_fields ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_hostname_only_attr_set ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_license_only_attr_set ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_tags_only_attr_joined_by_semicolon ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_sets_truthy_fields_only ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_sitename_only_attr_set ... ok
[INFO] [stdout] test trafilatura::output::tests::build_json_output_raw_text_empty_renders_as_null ... ok
[INFO] [stdout] test trafilatura::output::tests::build_json_output_raw_text_non_empty_renders_as_string ... ok
[INFO] [stdout] test trafilatura::output::tests::build_json_output_with_comments_serialises_commentsbody ... ok
[INFO] [stdout] test trafilatura::output::tests::build_json_output_with_metadata_renders_categories_and_tags_as_joined_strings ... ok
[INFO] [stdout] test trafilatura::output::tests::build_tei_output_builds_full_tei_structure ... ok
[INFO] [stdout] test trafilatura::output::tests::build_tei_output_runs_check_tei_to_scrub_invalid_tags ... ok
[INFO] [stdout] test trafilatura::output::tests::build_xml_output_wraps_body_as_main_with_doc_root ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_author_only_emits_author_line ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_all_fields_emit_in_python_source_order ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_date_only_emits_date_line ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_categories_render_as_python_repr_list ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_language_only_attr_set ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_empty_string_fields_are_treated_as_falsy ... ok
[INFO] [stdout] test trafilatura::output::tests::build_tei_output_with_comments_renames_commentsbody_to_div ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::normalize_url_preserves_query_and_fragment_byte_equal ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_description_only_emits_description_line ... ok
[INFO] [stdout] test trafilatura::metadata_url::tests::strip_port_leaves_when_after_colon_not_digits ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_empty_categories_and_tags_are_skipped ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_empty_metadata_returns_just_delimiters ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_hostname_only_emits_hostname_line ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_sitename_only_emits_sitename_line ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_tags_render_as_python_repr_list ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_title_only_emits_title_line ... ok
[INFO] [stdout] test trafilatura::output::tests::check_tei_lb_with_text_tail_becomes_p ... ok
[INFO] [stdout] test trafilatura::output::tests::clean_attributes_drops_attrs_on_div_and_span ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_license_only_emits_license_line ... ok
[INFO] [stdout] test trafilatura::output::tests::build_yaml_header_url_only_emits_url_line ... ok
[INFO] [stdout] test trafilatura::output::tests::clean_attributes_drops_attrs_on_non_whitelisted_tags ... ok
[INFO] [stdout] test trafilatura::output::tests::check_tei_preserves_valid_attributes ... ok
[INFO] [stdout] test trafilatura::output::tests::check_tei_complex_head_inside_p_converts_and_moves_up ... ok
[INFO] [stdout] test trafilatura::output::tests::clean_attributes_keeps_whitelisted_tags_attrs ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_empty_body_yields_doc_with_main_and_comments ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_emits_comments_when_present ... ok
[INFO] [stdout] test trafilatura::output::tests::add_xml_meta_empty_categories_and_tags_skipped ... ok
[INFO] [stdout] test trafilatura::output::tests::check_tei_renames_head_to_ab_header ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_indents_nested_elements_two_spaces ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_is_nfc_normalised_at_public_surface ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_keeps_empty_children_inside_code ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_keeps_graphic_even_when_empty ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_escapes_special_chars_in_attributes ... ok
[INFO] [stdout] test trafilatura::output::tests::clean_attributes_keeps_graphic_src_alt_title ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_keeps_inner_leaf_with_tail_text ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_escapes_special_chars_in_text ... ok
[INFO] [stdout] test trafilatura::output::tests::clean_attributes_keeps_ref_target ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_preserves_attrs_on_with_attributes_tags ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_prunes_childless_textless_inner_leaves ... ok
[INFO] [stdout] test trafilatura::output::tests::csv_or_null_some_non_empty_returns_value ... ok
[INFO] [stdout] test trafilatura::output::tests::csv_quote_minimal_cr_or_lf_triggers_quoting ... ok
[INFO] [stdout] test trafilatura::output::tests::csv_quote_minimal_delim_in_field_triggers_quoting ... ok
[INFO] [stdout] test trafilatura::output::tests::csv_quote_minimal_double_quote_doubled_inside_quoted_field ... ok
[INFO] [stdout] test trafilatura::output::tests::csv_quote_minimal_no_special_chars_returns_field_unquoted ... ok
[INFO] [stdout] test trafilatura::output::tests::delete_element_drop_tail_discards_tail ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_tei_branch_returns_tei_root ... ok
[INFO] [stdout] test trafilatura::output::tests::csv_or_null_empty_string_returns_null_token ... ok
[INFO] [stdout] test trafilatura::output::tests::delete_element_drop_tail_no_tail_safe ... ok
[INFO] [stdout] test trafilatura::output::tests::delete_element_keep_tail_moves_tail_to_previous ... ok
[INFO] [stdout] test trafilatura::output::tests::delete_element_keep_tail_moves_tail_to_parent_text ... ok
[INFO] [stdout] test trafilatura::output::tests::delete_element_no_tail_keep_tail_true_still_works ... ok
[INFO] [stdout] test trafilatura::output::tests::csv_header_row_matches_python_column_order ... ok
[INFO] [stdout] test trafilatura::output::tests::csv_or_null_none_returns_null_token ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_without_metadata_has_bare_doc_root ... ok
[INFO] [stdout] test trafilatura::output::tests::delete_element_no_parent_is_noop ... ok
[INFO] [stdout] test trafilatura::output::tests::control_xml_output_with_metadata_attrs_populate_doc_root ... ok
[INFO] [stdout] test trafilatura::output::tests::document_struct_carries_body_and_metadata ... ok
[INFO] [stdout] test trafilatura::output::tests::document_struct_carries_commentsbody_when_present ... ok
[INFO] [stdout] test trafilatura::output::tests::handle_text_content_of_div_nodes_appends_tail_to_last_p ... ok
[INFO] [stdout] test trafilatura::output::tests::handle_text_content_of_div_nodes_blank_tail_is_noop ... ok
[INFO] [stdout] test trafilatura::output::tests::handle_text_content_of_div_nodes_blank_text_is_noop ... ok
[INFO] [stdout] test trafilatura::output::tests::handle_unwanted_tails_p_no_existing_text_uses_tail_alone ... ok
[INFO] [stdout] test trafilatura::output::tests::handle_unwanted_tails_ab_no_parent_no_panic ... ok
[INFO] [stdout] test trafilatura::output::tests::handle_unwanted_tails_p_whitespace_only_tail_is_dropped ... ok
[INFO] [stdout] test trafilatura::output::tests::json_optional_str_some_returns_quoted_string ... ok
[INFO] [stdout] test trafilatura::output::tests::json_str_basic_string_quoted_no_escapes ... ok
[INFO] [stdout] test trafilatura::output::tests::json_str_newline_escaped ... ok
[INFO] [stdout] test trafilatura::output::tests::json_str_non_ascii_passes_through_verbatim ... ok
[INFO] [stdout] test trafilatura::output::tests::handle_unwanted_tails_p_explicit_empty_tail_is_dropped ... ok
[INFO] [stdout] test trafilatura::output::tests::handle_unwanted_tails_p_no_tail_is_noop ... ok
[INFO] [stdout] test trafilatura::output::tests::handle_text_content_of_div_nodes_creates_p_for_tail_when_no_p ... ok
[INFO] [stdout] test trafilatura::output::tests::line_processing_decodes_html_space_entities ... ok
[INFO] [stdout] test trafilatura::output::tests::json_optional_str_none_returns_null ... ok
[INFO] [stdout] test trafilatura::output::tests::json_str_quotes_and_backslash_escaped ... ok
[INFO] [stdout] test trafilatura::output::tests::line_processing_preserve_space_returns_decoded_unchanged ... ok
[INFO] [stdout] test trafilatura::output::tests::line_processing_blank_line_returns_none ... ok
[INFO] [stdout] test trafilatura::output::tests::line_processing_nbsp_decoded_to_u00a0 ... ok
[INFO] [stdout] test trafilatura::output::tests::line_processing_trailing_space_reattaches_leading_and_trailing ... ok
[INFO] [stdout] test trafilatura::output::tests::line_processing_trailing_space_only_leading_when_leading_ws ... ok
[INFO] [stdout] test trafilatura::output::tests::merge_with_parent_no_parent_is_noop ... ok
[INFO] [stdout] test trafilatura::output::tests::line_processing_strips_control_chars_then_trims ... ok
[INFO] [stdout] test trafilatura::output::tests::merge_with_parent_includes_formatting_in_text ... ok
[INFO] [stdout] test trafilatura::output::tests::merge_with_parent_into_parent_text_when_no_previous ... ok
[INFO] [stdout] test trafilatura::output::tests::merge_with_parent_into_previous_tail ... ok
[INFO] [stdout] test trafilatura::output::tests::merge_with_parent_appends_space_when_previous_tail_existed ... ok
[INFO] [stdout] test trafilatura::output::tests::merge_with_parent_no_tail_just_text_folds ... ok
[INFO] [stdout] test trafilatura::output::tests::move_element_one_level_up_no_grandparent_is_noop ... ok
[INFO] [stdout] test trafilatura::output::tests::move_element_one_level_up_keeps_p_when_it_has_text ... ok
[INFO] [stdout] test trafilatura::output::tests::move_element_one_level_up_with_following_siblings_lifts_ab ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_cell_ancestor_suppresses_newline ... ok
[INFO] [stdout] test trafilatura::output::tests::move_element_one_level_up_with_tail_on_element_seeds_new_text ... ok
[INFO] [stdout] test trafilatura::output::tests::move_element_one_level_up_no_parent_is_noop ... ok
[INFO] [stdout] test trafilatura::output::tests::move_element_one_level_up_no_siblings_no_tails_skips_new_elem_insert ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_lb_emits_newline_in_newline_elems ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_del_special_formatting_no_trailing_space ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_graphic_emits_markdown_image ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_list_emits_item_dashes ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_heading_emits_hash_prefix_when_formatted ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_row_colspan_capped_at_max_table_width ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_quote_emits_newlines ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_row_head_cell_emits_underline ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_row_head_cell_with_colspan_emits_repeated_underline ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_row_mixed_head_and_plain_cells ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_p_with_text_and_tail_emits_both ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_non_newline_non_special_emits_default_space ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_row_non_digit_colspan_defaults_to_one ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_row_with_non_head_cells_no_underline ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_row_padding_for_colspan ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_paragraph_with_formatting_uses_u2424 ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_row_with_span_attr_uses_span_when_colspan_missing ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_textless_cell_falls_through_to_after_tag ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_simple_paragraph_emits_text_and_trailing_newline ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_table_emits_cell_separators ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_row_with_include_formatting_uses_plain_newline ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_textless_non_newline_tag_early_returns ... ok
[INFO] [stdout] test trafilatura::output::tests::move_element_one_level_up_with_only_ab_tail_no_siblings ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_tail_text_after_element_emitted ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_textless_with_tail_renders_tail ... ok
[INFO] [stdout] test trafilatura::output::tests::python_repr_list_multi_item_comma_space_separated ... ok
[INFO] [stdout] test trafilatura::output::tests::python_repr_list_empty_emits_bracket_pair ... ok
[INFO] [stdout] test trafilatura::output::tests::remove_empty_elements_keeps_graphic_even_when_empty ... ok
[INFO] [stdout] test trafilatura::output::tests::remove_empty_elements_drops_intermediate_after_leaf_removal ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_textless_lb_with_tail_emits_newline_and_tail ... ok
[INFO] [stdout] test trafilatura::output::tests::python_repr_list_single_item_quoted ... ok
[INFO] [stdout] test trafilatura::output::tests::remove_empty_elements_drops_leaf_empty_element ... ok
[INFO] [stdout] test trafilatura::output::tests::remove_empty_elements_preserves_element_with_text_only ... ok
[INFO] [stdout] test trafilatura::output::tests::remove_empty_elements_preserves_element_with_tail_text ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_cell_first_in_row_gets_leading_pipe ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_cell_mid_row_no_leading_pipe ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_cell_with_non_p_child_falls_through_to_leaf ... ok
[INFO] [stdout] test trafilatura::output::tests::process_element_p_with_text_and_no_tail_runs_after_tag ... ok
[INFO] [stdout] test trafilatura::output::tests::move_element_one_level_up_with_p_tail_runs_to_completion ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_cell_with_p_child_mid_row ... ok
[INFO] [stdout] test trafilatura::output::tests::remove_empty_elements_keeps_empty_inside_code ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_code_inline_when_no_newline ... ok
[INFO] [stdout] test trafilatura::output::tests::remove_empty_elements_keeps_graphic_with_no_text_no_children ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_code_multiline_emits_fenced_block ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_default_tag_passes_text_through ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_code_single_line_inline_wrap ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_code_without_formatting_passthrough ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_del_wraps_strikethrough ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_head_defaults_to_h2_when_rend_missing ... ok
[INFO] [stdout] test trafilatura::output::tests::remove_empty_elements_preserves_whitespace_only_text ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_cell_empty_text_emits_empty ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_cell_with_p_child_first_row_trailing_space ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_head_rend_non_digit_defaults_to_two ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_head_emits_heading_prefix_when_formatted ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_cell_with_p_child_first_in_row ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_head_rend_zero_emits_zero_hashes ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_head_h1_emits_single_hash ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_del_without_formatting_passthrough ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_head_h6_emits_six_hashes ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_hi_t_tt_wrap ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_hi_i_italic_wrap ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_hi_u_underline_wrap ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_hi_missing_rend_returns_unwrapped ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_ref_emits_markdown_link ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_ref_without_target_emits_bare_link_text ... ok
[INFO] [stdout] test trafilatura::output::tests::restore_tei_case_handles_self_closing_tei_root ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_ref_empty_target_falls_back_to_link_text ... ok
[INFO] [stdout] test trafilatura::output::tests::restore_tei_case_handles_tei_with_attributes ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_ref_with_empty_text_returns_empty ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_head_without_include_formatting_passes_through ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_hi_b_wraps_bold ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_hi_unknown_rend_returns_unwrapped ... ok
[INFO] [stdout] test trafilatura::output::tests::restore_tei_case_idempotent_on_correct_case ... ok
[INFO] [stdout] test trafilatura::output::tests::restore_tei_case_uppercases_filedesc_titlestmt_chain ... ok
[INFO] [stdout] test trafilatura::output::tests::sanitize_strips_unicode_line_separator_marker ... ok
[INFO] [stdout] test trafilatura::output::tests::sanitize_text_returns_empty_string_on_none ... ok
[INFO] [stdout] test trafilatura::output::tests::sanitize_trailing_space_routes_to_line_processing_directly ... ok
[INFO] [stdout] test trafilatura::output::tests::sanitize_whitespace_only_returns_none ... ok
[INFO] [stdout] test trafilatura::output::tests::serialize_xml_pretty_attr_with_quote_escapes ... ok
[INFO] [stdout] test trafilatura::output::tests::sanitize_empty_input_returns_none ... ok
[INFO] [stdout] test trafilatura::output::tests::sanitize_non_blank_returns_some_joined_lines ... ok
[INFO] [stdout] test trafilatura::output::tests::serialize_xml_pretty_empty_root_self_closes ... ok
[INFO] [stdout] test trafilatura::output::tests::restore_tei_case_uppercases_tei_root_open_close ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_item_emits_dash_prefix ... ok
[INFO] [stdout] test trafilatura::output::tests::serialize_xml_pretty_root_with_attribute_emits_attr ... ok
[INFO] [stdout] test trafilatura::output::tests::replace_element_text_no_text_returns_empty_string ... ok
[INFO] [stdout] test trafilatura::output::tests::serialize_xml_pretty_root_with_text_only_inline ... ok
[INFO] [stdout] test trafilatura::output::tests::serialize_xml_pretty_self_closes_empty_elements ... ok
[INFO] [stdout] test trafilatura::output::tests::serialize_xml_pretty_text_with_amp_lt_gt_escapes_each ... ok
[INFO] [stdout] test trafilatura::output::tests::serialize_xml_pretty_child_with_text_indents_when_root_clean ... ok
[INFO] [stdout] test trafilatura::output::tests::serialize_xml_pretty_with_text_and_child_inline ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_empty_returns_empty ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_idempotent ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_keeps_information_separators ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_keeps_unicode_whitespace ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_passes_ascii_through_verbatim ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_keeps_nel ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_keeps_preserved_cc_whitespace ... ok
[INFO] [stdout] test trafilatura::output::tests::restore_tei_case_preserves_non_tei_tags ... ok
[INFO] [stdout] test trafilatura::output::tests::restore_tei_case_uppercases_biblfull_profiledesc_etc ... ok
[INFO] [stdout] test trafilatura::output::tests::serialize_xml_pretty_mixed_content_stays_inline ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_strips_nul_and_bel ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_strips_invisible_separator_u2063 ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_passes_long_unicode_text_unchanged ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_preserves_letters_marks_numbers ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_strips_zero_width_joiner_set ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_double_tags_collapses_triple_nesting ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_double_tags_does_not_merge_when_inner_parent_is_quote ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_double_tags_leaves_non_matching_pairs_alone ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_strips_pua ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_double_tags_respects_nesting_whitelist ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_strips_bom ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_strips_c1_controls_except_nel ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_strips_soft_hyphen ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_double_tags_collapses_mixed_head_code_p ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_control_chars_strips_del ... ok
[INFO] [stdout] test trafilatura::output::tests::strip_double_tags_collapses_simple_double_p ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_define_publisher_string_returns_na_when_neither_set ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_handle_complex_head_first_p_when_empty_seeds_text ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_check_tei_strips_non_whitelisted_attributes ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_define_publisher_string_falls_back_to_sitename ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_check_tei_strips_non_whitelisted_descendant_tags ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_handle_complex_head_flattens_p_with_lb ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_handle_complex_head_kids_then_p_last_has_tail ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_handle_complex_head_no_children_keeps_text_only ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_handle_text_content_of_div_folds_into_first_p ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_handle_text_content_of_div_inserts_p_when_no_p_child ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_handle_unwanted_tails_on_ab_creates_p_sibling ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_handle_unwanted_tails_on_p_folds_into_text ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_move_element_one_level_up_lifts_ab_from_p ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_wrap_unwanted_siblings_of_div_wraps_p_siblings ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_bare_ampersand_passes_through ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_ddagger_alias_decodes_like_dagger ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_entity_with_non_alnum_terminator_breaks_loop ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_handle_complex_head_p_after_non_p_child_emits_lb ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_handle_complex_head_second_p_emits_lb_separator ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_malformed_hex_falls_back_to_verbatim ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_handle_complex_head_with_non_p_child_keeps_child ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_numeric_decimal_entity ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_named_punctuation_entities ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_scan_limit_truncates_at_10_chars ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_alnum_entity_at_each_position ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_unterminated_entity_passes_through ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_xml_mandatory_entities ... ok
[INFO] [stdout] test trafilatura::output::tests::wrap_unwanted_siblings_flushes_on_non_tei_div_sibling ... ok
[INFO] [stdout] test trafilatura::output::tests::wrap_unwanted_siblings_of_detached_div_is_noop ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_unicode_multibyte_passthrough ... ok
[INFO] [stdout] test trafilatura::output::tests::wrap_unwanted_siblings_breaks_on_next_div ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_unknown_named_falls_back_to_verbatim ... ok
[INFO] [stdout] test trafilatura::output::tests::wrap_unwanted_siblings_with_no_following_siblings_is_noop ... ok
[INFO] [stdout] test trafilatura::output::tests::unescape_html_numeric_hex_entity_lower_and_upper_x ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_categories_emit_textclass_terms ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_categories_only_textclass_has_no_tags_term ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_date_only_sigle_no_sitename ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_emits_both_terms_when_categories_and_tags_set ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_no_filedate_leaves_creation_date_empty ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_date_set_seeds_publication_date_text ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_author_attaches_only_when_non_empty ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_filedate_seeds_creation_date_text ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_define_publisher_string_combines_sitename_and_hostname ... ok
[INFO] [stdout] test trafilatura::output::tests::tei_define_publisher_string_falls_back_to_hostname ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_description_seeds_abstract_p_text ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_sitename_and_date_combine_into_sigle ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_tags_only_textclass_has_no_categories_term ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_url_absent_omits_ptr_url ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_with_license_emits_availability_block ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_url_emits_ptr_url_in_biblfull ... ok
[INFO] [stdout] test trafilatura::output::tests::write_teitree_includes_text_body_div_chain_with_entry_type ... ok
[INFO] [stdout] test trafilatura::output::tests::xmltocsv_custom_delimiter_and_null_token ... ok
[INFO] [stdout] test trafilatura::output::tests::xmltocsv_emits_comment_text_when_commentsbody_nonempty ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_omits_textclass_when_no_categories_or_tags ... ok
[INFO] [stdout] test trafilatura::output::tests::xmltotxt_none_input_returns_empty_string ... ok
[INFO] [stdout] test trafilatura::output::tests::xmltocsv_uses_null_token_for_empty_body ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_tags_emit_textclass_terms ... ok
[INFO] [stdout] test trafilatura::output::tests::xmltotxt_html_entities_in_text_are_unescaped ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_without_license_emits_empty_p_in_publication_stmt ... ok
[INFO] [stdout] test trafilatura::output::tests::write_teitree_includes_div_with_type_comments_when_none ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::cascade_arbiter_empty_and_equal_length_arms ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::cascade_picks_longer_extraction ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::arbiter_precision_focus_prefers_shorter_when_close ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::arbiter_balanced_focus_uses_length_ratio ... ok
[INFO] [stdout] test trafilatura::output::tests::xmltotxt_simple_text_round_trips_through_sanitize_and_unescape ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::arbiter_recall_focus_prefers_longer_when_close ... ok
[INFO] [stdout] test trafilatura::output::tests::write_fullheader_title_only_seeds_source_bibl ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::arbiter_falls_through_to_justext_when_both_arms_short ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::cascade_returns_none_when_both_arms_empty ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::cascade_three_arm_picks_justext_when_others_fail ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::bare_extraction_with_cascade_precision_focus_skips_baseline_rescue ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::class_weight_neutral ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::class_weight_negative_class ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::cascade_three_arm_picks_own_when_substantial ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::class_weight_both_positive_and_negative_on_same_attr ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::class_weight_positive_id ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::cascade_three_arm_picks_readability_when_own_too_short_but_readability_succeeds ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_branch1_equal_length_keeps_own ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_branch2_own_empty_algo_nonempty_picks_algo ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_body_has_p_text_returns_false_for_whitespace_p ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_branch5_body_has_no_p_text_picks_algo ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_4x_guard_keeps_arbiter_winner_over_short_justext ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_both_arms_empty_falls_through ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_branch6_table_p_imbalance_picks_algo ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_own_wins_skips_sanitize_post_pass ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::document_new_uses_python_defaults ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_branch7_body_has_head_skips_branch ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_branch7_algo_has_no_subhead_skips ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_branch7_recall_focus_picks_algo_when_subhead_present ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_uses_lru_dedup_when_options_dedup_set ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_branch7_fires_when_all_conjuncts_true ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_json_ld_algo_keeps_own ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::document_summary_returns_body_for_empty_html ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::document_summary_falls_back_to_body_when_no_candidates_either_attempt ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::compare_extraction_justext_4x_guard_keeps_arbiter_winner ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::document_summary_returns_best_candidate_for_simple_article ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::document_summary_mutates_dom_in_place_across_attempts ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::get_article_rescues_long_low_link_p_sibling ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::get_article_rescues_short_dotspace_p_sibling_via_cond_b ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::get_article_appends_high_scoring_candidate_sibling ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::link_density_all_link_returns_one ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::link_density_empty_returns_zero ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::link_density_half_link_around_half ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::is_probably_readerable_skips_hidden_elements ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::is_node_visible_short_circuits ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::is_probably_readerable_skips_p_whose_li_parent_has_p ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::is_probably_readerable_collects_div_with_br_parent ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::is_probably_readerable_returns_true_for_long_article ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::is_probably_readerable_returns_false_for_navigation_page ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::precision_preclean_recall_bypass_short_circuits ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::regex_unlikely_candidates_matches_sidebar ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::precision_preclean_default_focus_leaves_backup_untouched ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::precision_preclean_branch_arbiter_still_fires ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::remove_unlikely_candidates_skips_frame_tag_body_with_unlikely_class ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::document_summary_strips_navigation_before_returning ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::regex_video_matches_youtube_and_vimeo ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::precision_preclean_drops_overall_discard_match ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::precision_preclean_no_match_yields_default_output ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::remove_unlikely_candidates_strips_comment_div ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_div_with_multiple_embeds ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_div_with_no_content_and_no_long_siblings ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_div_with_short_content_and_many_images ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_div_with_one_embed_and_short_content ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_header_with_high_link_density ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::remove_unlikely_candidates_keeps_ok_maybe_override_div ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_div_with_too_many_inputs ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_iframe_with_empty_src ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_form_element ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_div_with_high_weight_and_very_high_link_density ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_iframe_without_video_src ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_div_with_more_li_than_p_after_defang ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_header_with_negative_class_weight ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_div_with_too_many_images ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_keeps_div_with_ten_or_more_commas ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_negative_weighted_text_clean_elem ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_no_content_div_when_siblings_too_short ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_no_content_div_with_no_siblings ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_keeps_header_with_positive_weight_and_no_links ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_keeps_img_with_src ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_keeps_img_without_src_faithful_to_python ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_keeps_data_table_via_class_weight ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_keeps_div_with_one_embed_and_long_content ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_drops_textarea_element ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_high_link_density_div_removed ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_no_content_rescue_aside_not_in_allowed_self_set ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_keeps_no_content_div_when_siblings_long ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_keeps_youtube_iframe ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::score_node_blockquote_gets_3pts ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::score_node_bad_elem_neg3 ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::score_node_div_gets_5pts ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::score_paragraph_text_short_returns_base ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::score_node_structure_neg5 ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::score_node_combines_class_weight_and_tag ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_no_content_rescue_skips_empty_siblings ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::score_paragraph_text_comma_bonus ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::score_paragraph_text_long_capped ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::select_best_candidate_picks_highest_scored ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_keeps_no_content_div_via_backward_sibling_rescue ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::text_length_counts_codepoints_not_bytes ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::transform_misused_divs_br_then_elem_then_tail ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::transform_misused_divs_into_paragraphs_renames_text_only_div_to_p ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::score_paragraph_text_trims_input ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::select_best_candidate_keeps_first_tied_entry ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::transform_misused_divs_leading_text_rescue ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::select_best_candidate_returns_none_for_empty_input ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::transform_misused_divs_skips_whitespace_leading ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::cleaned_only_tag_short_circuits_or_left_arm ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::cleaning_and_stripping_are_disjoint ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::cut_empty_elems_contains_block_carriers ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::transform_misused_divs_tail_rescue ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::manually_cleaned_contains_canonical_boilerplate_tags ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::try_readability_returns_summary_when_own_fails ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::cut_empty_elems_has_22_entries ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::text_length_strips_whitespace_and_counts_chars ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::manually_cleaned_has_51_entries ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::manually_stripped_contains_typography_unwrappers ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::manually_stripped_has_21_entries ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::transform_misused_divs_br_drop ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::rend_of_b_is_hash_b ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::rend_of_em_is_hash_i_not_hash_em ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::rend_of_i_is_hash_i ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::transform_misused_divs_combined_leading_and_tails ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::rend_of_kbd_samp_tt_var_all_hash_t ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::rend_of_strong_is_hash_b ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::rend_tag_mapping_has_11_entries ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::rend_tag_names_match_mapping_keys ... ok
[INFO] [stdout] test trafilatura::utils::tests::duplicate_test_empty_node_returns_false ... ok
[INFO] [stdout] test trafilatura::utils::tests::element_child_count_counts_only_elements ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::rend_of_unmapped_is_none ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::rend_of_sub_sup_distinct ... ok
[INFO] [stdout] test trafilatura::readability_fork::tests::sanitize_keeps_ul_with_many_li_despite_li_count ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::manually_stripped_only_tag_lights_or_right_arm ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::preserve_img_cleaning_has_3_entries ... ok
[INFO] [stdout] test trafilatura::utils::tests::element_text_reads_leading_text_run ... ok
[INFO] [stdout] test trafilatura::utils::tests::element_text_returns_none_when_first_child_is_element ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_element_data_src_present_but_non_image_falls_to_data_src_scan ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_element_falls_through_to_data_src_variants ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_element_non_data_src_attribute_skipped ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_element_data_src_variant_present_but_non_image ... ok
[INFO] [stdout] test trafilatura::settings_constants::tests::unknown_tag_lights_or_both_false_arm ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_element_no_src_no_data_src_falls_through_to_false ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_element_accepts_data_src_first ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_element_rejects_non_image ... ok
[INFO] [stdout] test trafilatura::utils::tests::formatting_protected_membership ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_element_uses_src_when_data_src_absent ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_file_accepts_png_jpg_jpeg_webp_avif_heic_heif ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_file_case_sensitive_per_python_default ... ok
[INFO] [stdout] test trafilatura::utils::tests::set_element_text_none_clears_leading_run ... ok
[INFO] [stdout] test trafilatura::utils::tests::set_tail_replaces_tail_run ... ok
[INFO] [stdout] test trafilatura::utils::tests::set_tail_none_clears_tail_run ... ok
[INFO] [stdout] test trafilatura::utils::tests::spacing_protected_membership ... ok
[INFO] [stdout] test trafilatura::utils::tests::splitlines_python_lone_carriage_return_at_end ... ok
[INFO] [stdout] test trafilatura::utils::tests::splitlines_python_matches_lf_crlf_cr ... ok
[INFO] [stdout] test trafilatura::utils::tests::splitlines_python_newline_at_end_with_trailing_text ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_file_empty_string_does_not_match ... ok
[INFO] [stdout] test trafilatura::utils::tests::splitlines_python_only_newline_yields_empty_first_line ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_file_rejects_javascript_url ... ok
[INFO] [stdout] test trafilatura::utils::tests::splitlines_python_splits_on_vertical_tab ... ok
[INFO] [stdout] test trafilatura::utils::tests::set_element_text_replaces_leading_run ... ok
[INFO] [stdout] test trafilatura::utils::tests::splitlines_python_carriage_return_then_non_newline ... ok
[INFO] [stdout] test trafilatura::utils::tests::text_chars_test_mixed_content_and_whitespace ... ok
[INFO] [stdout] test trafilatura::utils::tests::splitlines_python_empty_input_returns_empty_vec ... ok
[INFO] [stdout] test trafilatura::utils::tests::text_chars_test_single_non_whitespace_char ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_file_rejects_query_appended_garbage ... ok
[INFO] [stdout] test trafilatura::utils::tests::text_chars_test_smoke ... ok
[INFO] [stdout] test trafilatura::utils::tests::textfilter_blocks_empty_and_whitespace ... ok
[INFO] [stdout] test trafilatura::utils::tests::splitlines_python_splits_on_u2028 ... ok
[INFO] [stdout] test trafilatura::utils::tests::textfilter_blocks_facebook_line ... ok
[INFO] [stdout] test trafilatura::utils::tests::is_image_file_rejects_none_and_oversized ... ok
[INFO] [stdout] test trafilatura::utils::tests::textfilter_explicit_empty_text_node_returns_true ... ok
[INFO] [stdout] test trafilatura::utils::tests::textfilter_passes_normal_text ... ok
[INFO] [stdout] test trafilatura::utils::tests::trim_collapses_runs_of_whitespace ... ok
[INFO] [stdout] test trafilatura::utils::tests::trim_only_whitespace_returns_empty ... ok
[INFO] [stdout] test trafilatura::utils::tests::trim_preserves_internal_single_spaces ... ok
[INFO] [stdout] test trafilatura::utils::tests::textfilter_uses_tail_when_text_is_none ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::attribute_eq_predicate ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::absolute_single_slash_path_from_root ... ok
[INFO] [stdout] test trafilatura::utils::tests::textfilter_blocks_pinterest_with_punctuation ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::attribute_predicate_on_text_node_is_always_false ... ok
[INFO] [stdout] test trafilatura::utils::tests::textfilter_with_empty_text_helper_returns_true ... ok
[INFO] [stdout] test trafilatura::utils::tests::trim_smoke ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::attribute_with_hyphen_and_underscore ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::attribute_presence_predicate ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::attribute_eq_with_data_lp_replacement_attr ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::absolute_doubleslash_from_inner_context ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::attribute_axis_step_yields_empty_set ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::bare_attribute_union_predicate_is_boolean_truth ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::body_xpath_first_pattern_smoke ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::bare_empty_string_literal_predicate_is_false ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::body_xpath_main_or_top_class ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::bare_child_element_test_predicate_is_boolean_truth ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::child_axis_only_direct ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::bare_string_literal_predicate_is_true_when_nonempty ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::bare_translate_predicate_is_boolean_truth_of_string ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::child_wildcard_step_selects_direct_element_children ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::contains_or_expression_coerces_boolean_to_string ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::comments_xpath_smoke_with_attribute_union ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::contains_eq_expression_coerces_boolean_to_string ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::contains_nested_contains_coerces_boolean_to_string ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::cite_or_quote_union ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::contains_and_expression_coerces_boolean_false_to_string ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::child_chain_after_paren_path ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::contains_nested_starts_with_coerces_boolean_false_to_string ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::contains_with_node_set_union_first_arg_da_b1 ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::contains_self_tag_test_coerces_boolean_to_string_false ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::deeply_nested_pattern_smoke ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::contains_self_tag_test_coerces_boolean_to_string_true ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::descendant_axis_excludes_self_per_w3c_2_5 ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::contains_simple ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::contains_with_empty_node_set_yields_empty_string_and_false ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::dedup_handles_overlapping_descendants ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::discard_xpath_smoke ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::dot_then_single_slash_child_step ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::descendant_count_is_doc_order ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::evaluate_and_predicate_both_required ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::evaluate_eq_predicate_against_attribute ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::evaluate_empty_context_returns_empty ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::descendant_or_self_finds_nested ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::empty_descendant_set_returns_empty ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::evaluate_child_axis_with_text_test ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::evaluate_or_predicate_short_circuit ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::format_number_infinities_render_signed_literals ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::evaluate_positional_out_of_range_returns_empty ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::evaluate_text_axis_returns_text_descendants ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::format_number_nan_renders_literal_nan ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::format_number_integer_drops_trailing_zero ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::link_density_pattern_smoke ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::multi_or_predicate ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::number_in_boolean_context_is_true_when_nonzero ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::evaluate_number_literal_truthy_in_predicate ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::evaluate_self_axis_wildcard_on_element ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::number_zero_in_boolean_context_is_false ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::paren_path_then_trailing_descendant_step ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::paren_around_union_with_positional_is_unsupported ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_bare_dot_returns_empty_path ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::evaluate_starts_with_empty_prefix_is_true ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_at_inside_union_non_attribute ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::format_number_fractional_keeps_decimal ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_contains_wrong_arity ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_dot_with_no_slash_or_doubleslash ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_predicate_without_step ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_self_axis_without_tag ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::evaluate_contains_empty_needle_is_true ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_empty_expression ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_trailing_double_slash ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_translate_wrong_arity ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_unsupported_axis_preceding_sibling ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_starts_with_wrong_arity ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_trailing_tokens_after_path ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_trailing_tokens_after_union ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_unknown_function ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_unterminated_predicate_bracket ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_unterminated_string ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_paren_position ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_predicate_with_zero_is_unsupported ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_union_inside_parens_exercises_union_loop_then_rejects ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_unsupported_function_namespace_uri ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_unsupported_ancestor_axis ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_simple_descendant ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_unsupported_function_position ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_unsupported_axis_following ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_union ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_unsupported_union_of_non_attribute ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::self_axis_in_predicate ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::tag_test_lowercases ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::positional_one ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::self_tag_test_on_text_node_is_always_false ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::starts_with_simple ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::predicate_then_positional_da_b1_ordering ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::self_axis_self_only ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::tokenize_error_on_bad_character_caret ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::tokenize_error_on_unexpected_character ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::parse_error_on_lone_at_sign ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::tokenize_number_with_decimal_then_step ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::tokenize_decimal_number_recognised ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::tokenize_self_axis ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::tokenize_error_on_lone_colon ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::translate_deletion_when_to_shorter_than_from ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::translate_empty_from_passes_through ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::translate_empty_to_deletes_all_matches ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::tokenize_unterminated_double_quoted_string_returns_parse_error ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::tokenize_basics ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::tokenize_name_with_underscore ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::translate_empty_src_is_empty ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::text_node_count_external_arbiter ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::translate_spec_example ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::translate_of_boolean_expression_coerces_to_string ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::union_top_level ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::all_xpaths_total_count ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::translate_single_char_table ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::translate_unicode_passthrough ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::author_discard_xpaths_second_is_time_union_figure ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::body_xpath_first_prefix ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::body_xpath_has_5_entries ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::body_xpath_last_is_starts_with_main_union ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::union_doc_order_preserved ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::body_xpath_second_is_first_article ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::categories_xpaths_has_6_entries ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::categories_xpaths_last_is_row_or_tags ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::wildcard_descendants ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::comments_discard_xpath_first_is_respond ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::comments_discard_xpath_has_3_entries ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::comments_discard_xpath_second_is_cite_union_quote ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::comments_xpath_first_prefix ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::all_xpaths_table_matches_per_constant_lengths ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::author_discard_xpaths_has_2_entries ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::comments_xpath_has_4_entries ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::discard_image_elements_has_1_entry ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::discard_image_elements_prefix ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::no_xpath_is_empty ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::overall_discard_xpath_first_prefix ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::overall_discard_xpath_has_2_entries ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::overall_discard_xpath_second_prefix ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::precision_discard_xpath_has_2_entries ... ok
[INFO] [stdout] test trafilatura::xpath_engine::tests::xpaths_py_patterns_all_parse ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::precision_discard_xpath_second_prefix ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::remove_comments_xpath_has_1_entry ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::remove_comments_xpath_prefix ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::tags_xpaths_has_4_entries ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::precision_discard_xpath_first_is_header ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::tags_xpaths_first_is_div_class_tags ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::teaser_discard_xpath_has_1_entry ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::teaser_discard_xpath_prefix ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::title_xpaths_has_3_entries ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::title_xpaths_second_is_entry_or_post_title ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::author_xpaths_first_prefix ... ok
[INFO] [stdout] test trafilatura::xpaths_constants::tests::author_xpaths_has_3_entries ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 2586 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.16s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests readex
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c", kill_on_drop: false }`
[INFO] [stdout] 423aa673a0c82849b588d7fcbee8493ba085adeb4dfb1f8de018889ccf88d95c
