Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-term/tests/test/commands.rs')
-rw-r--r--helix-term/tests/test/commands.rs283
1 files changed, 146 insertions, 137 deletions
diff --git a/helix-term/tests/test/commands.rs b/helix-term/tests/test/commands.rs
index 1172a798..aaa442f3 100644
--- a/helix-term/tests/test/commands.rs
+++ b/helix-term/tests/test/commands.rs
@@ -9,89 +9,89 @@ mod write;
async fn test_selection_duplication() -> anyhow::Result<()> {
// Forward
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[lo|]#rem
ipsum
dolor
- "}),
+ "},
"CC",
- platform_line(indoc! {"\
+ indoc! {"\
#(lo|)#rem
#(ip|)#sum
#[do|]#lor
- "}),
+ "},
))
.await?;
// Backward
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[|lo]#rem
ipsum
dolor
- "}),
+ "},
"CC",
- platform_line(indoc! {"\
+ indoc! {"\
#(|lo)#rem
#(|ip)#sum
#[|do]#lor
- "}),
+ "},
))
.await?;
// Copy the selection to previous line, skipping the first line in the file
test((
- platform_line(indoc! {"\
+ indoc! {"\
test
#[testitem|]#
- "}),
+ "},
"<A-C>",
- platform_line(indoc! {"\
+ indoc! {"\
test
#[testitem|]#
- "}),
+ "},
))
.await?;
// Copy the selection to previous line, including the first line in the file
test((
- platform_line(indoc! {"\
+ indoc! {"\
test
#[test|]#
- "}),
+ "},
"<A-C>",
- platform_line(indoc! {"\
+ indoc! {"\
#[test|]#
#(test|)#
- "}),
+ "},
))
.await?;
// Copy the selection to next line, skipping the last line in the file
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[testitem|]#
test
- "}),
+ "},
"C",
- platform_line(indoc! {"\
+ indoc! {"\
#[testitem|]#
test
- "}),
+ "},
))
.await?;
// Copy the selection to next line, including the last line in the file
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[test|]#
test
- "}),
+ "},
"C",
- platform_line(indoc! {"\
+ indoc! {"\
#(test|)#
#[test|]#
- "}),
+ "},
))
.await?;
Ok(())
@@ -159,17 +159,17 @@ async fn test_goto_file_impl() -> anyhow::Result<()> {
#[tokio::test(flavor = "multi_thread")]
async fn test_multi_selection_paste() -> anyhow::Result<()> {
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[|lorem]#
#(|ipsum)#
#(|dolor)#
- "}),
+ "},
"yp",
- platform_line(indoc! {"\
+ indoc! {"\
lorem#[|lorem]#
ipsum#(|ipsum)#
dolor#(|dolor)#
- "}),
+ "},
))
.await?;
@@ -180,58 +180,58 @@ async fn test_multi_selection_paste() -> anyhow::Result<()> {
async fn test_multi_selection_shell_commands() -> anyhow::Result<()> {
// pipe
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[|lorem]#
#(|ipsum)#
#(|dolor)#
- "}),
+ "},
"|echo foo<ret>",
- platform_line(indoc! {"\
+ indoc! {"\
#[|foo\n]#
#(|foo\n)#
#(|foo\n)#
- "}),
+ "},
))
.await?;
// insert-output
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[|lorem]#
#(|ipsum)#
#(|dolor)#
- "}),
+ "},
"!echo foo<ret>",
- platform_line(indoc! {"\
+ indoc! {"\
#[|foo\n]#
lorem
#(|foo\n)#
ipsum
#(|foo\n)#
dolor
- "}),
+ "},
))
.await?;
// append-output
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[|lorem]#
#(|ipsum)#
#(|dolor)#
- "}),
+ "},
"<A-!>echo foo<ret>",
- platform_line(indoc! {"\
+ indoc! {"\
lorem#[|foo\n]#
ipsum#(|foo\n)#
dolor#(|foo\n)#
- "}),
+ "},
))
.await?;
@@ -247,7 +247,13 @@ async fn test_undo_redo() -> anyhow::Result<()> {
// * u Undo the two newlines. We're now on line 1.
// * <C-o><C-i> Jump forward an back again in the jumplist. This would panic
// if the jumplist were not being updated correctly.
- test(("#[|]#", "2[<space><C-s>u<C-o><C-i>", "#[|]#")).await?;
+ test((
+ "#[|]#",
+ "2[<space><C-s>u<C-o><C-i>",
+ "#[|]#",
+ LineFeedHandling::AsIs,
+ ))
+ .await?;
// A jumplist selection is passed through an edit and then an undo and then a redo.
//
@@ -258,10 +264,22 @@ async fn test_undo_redo() -> anyhow::Result<()> {
// * <C-o> Jump back in the jumplist. This would panic if the jumplist were not being
// updated correctly.
// * <C-i> Jump forward to line 1.
- test(("#[|]#", "[<space><C-s>kduU<C-o><C-i>", "#[|]#")).await?;
+ test((
+ "#[|]#",
+ "[<space><C-s>kduU<C-o><C-i>",
+ "#[|]#",
+ LineFeedHandling::AsIs,
+ ))
+ .await?;
// In this case we 'redo' manually to ensure that the transactions are composing correctly.
- test(("#[|]#", "[<space>u[<space>u", "#[|]#")).await?;
+ test((
+ "#[|]#",
+ "[<space>u[<space>u",
+ "#[|]#",
+ LineFeedHandling::AsIs,
+ ))
+ .await?;
Ok(())
}
@@ -270,35 +288,35 @@ async fn test_undo_redo() -> anyhow::Result<()> {
async fn test_extend_line() -> anyhow::Result<()> {
// extend with line selected then count
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[l|]#orem
ipsum
dolor
- "}),
+ "},
"x2x",
- platform_line(indoc! {"\
+ indoc! {"\
#[lorem
ipsum
dolor\n|]#
- "}),
+ "},
))
.await?;
// extend with count on partial selection
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[l|]#orem
ipsum
- "}),
+ "},
"2x",
- platform_line(indoc! {"\
+ indoc! {"\
#[lorem
ipsum\n|]#
- "}),
+ "},
))
.await?;
@@ -366,16 +384,11 @@ async fn test_character_info() -> anyhow::Result<()> {
#[tokio::test(flavor = "multi_thread")]
async fn test_delete_char_backward() -> anyhow::Result<()> {
// don't panic when deleting overlapping ranges
+ test(("#(x|)# #[x|]#", "c<space><backspace><esc>", "#[\n|]#")).await?;
test((
- platform_line("#(x|)# #[x|]#"),
- "c<space><backspace><esc>",
- platform_line("#[\n|]#"),
- ))
- .await?;
- test((
- platform_line("#( |)##( |)#a#( |)#axx#[x|]#a"),
+ "#( |)##( |)#a#( |)#axx#[x|]#a",
"li<backspace><esc>",
- platform_line("#(a|)##(|a)#xx#[|a]#"),
+ "#(a|)##(|a)#xx#[|a]#",
))
.await?;
@@ -385,43 +398,33 @@ async fn test_delete_char_backward() -> anyhow::Result<()> {
#[tokio::test(flavor = "multi_thread")]
async fn test_delete_word_backward() -> anyhow::Result<()> {
// don't panic when deleting overlapping ranges
- test((
- platform_line("fo#[o|]#ba#(r|)#"),
- "a<C-w><esc>",
- platform_line("#[\n|]#"),
- ))
- .await?;
+ test(("fo#[o|]#ba#(r|)#", "a<C-w><esc>", "#[\n|]#")).await?;
Ok(())
}
#[tokio::test(flavor = "multi_thread")]
async fn test_delete_word_forward() -> anyhow::Result<()> {
// don't panic when deleting overlapping ranges
- test((
- platform_line("fo#[o|]#b#(|ar)#"),
- "i<A-d><esc>",
- platform_line("fo#[\n|]#"),
- ))
- .await?;
+ test(("fo#[o|]#b#(|ar)#", "i<A-d><esc>", "fo#[\n|]#")).await?;
Ok(())
}
#[tokio::test(flavor = "multi_thread")]
async fn test_delete_char_forward() -> anyhow::Result<()> {
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[abc|]#def
#(abc|)#ef
#(abc|)#f
#(abc|)#
- "}),
+ "},
"a<del><esc>",
- platform_line(indoc! {"\
+ indoc! {"\
#[abc|]#ef
#(abc|)#f
#(abc|)#
#(abc|)#
- "}),
+ "},
))
.await?;
@@ -430,33 +433,37 @@ async fn test_delete_char_forward() -> anyhow::Result<()> {
#[tokio::test(flavor = "multi_thread")]
async fn test_insert_with_indent() -> anyhow::Result<()> {
- const INPUT: &str = "\
-#[f|]#n foo() {
- if let Some(_) = None {
+ const INPUT: &str = indoc! { "
+ #[f|]#n foo() {
+ if let Some(_) = None {
- }
-\x20
-}
+ }
+
+ }
-fn bar() {
+ fn bar() {
-}";
+ }
+ "
+ };
// insert_at_line_start
test((
INPUT,
":lang rust<ret>%<A-s>I",
- "\
-#[f|]#n foo() {
- #(i|)#f let Some(_) = None {
- #(\n|)#\
-\x20 #(}|)#
-#(\x20|)#
-#(}|)#
-#(\n|)#\
-#(f|)#n bar() {
- #(\n|)#\
-#(}|)#",
+ indoc! { "
+ #[f|]#n foo() {
+ #(i|)#f let Some(_) = None {
+ #(\n|)#
+ #(}|)#
+ #( |)#
+ #(}|)#
+ #(\n|)#
+ #(f|)#n bar() {
+ #(\n|)#
+ #(}|)#
+ "
+ },
))
.await?;
@@ -464,17 +471,19 @@ fn bar() {
test((
INPUT,
":lang rust<ret>%<A-s>A",
- "\
-fn foo() {#[\n|]#\
-\x20 if let Some(_) = None {#(\n|)#\
-\x20 #(\n|)#\
-\x20 }#(\n|)#\
-\x20#(\n|)#\
-}#(\n|)#\
-#(\n|)#\
-fn bar() {#(\n|)#\
-\x20 #(\n|)#\
-}#(|)#",
+ indoc! { "
+ fn foo() {#[\n|]#
+ if let Some(_) = None {#(\n|)#
+ #(\n|)#
+ }#(\n|)#
+ #(\n|)#
+ }#(\n|)#
+ #(\n|)#
+ fn bar() {#(\n|)#
+ #(\n|)#
+ }#(\n|)#
+ "
+ },
))
.await?;
@@ -485,42 +494,42 @@ fn bar() {#(\n|)#\
async fn test_join_selections() -> anyhow::Result<()> {
// normal join
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[a|]#bc
def
- "}),
+ "},
"J",
- platform_line(indoc! {"\
+ indoc! {"\
#[a|]#bc def
- "}),
+ "},
))
.await?;
// join with empty line
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[a|]#bc
def
- "}),
+ "},
"JJ",
- platform_line(indoc! {"\
+ indoc! {"\
#[a|]#bc def
- "}),
+ "},
))
.await?;
// join with additional space in non-empty line
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[a|]#bc
def
- "}),
+ "},
"JJ",
- platform_line(indoc! {"\
+ indoc! {"\
#[a|]#bc def
- "}),
+ "},
))
.await?;
@@ -531,7 +540,7 @@ async fn test_join_selections() -> anyhow::Result<()> {
async fn test_join_selections_space() -> anyhow::Result<()> {
// join with empty lines panic
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[a
b
@@ -541,69 +550,69 @@ async fn test_join_selections_space() -> anyhow::Result<()> {
d
e|]#
- "}),
+ "},
"<A-J>",
- platform_line(indoc! {"\
+ indoc! {"\
a#[ |]#b#( |)#c#( |)#d#( |)#e
- "}),
+ "},
))
.await?;
// normal join
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[a|]#bc
def
- "}),
+ "},
"<A-J>",
- platform_line(indoc! {"\
+ indoc! {"\
abc#[ |]#def
- "}),
+ "},
))
.await?;
// join with empty line
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[a|]#bc
def
- "}),
+ "},
"<A-J>",
- platform_line(indoc! {"\
+ indoc! {"\
#[a|]#bc
def
- "}),
+ "},
))
.await?;
// join with additional space in non-empty line
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[a|]#bc
def
- "}),
+ "},
"<A-J><A-J>",
- platform_line(indoc! {"\
+ indoc! {"\
abc#[ |]#def
- "}),
+ "},
))
.await?;
// join with retained trailing spaces
test((
- platform_line(indoc! {"\
+ indoc! {"\
#[aaa
bb
c |]#
- "}),
+ "},
"<A-J>",
- platform_line(indoc! {"\
+ indoc! {"\
aaa #[ |]#bb #( |)#c
- "}),
+ "},
))
.await?;