1use crate::{assets::Assets, build_window_options, build_workspace, AppState};
2use client::{test::FakeHttpClient, ChannelList, Client, UserStore};
3use gpui::MutableAppContext;
4use language::LanguageRegistry;
5use project::fs::FakeFs;
6use settings::Settings;
7use std::sync::Arc;
8use theme::ThemeRegistry;
9
10#[cfg(test)]
11#[ctor::ctor]
12fn init_logger() {
13 if std::env::var("RUST_LOG").is_ok() {
14 env_logger::init();
15 }
16}
17
18pub fn test_app_state(cx: &mut MutableAppContext) -> Arc<AppState> {
19 let settings = Settings::test(cx);
20 editor::init(cx);
21 cx.set_global(settings);
22 let themes = ThemeRegistry::new(Assets, cx.font_cache().clone());
23 let http = FakeHttpClient::with_404_response();
24 let client = Client::new(http.clone());
25 let user_store = cx.add_model(|cx| UserStore::new(client.clone(), http, cx));
26 let languages = LanguageRegistry::test();
27 languages.add(Arc::new(language::Language::new(
28 language::LanguageConfig {
29 name: "Rust".into(),
30 path_suffixes: vec!["rs".to_string()],
31 ..Default::default()
32 },
33 Some(tree_sitter_rust::language()),
34 )));
35 Arc::new(AppState {
36 themes,
37 languages: Arc::new(languages),
38 channel_list: cx.add_model(|cx| ChannelList::new(user_store.clone(), client.clone(), cx)),
39 client,
40 user_store,
41 fs: FakeFs::new(cx.background().clone()),
42 build_window_options: &build_window_options,
43 build_workspace: &build_workspace,
44 })
45}