use hjkl_engine::{Editor, Input, Key};
fn editor_with(content: &str) -> Editor {
let opts = hjkl_engine::Options::default();
let mut e = hjkl_vim::vim_editor(
hjkl_buffer::View::new(),
hjkl_engine::DefaultHost::new(),
opts,
);
e.set_content(content);
e
}
fn inp(key: Key) -> Input {
Input {
key,
ctrl: false,
alt: false,
shift: false,
}
}
fn dispatch_keys(e: &mut Editor, keys: &str) {
for c in keys.chars() {
hjkl_vim::dispatch_input(e, inp(Key::Char(c)));
}
}
fn buffer_text(e: &Editor) -> String {
let mut c = e.content();
if c.ends_with('\n') {
c.pop();
}
c
}
fn unnamed(e: &Editor) -> String {
e.with_registers(|r| r.unnamed.text.clone())
}
#[test]
fn d2ap_blank_line_between_paragraphs() {
let mut e = editor_with("aaa.\n\nbbb.\n\nccc.\n");
dispatch_keys(&mut e, "jd2ap");
assert_eq!(buffer_text(&e), "aaa.\n");
assert_eq!(e.cursor(), (0, 0));
assert_eq!(unnamed(&e), "\nbbb.\n\nccc.\n");
}
#[test]
fn d3ap_blank_line_between_paragraphs_over_run_noop() {
let mut e = editor_with("aaa.\n\nbbb.\n\nccc.\n");
dispatch_keys(&mut e, "jd3ap");
assert_eq!(buffer_text(&e), "aaa.\n\nbbb.\n\nccc.\n");
assert_eq!(e.cursor(), (1, 0));
assert_eq!(unnamed(&e), "");
}
#[test]
fn dap_blank_line_before_last_paragraph() {
let mut e = editor_with("aaa.\n\nbbb.\n\nccc.\n");
dispatch_keys(&mut e, "jjjdap");
assert_eq!(buffer_text(&e), "aaa.\n\nbbb.\n");
assert_eq!(e.cursor(), (2, 0));
assert_eq!(unnamed(&e), "\nccc.\n");
}
#[test]
fn dap_blank_run_at_eof_noop() {
let mut e = editor_with("a\n\n");
dispatch_keys(&mut e, "jdap");
assert_eq!(buffer_text(&e), "a\n\n");
assert_eq!(e.cursor(), (1, 0));
assert_eq!(unnamed(&e), "");
}
#[test]
fn dap_trailing_blank_run_to_eof() {
let mut e = editor_with("a\n\n\n");
dispatch_keys(&mut e, "dap");
assert_eq!(buffer_text(&e), "");
assert_eq!(e.cursor(), (0, 0));
assert_eq!(unnamed(&e), "a\n\n\n");
}
#[test]
fn d2ap_trailing_blank_run_to_eof_over_run_noop() {
let mut e = editor_with("a\n\n\n");
dispatch_keys(&mut e, "d2ap");
assert_eq!(buffer_text(&e), "a\n\n\n");
assert_eq!(e.cursor(), (0, 0));
assert_eq!(unnamed(&e), "");
}