1 module Language.Haskell.LSP.Test.Exceptions where
3 import Control.Exception
4 import Language.Haskell.LSP.Messages
6 import qualified Data.ByteString.Lazy.Char8 as B
8 data SessionException = TimeoutException
9 | UnexpectedMessageException String FromServerMessage
10 | ReplayOutOfOrderException FromServerMessage [FromServerMessage]
11 | UnexpectedDiagnosticsException
12 | IncorrectApplyEditRequestException String
14 instance Exception SessionException
16 instance Show SessionException where
17 show TimeoutException = "Timed out waiting to receive a message from the server."
18 show (UnexpectedMessageException expected lastMsg) =
19 "Received an unexpected message from the server:\n" ++
20 "Expected: " ++ expected ++ "\n" ++
21 "Last message accepted: " ++ show lastMsg
22 show (ReplayOutOfOrderException received expected) =
23 "Replay is out of order:\n" ++
24 -- Print json so its a bit easier to update the session logs
25 "Received from server:\n" ++ B.unpack (encode received) ++ "\n" ++
26 "Expected one of:\n" ++ unlines (map (B.unpack . encode) expected)
27 show UnexpectedDiagnosticsException = "Unexpectedly received diagnostics from the server."
28 show (IncorrectApplyEditRequestException msgStr) = "ApplyEditRequest didn't contain document, instead received:\n"
31 anySessionException :: SessionException -> Bool
32 anySessionException = const True