Files
vamp/tests/line_jump.rs
2026-10-13 13:32:42 +02:00

51 lines
1.7 KiB
Rust

use vamp::editor::{Cursor, Editor, Effect, Input, Mode};
fn editor() -> Editor {
let mut editor = Editor::open(None, vec![]).unwrap();
editor
.apply(vec![Effect::Replace(
"first\n e\u{301}second\n\tthird".into(),
)])
.unwrap();
editor
}
fn keys(editor: &mut Editor, text: &str) {
for key in text.chars() {
editor.handle(Input::Char(key));
}
}
#[test]
fn counted_g_is_one_based_clamps_and_leaves_bare_prefixes_intact() {
let mut editor = editor();
let revision = editor.text_revision();
keys(&mut editor, "2g");
assert_eq!(editor.cursor(), Cursor { row: 1, column: 2 });
assert_eq!(editor.count(), None);
keys(&mut editor, "999999999999999999999999999999999g");
assert_eq!(editor.cursor(), Cursor { row: 2, column: 1 });
keys(&mut editor, "1g");
assert_eq!(editor.cursor().row, 0);
keys(&mut editor, "gb");
assert_eq!(editor.cursor().row, 2);
keys(&mut editor, "gt");
assert_eq!(editor.cursor().row, 0);
assert_eq!(editor.text_revision(), revision);
}
#[test]
fn counted_g_extends_visual_selection_and_respects_g_overrides() {
let mut editor = editor();
keys(&mut editor, "v3g");
assert_eq!(editor.mode(), Mode::Visual);
assert_eq!(editor.cursor(), Cursor { row: 2, column: 1 });
assert_eq!(editor.selections()[0].start, Cursor { row: 0, column: 0 });
editor.handle(Input::Escape);
keys(&mut editor, "gt");
editor.bind("normal", "g", None).unwrap();
keys(&mut editor, "2g");
assert_eq!(editor.cursor().row, 0);
editor
.bind("normal", "g", Some("core.down".into()))
.unwrap();
keys(&mut editor, "2g");
assert_eq!(editor.cursor().row, 2);
}