fe8d36671d7fca4192498a12a3445c67a1d3a397
[opengl.git] / test / ParsingTests.hs
1 {-# LANGUAGE OverloadedStrings #-}
2 {-# LANGUAGE FlexibleInstances #-}
3 module ParsingTests where
4
5 import Control.Lens hiding (List)
6 import Language.Haskell.LSP.Messages
7 import Language.Haskell.LSP.Test
8 import Language.Haskell.LSP.Types
9 import Data.Conduit
10 import Data.Conduit.Parser
11 import Data.Default
12 import Test.Hspec
13
14 type TestSession = ConduitParser FromServerMessage IO
15
16 instance MonadSessionConfig IO where
17   sessionConfig = return def
18
19 parsingSpec :: Spec
20 parsingSpec =
21   describe "diagnostics" $ do
22     let testDiag = NotPublishDiagnostics
23                    (NotificationMessage "2.0"
24                                        TextDocumentPublishDiagnostics
25                                        (PublishDiagnosticsParams (Uri "foo")
26                                                                  (List [])))
27     it "get picked up" $ do
28       let source = yield testDiag
29           session = do
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")
38                                                                     (List [])))
39           notTestDiag = NotLogMessage (NotificationMessage "2.0" WindowLogMessage (LogMessageParams MtLog "foo"))
40           source = yield notTestDiag >> yield testDiag
41           session = do
42             diags <- skipManyTill anyNotification notification :: TestSession PublishDiagnosticsNotification
43             return $ diags ^. params . uri
44       runConduit (source .| runConduitParser session) `shouldReturn` Uri "foo"