summaryrefslogtreecommitdiff
path: root/helix-term/tests/test/splits.rs
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term/tests/test/splits.rs')
-rw-r--r--helix-term/tests/test/splits.rs129
1 files changed, 129 insertions, 0 deletions
diff --git a/helix-term/tests/test/splits.rs b/helix-term/tests/test/splits.rs
new file mode 100644
index 00000000..5807413a
--- /dev/null
+++ b/helix-term/tests/test/splits.rs
@@ -0,0 +1,129 @@
+use super::*;
+
+#[tokio::test(flavor = "multi_thread")]
+async fn test_split_write_quit_all() -> anyhow::Result<()> {
+ let mut file1 = tempfile::NamedTempFile::new()?;
+ let mut file2 = tempfile::NamedTempFile::new()?;
+ let mut file3 = tempfile::NamedTempFile::new()?;
+
+ let mut app = helpers::AppBuilder::new()
+ .with_file(file1.path(), None)
+ .build()?;
+
+ test_key_sequences(
+ &mut app,
+ vec![
+ (
+ Some(&format!(
+ "ihello1<esc>:sp<ret>:o {}<ret>ihello2<esc>:sp<ret>:o {}<ret>ihello3<esc>",
+ file2.path().to_string_lossy(),
+ file3.path().to_string_lossy()
+ )),
+ Some(&|app| {
+ let docs: Vec<_> = app.editor.documents().collect();
+ assert_eq!(3, docs.len());
+
+ let doc1 = docs
+ .iter()
+ .find(|doc| doc.path().unwrap() == file1.path())
+ .unwrap();
+
+ assert_eq!("hello1", doc1.text().to_string());
+
+ let doc2 = docs
+ .iter()
+ .find(|doc| doc.path().unwrap() == file2.path())
+ .unwrap();
+
+ assert_eq!("hello2", doc2.text().to_string());
+
+ let doc3 = docs
+ .iter()
+ .find(|doc| doc.path().unwrap() == file3.path())
+ .unwrap();
+
+ assert_eq!("hello3", doc3.text().to_string());
+
+ helpers::assert_status_not_error(&app.editor);
+ assert_eq!(3, app.editor.tree.views().count());
+ }),
+ ),
+ (
+ Some(":wqa<ret>"),
+ Some(&|app| {
+ helpers::assert_status_not_error(&app.editor);
+ assert_eq!(0, app.editor.tree.views().count());
+ }),
+ ),
+ ],
+ true,
+ )
+ .await?;
+
+ helpers::assert_file_has_content(file1.as_file_mut(), "hello1")?;
+ helpers::assert_file_has_content(file2.as_file_mut(), "hello2")?;
+ helpers::assert_file_has_content(file3.as_file_mut(), "hello3")?;
+
+ Ok(())
+}
+
+#[tokio::test(flavor = "multi_thread")]
+async fn test_split_write_quit_same_file() -> anyhow::Result<()> {
+ let mut file = tempfile::NamedTempFile::new()?;
+ let mut app = helpers::AppBuilder::new()
+ .with_file(file.path(), None)
+ .build()?;
+
+ test_key_sequences(
+ &mut app,
+ vec![
+ (
+ Some("O<esc>ihello<esc>:sp<ret>ogoodbye<esc>"),
+ Some(&|app| {
+ assert_eq!(2, app.editor.tree.views().count());
+ helpers::assert_status_not_error(&app.editor);
+
+ let mut docs: Vec<_> = app.editor.documents().collect();
+ assert_eq!(1, docs.len());
+
+ let doc = docs.pop().unwrap();
+
+ assert_eq!(
+ helpers::platform_line("hello\ngoodbye"),
+ doc.text().to_string()
+ );
+
+ assert!(doc.is_modified());
+ }),
+ ),
+ (
+ Some(":wq<ret>"),
+ Some(&|app| {
+ helpers::assert_status_not_error(&app.editor);
+ assert_eq!(1, app.editor.tree.views().count());
+
+ let mut docs: Vec<_> = app.editor.documents().collect();
+ assert_eq!(1, docs.len());
+
+ let doc = docs.pop().unwrap();
+
+ assert_eq!(
+ helpers::platform_line("hello\ngoodbye"),
+ doc.text().to_string()
+ );
+
+ assert!(!doc.is_modified());
+ }),
+ ),
+ ],
+ false,
+ )
+ .await?;
+
+ helpers::assert_file_has_content(
+ file.as_file_mut(),
+ &helpers::platform_line("hello\ngoodbye"),
+ )?;
+
+ Ok(())
+}