@@ -0,0 +1,122 @@
1+use super::*;
2+
3+#[tokio::test(flavor = "multi_thread")]
4+async fn test_split_write_quit_all() -> anyhow::Result<()> {
5+ let mut file1 = tempfile::NamedTempFile::new()?;
6+ let mut file2 = tempfile::NamedTempFile::new()?;
7+ let mut file3 = tempfile::NamedTempFile::new()?;
8+
9+ test_key_sequences(
10+ &mut helpers::app_with_file(file1.path())?,
11+ vec![
12+ (
13+ Some(&format!(
14+ "ihello1<esc>:sp<ret>:o {}<ret>ihello2<esc>:sp<ret>:o {}<ret>ihello3<esc>",
15+ file2.path().to_string_lossy(),
16+ file3.path().to_string_lossy()
17+ )),
18+ Some(&|app| {
19+ let docs: Vec<_> = app.editor.documents().collect();
20+ assert_eq!(3, docs.len());
21+
22+ let doc1 = docs
23+ .iter()
24+ .find(|doc| doc.path().unwrap() == file1.path())
25+ .unwrap();
26+
27+ assert_eq!("hello1", doc1.text().to_string());
28+
29+ let doc2 = docs
30+ .iter()
31+ .find(|doc| doc.path().unwrap() == file2.path())
32+ .unwrap();
33+
34+ assert_eq!("hello2", doc2.text().to_string());
35+
36+ let doc3 = docs
37+ .iter()
38+ .find(|doc| doc.path().unwrap() == file3.path())
39+ .unwrap();
40+
41+ assert_eq!("hello3", doc3.text().to_string());
42+
43+ helpers::assert_status_not_error(&app.editor);
44+ assert_eq!(3, app.editor.tree.views().count());
45+ }),
46+ ),
47+ (
48+ Some(":wqa<ret>"),
49+ Some(&|app| {
50+ helpers::assert_status_not_error(&app.editor);
51+ assert_eq!(0, app.editor.tree.views().count());
52+ }),
53+ ),
54+ ],
55+ true,
56+ )
57+ .await?;
58+
59+ helpers::assert_file_has_content(file1.as_file_mut(), "hello1")?;
60+ helpers::assert_file_has_content(file2.as_file_mut(), "hello2")?;
61+ helpers::assert_file_has_content(file3.as_file_mut(), "hello3")?;
62+
63+ Ok(())
64+}
65+
66+#[tokio::test(flavor = "multi_thread")]
67+async fn test_split_write_quit_same_file() -> anyhow::Result<()> {
68+ let mut file = tempfile::NamedTempFile::new()?;
69+
70+ test_key_sequences(
71+ &mut helpers::app_with_file(file.path())?,
72+ vec![
73+ (
74+ Some("O<esc>ihello<esc>:sp<ret>ogoodbye<esc>"),
75+ Some(&|app| {
76+ assert_eq!(2, app.editor.tree.views().count());
77+ helpers::assert_status_not_error(&app.editor);
78+
79+ let mut docs: Vec<_> = app.editor.documents().collect();
80+ assert_eq!(1, docs.len());
81+
82+ let doc = docs.pop().unwrap();
83+
84+ assert_eq!(
85+ helpers::platform_line("hello\ngoodbye"),
86+ doc.text().to_string()
87+ );
88+
89+ assert!(doc.is_modified());
90+ }),
91+ ),
92+ (
93+ Some(":wq<ret>"),
94+ Some(&|app| {
95+ helpers::assert_status_not_error(&app.editor);
96+ assert_eq!(1, app.editor.tree.views().count());
97+
98+ let mut docs: Vec<_> = app.editor.documents().collect();
99+ assert_eq!(1, docs.len());
100+
101+ let doc = docs.pop().unwrap();
102+
103+ assert_eq!(
104+ helpers::platform_line("hello\ngoodbye"),
105+ doc.text().to_string()
106+ );
107+
108+ assert!(!doc.is_modified());
109+ }),
110+ ),
111+ ],
112+ false,
113+ )
114+ .await?;
115+
116+ helpers::assert_file_has_content(
117+ file.as_file_mut(),
118+ &helpers::platform_line("hello\ngoodbye"),
119+ )?;
120+
121+ Ok(())
122+}