Skip to repository content117 lines · 3.7 KB · rust
tenant.openagents/omega
No repository description is available.
OpenAgents Git authority 2026-07-28T01:51:59.710Z Public web read
NIP-34 coordinate
30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omegaMaintainersHidden in public view
References2 branches · 1 tag
Read-only clone
git clone https://openagents.com/git/tenant.openagents/omega.gitBrowse files
lsp_log_view_tests.rs
1use std::sync::Arc;
2
3use crate::lsp_log_view::LogMenuItem;
4
5use super::*;
6use futures::StreamExt;
7use gpui::{AppContext as _, TestAppContext, VisualTestContext};
8use language::{FakeLspAdapter, Language, LanguageConfig, LanguageMatcher, tree_sitter_rust};
9use lsp::LanguageServerName;
10use project::{
11 FakeFs, Project,
12 lsp_store::log_store::{LanguageServerKind, LogKind, LogStore},
13};
14use serde_json::json;
15use settings::SettingsStore;
16use util::path;
17
18#[gpui::test]
19async fn test_lsp_log_view(cx: &mut TestAppContext) {
20 zlog::init_test();
21
22 init_test(cx);
23
24 let fs = FakeFs::new(cx.background_executor.clone());
25 fs.insert_tree(
26 path!("/the-root"),
27 json!({
28 "test.rs": "",
29 "package.json": "",
30 }),
31 )
32 .await;
33
34 let project = Project::test(fs.clone(), [path!("/the-root").as_ref()], cx).await;
35
36 let language_registry = project.read_with(cx, |project, _| project.languages().clone());
37 language_registry.add(Arc::new(Language::new(
38 LanguageConfig {
39 name: "Rust".into(),
40 matcher: (LanguageMatcher {
41 path_suffixes: vec!["rs".to_string()],
42 ..Default::default()
43 })
44 .into(),
45 ..Default::default()
46 },
47 Some(tree_sitter_rust::LANGUAGE.into()),
48 )));
49 let mut fake_rust_servers = language_registry.register_fake_lsp(
50 "Rust",
51 FakeLspAdapter {
52 name: "the-rust-language-server",
53 ..Default::default()
54 },
55 );
56
57 let log_store = cx.new(|cx| LogStore::new(false, cx));
58 log_store.update(cx, |store, cx| store.add_project(&project, cx));
59
60 let _rust_buffer = project
61 .update(cx, |project, cx| {
62 project.open_local_buffer_with_lsp(path!("/the-root/test.rs"), cx)
63 })
64 .await
65 .unwrap();
66
67 let mut language_server = fake_rust_servers.next().await.unwrap();
68 language_server
69 .receive_notification::<lsp::notification::DidOpenTextDocument>()
70 .await;
71
72 let window =
73 cx.add_window(|window, cx| LspLogView::new(project.clone(), log_store.clone(), window, cx));
74 let log_view = window.root(cx).unwrap();
75 let mut cx = VisualTestContext::from_window(*window, cx);
76
77 language_server.notify::<lsp::notification::LogMessage>(lsp::LogMessageParams {
78 message: "hello from the server".into(),
79 typ: lsp::MessageType::INFO,
80 });
81 cx.executor().run_until_parked();
82
83 log_view.update(&mut cx, |view, cx| {
84 assert_eq!(
85 view.menu_items(cx).unwrap(),
86 &[LogMenuItem {
87 server_id: language_server.server.server_id(),
88 server_name: LanguageServerName("the-rust-language-server".into()),
89 worktree_root_name: project
90 .read(cx)
91 .worktrees(cx)
92 .next()
93 .unwrap()
94 .read(cx)
95 .root_name_str()
96 .to_string(),
97 rpc_trace_enabled: false,
98 selected_entry: LogKind::Logs,
99 trace_level: lsp::TraceValue::Off,
100 server_kind: LanguageServerKind::Local {
101 project: project.downgrade()
102 }
103 }]
104 );
105 assert_eq!(view.editor.read(cx).text(cx), "hello from the server\n");
106 });
107}
108
109fn init_test(cx: &mut gpui::TestAppContext) {
110 cx.update(|cx| {
111 let settings_store = SettingsStore::test(cx);
112 cx.set_global(settings_store);
113 theme_settings::init(theme::LoadThemes::JustBase, cx);
114 release_channel::init(semver::Version::new(0, 0, 0), cx);
115 });
116}
117