ntfsanitise 0.3.0

Sanitise filenames for use on NTFS filesystems
Documentation
use std::path::PathBuf;

use crate::{PathBufExt, PathExt};

#[test]
fn clean_path() {
	// DOS device path: https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths
	let path = PathBuf::from("\\\\?\\C:\\Users\\morgan.yu\\hello.txt");
	assert!(path.is_clean());
	assert!(path.has_clean_file_name());
}

#[test]
fn dirty_path() {
	let path = PathBuf::from("C:\\Users\\turbo::<fish>\\collect::<Vec<_>>().txt");
	assert!(path.is_dirty());
	assert!(path.has_dirty_file_name());
}

#[test]
fn dirty_path_clean_filename() {
	let path = PathBuf::from("D:\\Games\\TITANFALL|2\\hl2.exe");
	assert!(path.is_dirty());
	assert!(path.has_clean_file_name());
}

#[test]
fn sanitise_filename() {
	let mut path = PathBuf::from("D:\\Examples\\*tada!*.txt");
	assert!(path.has_dirty_file_name());
	assert_eq!(path.sanitise_filename("_"), Some(true));
	assert!(path.has_clean_file_name());
	assert!(path.is_clean());
	assert!(path.file_name().is_some_and(|file_name| file_name.to_str() == Some("_tada!_.txt")));
}