lsp-test
lsp-test is a functional testing framework for Language Server Protocol servers.
import Language.Haskell.LSP.Test
main = runSession "hie" fullCaps "proj/dir" $ do
doc <- openDoc "Foo.hs" "haskell"
skipMany anyNotification
symbols <- getDocumentSymbols doc
Examples
Unit tests with HSpec
describe "diagnostics" $
it "report errors" $ runSession "hie" fullCaps "test/data" $ do
openDoc "Error.hs" "haskell"
[diag] <- waitForDiagnosticsSource "ghcmod"
liftIO $ do
diag ^. severity `shouldBe` Just DsError
diag ^. source `shouldBe` Just "ghcmod"
Replaying captured session
replaySession "hie" "test/data/renamePass"
Parsing with combinators
skipManyTill loggingNotification publishDiagnosticsNotification
count 4 (message :: Session ApplyWorkspaceEditRequest)
anyRequest <|> anyResponse
Try out the example tests in the example
directory with cabal test
.
For more examples check the Wiki
Developing
The tests are integration tests, so make sure you have the following language servers installed and on your PATH:
- Check out a relatively recent version of the repo, or see
.travis.yml
to get the exact commit used for CI.
stack install
npm i -g javascript-typescript-langserver
Then run the tests with cabal test
or stack test
.
Troubleshooting
Seeing funny stuff when running lsp-test via stack? If your server is built upon Haskell tooling, keep in mind that stack sets some environment variables related to GHC, and you may want to unset them.