+++ /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
-
-advance :: State -> Event -> Session State
-advance _ Timeout = 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 -> [(String, FromServerMessage -> Bool, [Session ()])] -> IO String
-runMachine rootDir encodedStates =
- runSession "hie --lsp" 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 "passed"
- _ -> return "failed"
-