medius 1.4.0

Host control library for the medius transparent mouse passthrough box
Documentation
use crate::link::reconcile::DesiredState;
use crate::types::{Button, ButtonAction};

#[test]
fn default_is_idle() {
    let d = DesiredState::default();
    assert!(d.is_idle());
    assert_eq!(d.held().count(), 0);
}

#[test]
fn press_is_held_and_non_idle() {
    let mut d = DesiredState::default();
    d.apply(Button::Left, ButtonAction::Press);
    assert!(!d.is_idle());
    assert_eq!(
        d.held().collect::<Vec<_>>(),
        vec![(Button::Left, ButtonAction::Press)]
    );
}

#[test]
fn force_release_is_held() {
    let mut d = DesiredState::default();
    d.apply(Button::Right, ButtonAction::ForceRelease);
    assert!(!d.is_idle());
    assert_eq!(
        d.held().collect::<Vec<_>>(),
        vec![(Button::Right, ButtonAction::ForceRelease)]
    );
}

#[test]
fn soft_release_clears_the_override() {
    let mut d = DesiredState::default();
    d.apply(Button::Middle, ButtonAction::Press);
    d.apply(Button::Middle, ButtonAction::SoftRelease);
    assert!(d.is_idle());
}

#[test]
fn clear_resets_all() {
    let mut d = DesiredState::default();
    d.apply(Button::Left, ButtonAction::Press);
    d.apply(Button::Side2, ButtonAction::ForceRelease);
    assert!(!d.is_idle());
    d.clear();
    assert!(d.is_idle());
    assert_eq!(d.held().count(), 0);
}

#[test]
fn held_preserves_button_identity_in_order() {
    let mut d = DesiredState::default();
    d.apply(Button::Left, ButtonAction::Press);
    d.apply(Button::Side1, ButtonAction::ForceRelease);
    assert_eq!(
        d.held().collect::<Vec<_>>(),
        vec![
            (Button::Left, ButtonAction::Press),
            (Button::Side1, ButtonAction::ForceRelease),
        ]
    );
}