aboutsummaryrefslogtreecommitdiff
path: root/helix-term/tests
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term/tests')
-rw-r--r--helix-term/tests/test/commands.rs1
-rw-r--r--helix-term/tests/test/commands/movement.rs199
2 files changed, 200 insertions, 0 deletions
diff --git a/helix-term/tests/test/commands.rs b/helix-term/tests/test/commands.rs
index b13c37bc..b3e13551 100644
--- a/helix-term/tests/test/commands.rs
+++ b/helix-term/tests/test/commands.rs
@@ -2,6 +2,7 @@ use helix_term::application::Application;
use super::*;
+mod movement;
mod write;
#[tokio::test(flavor = "multi_thread")]
diff --git a/helix-term/tests/test/commands/movement.rs b/helix-term/tests/test/commands/movement.rs
new file mode 100644
index 00000000..03dc7ba9
--- /dev/null
+++ b/helix-term/tests/test/commands/movement.rs
@@ -0,0 +1,199 @@
+use super::*;
+
+#[tokio::test(flavor = "multi_thread")]
+async fn test_move_parent_node_end() -> anyhow::Result<()> {
+ let tests = vec![
+ // single cursor stays single cursor, first goes to end of current
+ // node, then parent
+ (
+ helpers::platform_line(indoc! {r##"
+ fn foo() {
+ let result = if true {
+ "yes"
+ } else {
+ "no#["|]#
+ }
+ }
+ "##}),
+ "<A-e>",
+ helpers::platform_line(indoc! {"\
+ fn foo() {
+ let result = if true {
+ \"yes\"
+ } else {
+ \"no\"#[\n|]#
+ }
+ }
+ "}),
+ ),
+ (
+ helpers::platform_line(indoc! {"\
+ fn foo() {
+ let result = if true {
+ \"yes\"
+ } else {
+ \"no\"#[\n|]#
+ }
+ }
+ "}),
+ "<A-e>",
+ helpers::platform_line(indoc! {"\
+ fn foo() {
+ let result = if true {
+ \"yes\"
+ } else {
+ \"no\"
+ }#[\n|]#
+ }
+ "}),
+ ),
+ // select mode extends
+ (
+ helpers::platform_line(indoc! {r##"
+ fn foo() {
+ let result = if true {
+ "yes"
+ } else {
+ #["no"|]#
+ }
+ }
+ "##}),
+ "v<A-e><A-e>",
+ helpers::platform_line(indoc! {"\
+ fn foo() {
+ let result = if true {
+ \"yes\"
+ } else {
+ #[\"no\"
+ }\n|]#
+ }
+ "}),
+ ),
+ ];
+
+ for test in tests {
+ test_with_config(AppBuilder::new().with_file("foo.rs", None), test).await?;
+ }
+
+ Ok(())
+}
+
+#[tokio::test(flavor = "multi_thread")]
+async fn test_move_parent_node_start() -> anyhow::Result<()> {
+ let tests = vec![
+ // single cursor stays single cursor, first goes to end of current
+ // node, then parent
+ (
+ helpers::platform_line(indoc! {r##"
+ fn foo() {
+ let result = if true {
+ "yes"
+ } else {
+ "no#["|]#
+ }
+ }
+ "##}),
+ "<A-b>",
+ helpers::platform_line(indoc! {"\
+ fn foo() {
+ let result = if true {
+ \"yes\"
+ } else {
+ #[\"|]#no\"
+ }
+ }
+ "}),
+ ),
+ (
+ helpers::platform_line(indoc! {"\
+ fn foo() {
+ let result = if true {
+ \"yes\"
+ } else {
+ \"no\"#[\n|]#
+ }
+ }
+ "}),
+ "<A-b>",
+ helpers::platform_line(indoc! {"\
+ fn foo() {
+ let result = if true {
+ \"yes\"
+ } else #[{|]#
+ \"no\"
+ }
+ }
+ "}),
+ ),
+ (
+ helpers::platform_line(indoc! {"\
+ fn foo() {
+ let result = if true {
+ \"yes\"
+ } else #[{|]#
+ \"no\"
+ }
+ }
+ "}),
+ "<A-b>",
+ helpers::platform_line(indoc! {"\
+ fn foo() {
+ let result = if true {
+ \"yes\"
+ } #[e|]#lse {
+ \"no\"
+ }
+ }
+ "}),
+ ),
+ // select mode extends
+ (
+ helpers::platform_line(indoc! {r##"
+ fn foo() {
+ let result = if true {
+ "yes"
+ } else {
+ #["no"|]#
+ }
+ }
+ "##}),
+ "v<A-b><A-b>",
+ helpers::platform_line(indoc! {"\
+ fn foo() {
+ let result = if true {
+ \"yes\"
+ } else #[|{
+ ]#\"no\"
+ }
+ }
+ "}),
+ ),
+ (
+ helpers::platform_line(indoc! {r##"
+ fn foo() {
+ let result = if true {
+ "yes"
+ } else {
+ #["no"|]#
+ }
+ }
+ "##}),
+ "v<A-b><A-b><A-b>",
+ helpers::platform_line(indoc! {"\
+ fn foo() {
+ let result = if true {
+ \"yes\"
+ } #[|else {
+ ]#\"no\"
+ }
+ }
+ "}),
+ ),
+ ];
+
+ for test in tests {
+ test_with_config(AppBuilder::new().with_file("foo.rs", None), test).await?;
+ }
+
+ Ok(())
+}