Merge branch 'master' of https://github.com/Bubba/haskell-lsp-test
authorLuke Lau <luke_lau@icloud.com>
Mon, 11 Jun 2018 14:31:29 +0000 (10:31 -0400)
committerLuke Lau <luke_lau@icloud.com>
Mon, 11 Jun 2018 14:31:29 +0000 (10:31 -0400)
example/Main.hs
src/Language/Haskell/LSP/Test.hs
src/Language/Haskell/LSP/Test/Replay.hs
test/Test.hs

index 1697ca53d90cd51b2144b2d438efbc00ab568c70..fc453db39cdb032a98cb0c468e697167816458cf 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 fb928a4b9ccd0bfbec75cd4bae66af408e885242..79b7b1e7147934150d4cf632b9c142940e2191e0 100644 (file)
@@ -81,10 +81,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
 
@@ -95,7 +96,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 Initialize initializeParams
@@ -112,14 +113,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 2d5e4e612284ab6c3329a5aa7c36c548f45a1ef2..dfa364b44c3600b4682eca2f94699f2fea16fad3 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")
 
@@ -52,6 +53,7 @@ replaySession sessionDir = do
 
   threadId <- forkIO $
     runSessionWithHandler (listenServer serverMsgs requestMap reqSema rspSema passVar)
+                          serverExe
                           sessionDir
                           (sendMessages clientMsgs reqSema rspSema)
 
index ca135c7a379c3790f80e640262610b8887bde55b..426dd6bd704f3df283e2f19e7ac08609697211d9 100644 (file)
@@ -12,7 +12,7 @@ import           ParsingTests
 main = hspec $ do
   describe "manual session" $ do
     it "passes a test" $
-      runSession "test/recordings/renamePass" $ do
+      runSession "hie" "test/recordings/renamePass" $ do
         doc <- openDoc "Desktop/simple.hs" "haskell"
 
         skipMany loggingNotification
@@ -35,7 +35,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
                       anyRequest
@@ -43,8 +43,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