lsp-test is a functional testing framework for Language Server Protocol servers.
import Language.Haskell.LSP.Test
runSession "hie" fullCaps "proj/dir" $ do
doc <- openDoc "Foo.hs" "haskell"
skipMany anyNotification
symbols <- getDocumentSymbols doc
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"
replaySession "hie" "test/data/renamePass"
skipManyTill loggingNotification publishDiagnosticsNotification
count 4 (message :: Session ApplyWorkspaceEditRequest)
anyRequest <|> anyResponse
Try out the example tests in the example
directory with cabal new-test
.
For more examples check the Wiki
To test make sure you have the following language servers installed:
The present tests are integration tests. Thus, it is required that that the executables hie
and javascript-typescript-langserver
are on the path.
The executable hie
has to have been built using GHC 8.6.3. This can be done by cloning Haskell-IDE-Engine and invoking stack install.hs hie-8.6.3
. This will create the executables hie
, hie-8.6
and hie-8.6.3
in your $HOME/.local/bin
, or respective stack path --local-bin
location.
To make sure the test environment is identical to the travis setup, in .travis.yml
you can find the exact git hash that has been used to execute the tests and build hie
from that snapshot.
The language server javascript-typescript-langserver
can be installed by invoking npm i -g javascript-typescript-langserver
.
When all prerequisites have been met, the tests can be executed by running stack test
or cabal new-test
.