obliterate 1.2.0

Force-remove Files and Directories on Linux Including Paths with 000 Permissions.
Documentation
use std::path::{Path, PathBuf};
use super::{mounts_under, parse_mountinfo_line, unescape_mountinfo};

#[test]
fn unescape_space_octal() {
    assert_eq!(unescape_mountinfo("/mnt/my\\040dir"), "/mnt/my dir");
}

#[test]
fn unescape_incomplete_sequence_kept_verbatim() {
    assert_eq!(unescape_mountinfo("a\\04b"), "a\\04b");
    assert_eq!(unescape_mountinfo("a\\"), "a\\");
}

#[test]
fn parse_line_with_optional_fields() {
    let line = "42 1 8:1 / /mnt/x rw peer:123 shared:45 - tmpfs tmpfs rw";
    let mp = parse_mountinfo_line(line).expect("should parse with optional fields");
    assert_eq!(mp.path, PathBuf::from("/mnt/x"));
}

#[test]
fn parse_fuse_sshfs_line() {
    let line = "42 1 8:1 / /mnt/remote rw,relatime - fuse.sshfs user@host:/srv rw";
    let mp = parse_mountinfo_line(line).expect("should parse");
    assert_eq!(mp.path, PathBuf::from("/mnt/remote"));
}

#[test]
fn parse_mountpoint_with_encoded_space() {
    let line = "42 1 8:1 / /mnt/my\\040volume rw,relatime - ext4 /dev/sdb1 rw";
    let mp = parse_mountinfo_line(line).expect("should parse");
    assert_eq!(mp.path, PathBuf::from("/mnt/my volume"));
}

#[test]
fn parse_returns_none_for_malformed_line() {
    assert!(parse_mountinfo_line("not a valid mountinfo line").is_none());
    assert!(parse_mountinfo_line("").is_none());
}

#[test]
fn mounts_under_nonexistent_path_returns_empty() {
    let result = mounts_under(Path::new("/this/path/does/not/exist/obliterate-test"));
    assert!(result.is_ok());
    assert!(result.unwrap().is_empty());
}