From 7d0ddb8022d9cccc68a99008dd55c1d39ddda3e7 Mon Sep 17 00:00:00 2001 From: Luke Lau Date: Mon, 11 Jun 2018 11:06:47 -0400 Subject: [PATCH] Change server filepath to a command to run --- example/Main.hs | 2 +- src/Language/Haskell/LSP/Test.hs | 9 ++++----- src/Language/Haskell/LSP/Test/Replay.hs | 2 +- test/Test.hs | 8 ++++---- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/example/Main.hs b/example/Main.hs index fc453db..29795fa 100644 --- a/example/Main.hs +++ b/example/Main.hs @@ -4,7 +4,7 @@ import Data.Proxy import Control.Monad.IO.Class -main = runSession "hie" "test/recordings/renamePass" $ do +main = runSession "hie --lsp" "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 79b7b1e..086a34c 100644 --- a/src/Language/Haskell/LSP/Test.hs +++ b/src/Language/Haskell/LSP/Test.hs @@ -81,7 +81,7 @@ import Language.Haskell.LSP.Test.Decoding import Language.Haskell.LSP.Test.Parsing -- | Starts a new session. -runSession :: FilePath -- ^ The filepath to the server executable. +runSession :: String -- ^ The command to run the server. -> FilePath -- ^ The filepath to the root directory for the session. -> Session a -- ^ The session to run. -> IO () @@ -113,16 +113,15 @@ runSession serverExe 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 + -> String -> FilePath -> Session a -> IO a runSessionWithHandler serverHandler serverExe rootDir session = do absRootDir <- canonicalizePath rootDir - (Just serverIn, Just serverOut, Nothing, serverProc) <- createProcess - (proc serverExe ["--lsp", "-d", "-l", "/tmp/hie-test.log"]) - { std_in = CreatePipe, std_out = CreatePipe } + let createProc = (shell serverExe) { std_in = CreatePipe, std_out = CreatePipe } + (Just serverIn, Just serverOut, Nothing, serverProc) <- createProcess createProc hSetBuffering serverIn NoBuffering hSetBuffering serverOut NoBuffering diff --git a/src/Language/Haskell/LSP/Test/Replay.hs b/src/Language/Haskell/LSP/Test/Replay.hs index dfa364b..9d7f136 100644 --- a/src/Language/Haskell/LSP/Test/Replay.hs +++ b/src/Language/Haskell/LSP/Test/Replay.hs @@ -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 diff --git a/test/Test.hs b/test/Test.hs index 426dd6b..a639e38 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 "hie" "test/recordings/renamePass" $ do + runSession "hie --lsp" "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 "hie" "test/recordings/renamePass" $ do + let session = runSession "hie --lsp" "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 "hie" "test/recordings/renamePass" `shouldReturn` True + replaySession "hie --lsp" "test/recordings/renamePass" `shouldReturn` True it "fails a test" $ - replaySession "hie" "test/recordings/renameFail" `shouldReturn` False + replaySession "hie --lsp" "test/recordings/renameFail" `shouldReturn` False parsingSpec -- 2.30.2