packages feed

ribosome-root-0.3.0.0: test/u/AutocmdSpec.hs

{-# OPTIONS_GHC -F -pgmF htfpp #-}
{-# LANGUAGE TemplateHaskell #-}

module AutocmdSpec(
  htf_thisModulesTests
) where

import Control.Monad.Trans.Except (ExceptT)
import Data.Default (def)
import Neovim (Neovim, Plugin(..))
import Test.Framework

import Ribosome.Control.Monad.Ribo (MonadRibo, NvimE)
import Ribosome.Control.Ribosome (Ribosome, newRibosome)
import Ribosome.Msgpack.Encode (MsgpackEncode(toMsgpack))
import Ribosome.Nvim.Api.IO (vimCommand, vimGetVar, vimSetVar)
import Ribosome.Nvim.Api.RpcCall (RpcError)
import Ribosome.Orphans ()
import Ribosome.Plugin (autocmd, riboPlugin, rpcHandler)
import Ribosome.Test.Await (await)
import Ribosome.Test.Embed (integrationSpecDef)
import Ribosome.Test.Orphans ()
import TestError (handleTestError)

varName :: Text
varName =
  "result"

result :: Int
result =
  5

testAuto ::
  NvimE e m =>
  MonadRibo m =>
  m ()
testAuto =
  vimSetVar varName (toMsgpack result)

$(return [])

autocmdPlugin :: IO (Plugin (Ribosome ()))
autocmdPlugin = do
  env <- newRibosome "test" ()
  return $ riboPlugin "test" env funcs [] handleTestError def
  where
    funcs = [$(rpcHandler (autocmd "BufWritePre") 'testAuto)]

autocmdSpec :: ExceptT RpcError (Neovim ()) ()
autocmdSpec = do
  () <- vimCommand "doautocmd BufWritePre"
  await (gassertEqual result) (vimGetVar varName)

test_autocmd :: IO ()
test_autocmd = do
  plug <- autocmdPlugin
  integrationSpecDef plug autocmdSpec