rmux-server 0.1.2

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

#[tokio::test]
async fn attached_mode_tree_acceptance_uses_mode_before_prefix_or_pty() {
    let handler = RequestHandler::new();
    let requester_pid = std::process::id();
    let alpha = session_name("alpha");
    let _control_rx = create_attached_session(&handler, requester_pid, &alpha).await;
    assert!(matches!(
        handler
            .handle(Request::NewWindow(NewWindowRequest {
                target: alpha.clone(),
                name: Some("w1".to_owned()),
                detached: true,
                start_directory: None,
                environment: None,
                command: None,
                target_window_index: None,
                insert_at_target: false,
            }))
            .await,
        Response::NewWindow(_)
    ));

    let commands = handler
        .parse_control_commands("choose-tree -Zw")
        .await
        .expect("choose-tree parses");
    handler
        .execute_parsed_commands_for_test(requester_pid, commands)
        .await
        .expect("choose-tree activates mode-tree");

    assert_eq!(
        pane_mode_status(&handler, &alpha).await,
        "1:tree-mode::\n0:::\n"
    );
    assert_eq!(
        display_target_format(
            &handler,
            PaneTarget::new(alpha.clone(), 0),
            "#{window_name}|#{pane_in_mode}|#{pane_mode}"
        )
        .await,
        "[rmux]|1|tree-mode\n"
    );
    {
        let state = handler.state.lock().await;
        let window_name = state
            .sessions
            .session(&alpha)
            .and_then(|session| session.window_at(0))
            .and_then(|window| window.name().map(str::to_owned));
        assert_eq!(window_name.as_deref(), Some("[rmux]"));
    }
    handler
        .handle_attached_live_input_for_test(requester_pid, b"\x0e\r")
        .await
        .expect("mode-tree accepts attached keys");

    assert_eq!(active_windows(&handler, &alpha).await, "0:0\n1:1\n");
    assert_eq!(pane_mode_status(&handler, &alpha).await, "0:::\n0:::\n");
}

#[tokio::test]
async fn attached_compact_prefix_wq_uses_choose_tree_before_the_following_key() {
    let handler = RequestHandler::new();
    let requester_pid = std::process::id();
    let alpha = session_name("alpha");
    let _control_rx = create_attached_session(&handler, requester_pid, &alpha).await;
    assert!(matches!(
        handler
            .handle(Request::NewWindow(NewWindowRequest {
                target: alpha.clone(),
                name: Some("w1".to_owned()),
                detached: true,
                start_directory: None,
                environment: None,
                command: None,
                target_window_index: None,
                insert_at_target: false,
            }))
            .await,
        Response::NewWindow(_)
    ));

    handler
        .handle_attached_live_input_for_test(requester_pid, b"\x02wq")
        .await
        .expect("compact choose-tree close input");

    assert_eq!(pane_mode_status(&handler, &alpha).await, "0:::\n0:::\n");
    assert_eq!(
        display_target_format(
            &handler,
            PaneTarget::new(alpha.clone(), 0),
            "#{window_name}|#{pane_in_mode}|#{pane_mode}"
        )
        .await,
        default_shell_pane_status()
    );
}

#[tokio::test]
async fn attached_compact_prefix_tq_uses_clock_mode_before_the_following_key() {
    let handler = RequestHandler::new();
    let requester_pid = std::process::id();
    let alpha = session_name("alpha");
    let _control_rx = create_attached_session(&handler, requester_pid, &alpha).await;

    handler
        .handle_attached_live_input_for_test(requester_pid, b"\x02tq")
        .await
        .expect("compact clock-mode close input");

    assert_eq!(pane_mode_status(&handler, &alpha).await, "0:::\n");
    assert_eq!(
        display_target_format(
            &handler,
            PaneTarget::new(alpha.clone(), 0),
            "#{window_name}|#{pane_in_mode}|#{pane_mode}"
        )
        .await,
        default_shell_pane_status()
    );
}