@@ -36,17 +36,15 @@ pub async fn test_key_sequence(
3636 app: &mut Application,
3737 in_keys: Option<&str>,
3838 test_fn: Option<&dyn Fn(&Application)>,
39− timeout: Option<Duration>,
4039) -> anyhow::Result<()> {
41− test_key_sequences(app, vec![(in_keys, test_fn)], timeout).await
40+ test_key_sequences(app, vec![(in_keys, test_fn)]).await
4241}
4342
4443pub async fn test_key_sequences(
4544 app: &mut Application,
4645 inputs: Vec<(Option<&str>, Option<&dyn Fn(&Application)>)>,
47− timeout: Option<Duration>,
4846) -> anyhow::Result<()> {
49− let timeout = timeout.unwrap_or(Duration::from_millis(500));
47+ const TIMEOUT: Duration = Duration::from_millis(500);
5048 let (tx, rx) = tokio::sync::mpsc::unbounded_channel();
5149 let mut rx_stream = UnboundedReceiverStream::new(rx);
5250
@@ -57,10 +55,7 @@ pub async fn test_key_sequences(
5755 }
5856 }
5957
60− let event_loop = app.event_loop(&mut rx_stream);
61− let result = tokio::time::timeout(timeout, event_loop).await;
62−
63− if result.is_ok() {
58+ if !app.event_loop_until_idle(&mut rx_stream).await {
6459 bail!("application exited before test function could run");
6560 }
6661
@@ -74,7 +69,7 @@ pub async fn test_key_sequences(
7469 }
7570
7671 let event_loop = app.event_loop(&mut rx_stream);
77− tokio::time::timeout(timeout, event_loop).await?;
72+ tokio::time::timeout(TIMEOUT, event_loop).await?;
7873 app.close().await?;
7974
8075 Ok(())
@@ -84,7 +79,6 @@ pub async fn test_key_sequence_with_input_text<T: Into<TestCase>>(
8479 app: Option<Application>,
8580 test_case: T,
8681 test_fn: &dyn Fn(&Application),
87− timeout: Option<Duration>,
8882) -> anyhow::Result<()> {
8983 let test_case = test_case.into();
9084 let mut app =
@@ -102,7 +96,7 @@ pub async fn test_key_sequence_with_input_text<T: Into<TestCase>>(
10296 view.id,
10397 );
10498
105− test_key_sequence(&mut app, Some(&test_case.in_keys), Some(test_fn), timeout).await
99+ test_key_sequence(&mut app, Some(&test_case.in_keys), Some(test_fn)).await
106100}
107101
108102/// Use this for very simple test cases where there is one input
@@ -112,26 +106,20 @@ pub async fn test_key_sequence_text_result<T: Into<TestCase>>(
112106 args: Args,
113107 config: Config,
114108 test_case: T,
115− timeout: Option<Duration>,
116109) -> anyhow::Result<()> {
117110 let test_case = test_case.into();
118111 let app = Application::new(args, config).unwrap();
119112
120− test_key_sequence_with_input_text(
121− Some(app),
122− test_case.clone(),
123− &|app| {
124− let doc = doc!(app.editor);
125− assert_eq!(&test_case.out_text, doc.text());
126−
127− let mut selections: Vec<_> = doc.selections().values().cloned().collect();
128− assert_eq!(1, selections.len());
129−
130− let sel = selections.pop().unwrap();
131− assert_eq!(test_case.out_selection, sel);
132− },
133− timeout,
134− )
113+ test_key_sequence_with_input_text(Some(app), test_case.clone(), &|app| {
114+ let doc = doc!(app.editor);
115+ assert_eq!(&test_case.out_text, doc.text());
116+
117+ let mut selections: Vec<_> = doc.selections().values().cloned().collect();
118+ assert_eq!(1, selections.len());
119+
120+ let sel = selections.pop().unwrap();
121+ assert_eq!(test_case.out_selection, sel);
122+ })
135123 .await
136124}
137125