From: Luke Lau Date: Thu, 12 Jul 2018 18:56:31 +0000 (+0100) Subject: Merge branch 'master' into script-fsm X-Git-Url: http://git.lukelau.me/?p=lsp-test.git;a=commitdiff_plain;h=b1b104cd31ca2e90b6c1842be93b61a14d942101 Merge branch 'master' into script-fsm --- b1b104cd31ca2e90b6c1842be93b61a14d942101 diff --cc haskell-lsp-test.cabal index c5d1391,860c29b..6fba8f2 --- a/haskell-lsp-test.cabal +++ b/haskell-lsp-test.cabal @@@ -14,47 -16,17 +16,48 @@@ cabal-version: >=2. 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-types - , haskell-lsp >= 0.3 + , haskell-lsp >= 0.4 + , haskell-lsp-test-internal + , aeson + , bytestring + , containers + , data-default + , directory + , filepath + , lens + , parser-combinators + , text + , unordered-containers + , yi-rope + - ghc-options: -W - +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 @@@ -75,26 -46,16 +78,25 @@@ 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 diff --cc lib/Language/Haskell/LSP/Test/Machine.hs index 7e0a78d,0000000..2f513c4 mode 100644,000000..100644 --- a/lib/Language/Haskell/LSP/Test/Machine.hs +++ b/lib/Language/Haskell/LSP/Test/Machine.hs @@@ -1,37 -1,0 +1,36 @@@ - {-# 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 +