diff options
author | woojiq | 2023-08-08 13:17:29 +0000 |
---|---|---|
committer | GitHub | 2023-08-08 13:17:29 +0000 |
commit | aa4d84a0b30fbe93882508c6d9dc8ca4c95341d0 (patch) | |
tree | ce3615ac864edb7b1cf124c744e09d197ff81075 /helix-term/tests/test | |
parent | c1c71bb90edf8fe43584bb103e72bd0e81d36100 (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/test')
-rw-r--r-- | helix-term/tests/test/picker.rs | 80 |
1 files changed, 80 insertions, 0 deletions
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(()) +} |