1 {-# LANGUAGE OverloadedStrings #-}
2 {-# LANGUAGE FlexibleInstances #-}
3 module ParsingTests where
5 import Control.Lens hiding (List)
6 import Language.Haskell.LSP.Messages
7 import Language.Haskell.LSP.Test
8 import Language.Haskell.LSP.Types
10 import Data.Conduit.Parser
14 type TestSession = ConduitParser FromServerMessage IO
16 instance MonadSessionConfig IO where
17 sessionConfig = return def
21 describe "diagnostics" $ do
22 let testDiag = NotPublishDiagnostics
23 (NotificationMessage "2.0"
24 TextDocumentPublishDiagnostics
25 (PublishDiagnosticsParams (Uri "foo")
27 it "get picked up" $ do
28 let source = yield testDiag
30 diags <- publishDiagnosticsNotification :: TestSession PublishDiagnosticsNotification
31 return $ diags ^. params . uri
32 runConduit (source .| runConduitParser session) `shouldReturn` Uri "foo"
33 it "get picked up after skipping others before" $ do
34 let testDiag = NotPublishDiagnostics
35 (NotificationMessage "2.0"
36 TextDocumentPublishDiagnostics
37 (PublishDiagnosticsParams (Uri "foo")
39 notTestDiag = NotLogMessage (NotificationMessage "2.0" WindowLogMessage (LogMessageParams MtLog "foo"))
40 source = yield notTestDiag >> yield testDiag
42 diags <- skipManyTill anyNotification notification :: TestSession PublishDiagnosticsNotification
43 return $ diags ^. params . uri
44 runConduit (source .| runConduitParser session) `shouldReturn` Uri "foo"