thndrs 0.1.0

Terminal AI pair programmer with local tools, sessions, MCP, and ACP support
Documentation
use super::*;
use crate::input::PromptInput;
use crossterm::event::{KeyCode, KeyModifiers};

use helpers::*;

#[test]
fn left_arrow_moves_cursor_left() {
    let mut app = fresh_app();
    app.input = PromptInput::from("abc");
    update(&mut app, &key(KeyCode::Left, KeyModifiers::NONE));
    assert_eq!(app.input.cursor(), 2);
}

#[test]
fn right_arrow_moves_cursor_right() {
    let mut app = fresh_app();
    app.input = PromptInput::from("abc");
    app.input.cursor_to_start();
    update(&mut app, &key(KeyCode::Right, KeyModifiers::NONE));
    assert_eq!(app.input.cursor(), 1);
}

#[test]
fn ctrl_b_moves_cursor_left() {
    let mut app = fresh_app();
    app.input = PromptInput::from("abc");
    update(&mut app, &key(KeyCode::Char('b'), KeyModifiers::CONTROL));
    assert_eq!(app.input.cursor(), 2);
}

#[test]
fn ctrl_f_moves_cursor_right() {
    let mut app = fresh_app();
    app.input = PromptInput::from("abc");
    app.input.cursor_to_start();
    update(&mut app, &key(KeyCode::Char('f'), KeyModifiers::CONTROL));
    assert_eq!(app.input.cursor(), 1);
}

#[test]
fn home_moves_to_start() {
    let mut app = fresh_app();
    app.input = PromptInput::from("hello");
    update(&mut app, &key(KeyCode::Home, KeyModifiers::NONE));
    assert_eq!(app.input.cursor(), 0);
}

#[test]
fn end_moves_to_end() {
    let mut app = fresh_app();
    app.input = PromptInput::from("hello");
    app.input.cursor_to_start();
    update(&mut app, &key(KeyCode::End, KeyModifiers::NONE));
    assert_eq!(app.input.cursor(), 5);
}

#[test]
fn ctrl_a_moves_to_start() {
    let mut app = fresh_app();
    app.input = PromptInput::from("hello");
    update(&mut app, &key(KeyCode::Char('a'), KeyModifiers::CONTROL));
    assert_eq!(app.input.cursor(), 0);
}

#[test]
fn ctrl_e_moves_to_end() {
    let mut app = fresh_app();
    app.input = PromptInput::from("hello");
    app.input.cursor_to_start();
    update(&mut app, &key(KeyCode::Char('e'), KeyModifiers::CONTROL));
    assert_eq!(app.input.cursor(), 5);
}

#[test]
fn alt_left_moves_word_left() {
    let mut app = fresh_app();
    app.input = PromptInput::from("foo bar");
    update(&mut app, &key(KeyCode::Left, KeyModifiers::ALT));
    assert_eq!(app.input.cursor(), 4);
}

#[test]
fn ctrl_left_moves_word_left() {
    let mut app = fresh_app();
    app.input = PromptInput::from("foo bar");
    update(&mut app, &key(KeyCode::Left, KeyModifiers::CONTROL));
    assert_eq!(app.input.cursor(), 4);
}

#[test]
fn alt_b_moves_word_left() {
    let mut app = fresh_app();
    app.input = PromptInput::from("foo bar");
    update(&mut app, &key(KeyCode::Char('b'), KeyModifiers::ALT));
    assert_eq!(app.input.cursor(), 4);
}

#[test]
fn alt_right_moves_word_right() {
    let mut app = fresh_app();
    app.input = PromptInput::from("foo bar");
    app.input.cursor_to_start();
    update(&mut app, &key(KeyCode::Right, KeyModifiers::ALT));
    assert_eq!(app.input.cursor(), 4);
}

#[test]
fn ctrl_right_moves_word_right() {
    let mut app = fresh_app();
    app.input = PromptInput::from("foo bar");
    app.input.cursor_to_start();
    update(&mut app, &key(KeyCode::Right, KeyModifiers::CONTROL));
    assert_eq!(app.input.cursor(), 4);
}

#[test]
fn alt_f_moves_word_right() {
    let mut app = fresh_app();
    app.input = PromptInput::from("foo bar");
    app.input.cursor_to_start();
    update(&mut app, &key(KeyCode::Char('f'), KeyModifiers::ALT));
    assert_eq!(app.input.cursor(), 4);
}