packages feed

ribosome-test-0.4.0.0: test/Ribosome/Test/AutocmdTest.hs

module Ribosome.Test.AutocmdTest where

import Hedgehog ((===))
import Neovim (Plugin(..))
import TestError (RiboTest, handleTestError)

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

varName :: Text
varName =
  "result"

result :: Int
result =
  5

testAuto ::
  NvimE e 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 :: RiboTest ()
autocmdSpec = do
  () <- vimCommand "doautocmd BufWritePre"
  await (result ===) (vimGetVar varName)

test_autocmd :: UnitTest
test_autocmd = do
  plug <- liftIO autocmdPlugin
  integrationSpecDef plug autocmdSpec