X-Git-Url: http://git.lukelau.me/?a=blobdiff_plain;f=src%2FLanguage%2FHaskell%2FLSP%2FTest%2FReplay.hs;h=7d10763aab553ba19c0239df863fdafae057d9c3;hb=bd2ac7da01645dc111a6912be661bc13b7f9340f;hp=73151d75cd8711a0107c65cadff95483014d1d5a;hpb=cdb1ba7038c32bac71a3bc783effc1e07049a985;p=lsp-test.git diff --git a/src/Language/Haskell/LSP/Test/Replay.hs b/src/Language/Haskell/LSP/Test/Replay.hs index 73151d7..7d10763 100644 --- a/src/Language/Haskell/LSP/Test/Replay.hs +++ b/src/Language/Haskell/LSP/Test/Replay.hs @@ -12,7 +12,8 @@ import qualified Data.ByteString.Lazy.Char8 as B import qualified Data.Text as T import Language.Haskell.LSP.Capture import Language.Haskell.LSP.Messages -import Language.Haskell.LSP.Types as LSP hiding (error) +import Language.Haskell.LSP.Types +import Language.Haskell.LSP.Types.Lens as LSP hiding (error) import Data.Aeson import Data.Default import Data.List @@ -20,6 +21,7 @@ import Data.Maybe import Control.Lens hiding (List) import Control.Monad import System.FilePath +import System.IO import Language.Haskell.LSP.Test import Language.Haskell.LSP.Test.Files import Language.Haskell.LSP.Test.Decoding @@ -27,7 +29,6 @@ import Language.Haskell.LSP.Test.Messages import Language.Haskell.LSP.Test.Server import Language.Haskell.LSP.Test.Session - -- | Replays a captured client output and -- makes sure it matches up with an expected response. -- The session directory should have a captured session file in it @@ -64,6 +65,7 @@ replaySession serverExe sessionDir = do def fullCaps sessionDir + exitServer (sendMessages clientMsgs reqSema rspSema) takeMVar passSema killThread sessionThread @@ -84,12 +86,12 @@ sendMessages (nextMsg:remainingMsgs) reqSema rspSema = notification msg@(NotificationMessage _ Exit _) = do liftIO $ putStrLn "Will send exit notification soon" liftIO $ threadDelay 10000000 - sendNotification' msg + sendMessage msg liftIO $ error "Done" notification msg@(NotificationMessage _ m _) = do - sendNotification' msg + sendMessage msg liftIO $ putStrLn $ "Sent a notification " ++ show m @@ -116,6 +118,15 @@ sendMessages (nextMsg:remainingMsgs) reqSema rspSema = sendMessages remainingMsgs reqSema rspSema +sendRequestMessage :: (ToJSON a, ToJSON b) => RequestMessage ClientMethod a b -> Session () +sendRequestMessage req = do + -- Update the request map + reqMap <- requestMap <$> ask + liftIO $ modifyMVar_ reqMap $ + \r -> return $ updateRequestMap r (req ^. LSP.id) (req ^. method) + + sendMessage req + isNotification :: FromServerMessage -> Bool isNotification (NotPublishDiagnostics _) = True @@ -124,15 +135,15 @@ isNotification (NotShowMessage _) = True isNotification (NotCancelRequestFromServer _) = True isNotification _ = False --- listenServer :: [FromServerMessage] --- -> RequestMap --- -> MVar LspId --- -> MVar LspIdRsp --- -> MVar () --- -> ThreadId --- -> Handle --- -> SessionContext --- -> IO () +listenServer :: [FromServerMessage] + -> RequestMap + -> MVar LspId + -> MVar LspIdRsp + -> MVar () + -> ThreadId + -> Handle + -> SessionContext + -> IO () listenServer [] _ _ _ passSema _ _ _ = putMVar passSema () listenServer expectedMsgs reqMap reqSema rspSema passSema mainThreadId serverOut ctx = do