ribosome-root-0.3.0.0: test/u/ScratchSpec.hs
{-# OPTIONS_GHC -F -pgmF htfpp #-}
{-# LANGUAGE TemplateHaskell #-}
module ScratchSpec (htf_thisModulesTests) where
import Data.Default (def)
import qualified Data.Map as Map (toList)
import Neovim (Neovim, Plugin(..))
import Test.Framework
import Ribosome.Api.Buffer (currentBufferContent)
import Ribosome.Control.Monad.Ribo (MonadRibo, NvimE, pluginInternalL)
import Ribosome.Control.Ribosome (Ribosome, newRibosome)
import qualified Ribosome.Control.Ribosome as Ribosome (scratch)
import Ribosome.Data.ScratchOptions (ScratchOptions(ScratchOptions))
import Ribosome.Msgpack.Error (DecodeError)
import Ribosome.Nvim.Api.IO (vimCallFunction, vimCommand)
import Ribosome.Nvim.Api.RpcCall (RpcError)
import Ribosome.Plugin (riboPlugin, rpcHandler, rpcHandlerDef, sync)
import Ribosome.Scratch (showInScratch)
import Ribosome.Test.Await (await)
import Ribosome.Test.Embed (integrationSpecDef)
import TestError (handleTestError)
target :: [Text]
target = ["line 1", "line 2"]
name :: Text
name =
"buffi"
makeScratch ::
MonadDeepError e DecodeError m =>
MonadRibo m =>
NvimE e m =>
m ()
makeScratch =
void $ showInScratch target (ScratchOptions False True False True True True Nothing (Just 0) [] [] name)
scratchCount ::
MonadRibo m =>
m Int
scratchCount =
length . Map.toList <$> pluginInternalL Ribosome.scratch
$(return [])
scratchPlugin :: IO (Plugin (Ribosome ()))
scratchPlugin = do
env <- newRibosome "test" ()
return $ riboPlugin "test" env funcs [] handleTestError def
where
funcs = [$(rpcHandlerDef 'makeScratch), $(rpcHandler sync 'scratchCount)]
scratchSpec :: ExceptT RpcError (Neovim ()) ()
scratchSpec = do
() <- vimCallFunction "MakeScratch" []
await (gassertEqual (1 :: Int)) scratches
await (gassertEqual target) currentBufferContent
vimCommand "bdelete"
await (gassertEqual 0) scratches
where
scratches = vimCallFunction "ScratchCount" []
test_scratch :: IO ()
test_scratch = do
plug <- scratchPlugin
integrationSpecDef plug scratchSpec