win-desktop-utils 0.5.7

Windows desktop helpers for shell, shortcuts, app data, elevation, and single-instance Rust apps
Documentation
use std::ffi::OsStr;

use win_desktop_utils::{
    ensure_local_app_data, ensure_roaming_app_data, local_app_data, roaming_app_data, Error,
};

fn unique_app_name(prefix: &str) -> String {
    let unique = std::time::SystemTime::now()
        .duration_since(std::time::UNIX_EPOCH)
        .expect("system time should be after Unix epoch")
        .as_nanos();

    format!(
        "win-desktop-utils-test-{prefix}-{}-{unique}",
        std::process::id()
    )
}

#[test]
fn roaming_app_data_rejects_empty_name() {
    let result = roaming_app_data("");
    assert!(matches!(result, Err(Error::InvalidInput(_))));
}

#[test]
fn roaming_app_data_rejects_nul_bytes() {
    let result = roaming_app_data("demo\0app");
    assert!(matches!(result, Err(Error::InvalidInput(_))));
}

#[test]
fn local_app_data_rejects_empty_name() {
    let result = local_app_data("");
    assert!(matches!(result, Err(Error::InvalidInput(_))));
}

#[test]
fn local_app_data_rejects_nul_bytes() {
    let result = local_app_data("demo\0app");
    assert!(matches!(result, Err(Error::InvalidInput(_))));
}

#[test]
fn roaming_app_data_appends_app_name() {
    let app_name = unique_app_name("roaming");
    let path = roaming_app_data(&app_name).unwrap();
    assert_eq!(path.file_name(), Some(OsStr::new(&app_name)));
}

#[test]
fn local_app_data_appends_app_name() {
    let app_name = unique_app_name("local");
    let path = local_app_data(&app_name).unwrap();
    assert_eq!(path.file_name(), Some(OsStr::new(&app_name)));
}

#[test]
fn ensure_roaming_app_data_creates_directory() {
    let app_name = unique_app_name("ensure-roaming");
    let path = ensure_roaming_app_data(&app_name).unwrap();
    assert!(path.exists());
    assert!(path.is_dir());

    std::fs::remove_dir_all(path).unwrap();
}

#[test]
fn ensure_local_app_data_creates_directory() {
    let app_name = unique_app_name("ensure-local");
    let path = ensure_local_app_data(&app_name).unwrap();
    assert!(path.exists());
    assert!(path.is_dir());

    std::fs::remove_dir_all(path).unwrap();
}