strop-engine 0.46.2

strop editor engine: documents, grammar, services and sessions — no frontend UI dependencies
use super::super::*;
use strop_core::Buffer;

#[test]
fn yanked_register_inserts_into_picker_and_prompt_fields() {
    for kind in [Kind::Files, Kind::Search] {
        let mut e = Editor::new(Buffer::from_text("Needle\nneedle\n"));
        e.feed_text("yiw");
        e.open_picker(kind);
        if kind == Kind::Search {
            e.feed(strop_core::frontend_input::Key::CtrlR);
            assert!(e.picker.as_ref().unwrap().picker.replacement_visible);
            e.feed(strop_core::frontend_input::Key::CtrlR);
            assert!(!e.picker.as_ref().unwrap().picker.replacement_visible);
            e.feed(strop_core::frontend_input::Key::Esc);
            e.feed_text("p");
        } else {
            e.feed(strop_core::frontend_input::Key::CtrlR);
            e.feed_text("\"");
        }
        assert_eq!(e.picker.as_ref().unwrap().picker.input.text(), "Needle");
        assert_eq!(e.buf().text(), "Needle\nneedle\n");
        if kind == Kind::Search {
            continue;
        }
        e.feed(strop_core::frontend_input::Key::Esc);
        e.feed_text("0P");
        assert_eq!(
            e.picker.as_ref().unwrap().picker.input.text(),
            "NeedleNeedle"
        );
    }
    let mut e = Editor::new(Buffer::from_text("Needle\nneedle\n"));
    e.feed_text("yiw/");
    e.feed(strop_core::frontend_input::Key::CtrlR);
    e.feed_text("\"");
    assert_eq!(e.pending.text(), "/Needle");
    e.feed_text("<cr>");
    assert_eq!(e.head(), 7);
    e.set_register(Some('a'), crate::editor::Register::characterwise("é"));
    e.open_picker(Kind::Files);
    e.feed(strop_core::frontend_input::Key::CtrlR);
    e.feed_text("a");
    assert_eq!(e.picker.as_ref().unwrap().picker.input.text(), "é");
}

#[test]
fn multiline_register_refuses_without_truncating_picker_input() {
    let mut e = Editor::new(Buffer::from_text("first\nsecond\n"));
    e.feed_text("yj");
    e.open_picker(Kind::Files);
    e.feed_text("keep");
    e.feed(strop_core::frontend_input::Key::CtrlR);
    e.feed_text("\"");
    assert_eq!(e.picker.as_ref().unwrap().picker.input.text(), "keep");
    assert!(e.message.contains("newline"));
}