aboutsummaryrefslogtreecommitdiff
path: root/helix-term/tests
diff options
context:
space:
mode:
authorwoojiq2023-08-08 13:17:29 +0000
committerGitHub2023-08-08 13:17:29 +0000
commitaa4d84a0b30fbe93882508c6d9dc8ca4c95341d0 (patch)
treece3615ac864edb7b1cf124c744e09d197ff81075 /helix-term/tests
parentc1c71bb90edf8fe43584bb103e72bd0e81d36100 (diff)
Align view for background buffer opened with `alt-ret` (#7691)
* fix(picker): `alt-ret' changes cursor pos of current file, not new one Closes #7673 * fix other pickers * symbol pickers * diagnostick pickers This is done using the already patched `jump_to_location` method. * fix global and jumplist pickers * use `view` as old_id; make `align_view` method of `Action` * test(picker): basic <alt-ret> functionality * fix: picker integrational test * fix nit Co-authored-by: Michael Davis <mcarsondavis@gmail.com> --------- Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
Diffstat (limited to 'helix-term/tests')
-rw-r--r--helix-term/tests/integration.rs1
-rw-r--r--helix-term/tests/test/picker.rs80
2 files changed, 81 insertions, 0 deletions
diff --git a/helix-term/tests/integration.rs b/helix-term/tests/integration.rs
index d77eefed..a62f0066 100644
--- a/helix-term/tests/integration.rs
+++ b/helix-term/tests/integration.rs
@@ -19,6 +19,7 @@ mod test {
mod auto_pairs;
mod commands;
mod movement;
+ mod picker;
mod prompt;
mod splits;
}
diff --git a/helix-term/tests/test/picker.rs b/helix-term/tests/test/picker.rs
new file mode 100644
index 00000000..f6d1aa25
--- /dev/null
+++ b/helix-term/tests/test/picker.rs
@@ -0,0 +1,80 @@
+use std::fs;
+
+use helix_core::{path::get_canonicalized_path, Range};
+use helix_loader::{current_working_dir, set_current_working_dir};
+use helix_view::{current_ref, editor::Action};
+use tempfile::{Builder, TempDir};
+
+use super::*;
+
+#[tokio::test(flavor = "multi_thread")]
+async fn test_picker_alt_ret() -> anyhow::Result<()> {
+ // Create two files, open the first and run a global search for a word
+ // from the second file. Press <alt-ret> to have helix open the second file in the
+ // new buffer, but not change focus. Then check whether the word is highlighted
+ // correctly and the view of the first file has not changed.
+ let tmp_dir = TempDir::new()?;
+ set_current_working_dir(tmp_dir.path().into())?;
+
+ let mut app = AppBuilder::new().build()?;
+
+ log::debug!(
+ "set current working directory to {:?}",
+ current_working_dir()
+ );
+
+ // Add prefix so helix doesn't hide these files in a picker
+ let files = [
+ Builder::new().prefix("1").tempfile_in(&tmp_dir)?,
+ Builder::new().prefix("2").tempfile_in(&tmp_dir)?,
+ ];
+ let paths = files
+ .iter()
+ .map(|f| get_canonicalized_path(f.path()).unwrap())
+ .collect::<Vec<_>>();
+
+ fs::write(&paths[0], "1\n2\n3\n4")?;
+ fs::write(&paths[1], "first\nsecond")?;
+
+ log::debug!(
+ "created and wrote two temporary files: {:?} & {:?}",
+ paths[0],
+ paths[1]
+ );
+
+ // Manually open to save the offset, otherwise we won't be able to change the state in the Fn trait
+ app.editor.open(files[0].path(), Action::Replace)?;
+ let view_offset = current_ref!(app.editor).0.offset;
+
+ test_key_sequences(
+ &mut app,
+ vec![
+ (Some("<space>/"), None),
+ (Some("second<ret>"), None),
+ (
+ Some("<A-ret><esc>"),
+ Some(&|app| {
+ let (view, doc) = current_ref!(app.editor);
+ assert_eq!(doc.path().unwrap(), &paths[0]);
+ let select_ranges = doc.selection(view.id).ranges();
+ assert_eq!(select_ranges[0], Range::new(0, 1));
+ assert_eq!(view.offset, view_offset);
+ }),
+ ),
+ (
+ Some(":buffer<minus>next<ret>"),
+ Some(&|app| {
+ let (view, doc) = current_ref!(app.editor);
+ assert_eq!(doc.path().unwrap(), &paths[1]);
+ let select_ranges = doc.selection(view.id).ranges();
+ assert_eq!(select_ranges.len(), 1);
+ assert_eq!(select_ranges[0], Range::new(6, 12));
+ }),
+ ),
+ ],
+ false,
+ )
+ .await?;
+
+ Ok(())
+}