scosh-core 0.1.0

Portable session state and terminal event core for scosh
Documentation
use scosh_core::errors::SdkError;
use scosh_core::events::SessionStatus;
use scosh_core::lifecycle::{Lifecycle, LifecycleEvent};

#[test]
fn background_invalidates_input_and_requires_foreground_recovery() {
    let mut lifecycle = Lifecycle::new();
    assert_eq!(
        lifecycle.transition(LifecycleEvent::Connected),
        Ok(SessionStatus::Live)
    );
    let generation = lifecycle.input_generation();
    assert_eq!(
        lifecycle.transition(LifecycleEvent::Backgrounded),
        Ok(SessionStatus::Suspended)
    );
    assert_eq!(lifecycle.input_generation(), generation + 1);
    assert!(!lifecycle.transport_open());
    assert_eq!(
        lifecycle.transition(LifecycleEvent::Foregrounded),
        Ok(SessionStatus::Recovering)
    );
    assert_eq!(
        lifecycle.transition(LifecycleEvent::Connected),
        Ok(SessionStatus::Live)
    );
}

#[test]
fn close_is_terminal() {
    let mut lifecycle = Lifecycle::new();
    assert_eq!(
        lifecycle.transition(LifecycleEvent::Closed),
        Ok(SessionStatus::Closed)
    );
    assert_eq!(
        lifecycle.transition(LifecycleEvent::Connected),
        Err(SdkError::SessionClosed)
    );
}