lsp-test: Functional test framework for LSP servers.

[ bsd3, library, testing ] [ Propose Tags ] [ Report a vulnerability ]

A test framework for writing tests against Language Server Protocol servers. Language.Haskell.LSP.Test launches your server as a subprocess and allows you to simulate a session down to the wire, and Language.Haskell.LSP.Test can replay captured sessions from https://hackage.haskell.org/package/haskell-lsp. It's currently used for testing in haskell-ide-engine.


[Skip to Readme]

Modules

[Index] [Quick Jump]

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Versions [RSS] 0.1.0.0, 0.2.0.0, 0.2.1.0, 0.3.0.0, 0.4.0.0, 0.5.0.0, 0.5.0.1, 0.5.0.2, 0.5.1.0, 0.5.1.1, 0.5.1.2, 0.5.1.3, 0.5.1.4, 0.5.2.0, 0.5.2.1, 0.5.2.2, 0.5.2.3, 0.5.3.0, 0.5.4.0, 0.6.0.0, 0.6.1.0, 0.7.0.0, 0.8.0.0, 0.8.1.0, 0.8.2.0, 0.9.0.0, 0.10.0.0, 0.10.1.0, 0.10.2.0, 0.10.3.0, 0.11.0.0, 0.11.0.1, 0.11.0.2, 0.11.0.3, 0.11.0.4, 0.11.0.5, 0.11.0.6, 0.11.0.7, 0.12.0.0, 0.13.0.0, 0.14.0.0, 0.14.0.1, 0.14.0.2, 0.14.0.3, 0.14.1.0, 0.15.0.0, 0.15.0.1, 0.16.0.0, 0.16.0.1, 0.17.0.0, 0.17.0.1, 0.17.0.2, 0.17.1.0
Change log ChangeLog.md
Dependencies aeson, aeson-pretty, ansi-terminal, async, base (>=4.10 && <5), bytestring, conduit, conduit-parse (>=0.2 && <0.3), containers, data-default, Diff, directory, filepath, haskell-lsp (>=0.16 && <0.17), lens, mtl (<2.3), parser-combinators, process, rope-utf16-splay, text, transformers, unix, unordered-containers, Win32 [details]
Tested with ghc ==8.2.2, ghc ==8.4.2, ghc ==8.4.3, ghc ==8.6.4, ghc ==8.6.5, ghc ==8.8.1
License BSD-3-Clause
Copyright 2019 Luke Lau
Author Luke Lau
Maintainer luke_lau@icloud.com
Revised Revision 1 made by sjakobi at 2022-05-11T10:25:08Z
Category Testing
Home page https://github.com/bubba/lsp-test#readme
Bug tracker https://github.com/bubba/lsp-test/issues
Source repo head: git clone https://github.com/bubba/lsp-test/
Uploaded by luke_ at 2019-09-08T21:07:23Z
Distributions Arch:0.14.1.0, LTSHaskell:0.16.0.1, NixOS:0.17.1.0, Stackage:0.17.1.0
Reverse Dependencies 4 direct, 0 indirect [details]
Downloads 33466 total (310 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2019-09-08 [all 1 reports]

Readme for lsp-test-0.7.0.0

[back to package description]

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

The tests are integration tests, so make sure you have the following language servers installed and on your PATH:

haskell-ide-engine

  • Check out a relatively recent version of the repo, or see .travis.yml to get the exact commit used for CI.
  • stack install

javascript-typescript-langserver

npm i -g javascript-typescript-langserver

Then run the tests with stack test or cabal new-test.