packages feed

haskell-language-server-1.0.0.0: test/functional/FunctionalLiquid.hs

{-# LANGUAGE OverloadedStrings #-}

module FunctionalLiquid (tests) where

import           Control.Lens hiding (List)
import           Control.Monad.IO.Class
import           Data.Aeson
import           Data.Default
import           Language.LSP.Test hiding (message)
import           Language.LSP.Types as LSP
import           Language.LSP.Types.Lens as LSP hiding (contents)
import           Ide.Plugin.Config
import           Test.Hls.Util
import           Test.Tasty
import           Test.Tasty.ExpectedFailure (ignoreTestBecause)
import           Test.Tasty.HUnit

-- ---------------------------------------------------------------------

tests :: TestTree
tests = testGroup "liquid haskell diagnostics" [
    ignoreTestBecause "no liquid haskell"
    $ testCase "liquid haskell generates diagnostics" $
        runSession hlsCommand codeActionSupportCaps "test/testdata" $ do
            doc <- openDoc "liquid/Evens.hs" "haskell"

            let config = def { liquidOn  = True, hlintOn = False }
            sendNotification SWorkspaceDidChangeConfiguration (DidChangeConfigurationParams (toJSON config))

            diags <- waitForDiagnosticsFromSource doc "liquid"
            d <- liftIO $ inspectDiagnostic diags ["Liquid Type Mismatch"]
            liftIO $ do
                length diags @?= 1
                d ^. range @?= Range (Position 8 0) (Position 8 11)
                d ^. severity @?= Just DsError
                d ^. code @?= Nothing
    ]