use assert_cmd::cargo::cargo_bin_cmd;
use std::time::Duration;
#[test]
fn test_lsp_starts() {
let cmd = cargo_bin_cmd!("panache")
.arg("lsp")
.write_stdin("")
.timeout(Duration::from_secs(5))
.assert();
let output = cmd.get_output();
let exit_code = output.status.code().unwrap_or(1);
assert!(
exit_code == 0 || exit_code == 1,
"LSP server failed to start"
);
}
#[test]
fn test_lsp_initialization() {
let init_request = r#"Content-Length: 140
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"capabilities":{},"processId":null,"rootUri":null,"workspaceFolders":null}}"#;
let cmd = cargo_bin_cmd!("panache")
.arg("lsp")
.write_stdin(init_request)
.timeout(Duration::from_secs(5))
.assert();
let output = cmd.get_output();
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("Content-Length") || output.status.code().unwrap_or(1) <= 1,
"LSP server did not respond to initialization"
);
}
#[test]
fn test_lsp_handles_invalid_json() {
let invalid_request = "Content-Length: 10\n\n{invalid}";
let cmd = cargo_bin_cmd!("panache")
.arg("lsp")
.write_stdin(invalid_request)
.timeout(Duration::from_secs(5))
.assert();
let output = cmd.get_output();
assert!(
output.status.code().is_some(),
"LSP server panicked on invalid JSON"
);
}