mpickering / lsp-test

A functional test framework for LSP servers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

lsp-test Build Status Hackage

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

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 new-test. For more examples check the Wiki

Developing

To test make sure you have the following language servers installed:

How to run tests

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.

About

A functional test framework for LSP servers

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:Haskell 99.9%Language:JavaScript 0.1%