X-Git-Url: http://git.lukelau.me/?a=blobdiff_plain;f=src%2FLanguage%2FHaskell%2FLSP%2FTest%2FExceptions.hs;h=28903dc76d46ea1d9a4a9c2d7b5202793beeb8f7;hb=82a682ce648c48c890949ad67fc22900448dc94e;hp=a25c802d5bcfd3750f03f2d46c8bad5412aea353;hpb=493d20ada6e48a8987e00a5ec92a1b31fe3c9b8c;p=opengl.git diff --git a/src/Language/Haskell/LSP/Test/Exceptions.hs b/src/Language/Haskell/LSP/Test/Exceptions.hs index a25c802..28903dc 100644 --- a/src/Language/Haskell/LSP/Test/Exceptions.hs +++ b/src/Language/Haskell/LSP/Test/Exceptions.hs @@ -2,18 +2,43 @@ module Language.Haskell.LSP.Test.Exceptions where import Control.Exception import Language.Haskell.LSP.Messages +import Language.Haskell.LSP.Types +import Data.Aeson.Encode.Pretty +import Data.Algorithm.Diff +import Data.Algorithm.DiffOutput +import Data.List +import qualified Data.ByteString.Lazy.Char8 as B -data SessionException = TimeoutException - | UnexpectedMessageException String FromServerMessage +data SessionException = Timeout + | UnexpectedMessage String FromServerMessage + | ReplayOutOfOrder FromServerMessage [FromServerMessage] + | UnexpectedDiagnostics + | IncorrectApplyEditRequest String + | UnexpectedResponseError LspIdRsp ResponseError + deriving Eq instance Exception SessionException instance Show SessionException where - show TimeoutException = "Timed out waiting to receive a message from the server." - show (UnexpectedMessageException expected lastMsg) = + show Timeout = "Timed out waiting to receive a message from the server." + show (UnexpectedMessage expected lastMsg) = "Received an unexpected message from the server:\n" ++ - "Expected: " ++ expected ++ "\n" ++ - "Last message accepted: " ++ show lastMsg + "Was parsing: " ++ expected ++ "\n" ++ + "Last message received: " ++ show lastMsg + show (ReplayOutOfOrder received expected) = + let expected' = nub expected + getJsonDiff = lines . B.unpack . encodePretty + showExp exp = B.unpack (encodePretty exp) ++ "\nDiff:\n" ++ + ppDiff (getGroupedDiff (getJsonDiff received) (getJsonDiff exp)) + in "Replay is out of order:\n" ++ + -- Print json so its a bit easier to update the session logs + "Received from server:\n" ++ B.unpack (encodePretty received) ++ "\n" ++ + "Expected one of:\n" ++ unlines (map showExp expected') + show UnexpectedDiagnostics = "Unexpectedly received diagnostics from the server." + show (IncorrectApplyEditRequest msgStr) = "ApplyEditRequest didn't contain document, instead received:\n" + ++ msgStr + show (UnexpectedResponseError lid e) = "Received an exepected error in a response for id " ++ show lid ++ ":\n" + ++ show e anySessionException :: SessionException -> Bool anySessionException = const True