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