extra-source-files: README.md
library
- hs-source-dirs: src
+ hs-source-dirs: lib
exposed-modules: Language.Haskell.LSP.Test
, Language.Haskell.LSP.Test.Replay
+ , Language.Haskell.LSP.Test.Machine
+ reexported-modules: haskell-lsp:Language.Haskell.LSP.Types
+ , haskell-lsp:Language.Haskell.LSP.Types.Capabilities
+ , parser-combinators:Control.Applicative.Combinators
default-language: Haskell2010
build-depends: base >= 4.7 && < 5
- , haskell-lsp >= 0.3
+ , haskell-lsp-types
- ghc-options: -W
-
+ , haskell-lsp >= 0.4
+ , haskell-lsp-test-internal
+ , aeson
+ , bytestring
+ , containers
+ , data-default
+ , directory
+ , filepath
+ , lens
+ , parser-combinators
+ , text
+ , unordered-containers
+ , yi-rope
+
+library haskell-lsp-test-internal
+ hs-source-dirs: src
+ default-language: Haskell2010
+ exposed-modules: Language.Haskell.LSP.Test.Compat
+ Language.Haskell.LSP.Test.Decoding
+ Language.Haskell.LSP.Test.Exceptions
+ Language.Haskell.LSP.Test.Files
+ Language.Haskell.LSP.Test.Messages
+ Language.Haskell.LSP.Test.Parsing
+ Language.Haskell.LSP.Test.Script
+ Language.Haskell.LSP.Test.Server
+ Language.Haskell.LSP.Test.Session
+ build-depends: base
+ , haskell-lsp-types
+ , haskell-lsp >= 0.3
, aeson
, ansi-terminal
+ , async
, bytestring
, conduit
, conduit-parse
build-depends: Win32
else
build-depends: unix
- other-modules: Language.Haskell.LSP.Test.Compat
- Language.Haskell.LSP.Test.Decoding
- Language.Haskell.LSP.Test.Exceptions
- Language.Haskell.LSP.Test.Files
- Language.Haskell.LSP.Test.Messages
- Language.Haskell.LSP.Test.Parsing
- Language.Haskell.LSP.Test.Server
- Language.Haskell.LSP.Test.Session
ghc-options: -W
-
+executable lsp-test
+ hs-source-dirs: lsp-test
+ main-is: Main.hs
+ default-language: Haskell2010
+ build-depends: base >= 4.7 && < 5
+ , haskell-lsp-types
- , haskell-lsp >= 0.3
++ , haskell-lsp >= 0.4
+ , haskell-lsp-test-internal
+ , haskell-lsp-test
+ , aeson
+ , bytestring
+ , directory
+ , filepath
+ , text
+ , unordered-containers
+ , scientific
+
test-suite tests
type: exitcode-stdio-1.0
main-is: Test.hs
--- /dev/null
- {-# LANGUAGE OverloadedStrings #-}
+module Language.Haskell.LSP.Test.Machine where
+
+import Control.Monad.IO.Class
+import Language.Haskell.LSP.Messages
+import Language.Haskell.LSP.Test
+
+data State = State String (FromServerMessage -> Bool) [Session ()] State
+ | Passed
+ | Failed
+
- data Event = Timeout | Received FromServerMessage
++data Event = TimeoutEvent | Received FromServerMessage
+
+advance :: State -> Event -> Session State
- advance _ Timeout = return Failed
++advance _ TimeoutEvent = return Failed
+advance s@(State name f actions next) (Received msg)
+ | f msg = do
+ liftIO $ putStrLn name
+ sequence_ actions
+ return next
+ | otherwise = return s
+advance s _ = return s
+
+mkStates [] = Passed
+mkStates ((n, f, msgs):xs) = State n f msgs (mkStates xs)
+
+runMachine :: String -> FilePath -> [(String, FromServerMessage -> Bool, [Session ()])] -> IO Bool
+runMachine cmd rootDir encodedStates =
+ runSession cmd rootDir $ do
+ let f Passed = return Passed
+ f s = Received <$> anyMessage >>= advance s >>= f
+ initState = mkStates encodedStates
+ res <- f initState
+ case res of
+ Passed -> return True
+ _ -> return False
+