Change server filepath to a command to run
[lsp-test.git] / src / Language / Haskell / LSP / Test / Replay.hs
index 4802c9ad152afb7b57d8a2a7d906d81b99a459a8..9d7f136a20056a7f81359e23f9856c0248c915de 100644 (file)
@@ -29,7 +29,7 @@ import           Language.Haskell.LSP.Test.Messages
 -- makes sure it matches up with an expected response.
 -- The session directory should have a captured session file in it
 -- named "session.log".
-replaySession :: FilePath -- ^ The filepath to the server executable.
+replaySession :: String -- ^ The command to run the server.
               -> FilePath -- ^ The recorded session directory.
               -> IO Bool
 replaySession serverExe sessionDir = do
@@ -51,10 +51,15 @@ replaySession serverExe sessionDir = do
   rspSema <- newEmptyMVar
   passVar <- newEmptyMVar :: IO (MVar Bool)
 
-  forkIO $ runSessionWithHandler (listenServer serverMsgs requestMap reqSema rspSema passVar) serverExe sessionDir $
-    sendMessages clientMsgs reqSema rspSema
+  threadId <- forkIO $
+    runSessionWithHandler (listenServer serverMsgs requestMap reqSema rspSema passVar)
+                          serverExe
+                          sessionDir
+                          (sendMessages clientMsgs reqSema rspSema)
 
-  takeMVar passVar
+  result <- takeMVar passVar
+  killThread threadId
+  return result
 
   where
     isClientMsg (FromClient _ _) = True