Add argument for server executable
authorLuke Lau <luke_lau@icloud.com>
Mon, 11 Jun 2018 14:27:27 +0000 (10:27 -0400)
committerLuke Lau <luke_lau@icloud.com>
Mon, 11 Jun 2018 14:27:27 +0000 (10:27 -0400)
example/Main.hs
src/Language/Haskell/LSP/Test.hs
src/Language/Haskell/LSP/Test/Replay.hs
test/Test.hs

index d66e17e11075f0f018e7ee8a37eaf4410734212a..0c8ae9ff821618ee85f198decd3170e199e391ed 100644 (file)
@@ -4,7 +4,7 @@ import Data.Proxy
 
 import Control.Monad.IO.Class
 
-main = runSession "test/recordings/renamePass" $ do
+main = runSession "hie" "test/recordings/renamePass" $ do
 
   docItem <- getDocItem "Desktop/simple.hs" "haskell"
   docId <- TextDocumentIdentifier <$> getDocUri "Desktop/simple.hs"
index 2e0926a58539581e2053cc14d4fff750e8424f3f..087143fa8960537db6d71dab2c3bc70e82e83221 100644 (file)
@@ -80,10 +80,11 @@ import Language.Haskell.LSP.Test.Decoding
 import Language.Haskell.LSP.Test.Parsing
 
 -- | Starts a new session.
-runSession :: FilePath -- ^ The filepath to the root directory for the session.
+runSession :: FilePath -- ^ The filepath to the server executable.
+           -> FilePath -- ^ The filepath to the root directory for the session.
            -> Session a -- ^ The session to run.
            -> IO ()
-runSession rootDir session = do
+runSession serverExe rootDir session = do
   pid <- getProcessID
   absRootDir <- canonicalizePath rootDir
 
@@ -94,7 +95,7 @@ runSession rootDir session = do
                                           def
                                           (Just TraceOff)
 
-  runSessionWithHandler listenServer rootDir $ do
+  runSessionWithHandler listenServer serverExe rootDir $ do
 
     -- Wrap the session around initialize and shutdown calls
     sendRequest (Proxy :: Proxy InitializeRequest) Initialize initializeParams
@@ -111,14 +112,15 @@ runSession rootDir session = do
 -- | An internal version of 'runSession' that allows for a custom handler to listen to the server.
 -- It also does not automatically send initialize and exit messages.
 runSessionWithHandler :: (Handle -> Session ())
+                      -> FilePath
                       -> FilePath
                       -> Session a
                       -> IO a
-runSessionWithHandler serverHandler rootDir session = do
+runSessionWithHandler serverHandler serverExe rootDir session = do
   absRootDir <- canonicalizePath rootDir
 
   (Just serverIn, Just serverOut, Nothing, serverProc) <- createProcess
-    (proc "hie" ["--lsp", "-d", "-l", "/tmp/hie-test.log"])
+    (proc serverExe ["--lsp", "-d", "-l", "/tmp/hie-test.log"])
     { std_in = CreatePipe, std_out = CreatePipe }
 
   hSetBuffering serverIn  NoBuffering
index 2b55382959dd109e0b2a4beec982699db48f4361..4802c9ad152afb7b57d8a2a7d906d81b99a459a8 100644 (file)
@@ -29,9 +29,10 @@ 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 recorded session directory.
+replaySession :: FilePath -- ^ The filepath to the server executable.
+              -> FilePath -- ^ The recorded session directory.
               -> IO Bool
-replaySession sessionDir = do
+replaySession serverExe sessionDir = do
 
   entries <- B.lines <$> B.readFile (sessionDir </> "session.log")
 
@@ -50,7 +51,7 @@ replaySession sessionDir = do
   rspSema <- newEmptyMVar
   passVar <- newEmptyMVar :: IO (MVar Bool)
 
-  forkIO $ runSessionWithHandler (listenServer serverMsgs requestMap reqSema rspSema passVar) sessionDir $
+  forkIO $ runSessionWithHandler (listenServer serverMsgs requestMap reqSema rspSema passVar) serverExe sessionDir $
     sendMessages clientMsgs reqSema rspSema
 
   takeMVar passVar
index 652485e0af160279340ea8d6730dc37d33b075e9..c7e67131d914875b1fb41f98cb8928b8dba1f7e5 100644 (file)
@@ -14,7 +14,7 @@ import           ParsingTests
 main = hspec $ do
   describe "manual session validation" $ do
     it "passes a test" $
-      runSession "test/recordings/renamePass" $ do
+      runSession "hie" "test/recordings/renamePass" $ do
         doc <- openDoc "Desktop/simple.hs" "haskell"
 
         skipMany loggingNotification
@@ -39,7 +39,7 @@ main = hspec $ do
     
     it "fails a test" $
       -- TODO: Catch the exception in haskell-lsp-test and provide nicer output
-      let session = runSession "test/recordings/renamePass" $ do
+      let session = runSession "hie" "test/recordings/renamePass" $ do
                     openDoc "Desktop/simple.hs" "haskell"
                     skipMany loggingNotification
                     request
@@ -47,8 +47,8 @@ main = hspec $ do
   
   describe "replay session" $ do
     it "passes a test" $
-      replaySession "test/recordings/renamePass" `shouldReturn` True
+      replaySession "hie" "test/recordings/renamePass" `shouldReturn` True
     it "fails a test" $
-      replaySession "test/recordings/renameFail" `shouldReturn` False
+      replaySession "hie" "test/recordings/renameFail" `shouldReturn` False
   
   parsingSpec