$ python3 -m unittest discover -s tests -v
test_config_mismatch_refused (test_folder_compare.ComparisonTests.test_config_mismatch_refused) ... ok
test_digest_size_contradiction_across_snapshots (test_folder_compare.ComparisonTests.test_digest_size_contradiction_across_snapshots) ... ok
test_four_primary_results (test_folder_compare.ComparisonTests.test_four_primary_results) ... ok
test_identical_metadata_different_hash_is_changed (test_folder_compare.ComparisonTests.test_identical_metadata_different_hash_is_changed) ... ok
test_incomplete_refused_not_deleted (test_folder_compare.ComparisonTests.test_incomplete_refused_not_deleted) ... ok
test_missing_and_null_hash_are_unverified (test_folder_compare.ComparisonTests.test_missing_and_null_hash_are_unverified) ... ok
test_missing_hash_metadata_difference_stays_unverified (test_folder_compare.ComparisonTests.test_missing_hash_metadata_difference_stays_unverified) ... ok
test_rename_is_only_added_and_deleted (test_folder_compare.ComparisonTests.test_rename_is_only_added_and_deleted) ... ok
test_same_digest_different_mtime_is_metadata_changed (test_folder_compare.ComparisonTests.test_same_digest_different_mtime_is_metadata_changed) ... ok
test_custom_target_argument_refused (test_folder_compare.FixtureHelperTests.test_custom_target_argument_refused) ... ok
test_only_known_synthetic_fixture_times_are_restored (test_folder_compare.FixtureHelperTests.test_only_known_synthetic_fixture_times_are_restored) ... ok
test_wrong_fixture_bytes_refused_before_any_time_change (test_folder_compare.FixtureHelperTests.test_wrong_fixture_bytes_refused_before_any_time_change) ... ok
test_access_error_not_deletion (test_folder_compare.SnapshotTests.test_access_error_not_deletion) ... ok
test_cli_incomplete_exit_nonzero_and_compare_refuses (test_folder_compare.SnapshotTests.test_cli_incomplete_exit_nonzero_and_compare_refuses) ... ok
test_cli_parent_hop_creates_no_output_in_real_scanned_input (test_folder_compare.SnapshotTests.test_cli_parent_hop_creates_no_output_in_real_scanned_input) ... ok
test_clobber_refused_and_existing_bytes_unchanged (test_folder_compare.SnapshotTests.test_clobber_refused_and_existing_bytes_unchanged) ... ok
test_common_fstat_race_detected (test_folder_compare.SnapshotTests.test_common_fstat_race_detected) ... ok
test_directory_scan_error_incomplete (test_folder_compare.SnapshotTests.test_directory_scan_error_incomplete) ... ok
test_entry_limit_includes_directories (test_folder_compare.SnapshotTests.test_entry_limit_includes_directories) ... ok
test_exclusion_prefix_recorded (test_folder_compare.SnapshotTests.test_exclusion_prefix_recorded) ... ok
test_failed_hash_reads_still_consume_total_budget (test_folder_compare.SnapshotTests.test_failed_hash_reads_still_consume_total_budget) ... ok
test_file_byte_limit_records_error (test_folder_compare.SnapshotTests.test_file_byte_limit_records_error) ... ok
test_invalid_config_limits_refused (test_folder_compare.SnapshotTests.test_invalid_config_limits_refused) ... ok
test_multiple_scan_and_directory_race_errors_still_form_valid_snapshot (test_folder_compare.SnapshotTests.test_multiple_scan_and_directory_race_errors_still_form_valid_snapshot) ... ok
test_no_hash_does_not_read_file (test_folder_compare.SnapshotTests.test_no_hash_does_not_read_file) ... ok
test_original_bytes_mtime_mode_preserved (test_folder_compare.SnapshotTests.test_original_bytes_mtime_mode_preserved) ... ok
test_output_inside_input_or_symlink_alias_refused (test_folder_compare.SnapshotTests.test_output_inside_input_or_symlink_alias_refused) ... ok
test_oversized_json_output_refused_before_file_creation (test_folder_compare.SnapshotTests.test_oversized_json_output_refused_before_file_creation) ... ok
test_parent_hop_cannot_erase_symlink_ancestor (test_folder_compare.SnapshotTests.test_parent_hop_cannot_erase_symlink_ancestor) ... ok
test_reparse_attribute_is_detected_without_windows_claim (test_folder_compare.SnapshotTests.test_reparse_attribute_is_detected_without_windows_claim) ... ok
test_symlink_file_and_dir_make_snapshot_incomplete (test_folder_compare.SnapshotTests.test_symlink_file_and_dir_make_snapshot_incomplete) ... ok
test_symlink_root_refused (test_folder_compare.SnapshotTests.test_symlink_root_refused) ... ok
test_total_byte_limit_and_exact_boundary (test_folder_compare.SnapshotTests.test_total_byte_limit_and_exact_boundary) ... ok
test_undecodable_source_filename_is_incomplete_safe_json (test_folder_compare.SnapshotTests.test_undecodable_source_filename_is_incomplete_safe_json) ... ok
test_aggregate_captured_bytes_cannot_exceed_budget (test_folder_compare.ValidationTests.test_aggregate_captured_bytes_cannot_exceed_budget) ... ok
test_case_alias_paths_refused (test_folder_compare.ValidationTests.test_case_alias_paths_refused) ... ok
test_claimed_complete_with_errors_refused (test_folder_compare.ValidationTests.test_claimed_complete_with_errors_refused) ... ok
test_duplicate_json_keys_and_nan_refused (test_folder_compare.ValidationTests.test_duplicate_json_keys_and_nan_refused) ... ok
test_duplicate_paths_refused (test_folder_compare.ValidationTests.test_duplicate_paths_refused) ... ok
test_empty_hash_and_nonempty_size_contradiction (test_folder_compare.ValidationTests.test_empty_hash_and_nonempty_size_contradiction) ... ok
test_excluded_file_cannot_be_in_files (test_folder_compare.ValidationTests.test_excluded_file_cannot_be_in_files) ... ok
test_fifo_json_input_refused_without_hanging (test_folder_compare.ValidationTests.test_fifo_json_input_refused_without_hanging) ... ok
test_file_cannot_be_another_files_parent (test_folder_compare.ValidationTests.test_file_cannot_be_another_files_parent) ... ok
test_json_size_bounded (test_folder_compare.ValidationTests.test_json_size_bounded) ... ok
test_link_exclusion_without_error_refused (test_folder_compare.ValidationTests.test_link_exclusion_without_error_refused) ... ok
test_surrogate_path_refused (test_folder_compare.ValidationTests.test_surrogate_path_refused) ... ok
test_unsafe_paths_refused (test_folder_compare.ValidationTests.test_unsafe_paths_refused) ... ok
test_wrong_types_unknown_fields_and_versions_refused (test_folder_compare.ValidationTests.test_wrong_types_unknown_fields_and_versions_refused) ... ok

----------------------------------------------------------------------
Ran 48 tests in 0.226s

OK
exit=0
