mirror of
https://github.com/c-cube/linol.git
synced 2025-12-08 20:25:35 -05:00
57 lines
1.8 KiB
OCaml
57 lines
1.8 KiB
OCaml
open Test.Import
|
|
|
|
let%expect_test "it should allow double opening the same document" =
|
|
let diagnostics = Fiber.Mvar.create () in
|
|
let drain_diagnostics () = Fiber.Mvar.read diagnostics in
|
|
let handler =
|
|
let on_request
|
|
(type resp state)
|
|
(client : state Client.t)
|
|
(req : resp Lsp.Server_request.t)
|
|
: (resp Lsp_fiber.Rpc.Reply.t * state) Fiber.t
|
|
=
|
|
match req with
|
|
| Lsp.Server_request.ClientUnregisterCapability _ ->
|
|
let state = Client.state client in
|
|
Fiber.return (Lsp_fiber.Rpc.Reply.now (), state)
|
|
| _ -> assert false
|
|
in
|
|
Client.Handler.make
|
|
~on_notification:(fun _ -> function
|
|
| PublishDiagnostics _ -> Fiber.Mvar.write diagnostics ()
|
|
| _ -> Fiber.return ())
|
|
~on_request:{ Client.Handler.on_request }
|
|
()
|
|
in
|
|
(Test.run ~handler
|
|
@@ fun client ->
|
|
let run_client () =
|
|
let capabilities =
|
|
let window =
|
|
let showDocument = ShowDocumentClientCapabilities.create ~support:true in
|
|
WindowClientCapabilities.create ~showDocument ()
|
|
in
|
|
ClientCapabilities.create ~window ()
|
|
in
|
|
Client.start client (InitializeParams.create ~capabilities ())
|
|
in
|
|
let run =
|
|
let* (_ : InitializeResult.t) = Client.initialized client in
|
|
let uri = DocumentUri.of_path "foo.ml" in
|
|
let open_ text =
|
|
let textDocument =
|
|
TextDocumentItem.create ~uri ~languageId:"ocaml" ~version:0 ~text
|
|
in
|
|
Client.notification
|
|
client
|
|
(TextDocumentDidOpen (DidOpenTextDocumentParams.create ~textDocument))
|
|
in
|
|
let* () = open_ "text 1" in
|
|
let* () = drain_diagnostics () in
|
|
let+ () = open_ "text 2" in
|
|
()
|
|
in
|
|
Fiber.fork_and_join_unit run_client (fun () ->
|
|
run >>> drain_diagnostics () >>> Client.stop client));
|
|
[%expect {| |}]
|
|
;;
|