Enable tests for MentionsEditor

Max Brunsfeld created

Change summary

crates/collab_ui2/src/chat_panel/message_editor.rs | 188 +++++++--------
1 file changed, 93 insertions(+), 95 deletions(-)

Detailed changes

crates/collab_ui2/src/chat_panel/message_editor.rs 🔗

@@ -203,98 +203,96 @@ impl Render for MessageEditor {
     }
 }
 
-// #[cfg(test)]
-// mod tests {
-//     use super::*;
-//     use client::{Client, User, UserStore};
-//     use gpui::{TestAppContext, WindowHandle};
-//     use language::{Language, LanguageConfig};
-//     use rpc::proto;
-//     use settings::SettingsStore;
-//     use util::{http::FakeHttpClient, test::marked_text_ranges};
-
-//     #[gpui::test]
-//     async fn test_message_editor(cx: &mut TestAppContext) {
-//         let editor = init_test(cx);
-//         let editor = editor.root(cx);
-
-//         editor.update(cx, |editor, cx| {
-//             editor.set_members(
-//                 vec![
-//                     ChannelMembership {
-//                         user: Arc::new(User {
-//                             github_login: "a-b".into(),
-//                             id: 101,
-//                             avatar: None,
-//                         }),
-//                         kind: proto::channel_member::Kind::Member,
-//                         role: proto::ChannelRole::Member,
-//                     },
-//                     ChannelMembership {
-//                         user: Arc::new(User {
-//                             github_login: "C_D".into(),
-//                             id: 102,
-//                             avatar: None,
-//                         }),
-//                         kind: proto::channel_member::Kind::Member,
-//                         role: proto::ChannelRole::Member,
-//                     },
-//                 ],
-//                 cx,
-//             );
-
-//             editor.editor.update(cx, |editor, cx| {
-//                 editor.set_text("Hello, @a-b! Have you met @C_D?", cx)
-//             });
-//         });
-
-//         cx.foreground().advance_clock(MENTIONS_DEBOUNCE_INTERVAL);
-
-//         editor.update(cx, |editor, cx| {
-//             let (text, ranges) = marked_text_ranges("Hello, «@a-b»! Have you met «@C_D»?", false);
-//             assert_eq!(
-//                 editor.take_message(cx),
-//                 MessageParams {
-//                     text,
-//                     mentions: vec![(ranges[0].clone(), 101), (ranges[1].clone(), 102)],
-//                 }
-//             );
-//         });
-//     }
-
-//     fn init_test(cx: &mut TestAppContext) -> WindowHandle<MessageEditor> {
-//         cx.foreground().forbid_parking();
-
-//         cx.update(|cx| {
-//             let http = FakeHttpClient::with_404_response();
-//             let client = Client::new(http.clone(), cx);
-//             let user_store = cx.add_model(|cx| UserStore::new(client.clone(), http, cx));
-//             cx.set_global(SettingsStore::test(cx));
-//             theme::init((), cx);
-//             language::init(cx);
-//             editor::init(cx);
-//             client::init(&client, cx);
-//             channel::init(&client, user_store, cx);
-//         });
-
-//         let language_registry = Arc::new(LanguageRegistry::test());
-//         language_registry.add(Arc::new(Language::new(
-//             LanguageConfig {
-//                 name: "Markdown".into(),
-//                 ..Default::default()
-//             },
-//             Some(tree_sitter_markdown::language()),
-//         )));
-
-//         let editor = cx.add_window(|cx| {
-//             MessageEditor::new(
-//                 language_registry,
-//                 ChannelStore::global(cx),
-//                 cx.add_view(|cx| Editor::auto_height(4, cx)),
-//                 cx,
-//             )
-//         });
-//         cx.foreground().run_until_parked();
-//         editor
-//     }
-// }
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use client::{Client, User, UserStore};
+    use gpui::{Context as _, TestAppContext, VisualContext as _};
+    use language::{Language, LanguageConfig};
+    use rpc::proto;
+    use settings::SettingsStore;
+    use util::{http::FakeHttpClient, test::marked_text_ranges};
+
+    #[gpui::test]
+    async fn test_message_editor(cx: &mut TestAppContext) {
+        let language_registry = init_test(cx);
+
+        let (editor, cx) = cx.add_window_view(|cx| {
+            MessageEditor::new(
+                language_registry,
+                ChannelStore::global(cx),
+                cx.build_view(|cx| Editor::auto_height(4, cx)),
+                cx,
+            )
+        });
+        cx.executor().run_until_parked();
+
+        editor.update(cx, |editor, cx| {
+            editor.set_members(
+                vec![
+                    ChannelMembership {
+                        user: Arc::new(User {
+                            github_login: "a-b".into(),
+                            id: 101,
+                            avatar: None,
+                        }),
+                        kind: proto::channel_member::Kind::Member,
+                        role: proto::ChannelRole::Member,
+                    },
+                    ChannelMembership {
+                        user: Arc::new(User {
+                            github_login: "C_D".into(),
+                            id: 102,
+                            avatar: None,
+                        }),
+                        kind: proto::channel_member::Kind::Member,
+                        role: proto::ChannelRole::Member,
+                    },
+                ],
+                cx,
+            );
+
+            editor.editor.update(cx, |editor, cx| {
+                editor.set_text("Hello, @a-b! Have you met @C_D?", cx)
+            });
+        });
+
+        cx.executor().advance_clock(MENTIONS_DEBOUNCE_INTERVAL);
+
+        editor.update(cx, |editor, cx| {
+            let (text, ranges) = marked_text_ranges("Hello, «@a-b»! Have you met «@C_D»?", false);
+            assert_eq!(
+                editor.take_message(cx),
+                MessageParams {
+                    text,
+                    mentions: vec![(ranges[0].clone(), 101), (ranges[1].clone(), 102)],
+                }
+            );
+        });
+    }
+
+    fn init_test(cx: &mut TestAppContext) -> Arc<LanguageRegistry> {
+        cx.update(|cx| {
+            let http = FakeHttpClient::with_404_response();
+            let client = Client::new(http.clone(), cx);
+            let user_store = cx.build_model(|cx| UserStore::new(client.clone(), http, cx));
+            let settings = SettingsStore::test(cx);
+            cx.set_global(settings);
+            theme::init(theme::LoadThemes::JustBase, cx);
+            language::init(cx);
+            editor::init(cx);
+            client::init(&client, cx);
+            channel::init(&client, user_store, cx);
+        });
+
+        let language_registry = Arc::new(LanguageRegistry::test());
+        language_registry.add(Arc::new(Language::new(
+            LanguageConfig {
+                name: "Markdown".into(),
+                ..Default::default()
+            },
+            Some(tree_sitter_markdown::language()),
+        )));
+        language_registry
+    }
+}