Skip to content

Commit

Permalink
test(picker): basic <alt-ret> functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
woojiq committed Jul 31, 2023
1 parent 2bced89 commit 01af29a
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 2 deletions.
4 changes: 2 additions & 2 deletions helix-term/tests/integration.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
// XXX remove before PR
// #[cfg(feature = "integration")]
#[cfg(feature = "integration")]
mod test {
mod helpers;

Expand All @@ -20,6 +19,7 @@ mod test {
mod auto_pairs;
mod commands;
mod movement;
mod picker;
mod prompt;
mod splits;
}
75 changes: 75 additions & 0 deletions helix-term/tests/test/picker.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
use std::fs;

use helix_core::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)?,
];
fs::write(files[0].path(), "1\n2\n3\n4")?;
fs::write(files[1].path(), "first\nsecond")?;

log::debug!(
"created and writed two temporary files: {:?} & {:?}",
files[0].path(),
files[1].path()
);

// 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(), files[0].path());
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(), files[1].path());
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(())
}

0 comments on commit 01af29a

Please sign in to comment.