Merge branch 'master' into script-fsm script-fsm
authorLuke Lau <luke_lau@icloud.com>
Thu, 12 Jul 2018 18:56:31 +0000 (19:56 +0100)
committerLuke Lau <luke_lau@icloud.com>
Thu, 12 Jul 2018 18:56:31 +0000 (19:56 +0100)
1  2 
haskell-lsp-test.cabal
lib/Language/Haskell/LSP/Test.hs
lib/Language/Haskell/LSP/Test/Machine.hs
lib/Language/Haskell/LSP/Test/Replay.hs
src/Language/Haskell/LSP/Test/Parsing.hs

index c5d1391eca38a99d3546c5ef407c06eaf5f564a0,860c29b59057ea387e9e11c6eb22b647271da9d1..6fba8f24d253b3e26a027ad083bd6e5ded67770b
@@@ -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 >= 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
Simple merge
index 7e0a78d247a41838014a7e099245480d4242a35e,0000000000000000000000000000000000000000..2f513c498fc9724a3783cd33f0cece35a38b7fa7
mode 100644,000000..100644
--- /dev/null
@@@ -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
 +