@@ -251,6 +251,9 @@ impl Application {
252 S: Stream<Item = crossterm::Result<crossterm::event::Event>> + Unpin,
252 S: Stream<Item = crossterm::Result<crossterm::event::Event>> + Unpin,
254+ #[cfg(feature = "integration")]
255+ let mut idle_handled = false;
255 if self.editor.should_close() {
258 if self.editor.should_close() {
256 return false;
259 return false;
@@ -263,11 +266,9 @@ impl Application {
264 Some(event) = input_stream.next() => {
267 Some(event) = input_stream.next() => {
265 self.handle_terminal_events(event);
268 self.handle_terminal_events(event);
266− self.editor.reset_idle_timer();
268 Some(signal) = self.signals.next() => {
270 Some(signal) = self.signals.next() => {
269 self.handle_signals(signal).await;
271 self.handle_signals(signal).await;
270− self.editor.reset_idle_timer();
272 Some((id, call)) = self.editor.language_servers.incoming.next() => {
273 Some((id, call)) = self.editor.language_servers.incoming.next() => {
273 self.handle_language_server_message(call, id).await;
274 self.handle_language_server_message(call, id).await;
@@ -278,37 +279,46 @@ impl Application {
278 self.render();
279 self.render();
279 self.last_render = Instant::now();
280 self.last_render = Instant::now();
282− self.editor.reset_idle_timer();
284 Some(payload) = self.editor.debugger_events.next() => {
283 Some(payload) = self.editor.debugger_events.next() => {
285 let needs_render = self.editor.handle_debugger_message(payload).await;
284 let needs_render = self.editor.handle_debugger_message(payload).await;
286 if needs_render {
285 if needs_render {
287 self.render();
286 self.render();
289− self.editor.reset_idle_timer();
291 Some(config_event) = self.editor.config_events.1.recv() => {
289 Some(config_event) = self.editor.config_events.1.recv() => {
292 self.handle_config_events(config_event);
290 self.handle_config_events(config_event);
293 self.render();
291 self.render();
294− self.editor.reset_idle_timer();
296 Some(callback) = self.jobs.futures.next() => {
293 Some(callback) = self.jobs.futures.next() => {
297 self.jobs.handle_callback(&mut self.editor, &mut self.compositor, callback);
294 self.jobs.handle_callback(&mut self.editor, &mut self.compositor, callback);
298 self.render();
295 self.render();
299− self.editor.reset_idle_timer();
301 Some(callback) = self.jobs.wait_futures.next() => {
297 Some(callback) = self.jobs.wait_futures.next() => {
302 self.jobs.handle_callback(&mut self.editor, &mut self.compositor, callback);
298 self.jobs.handle_callback(&mut self.editor, &mut self.compositor, callback);
303 self.render();
299 self.render();
304− self.editor.reset_idle_timer();
306 _ = &mut self.editor.idle_timer => {
301 _ = &mut self.editor.idle_timer => {
307 // idle timeout
302 // idle timeout
308 self.editor.clear_idle_timer();
303 self.editor.clear_idle_timer();
309 self.handle_idle_timeout();
304 self.handle_idle_timeout();
306+ #[cfg(feature = "integration")]
308+ idle_handled = true;
313+ // for integration tests only, reset the idle timer after every
314+ // event to make a signal when test events are done processing
315+ #[cfg(feature = "integration")]
310 return true;
318 return true;
321+ self.editor.reset_idle_timer();