mod common;
use common::TestServer;
use serde_json::json;
#[tokio::test]
async fn initialize_returns_server_capabilities() {
let mut server = TestServer::new().await;
server
.open("cap.php", "<?php\nfunction f(): void {}\n")
.await;
let resp = server.hover("cap.php", 1, 10).await;
assert!(
resp["error"].is_null(),
"hover should not error if hoverProvider is advertised: {:?}",
resp
);
assert!(
!resp["result"].is_null(),
"hover should return a result, confirming textDocumentSync applied the open"
);
let _ = json!({ "hoverProvider": true });
}
#[tokio::test]
async fn shutdown_responds_correctly() {
let mut server = TestServer::new().await;
let resp = server.shutdown().await;
assert!(
resp["error"].is_null(),
"shutdown should not error: {:?}",
resp
);
assert!(resp["result"].is_null(), "shutdown result should be null");
}
#[tokio::test]
async fn did_change_updates_document() {
let mut server = TestServer::new().await;
server.open("change.php", "<?php\n").await;
server
.change("change.php", 2, "<?php\nfunction updated() {}\n")
.await;
let resp = server.hover("change.php", 1, 10).await;
assert!(
resp["error"].is_null(),
"hover after change should not error"
);
}