test(lsp): cover protocol framing basics
Add LSP protocol coverage for initialize capabilities, shutdown response, and unknown request errors. req: diagnostics/008
This commit is contained in:
@@ -943,6 +943,48 @@ mod tests {
|
||||
assert!(hover.to_string().contains("exercise.name: &'static str"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn lsp_protocol_initialize_shutdown_and_unknown_requests_are_framed() {
|
||||
// req: diagnostics/008
|
||||
let input = [
|
||||
lsp_message(serde_json::json!({"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {}})),
|
||||
lsp_message(serde_json::json!({"jsonrpc": "2.0", "id": 2, "method": "hemx/unknown", "params": {}})),
|
||||
lsp_message(serde_json::json!({"jsonrpc": "2.0", "id": 3, "method": "shutdown", "params": null})),
|
||||
lsp_message(serde_json::json!({"jsonrpc": "2.0", "method": "exit"})),
|
||||
]
|
||||
.join("");
|
||||
let mut reader = std::io::BufReader::new(input.as_bytes());
|
||||
let mut output = Vec::new();
|
||||
|
||||
serve_lsp(&mut reader, &mut output).expect("serve LSP");
|
||||
let messages = lsp_messages(&output);
|
||||
assert_eq!(
|
||||
messages.len(),
|
||||
3,
|
||||
"initialize, unknown request, shutdown responses"
|
||||
);
|
||||
assert_eq!(messages[0]["id"], 1);
|
||||
assert_eq!(
|
||||
messages[0]["result"]["capabilities"]["textDocumentSync"]["openClose"],
|
||||
true
|
||||
);
|
||||
assert_eq!(
|
||||
messages[0]["result"]["capabilities"]["completionProvider"]["triggerCharacters"][0],
|
||||
"h"
|
||||
);
|
||||
assert_eq!(messages[0]["result"]["capabilities"]["hoverProvider"], true);
|
||||
assert_eq!(messages[1]["id"], 2);
|
||||
assert_eq!(messages[1]["error"]["code"], -32601);
|
||||
assert!(messages[1]["error"]["message"]
|
||||
.as_str()
|
||||
.unwrap_or_default()
|
||||
.contains("hemx/unknown"));
|
||||
assert_eq!(
|
||||
messages[2],
|
||||
serde_json::json!({"jsonrpc": "2.0", "id": 3, "result": null})
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn lsp_publishes_and_clears_build_equivalent_diagnostics() {
|
||||
// req: diagnostics/004 req: diagnostics/005
|
||||
|
||||
Reference in New Issue
Block a user