From: Luke Lau Date: Mon, 11 Jun 2018 14:31:29 +0000 (-0400) Subject: Merge branch 'master' of https://github.com/Bubba/haskell-lsp-test X-Git-Tag: 0.1.0.0~76 X-Git-Url: http://git.lukelau.me/?a=commitdiff_plain;h=bc52b000bf018360efbfa0fcd289329c70d2c77e;hp=7f825c46ba76f90701a2f8f2a8c040d9bc2b6683;p=lsp-test.git Merge branch 'master' of https://github.com/Bubba/haskell-lsp-test --- diff --git a/example/Main.hs b/example/Main.hs index 1697ca5..fc453db 100644 --- a/example/Main.hs +++ b/example/Main.hs @@ -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" diff --git a/src/Language/Haskell/LSP/Test.hs b/src/Language/Haskell/LSP/Test.hs index fb928a4..79b7b1e 100644 --- a/src/Language/Haskell/LSP/Test.hs +++ b/src/Language/Haskell/LSP/Test.hs @@ -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 diff --git a/src/Language/Haskell/LSP/Test/Replay.hs b/src/Language/Haskell/LSP/Test/Replay.hs index 2d5e4e6..dfa364b 100644 --- a/src/Language/Haskell/LSP/Test/Replay.hs +++ b/src/Language/Haskell/LSP/Test/Replay.hs @@ -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) diff --git a/test/Test.hs b/test/Test.hs index ca135c7..426dd6b 100644 --- a/test/Test.hs +++ b/test/Test.hs @@ -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