cranpose-render-common 0.1.164

Common rendering contracts for Cranpose
Documentation
use std::os::unix::ffi::OsStrExt;

use super::*;

#[test]
fn a_non_utf8_path_override_survives_byte_for_byte() {
    let raw = OsStr::from_bytes(b"/cranpose/\xff\xfe/cache.bin");
    set_debug_toggle_os("CRANPOSE_TOGGLE_OS_TEST", Some(raw));
    assert_eq!(
        debug_toggle_os("CRANPOSE_TOGGLE_OS_TEST").as_deref(),
        Some(raw)
    );
    assert_eq!(debug_toggle("CRANPOSE_TOGGLE_OS_TEST"), None);
    set_debug_toggle_os("CRANPOSE_TOGGLE_OS_TEST", None);
    assert_eq!(debug_toggle_os("CRANPOSE_TOGGLE_OS_TEST"), None);
}

#[test]
fn an_unset_toggle_observes_overrides_from_another_thread() {
    let toggle = std::sync::Arc::new(DebugToggle::new("CRANPOSE_TOGGLE_THREAD_TEST"));
    assert!(!toggle.is_set());
    let reader = std::sync::Arc::clone(&toggle);
    std::thread::spawn(move || {
        set_debug_toggle("CRANPOSE_TOGGLE_THREAD_TEST", Some("1"));
        assert!(reader.flag());
        assert_eq!(reader.parse::<u32>(), Some(1));
    })
    .join()
    .expect("override thread");
    assert!(toggle.equals("1"));
    set_debug_toggle("CRANPOSE_TOGGLE_THREAD_TEST", None);
    assert!(!toggle.is_set());
    assert_eq!(toggle.parse::<u32>(), None);
}

#[test]
fn a_cached_toggle_follows_every_override() {
    static TOGGLE: DebugToggle = DebugToggle::new("CRANPOSE_TOGGLE_CACHE_TEST");
    assert!(!TOGGLE.is_set());
    set_debug_toggle("CRANPOSE_TOGGLE_CACHE_TEST", Some("1"));
    assert!(TOGGLE.flag());
    assert!(TOGGLE.equals("1"));
    assert_eq!(TOGGLE.parse::<u32>(), Some(1));
    set_debug_toggle("CRANPOSE_TOGGLE_CACHE_TEST", Some("frame"));
    assert!(!TOGGLE.flag());
    assert!(TOGGLE.equals("frame"));
    assert_eq!(TOGGLE.parse::<u32>(), None);
    set_debug_toggle("CRANPOSE_TOGGLE_CACHE_TEST", None);
    assert!(!TOGGLE.is_set());
}