{-# LANGUAGE OverloadedStrings #-}
module Command (tests) where
import Control.Lens hiding (List)
import Data.Char
import qualified Data.Text as T
import qualified Language.LSP.Protocol.Lens as L
import Language.LSP.Protocol.Types as LSP
import Test.Hls
import Test.Hls.Command
import Test.Hls.Flags (requiresEvalPlugin)
tests :: TestTree
tests = testGroup "commands" [
testCase "are prefixed" $
runSession hlsCommand fullCaps "test/testdata/" $ do
TResponseMessage _ _ (Right res) <- initializeResponse
let cmds = res ^. L.capabilities . L.executeCommandProvider . _Just . L.commands
f x = (T.length (T.takeWhile isNumber x) >= 1) && (T.count ":" x >= 2)
liftIO $ do
all f cmds @? "All prefixed"
not (null cmds) @? "Commands aren't empty"
, requiresEvalPlugin $ testCase "get de-prefixed" $
runSession hlsCommand fullCaps "test/testdata/" $ do
TResponseMessage _ _ (Left err) <- request
SMethod_WorkspaceExecuteCommand
(ExecuteCommandParams Nothing "34133:eval:evalCommand" (Just []))
let ResponseError _ msg _ = err
-- We expect an error message about the dud arguments, but we can
-- check that we found the right plugin.
liftIO $ "while parsing args for evalCommand in plugin eval" `T.isInfixOf` msg @? "Has error message"
]