import Data.Default
import qualified Data.HashMap.Strict as HM
import Data.Maybe
+import Control.Concurrent
import Control.Monad.IO.Class
import Control.Lens hiding (List)
import GHC.Generics
+import Language.Haskell.LSP.Messages
import Language.Haskell.LSP.Test
import Language.Haskell.LSP.Test.Replay
import Language.Haskell.LSP.TH.ClientCapabilities
-import Language.Haskell.LSP.Types
+import Language.Haskell.LSP.Types hiding (capabilities)
import ParsingTests
main = hspec $ do
let caps = def { _workspace = Just workspaceCaps }
workspaceCaps = def { _didChangeConfiguration = Just configCaps }
configCaps = DidChangeConfigurationClientCapabilities (Just True)
- runSessionWithCapabilities caps "hie --lsp" "test/data/renamePass" $ return ()
+ conf = def { capabilities = caps }
+ runSessionWithConfig conf "hie --lsp" "test/data/renamePass" $ return ()
+
+ describe "exceptions" $ do
+ it "throw on time out" $
+ let sesh = runSessionWithConfig (def {timeout = 10}) "hie --lsp" "test/data/renamePass" $ do
+ skipMany loggingNotification
+ _ <- request :: Session ApplyWorkspaceEditRequest
+ return ()
+ in sesh `shouldThrow` anySessionException
+
+ it "don't throw when no time out" $ runSessionWithConfig (def {timeout = 10}) "hie --lsp" "test/data/renamePass" $ do
+ loggingNotification
+ liftIO $ threadDelay 5
+
+ it "throw when there's an unexpected message" $
+ let msgExc (UnexpectedMessageException "Publish diagnostics notification" (NotLogMessage _)) = True
+ msgExc _ = False
+ in runSession "hie --lsp" "test/data/renamePass" publishDiagnosticsNotification `shouldThrow` msgExc
+
+ it "throw when there's an unexpected message 2" $
+ let msgExc (UnexpectedMessageException "Response" (NotPublishDiagnostics _)) = True
+ msgExc _ = False
+ sesh = do
+ doc <- openDoc "Desktop/simple.hs" "haskell"
+ sendRequest TextDocumentDocumentSymbol (DocumentSymbolParams doc)
+ skipMany anyNotification
+ response :: Session RenameResponse -- the wrong type
+ in runSession "hie --lsp" "test/data/renamePass" sesh
+ `shouldThrow` msgExc
describe "replay session" $ do
it "passes a test" $