aboutsummaryrefslogtreecommitdiff
path: root/helix-term/tests/test/movement.rs
diff options
context:
space:
mode:
authorSkyler Hawthorne2022-04-30 13:22:20 +0000
committerSkyler Hawthorne2022-06-19 03:57:47 +0000
commit8d8d389536d1f948f25a38c33f278a5e2f8d1b28 (patch)
tree2afc76c77472a39997e785f33232b6b224d01632 /helix-term/tests/test/movement.rs
parentacf931709a56e5af0ac101276fcfb3ba45f159f2 (diff)
rename top level module to satisfy cargo fmt
Diffstat (limited to 'helix-term/tests/test/movement.rs')
-rw-r--r--helix-term/tests/test/movement.rs135
1 files changed, 135 insertions, 0 deletions
diff --git a/helix-term/tests/test/movement.rs b/helix-term/tests/test/movement.rs
new file mode 100644
index 00000000..e0bfc3bf
--- /dev/null
+++ b/helix-term/tests/test/movement.rs
@@ -0,0 +1,135 @@
+use helix_term::application::Application;
+
+use super::*;
+
+#[tokio::test]
+async fn insert_mode_cursor_position() -> anyhow::Result<()> {
+ test_key_sequence_text_result(
+ Args::default(),
+ Config::default(),
+ TestCase {
+ in_text: String::new(),
+ in_selection: Selection::single(0, 0),
+ in_keys: "i".into(),
+ out_text: String::new(),
+ out_selection: Selection::single(0, 0),
+ },
+ )
+ .await?;
+
+ test_key_sequence_text_result(
+ Args::default(),
+ Config::default(),
+ ("#[\n|]#", "i", "#[|\n]#"),
+ )
+ .await?;
+
+ test_key_sequence_text_result(
+ Args::default(),
+ Config::default(),
+ ("#[\n|]#", "i<esc>", "#[|\n]#"),
+ )
+ .await?;
+
+ test_key_sequence_text_result(
+ Args::default(),
+ Config::default(),
+ ("#[\n|]#", "i<esc>i", "#[|\n]#"),
+ )
+ .await?;
+
+ Ok(())
+}
+
+/// Range direction is preserved when escaping insert mode to normal
+#[tokio::test]
+async fn insert_to_normal_mode_cursor_position() -> anyhow::Result<()> {
+ test_key_sequence_text_result(
+ Args::default(),
+ Config::default(),
+ ("#[f|]#oo\n", "vll<A-;><esc>", "#[|foo]#\n"),
+ )
+ .await?;
+
+ test_key_sequence_text_result(
+ Args::default(),
+ Config::default(),
+ (
+ indoc! {"\
+ #[f|]#oo
+ #(b|)#ar"
+ },
+ "vll<A-;><esc>",
+ indoc! {"\
+ #[|foo]#
+ #(|bar)#"
+ },
+ ),
+ )
+ .await?;
+
+ test_key_sequence_text_result(
+ Args::default(),
+ Config::default(),
+ (
+ indoc! {"\
+ #[f|]#oo
+ #(b|)#ar"
+ },
+ "a",
+ indoc! {"\
+ #[fo|]#o
+ #(ba|)#r"
+ },
+ ),
+ )
+ .await?;
+
+ test_key_sequence_text_result(
+ Args::default(),
+ Config::default(),
+ (
+ indoc! {"\
+ #[f|]#oo
+ #(b|)#ar"
+ },
+ "a<esc>",
+ indoc! {"\
+ #[f|]#oo
+ #(b|)#ar"
+ },
+ ),
+ )
+ .await?;
+
+ Ok(())
+}
+
+/// Ensure the very initial cursor in an opened file is the width of
+/// the first grapheme
+#[tokio::test]
+async fn cursor_position_newly_opened_file() -> anyhow::Result<()> {
+ let test = |content: &str, expected_sel: Selection| -> anyhow::Result<()> {
+ let file = helpers::temp_file_with_contents(content)?;
+
+ let mut app = Application::new(
+ Args {
+ files: vec![(file.path().to_path_buf(), Position::default())],
+ ..Default::default()
+ },
+ Config::default(),
+ )?;
+
+ let (view, doc) = helix_view::current!(app.editor);
+ let sel = doc.selection(view.id).clone();
+ assert_eq!(expected_sel, sel);
+
+ Ok(())
+ };
+
+ test("foo", Selection::single(0, 1))?;
+ test("๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ foo", Selection::single(0, 7))?;
+ test("", Selection::single(0, 0))?;
+
+ Ok(())
+}