Merge branch 'master' into script-fsm
[lsp-test.git] / lib / Language / Haskell / LSP / Test / Machine.hs
index f407c7d7d44e5a4359c42972b4c0de9356a30f25..2f513c498fc9724a3783cd33f0cece35a38b7fa7 100644 (file)
@@ -1,4 +1,3 @@
-{-# LANGUAGE OverloadedStrings #-}
 module Language.Haskell.LSP.Test.Machine where
 
 import Control.Monad.IO.Class
@@ -9,10 +8,10 @@ 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
@@ -24,14 +23,14 @@ 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
+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 "passed"
-      _ -> return "failed"
+      Passed -> return True
+      _ -> return False