diff --git a/src/test/common.rs b/src/test/common.rs index de00f37aa5b5569a6c40b519c9a826f6b7691c8b..4f56d0b2b30a9225eaabac55ff8be85a1f0e8203 100644 --- a/src/test/common.rs +++ b/src/test/common.rs @@ -19,6 +19,15 @@ fn home_key() { &[KeyPress::Home, KeyPress::Enter], ("", "Hi"), ); + if *mode == EditMode::Vi { + // vi command mode + assert_cursor( + *mode, + ("Hi", ""), + &[KeyPress::Esc, KeyPress::Home, KeyPress::Enter], + ("", "Hi"), + ); + } } } @@ -38,6 +47,15 @@ fn end_key() { &[KeyPress::End, KeyPress::Enter], ("Hi", ""), ); + if *mode == EditMode::Vi { + // vi command mode + assert_cursor( + *mode, + ("", "Hi"), + &[KeyPress::Esc, KeyPress::End, KeyPress::Enter], + ("Hi", ""), + ); + } } } @@ -62,6 +80,15 @@ fn left_key() { &[KeyPress::Left, KeyPress::Enter], ("", "Hi"), ); + if *mode == EditMode::Vi { + // vi command mode + assert_cursor( + *mode, + ("Bye", ""), + &[KeyPress::Esc, KeyPress::Left, KeyPress::Enter], + ("B", "ye"), + ); + } } } @@ -92,6 +119,15 @@ fn right_key() { &[KeyPress::Right, KeyPress::Enter], ("Hi", ""), ); + if *mode == EditMode::Vi { + // vi command mode + assert_cursor( + *mode, + ("", "Hi"), + &[KeyPress::Esc, KeyPress::Right, KeyPress::Enter], + ("H", "i"), + ); + } } } @@ -103,6 +139,18 @@ fn enter_key() { assert_line_with_initial(*mode, ("Hi", ""), &[KeyPress::Enter], "Hi"); assert_line_with_initial(*mode, ("", "Hi"), &[KeyPress::Enter], "Hi"); assert_line_with_initial(*mode, ("H", "i"), &[KeyPress::Enter], "Hi"); + if *mode == EditMode::Vi { + // vi command mode + assert_line(*mode, &[KeyPress::Esc, KeyPress::Enter], ""); + assert_line( + *mode, + &[KeyPress::Char('a'), KeyPress::Esc, KeyPress::Enter], + "a", + ); + assert_line_with_initial(*mode, ("Hi", ""), &[KeyPress::Esc, KeyPress::Enter], "Hi"); + assert_line_with_initial(*mode, ("", "Hi"), &[KeyPress::Esc, KeyPress::Enter], "Hi"); + assert_line_with_initial(*mode, ("H", "i"), &[KeyPress::Esc, KeyPress::Enter], "Hi"); + } } } @@ -111,6 +159,15 @@ fn newline_key() { for mode in &[EditMode::Emacs, EditMode::Vi] { assert_line(*mode, &[KeyPress::Ctrl('J')], ""); assert_line(*mode, &[KeyPress::Char('a'), KeyPress::Ctrl('J')], "a"); + if *mode == EditMode::Vi { + // vi command mode + assert_line(*mode, &[KeyPress::Esc, KeyPress::Ctrl('J')], ""); + assert_line( + *mode, + &[KeyPress::Char('a'), KeyPress::Esc, KeyPress::Ctrl('J')], + "a", + ); + } } } @@ -131,6 +188,11 @@ fn eof_key() { &[KeyPress::Char('a'), KeyPress::Ctrl('D')], "a", ); + assert_line( + EditMode::Vi, + &[KeyPress::Char('a'), KeyPress::Esc, KeyPress::Ctrl('D')], + "a", + ); assert_line_with_initial( EditMode::Emacs, ("", "Hi"), @@ -138,6 +200,12 @@ fn eof_key() { "i", ); assert_line_with_initial(EditMode::Vi, ("", "Hi"), &[KeyPress::Ctrl('D')], "Hi"); + assert_line_with_initial( + EditMode::Vi, + ("", "Hi"), + &[KeyPress::Esc, KeyPress::Ctrl('D')], + "Hi", + ); } #[test] @@ -150,6 +218,12 @@ fn interrupt_key() { let mut editor = init_editor(*mode, &[KeyPress::Ctrl('C')]); let err = editor.readline_with_initial(">>", ("Hi", "")); assert_matches!(err, Err(ReadlineError::Interrupted)); + if *mode == EditMode::Vi { + // vi command mode + let mut editor = init_editor(*mode, &[KeyPress::Esc, KeyPress::Ctrl('C')]); + let err = editor.readline_with_initial(">>", ("Hi", "")); + assert_matches!(err, Err(ReadlineError::Interrupted)); + } } } @@ -168,6 +242,15 @@ fn delete_key() { &[KeyPress::Delete, KeyPress::Enter], ("", ""), ); + if *mode == EditMode::Vi { + // vi command mode + assert_cursor( + *mode, + ("", "a"), + &[KeyPress::Esc, KeyPress::Delete, KeyPress::Enter], + ("", ""), + ); + } } } @@ -186,6 +269,15 @@ fn ctrl_t() { &[KeyPress::Ctrl('T'), KeyPress::Enter], ("acb", "d"), ); + if *mode == EditMode::Vi { + // vi command mode + assert_cursor( + *mode, + ("ab", ""), + &[KeyPress::Esc, KeyPress::Ctrl('T'), KeyPress::Enter], + ("ba", ""), + ); + } } } @@ -204,6 +296,15 @@ fn ctrl_u() { &[KeyPress::Ctrl('U'), KeyPress::Enter], ("", "end"), ); + if *mode == EditMode::Vi { + // vi command mode + assert_cursor( + *mode, + ("start of line ", "end"), + &[KeyPress::Esc, KeyPress::Ctrl('U'), KeyPress::Enter], + ("", " end"), + ); + } } } @@ -216,6 +317,20 @@ fn ctrl_v() { &[KeyPress::Ctrl('V'), KeyPress::Char('\t'), KeyPress::Enter], ("\t", ""), ); + if *mode == EditMode::Vi { + // vi command mode + assert_cursor( + *mode, + ("", ""), + &[ + KeyPress::Esc, + KeyPress::Ctrl('V'), + KeyPress::Char('\t'), + KeyPress::Enter, + ], + ("\t", ""), + ); + } } } @@ -234,6 +349,15 @@ fn ctrl_w() { &[KeyPress::Ctrl('W'), KeyPress::Enter], ("Hello, ", ""), ); + if *mode == EditMode::Vi { + // vi command mode + assert_cursor( + *mode, + ("Hello, world.", ""), + &[KeyPress::Esc, KeyPress::Ctrl('W'), KeyPress::Enter], + ("Hello, ", "."), + ); + } } } @@ -258,5 +382,19 @@ fn ctrl__() { &[KeyPress::Ctrl('W'), KeyPress::Ctrl('_'), KeyPress::Enter], ("Hello, ", "world"), ); + if *mode == EditMode::Vi { + // vi command mode + assert_cursor( + *mode, + ("Hello, ", "world"), + &[ + KeyPress::Esc, + KeyPress::Ctrl('W'), + KeyPress::Ctrl('_'), + KeyPress::Enter, + ], + ("Hello,", " world"), + ); + } } }