Add failing test for reporting FS change events to language servers
This commit is contained in:
parent
194c7a3af0
commit
9837a6e288
1 changed files with 86 additions and 3 deletions
|
@ -438,6 +438,89 @@ async fn test_managing_language_servers(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[gpui::test]
|
||||||
|
async fn test_reporting_fs_changes_to_language_servers(cx: &mut gpui::TestAppContext) {
|
||||||
|
cx.foreground().forbid_parking();
|
||||||
|
|
||||||
|
let mut language = Language::new(
|
||||||
|
LanguageConfig {
|
||||||
|
name: "Rust".into(),
|
||||||
|
path_suffixes: vec!["rs".to_string()],
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
Some(tree_sitter_rust::language()),
|
||||||
|
);
|
||||||
|
let mut fake_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
|
name: "the-language-server",
|
||||||
|
..Default::default()
|
||||||
|
}))
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let fs = FakeFs::new(cx.background());
|
||||||
|
fs.insert_tree(
|
||||||
|
"/the-root",
|
||||||
|
json!({
|
||||||
|
"a.rs": "",
|
||||||
|
"b.rs": "",
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let project = Project::test(fs.clone(), ["/the-root".as_ref()], cx).await;
|
||||||
|
project.update(cx, |project, _| {
|
||||||
|
project.languages.add(Arc::new(language));
|
||||||
|
});
|
||||||
|
cx.foreground().run_until_parked();
|
||||||
|
|
||||||
|
// Start the language server by opening a buffer with a compatible file extension.
|
||||||
|
let _buffer = project
|
||||||
|
.update(cx, |project, cx| {
|
||||||
|
project.open_local_buffer("/the-root/a.rs", cx)
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Keep track of the FS events reported to the language server.
|
||||||
|
let fake_server = fake_servers.next().await.unwrap();
|
||||||
|
let file_changes = Arc::new(Mutex::new(Vec::new()));
|
||||||
|
fake_server.handle_notification::<lsp::notification::DidChangeWatchedFiles, _>({
|
||||||
|
let file_changes = file_changes.clone();
|
||||||
|
move |params, _| {
|
||||||
|
let mut file_changes = file_changes.lock();
|
||||||
|
file_changes.extend(params.changes);
|
||||||
|
file_changes.sort_by(|a, b| a.uri.cmp(&b.uri));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
cx.foreground().run_until_parked();
|
||||||
|
assert_eq!(file_changes.lock().len(), 0);
|
||||||
|
|
||||||
|
// Perform some file system mutations.
|
||||||
|
fs.create_file("/the-root/c.rs".as_ref(), Default::default())
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
fs.remove_file("/the-root/b.rs".as_ref(), Default::default())
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// The language server receives events for both FS mutations.
|
||||||
|
cx.foreground().run_until_parked();
|
||||||
|
assert_eq!(
|
||||||
|
&*file_changes.lock(),
|
||||||
|
&[
|
||||||
|
lsp::FileEvent {
|
||||||
|
uri: lsp::Url::from_file_path("/the-root/c.rs").unwrap(),
|
||||||
|
typ: lsp::FileChangeType::CREATED,
|
||||||
|
},
|
||||||
|
lsp::FileEvent {
|
||||||
|
uri: lsp::Url::from_file_path("/the-root/b.rs").unwrap(),
|
||||||
|
typ: lsp::FileChangeType::DELETED,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[gpui::test]
|
#[gpui::test]
|
||||||
async fn test_single_file_worktrees_diagnostics(cx: &mut gpui::TestAppContext) {
|
async fn test_single_file_worktrees_diagnostics(cx: &mut gpui::TestAppContext) {
|
||||||
cx.foreground().forbid_parking();
|
cx.foreground().forbid_parking();
|
||||||
|
@ -1585,7 +1668,7 @@ async fn test_edits_from_lsp_with_edits_on_adjacent_lines(cx: &mut gpui::TestApp
|
||||||
buffer.text(),
|
buffer.text(),
|
||||||
"
|
"
|
||||||
use a::{b, c};
|
use a::{b, c};
|
||||||
|
|
||||||
fn f() {
|
fn f() {
|
||||||
b();
|
b();
|
||||||
c();
|
c();
|
||||||
|
@ -1603,7 +1686,7 @@ async fn test_invalid_edits_from_lsp(cx: &mut gpui::TestAppContext) {
|
||||||
let text = "
|
let text = "
|
||||||
use a::b;
|
use a::b;
|
||||||
use a::c;
|
use a::c;
|
||||||
|
|
||||||
fn f() {
|
fn f() {
|
||||||
b();
|
b();
|
||||||
c();
|
c();
|
||||||
|
@ -1688,7 +1771,7 @@ async fn test_invalid_edits_from_lsp(cx: &mut gpui::TestAppContext) {
|
||||||
buffer.text(),
|
buffer.text(),
|
||||||
"
|
"
|
||||||
use a::{b, c};
|
use a::{b, c};
|
||||||
|
|
||||||
fn f() {
|
fn f() {
|
||||||
b();
|
b();
|
||||||
c();
|
c();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue