prefs 0.1.2

Type-safe macOS preferences library
use prefs::{Key, Preferences};

fn test_domain() -> String {
    format!("com.myrt.test.{}", std::process::id())
}

#[test]
fn test_bool_roundtrip() {
    const KEY: Key<bool> = Key::new("test_bool");
    let domain = test_domain();
    let prefs = Preferences::new(&domain).unwrap();

    assert!(!prefs.contains(KEY).unwrap());
    assert_eq!(prefs.get(KEY).unwrap(), None);

    prefs.set(KEY, &true).unwrap();
    assert!(prefs.contains(KEY).unwrap());
    assert_eq!(prefs.get(KEY).unwrap(), Some(true));

    prefs.remove(KEY).unwrap();
    assert!(!prefs.contains(KEY).unwrap());
}

#[test]
fn test_i64_roundtrip() {
    const KEY: Key<i64> = Key::new("test_i64");
    let domain = test_domain();
    let prefs = Preferences::new(&domain).unwrap();

    prefs.set(KEY, &42).unwrap();
    assert_eq!(prefs.get(KEY).unwrap(), Some(42));
    assert_eq!(prefs.get_or(KEY, 0).unwrap(), 42);

    prefs.remove(KEY).unwrap();
    assert_eq!(prefs.get(KEY).unwrap(), None);
}

#[test]
fn test_f64_roundtrip() {
    const KEY: Key<f64> = Key::new("test_f64");
    let domain = test_domain();
    let prefs = Preferences::new(&domain).unwrap();

    prefs.set(KEY, &2.5).unwrap();
    assert_eq!(prefs.get(KEY).unwrap(), Some(2.5));

    prefs.remove(KEY).unwrap();
}

#[test]
fn test_string_roundtrip() {
    const KEY: Key<String> = Key::new("test_string");
    let domain = test_domain();
    let prefs = Preferences::new(&domain).unwrap();

    prefs.set(KEY, &"hello".into()).unwrap();
    assert_eq!(prefs.get(KEY).unwrap(), Some("hello".into()));

    prefs.remove(KEY).unwrap();
}

#[test]
fn test_vec_string_roundtrip() {
    const KEY: Key<Vec<String>> = Key::new("test_vec");
    let domain = test_domain();
    let prefs = Preferences::new(&domain).unwrap();

    let value = vec!["a".into(), "b".into()];
    prefs.set(KEY, &value).unwrap();
    assert_eq!(prefs.get(KEY).unwrap(), Some(value));

    prefs.remove(KEY).unwrap();
}

#[test]
fn test_preferences_clone_and_debug() {
    let prefs = Preferences::new("com.example.test").unwrap();
    let cloned = prefs.clone();
    let _ = format!("{prefs:?}");
    let _ = format!("{cloned:?}");
}