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"
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 ()
-- | 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
-- 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
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
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
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