Get language2 tests passing by not blocking on a foreground task

Nathan Sobo created

Change summary

crates/gpui2/src/app/test_context.rs        | 10 ++++------
crates/gpui2_macros/src/derive_component.rs |  4 ----
crates/language2/src/buffer.rs              |  2 +-
crates/language2/src/buffer_tests.rs        |  1 +
4 files changed, 6 insertions(+), 11 deletions(-)

Detailed changes

crates/gpui2/src/app/test_context.rs 🔗

@@ -4,7 +4,7 @@ use crate::{
     WindowContext,
 };
 use anyhow::{anyhow, bail};
-use futures::{SinkExt, Stream, StreamExt};
+use futures::{Stream, StreamExt};
 use std::{cell::RefCell, future::Future, rc::Rc, sync::Arc, time::Duration};
 
 #[derive(Clone)]
@@ -165,13 +165,11 @@ impl TestAppContext {
     where
         T::Event: 'static + Clone,
     {
-        let (mut tx, rx) = futures::channel::mpsc::unbounded();
+        let (tx, rx) = futures::channel::mpsc::unbounded();
         entity
             .update(self, |_, cx: &mut ModelContext<T>| {
-                cx.subscribe(entity, move |_, _, event, cx| {
-                    cx.background_executor()
-                        .block(tx.send(event.clone()))
-                        .unwrap();
+                cx.subscribe(entity, move |_model, _handle, event, _cx| {
+                    let _ = tx.unbounded_send(event.clone());
                 })
             })
             .detach();

crates/language2/src/buffer.rs 🔗

@@ -434,7 +434,7 @@ impl Buffer {
         ));
 
         let text_operations = self.text.operations().clone();
-        cx.spawn(|_| async move {
+        cx.background_executor().spawn(async move {
             let since = since.unwrap_or_default();
             operations.extend(
                 text_operations

crates/language2/src/buffer_tests.rs 🔗

@@ -1943,6 +1943,7 @@ fn test_random_collaboration(cx: &mut AppContext, mut rng: StdRng) {
             .detach();
             buffer
         });
+
         buffers.push(buffer);
         replica_ids.push(i as ReplicaId);
         network.lock().add_peer(i as ReplicaId);