rmux-proto 0.1.0

RMUX detached IPC protocol DTOs, framing, and wire-safe error types.
Documentation
use super::SetOptionRequest;
use crate::{OptionName, RmuxError, ScopeSelector, SessionName, SetOptionMode};

#[test]
fn set_option_rejects_append_for_non_terminal_features() {
    let request = SetOptionRequest {
        scope: ScopeSelector::Global,
        option: OptionName::Status,
        value: "off".to_owned(),
        mode: SetOptionMode::Append,
    };

    assert_eq!(
        request.validate(),
        Err(RmuxError::InvalidSetOption(
            "status is not an array option".to_owned()
        ))
    );
}

#[test]
fn set_option_rejects_session_scoped_default_terminal() {
    let request = SetOptionRequest {
        scope: ScopeSelector::Session(SessionName::new("alpha").expect("valid session name")),
        option: OptionName::DefaultTerminal,
        value: "tmux-256color".to_owned(),
        mode: SetOptionMode::Replace,
    };

    assert_eq!(
        request.validate(),
        Err(RmuxError::InvalidSetOption(
            "default-terminal is only supported at global scope".to_owned()
        ))
    );
}

#[test]
fn set_option_rejects_session_scoped_terminal_features() {
    let request = SetOptionRequest {
        scope: ScopeSelector::Session(SessionName::new("alpha").expect("valid session name")),
        option: OptionName::TerminalFeatures,
        value: "xterm".to_owned(),
        mode: SetOptionMode::Replace,
    };

    assert_eq!(
        request.validate(),
        Err(RmuxError::InvalidSetOption(
            "terminal-features is only supported at global scope".to_owned()
        ))
    );
}

#[test]
fn set_option_accepts_global_terminal_features_append() {
    let request = SetOptionRequest {
        scope: ScopeSelector::Global,
        option: OptionName::TerminalFeatures,
        value: "xterm".to_owned(),
        mode: SetOptionMode::Append,
    };

    assert_eq!(request.validate(), Ok(()));
}

#[test]
fn set_option_accepts_global_default_terminal_replace() {
    let request = SetOptionRequest {
        scope: ScopeSelector::Global,
        option: OptionName::DefaultTerminal,
        value: "tmux-256color".to_owned(),
        mode: SetOptionMode::Replace,
    };

    assert_eq!(request.validate(), Ok(()));
}