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());
}