ribosome-test-0.4.0.0: test/Ribosome/Test/WatcherTest.hs
module Ribosome.Test.WatcherTest where
import qualified Data.Map.Strict as Map (singleton)
import Data.MessagePack (Object)
import Hedgehog ((===))
import Neovim (Plugin(..))
import TestError (RiboTest, handleTestError)
import Ribosome.Api.Autocmd (doautocmd)
import Ribosome.Api.Variable (setVar)
import Ribosome.Control.Monad.Ribo (NvimE)
import Ribosome.Control.Ribosome (Ribosome, newRibosome)
import Ribosome.Nvim.Api.IO (vimGetVar)
import Ribosome.Plugin (riboPlugin)
import Ribosome.Test.Await (await)
import Ribosome.Test.Embed (integrationSpecDef)
import Ribosome.Test.Orphans ()
import Ribosome.Test.Run (UnitTest)
changed :: NvimE e m => Object -> m ()
changed _ =
setVar "number" =<< ((+) (1 :: Int)) <$> vimGetVar "number"
varWatcherPlugin :: IO (Plugin (Ribosome ()))
varWatcherPlugin = do
env <- newRibosome "varwatcher" ()
return $ riboPlugin "varwatcher" env [] [] handleTestError (Map.singleton "trigger" changed)
varWatcherSpec :: RiboTest ()
varWatcherSpec = do
setVar "number" (10 :: Int)
setVar "trigger" (5 :: Int)
await ((10 :: Int) ===) (vimGetVar "number")
await ((5 :: Int) ===) (vimGetVar "trigger")
doautocmd True "CmdlineLeave"
doautocmd True "CmdlineLeave"
await ((11 :: Int) ===) (vimGetVar "number")
setVar "trigger" (6 :: Int)
await ((6 :: Int) ===) (vimGetVar "trigger")
doautocmd True "CmdlineLeave"
await ((12 :: Int) ===) (vimGetVar "number")
test_varWatcher :: UnitTest
test_varWatcher = do
plug <- liftIO varWatcherPlugin
integrationSpecDef plug varWatcherSpec