feat: add Visual change with grouped replacement undo
This commit is contained in:
@@ -404,6 +404,47 @@ end
|
||||
assert!(session.editor().should_quit());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn typed_visual_change_remaps_c_and_command_execution_commits_one_replacement() {
|
||||
let fixture = Fixture::new();
|
||||
fixture.file("buffer.txt", "abc DEF tail");
|
||||
let mut session = fixture.open(
|
||||
r#"
|
||||
Vamp.configure do |config|
|
||||
config.bind "c", nil, mode: config.modes.visual
|
||||
config.bind "ctrl+r", config.core.change, mode: config.modes.visual
|
||||
config.bind "ctrl+v", config.core.select
|
||||
config.bind "ctrl+f", config.core.word_end, mode: config.modes.visual
|
||||
end
|
||||
"#,
|
||||
);
|
||||
session.handle(Input::Char('c'));
|
||||
assert_eq!(session.editor().mode(), crate::editor::Mode::Normal);
|
||||
assert!(!session.editor().dirty());
|
||||
session.handle(Input::Ctrl('v'));
|
||||
session.handle(Input::Ctrl('f'));
|
||||
session.handle(Input::Char('c'));
|
||||
assert_eq!(session.editor().mode(), crate::editor::Mode::Visual);
|
||||
assert_eq!(session.editor().lines(), &["abc DEF tail"]);
|
||||
session.handle(Input::Ctrl('r'));
|
||||
assert_eq!(session.editor().mode(), crate::editor::Mode::Insert);
|
||||
assert_eq!(session.editor().cursor().column, 0);
|
||||
assert_eq!(session.editor().lines(), &[" DEF tail"]);
|
||||
for ch in "cZ".chars() {
|
||||
session.handle(Input::Char(ch));
|
||||
}
|
||||
session.execute("w");
|
||||
assert_eq!(session.editor().mode(), crate::editor::Mode::Normal);
|
||||
assert_eq!(
|
||||
fs::read_to_string(fixture.0.join("buffer.txt")).unwrap(),
|
||||
"cZ DEF tail"
|
||||
);
|
||||
session.handle(Input::Char('u'));
|
||||
assert_eq!(session.editor().lines(), &["abc DEF tail"]);
|
||||
session.handle(Input::Char('P'));
|
||||
assert_eq!(session.editor().lines(), &["ababcc DEF tail"]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn typed_visual_actions_copy_cut_paste_and_cancel_without_splitting_history() {
|
||||
let fixture = Fixture::new();
|
||||
|
||||
Reference in New Issue
Block a user