cranpose-services 0.1.161

Multiplatform system services for Cranpose (HTTP, URI, and OS integrations)
Documentation
use std::sync::{Arc, Mutex, PoisonError};

use cranpose_services::{
    LifecycleState, advance_lifecycle, current_lifecycle_state, observe_lifecycle,
    window_lifecycle_state,
};

#[test]
fn a_window_is_resumed_when_focused_paused_when_only_visible_and_stopped_when_hidden() {
    assert_eq!(window_lifecycle_state(true, true), LifecycleState::Resumed);
    assert_eq!(window_lifecycle_state(true, false), LifecycleState::Paused);
    assert_eq!(window_lifecycle_state(false, true), LifecycleState::Stopped);
    assert_eq!(
        window_lifecycle_state(false, false),
        LifecycleState::Stopped
    );
}

#[test]
fn advancing_the_lifecycle_passes_through_every_state_in_between() {
    let seen = Arc::new(Mutex::new(Vec::new()));
    let log = Arc::clone(&seen);
    let _observer = observe_lifecycle(move |event| {
        log.lock()
            .unwrap_or_else(PoisonError::into_inner)
            .push(event.to);
    });
    assert_eq!(current_lifecycle_state(), LifecycleState::Created);
    for (visible, focused) in [
        (true, true),
        (true, false),
        (false, false),
        (true, false),
        (true, true),
    ] {
        advance_lifecycle(window_lifecycle_state(visible, focused));
    }
    advance_lifecycle(LifecycleState::Destroyed);
    advance_lifecycle(LifecycleState::Resumed);
    let seen = seen.lock().unwrap_or_else(PoisonError::into_inner).clone();
    assert_eq!(
        seen,
        vec![
            LifecycleState::Started,
            LifecycleState::Resumed,
            LifecycleState::Paused,
            LifecycleState::Stopped,
            LifecycleState::Started,
            LifecycleState::Resumed,
            LifecycleState::Paused,
            LifecycleState::Stopped,
            LifecycleState::Destroyed,
        ]
    );
}

#[test]
fn is_at_least_orders_states_like_android() {
    assert!(LifecycleState::Resumed.is_at_least(LifecycleState::Started));
    assert!(LifecycleState::Paused.is_at_least(LifecycleState::Started));
    assert!(!LifecycleState::Paused.is_at_least(LifecycleState::Resumed));
    assert!(LifecycleState::Stopped.is_at_least(LifecycleState::Created));
    assert!(!LifecycleState::Stopped.is_at_least(LifecycleState::Started));
    assert!(!LifecycleState::Destroyed.is_at_least(LifecycleState::Created));
}