rmux-server 0.7.1

Tokio daemon and request dispatcher for the RMUX terminal multiplexer.
Documentation
use super::*;

#[tokio::test]
async fn parsed_queue_bind_key_accepts_command_blocks() {
    let handler = RequestHandler::new();
    let bind = CommandParser::new()
        .parse("bind-key x { display-message -p -- from-block }")
        .expect("bind-key block parses");
    handler
        .execute_parsed_commands_for_test(std::process::id(), bind)
        .await
        .expect("bind-key block executes");

    let list = CommandParser::new()
        .parse("list-keys -T prefix x")
        .expect("list-keys parses");
    let output = handler
        .execute_parsed_commands_for_test(std::process::id(), list)
        .await
        .expect("list-keys executes");
    let stdout = std::str::from_utf8(output.stdout()).expect("list-keys utf8");

    assert!(
        stdout.contains("display-message -p -- from-block"),
        "{stdout}"
    );
}

#[tokio::test]
async fn parsed_queue_set_hook_accepts_command_blocks() {
    let handler = RequestHandler::new();
    let parsed = CommandParser::new()
        .parse("set-hook -g after-new-window { display-message -p -- hook-block }")
        .expect("set-hook block parses");
    handler
        .execute_parsed_commands_for_test(std::process::id(), parsed)
        .await
        .expect("set-hook block executes");

    let state = handler.state.lock().await;
    assert_eq!(
        state
            .hooks
            .global_command(rmux_proto::HookName::AfterNewWindow),
        Some("display-message -p -- hook-block")
    );
}

#[tokio::test]
async fn parsed_queue_set_hook_resolves_relative_targets_before_block_parse() {
    let handler = RequestHandler::new();
    let alpha = session_name("alpha");
    assert!(matches!(
        handler
            .handle(Request::NewSession(NewSessionRequest {
                session_name: alpha.clone(),
                detached: true,
                size: Some(TerminalSize { cols: 80, rows: 24 }),
                environment: None,
            }))
            .await,
        Response::NewSession(_)
    ));

    let parsed = CommandParser::new()
        .parse("set-hook -t . after-new-window { display-message -p -- hook-block }")
        .expect("set-hook block parses");
    handler
        .execute_parsed_commands(
            std::process::id(),
            parsed,
            QueueExecutionContext::without_caller_cwd()
                .with_current_target(Some(Target::Pane(PaneTarget::with_window(alpha, 0, 0)))),
        )
        .await
        .expect("set-hook -t . should execute");
}