Unnamed repository; edit this file 'description' to name the repository.
test: match around closest pair tree-sitter version
woojiq 2024-04-25
parent 81dc8e8 · commit 839ec4a
-rw-r--r--helix-core/src/surround.rs10
-rw-r--r--helix-core/src/textobject.rs3
-rw-r--r--helix-term/tests/test/commands.rs60
-rw-r--r--helix-term/tests/test/movement.rs43
4 files changed, 110 insertions, 6 deletions
diff --git a/helix-core/src/surround.rs b/helix-core/src/surround.rs
index 879c2adf..e45346c9 100644
--- a/helix-core/src/surround.rs
+++ b/helix-core/src/surround.rs
@@ -331,7 +331,7 @@ mod test {
);
assert_eq!(
- get_surround_pos(doc.slice(..), &selection, Some('('), 1).unwrap(),
+ get_surround_pos(None, doc.slice(..), &selection, Some('('), 1).unwrap(),
expectations
);
}
@@ -346,7 +346,7 @@ mod test {
);
assert_eq!(
- get_surround_pos(doc.slice(..), &selection, Some('('), 1),
+ get_surround_pos(None, doc.slice(..), &selection, Some('('), 1),
Err(Error::PairNotFound)
);
}
@@ -361,7 +361,7 @@ mod test {
);
assert_eq!(
- get_surround_pos(doc.slice(..), &selection, Some('('), 1),
+ get_surround_pos(None, doc.slice(..), &selection, Some('('), 1),
Err(Error::PairNotFound) // overlapping surround chars
);
}
@@ -376,7 +376,7 @@ mod test {
);
assert_eq!(
- get_surround_pos(doc.slice(..), &selection, Some('['), 1),
+ get_surround_pos(None, doc.slice(..), &selection, Some('['), 1),
Err(Error::CursorOverlap)
);
}
@@ -440,7 +440,7 @@ mod test {
);
assert_eq!(
- find_nth_closest_pairs_pos(doc.slice(..), selection.primary(), 1),
+ find_nth_closest_pairs_pos(None, doc.slice(..), selection.primary(), 1),
Err(Error::PairNotFound)
)
}
diff --git a/helix-core/src/textobject.rs b/helix-core/src/textobject.rs
index 41230126..7576b3a7 100644
--- a/helix-core/src/textobject.rs
+++ b/helix-core/src/textobject.rs
@@ -576,7 +576,8 @@ mod test {
let slice = doc.slice(..);
for &case in scenario {
let (pos, objtype, expected_range, ch, count) = case;
- let result = textobject_pair_surround(slice, Range::point(pos), objtype, ch, count);
+ let result =
+ textobject_pair_surround(None, slice, Range::point(pos), objtype, ch, count);
assert_eq!(
result,
expected_range.into(),
diff --git a/helix-term/tests/test/commands.rs b/helix-term/tests/test/commands.rs
index 6b904aa3..1c5c6196 100644
--- a/helix-term/tests/test/commands.rs
+++ b/helix-term/tests/test/commands.rs
@@ -664,3 +664,63 @@ async fn test_read_file() -> anyhow::Result<()> {
Ok(())
}
+
+#[tokio::test(flavor = "multi_thread")]
+async fn surround_delete() -> anyhow::Result<()> {
+ // Test `surround_delete` when head < anchor
+ test(("(#[| ]#)", "mdm", "#[| ]#")).await?;
+ test(("(#[| ]#)", "md(", "#[| ]#")).await?;
+
+ Ok(())
+}
+
+#[tokio::test(flavor = "multi_thread")]
+async fn surround_replace_ts() -> anyhow::Result<()> {
+ const INPUT: &str = r#"\
+fn foo() {
+ if let Some(_) = None {
+ todo!("f#[|o]#o)");
+ }
+}
+"#;
+ test((
+ INPUT,
+ ":lang rust<ret>mrm'",
+ r#"\
+fn foo() {
+ if let Some(_) = None {
+ todo!('f#[|o]#o)');
+ }
+}
+"#,
+ ))
+ .await?;
+
+ test((
+ INPUT,
+ ":lang rust<ret>3mrm[",
+ r#"\
+fn foo() {
+ if let Some(_) = None [
+ todo!("f#[|o]#o)");
+ ]
+}
+"#,
+ ))
+ .await?;
+
+ test((
+ INPUT,
+ ":lang rust<ret>2mrm{",
+ r#"\
+fn foo() {
+ if let Some(_) = None {
+ todo!{"f#[|o]#o)"};
+ }
+}
+"#,
+ ))
+ .await?;
+
+ Ok(())
+}
diff --git a/helix-term/tests/test/movement.rs b/helix-term/tests/test/movement.rs
index 3fa85092..77098a33 100644
--- a/helix-term/tests/test/movement.rs
+++ b/helix-term/tests/test/movement.rs
@@ -107,6 +107,14 @@ async fn surround_by_character() -> anyhow::Result<()> {
))
.await?;
+ // Selection direction is preserved
+ test((
+ "(so [many {go#[|od]#} text] here)",
+ "mi{",
+ "(so [many {#[|good]#} text] here)",
+ ))
+ .await?;
+
Ok(())
}
@@ -366,6 +374,41 @@ async fn surround_around_pair() -> anyhow::Result<()> {
Ok(())
}
+#[tokio::test(flavor = "multi_thread")]
+async fn match_around_closest_ts() -> anyhow::Result<()> {
+ test_with_config(
+ AppBuilder::new().with_file("foo.rs", None),
+ (
+ r#"fn main() {todo!{"f#[|oo]#)"};}"#,
+ "mam",
+ r#"fn main() {todo!{#[|"foo)"]#};}"#,
+ ),
+ )
+ .await?;
+
+ test_with_config(
+ AppBuilder::new().with_file("foo.rs", None),
+ (
+ r##"fn main() { let _ = ("#[|1]#23", "#(|1)#23"); } "##,
+ "3mam",
+ r##"fn main() #[|{ let _ = ("123", "123"); }]# "##,
+ ),
+ )
+ .await?;
+
+ test_with_config(
+ AppBuilder::new().with_file("foo.rs", None),
+ (
+ r##" fn main() { let _ = ("12#[|3", "12]#3"); } "##,
+ "1mam",
+ r##" fn main() { let _ = #[|("123", "123")]#; } "##,
+ ),
+ )
+ .await?;
+
+ Ok(())
+}
+
/// Ensure the very initial cursor in an opened file is the width of
/// the first grapheme
#[tokio::test(flavor = "multi_thread")]