diff options
author | Skyler Hawthorne | 2022-04-19 05:21:31 +0000 |
---|---|---|
committer | Skyler Hawthorne | 2022-06-19 03:54:03 +0000 |
commit | ee705dcb3363aeb197f6125ab2f8285782333010 (patch) | |
tree | e045ef2a2c062f0e4df11ff50788b0e0b161e37a /helix-term/tests/integration/write.rs | |
parent | 36e5809f638028644d8a51e1ed2467ea402de170 (diff) |
use main application event loop
Use the Application's main event loop to allow LSP, file writes, etc
Diffstat (limited to 'helix-term/tests/integration/write.rs')
-rw-r--r-- | helix-term/tests/integration/write.rs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/helix-term/tests/integration/write.rs b/helix-term/tests/integration/write.rs new file mode 100644 index 00000000..47e56288 --- /dev/null +++ b/helix-term/tests/integration/write.rs @@ -0,0 +1,69 @@ +use std::{ + io::{Read, Write}, + ops::RangeInclusive, +}; + +use helix_term::application::Application; + +use super::*; + +#[tokio::test] +async fn test_write() -> anyhow::Result<()> { + let mut file = tempfile::NamedTempFile::new().unwrap(); + + test_key_sequence( + &mut Application::new( + Args { + files: vec![(file.path().to_path_buf(), Position::default())], + ..Default::default() + }, + Config::default(), + )?, + "ii can eat glass, it will not hurt me<ret><esc>:w<ret>", + None, + ) + .await?; + + file.as_file_mut().flush()?; + file.as_file_mut().sync_all()?; + + let mut file_content = String::new(); + file.as_file_mut().read_to_string(&mut file_content)?; + assert_eq!("i can eat glass, it will not hurt me\n", file_content); + + Ok(()) +} + +#[tokio::test] +async fn test_write_concurrent() -> anyhow::Result<()> { + let mut file = tempfile::NamedTempFile::new().unwrap(); + let mut command = String::new(); + const RANGE: RangeInclusive<i32> = 1..=1000; + + for i in RANGE { + let cmd = format!("%c{}<esc>:w<ret>", i); + command.push_str(&cmd); + } + + test_key_sequence( + &mut Application::new( + Args { + files: vec![(file.path().to_path_buf(), Position::default())], + ..Default::default() + }, + Config::default(), + )?, + &command, + None, + ) + .await?; + + file.as_file_mut().flush()?; + file.as_file_mut().sync_all()?; + + let mut file_content = String::new(); + file.as_file_mut().read_to_string(&mut file_content)?; + assert_eq!(RANGE.end().to_string(), file_content); + + Ok(()) +} |