rmux 0.9.1

A local terminal multiplexer with a tmux-style CLI, daemon runtime, Rust SDK, and ratatui integration.
use super::parse;

fn parse_args(args: &[&str]) -> Result<super::Cli, clap::Error> {
    let mut full_args = vec!["rmux"];
    full_args.extend_from_slice(args);
    parse(full_args)
}

#[test]
fn select_layout_accepts_all_standard_layout_names() {
    for layout_name in [
        "main-vertical",
        "main-horizontal",
        "even-horizontal",
        "even-vertical",
        "tiled",
    ] {
        let cli = parse_args(&["select-layout", "-t", "alpha:0", layout_name]).unwrap();

        match cli.command.expect("parsed command") {
            super::Command::SelectLayout(args) => {
                assert_eq!(args.layout.as_deref(), Some(layout_name));
            }
            _ => panic!("expected SelectLayout command"),
        }
    }
}

#[test]
fn select_layout_accepts_old_layout_flag() {
    let cli = parse_args(&["select-layout", "-o", "-t", "alpha:0"]).unwrap();

    match cli.command.expect("parsed command") {
        super::Command::SelectLayout(args) => {
            assert!(args.old);
            assert_eq!(args.target.as_ref().expect("target").to_string(), "alpha:0");
            assert!(args.layout.is_none());
        }
        _ => panic!("expected SelectLayout command"),
    }
}

#[test]
fn select_layout_rejects_old_layout_flag_with_layout_argument() {
    let error = parse_args(&["select-layout", "-o", "tiled"]).unwrap_err();

    assert!(error.to_string().contains("too many arguments"));
}

#[test]
fn next_layout_accepts_window_targets() {
    let cli = parse_args(&["next-layout", "-t", "alpha:3"]).unwrap();

    match cli.command.expect("parsed command") {
        super::Command::NextLayout(args) => {
            assert_eq!(args.target.as_ref().expect("target").to_string(), "alpha:3")
        }
        _ => panic!("expected NextLayout command"),
    }
}

#[test]
fn previous_layout_preserves_session_targets_for_runtime_resolution() {
    let cli = parse_args(&["previous-layout", "-t", "alpha"]).unwrap();

    match cli.command.expect("parsed command") {
        super::Command::PreviousLayout(args) => {
            assert_eq!(args.target.as_ref().expect("target").to_string(), "alpha")
        }
        _ => panic!("expected PreviousLayout command"),
    }
}