aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/tests/integration.rs1
-rw-r--r--helix-term/tests/test/commands.rs93
-rw-r--r--helix-term/tests/test/commands/write.rs (renamed from helix-term/tests/test/write.rs)94
3 files changed, 93 insertions, 95 deletions
diff --git a/helix-term/tests/integration.rs b/helix-term/tests/integration.rs
index a378af7a..be1bfc2c 100644
--- a/helix-term/tests/integration.rs
+++ b/helix-term/tests/integration.rs
@@ -23,5 +23,4 @@ mod test {
mod movement;
mod prompt;
mod splits;
- mod write;
}
diff --git a/helix-term/tests/test/commands.rs b/helix-term/tests/test/commands.rs
index e8d16bfa..74c32c4a 100644
--- a/helix-term/tests/test/commands.rs
+++ b/helix-term/tests/test/commands.rs
@@ -1,99 +1,8 @@
-use std::ops::RangeInclusive;
-
-use helix_core::diagnostic::Severity;
use helix_term::application::Application;
use super::*;
-#[tokio::test(flavor = "multi_thread")]
-async fn test_write_quit_fail() -> anyhow::Result<()> {
- let file = helpers::new_readonly_tempfile()?;
- let mut app = helpers::AppBuilder::new()
- .with_file(file.path(), None)
- .build()?;
-
- test_key_sequence(
- &mut app,
- Some("ihello<esc>:wq<ret>"),
- Some(&|app| {
- let mut docs: Vec<_> = app.editor.documents().collect();
- assert_eq!(1, docs.len());
-
- let doc = docs.pop().unwrap();
- assert_eq!(Some(file.path()), doc.path().map(PathBuf::as_path));
- assert_eq!(&Severity::Error, app.editor.get_status().unwrap().1);
- }),
- false,
- )
- .await?;
-
- Ok(())
-}
-
-#[tokio::test(flavor = "multi_thread")]
-async fn test_buffer_close_concurrent() -> anyhow::Result<()> {
- test_key_sequences(
- &mut helpers::AppBuilder::new().build()?,
- vec![
- (
- None,
- Some(&|app| {
- assert_eq!(1, app.editor.documents().count());
- assert!(!app.editor.is_err());
- }),
- ),
- (
- Some("ihello<esc>:new<ret>"),
- Some(&|app| {
- assert_eq!(2, app.editor.documents().count());
- assert!(!app.editor.is_err());
- }),
- ),
- (
- Some(":buffer<minus>close<ret>"),
- Some(&|app| {
- assert_eq!(1, app.editor.documents().count());
- assert!(!app.editor.is_err());
- }),
- ),
- ],
- false,
- )
- .await?;
-
- // verify if writes are queued up, it finishes them before closing the buffer
- let mut file = tempfile::NamedTempFile::new()?;
- 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);
- }
-
- command.push_str(":buffer<minus>close<ret>");
-
- let mut app = helpers::AppBuilder::new()
- .with_file(file.path(), None)
- .build()?;
-
- test_key_sequence(
- &mut app,
- Some(&command),
- Some(&|app| {
- assert!(!app.editor.is_err(), "error: {:?}", app.editor.get_status());
-
- let doc = app.editor.document_by_path(file.path());
- assert!(doc.is_none(), "found doc: {:?}", doc);
- }),
- false,
- )
- .await?;
-
- helpers::assert_file_has_content(file.as_file_mut(), &RANGE.end().to_string())?;
-
- Ok(())
-}
+mod write;
#[tokio::test(flavor = "multi_thread")]
async fn test_selection_duplication() -> anyhow::Result<()> {
diff --git a/helix-term/tests/test/write.rs b/helix-term/tests/test/commands/write.rs
index 81459b2f..0ea66a12 100644
--- a/helix-term/tests/test/write.rs
+++ b/helix-term/tests/test/commands/write.rs
@@ -1,5 +1,5 @@
use std::{
- io::{Read, Seek, SeekFrom, Write},
+ io::{Read, Seek, Write},
ops::RangeInclusive,
};
@@ -9,6 +9,96 @@ use helix_view::doc;
use super::*;
#[tokio::test(flavor = "multi_thread")]
+async fn test_write_quit_fail() -> anyhow::Result<()> {
+ let file = helpers::new_readonly_tempfile()?;
+ let mut app = helpers::AppBuilder::new()
+ .with_file(file.path(), None)
+ .build()?;
+
+ test_key_sequence(
+ &mut app,
+ Some("ihello<esc>:wq<ret>"),
+ Some(&|app| {
+ let mut docs: Vec<_> = app.editor.documents().collect();
+ assert_eq!(1, docs.len());
+
+ let doc = docs.pop().unwrap();
+ assert_eq!(Some(file.path()), doc.path().map(PathBuf::as_path));
+ assert_eq!(&Severity::Error, app.editor.get_status().unwrap().1);
+ }),
+ false,
+ )
+ .await?;
+
+ Ok(())
+}
+
+#[tokio::test(flavor = "multi_thread")]
+async fn test_buffer_close_concurrent() -> anyhow::Result<()> {
+ test_key_sequences(
+ &mut helpers::AppBuilder::new().build()?,
+ vec![
+ (
+ None,
+ Some(&|app| {
+ assert_eq!(1, app.editor.documents().count());
+ assert!(!app.editor.is_err());
+ }),
+ ),
+ (
+ Some("ihello<esc>:new<ret>"),
+ Some(&|app| {
+ assert_eq!(2, app.editor.documents().count());
+ assert!(!app.editor.is_err());
+ }),
+ ),
+ (
+ Some(":buffer<minus>close<ret>"),
+ Some(&|app| {
+ assert_eq!(1, app.editor.documents().count());
+ assert!(!app.editor.is_err());
+ }),
+ ),
+ ],
+ false,
+ )
+ .await?;
+
+ // verify if writes are queued up, it finishes them before closing the buffer
+ let mut file = tempfile::NamedTempFile::new()?;
+ 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);
+ }
+
+ command.push_str(":buffer<minus>close<ret>");
+
+ let mut app = helpers::AppBuilder::new()
+ .with_file(file.path(), None)
+ .build()?;
+
+ test_key_sequence(
+ &mut app,
+ Some(&command),
+ Some(&|app| {
+ assert!(!app.editor.is_err(), "error: {:?}", app.editor.get_status());
+
+ let doc = app.editor.document_by_path(file.path());
+ assert!(doc.is_none(), "found doc: {:?}", doc);
+ }),
+ false,
+ )
+ .await?;
+
+ helpers::assert_file_has_content(file.as_file_mut(), &RANGE.end().to_string())?;
+
+ Ok(())
+}
+
+#[tokio::test(flavor = "multi_thread")]
async fn test_write() -> anyhow::Result<()> {
let mut file = tempfile::NamedTempFile::new()?;
let mut app = helpers::AppBuilder::new()
@@ -57,7 +147,7 @@ async fn test_overwrite_protection() -> anyhow::Result<()> {
file.as_file_mut().flush()?;
file.as_file_mut().sync_all()?;
- file.seek(SeekFrom::Start(0))?;
+ file.rewind()?;
let mut file_content = String::new();
file.as_file_mut().read_to_string(&mut file_content)?;