Add a public gpui::TestAppContext::new method

Max Brunsfeld and Nathan Sobo created

Co-Authored-By: Nathan Sobo <nathan@zed.dev>

Change summary

gpui/src/app.rs        | 39 ++++++++++++++++++++-------------------
gpui_macros/src/lib.rs |  4 ++--
2 files changed, 22 insertions(+), 21 deletions(-)

Detailed changes

gpui/src/app.rs 🔗

@@ -111,10 +111,7 @@ pub struct TestAppContext {
 }
 
 impl App {
-    pub fn test<T, A: AssetSource, F: FnOnce(&mut MutableAppContext) -> T>(
-        asset_source: A,
-        f: F,
-    ) -> T {
+    pub fn test<T, F: FnOnce(&mut MutableAppContext) -> T>(f: F) -> T {
         let foreground_platform = platform::test::foreground_platform();
         let platform = platform::test::platform();
         let foreground = Rc::new(executor::Foreground::test());
@@ -122,32 +119,20 @@ impl App {
             foreground,
             Arc::new(platform),
             Rc::new(foreground_platform),
-            asset_source,
+            (),
         )));
         cx.borrow_mut().weak_self = Some(Rc::downgrade(&cx));
         let mut cx = cx.borrow_mut();
         f(&mut *cx)
     }
 
-    pub fn test_async<T, F, A: AssetSource, Fn>(asset_source: A, f: Fn) -> T
+    pub fn test_async<T, F, Fn>(f: Fn) -> T
     where
         Fn: FnOnce(TestAppContext) -> F,
         F: Future<Output = T>,
     {
-        let platform = Arc::new(platform::test::platform());
-        let foreground_platform = Rc::new(platform::test::foreground_platform());
         let foreground = Rc::new(executor::Foreground::test());
-        let cx = TestAppContext {
-            cx: Rc::new(RefCell::new(MutableAppContext::new(
-                foreground.clone(),
-                platform,
-                foreground_platform.clone(),
-                asset_source,
-            ))),
-            foreground_platform,
-        };
-        cx.cx.borrow_mut().weak_self = Some(Rc::downgrade(&cx.cx));
-
+        let cx = TestAppContext::new(foreground.clone());
         let future = f(cx);
         smol::block_on(foreground.run(future))
     }
@@ -261,6 +246,22 @@ impl App {
 }
 
 impl TestAppContext {
+    pub fn new(foreground: Rc<executor::Foreground>) -> Self {
+        let platform = Arc::new(platform::test::platform());
+        let foreground_platform = Rc::new(platform::test::foreground_platform());
+        let cx = TestAppContext {
+            cx: Rc::new(RefCell::new(MutableAppContext::new(
+                foreground.clone(),
+                platform,
+                foreground_platform.clone(),
+                (),
+            ))),
+            foreground_platform,
+        };
+        cx.cx.borrow_mut().weak_self = Some(Rc::downgrade(&cx.cx));
+        cx
+    }
+
     pub fn dispatch_action<T: 'static + Any>(
         &self,
         window_id: usize,

gpui_macros/src/lib.rs 🔗

@@ -34,7 +34,7 @@ pub fn test(args: TokenStream, function: TokenStream) -> TokenStream {
             fn #outer_fn_name() {
                 #inner_fn
 
-                #namespace::App::test_async((), move |cx| async {
+                #namespace::App::test_async(move |cx| async {
                     #inner_fn_name(cx).await;
                 });
             }
@@ -45,7 +45,7 @@ pub fn test(args: TokenStream, function: TokenStream) -> TokenStream {
             fn #outer_fn_name() {
                 #inner_fn
 
-                #namespace::App::test((), |cx| {
+                #namespace::App::test(|cx| {
                     #inner_fn_name(cx);
                 });
             }