ribosome-host-0.9.9.9: test/Ribosome/Host/Test/CommandBangTest.hs
module Ribosome.Host.Test.CommandBangTest where
import Conc (interpretAtomic)
import Polysemy.Test (UnitTest, assertJust)
import Ribosome.Host.Api.Effect (nvimCommand, nvimGetVar, nvimSetVar)
import Ribosome.Host.Class.Msgpack.Encode (toMsgpack)
import Ribosome.Host.Data.Bang (Bang (Bang, NoBang))
import Ribosome.Host.Data.Execution (Execution (Sync))
import Ribosome.Host.Data.Report (Report, resumeReport)
import Ribosome.Host.Data.RpcError (RpcError)
import Ribosome.Host.Data.RpcHandler (RpcHandler)
import Ribosome.Host.Effect.Rpc (Rpc)
import Ribosome.Host.Embed (embedNvim)
import Ribosome.Host.Handler (rpcCommand)
import Ribosome.Host.Unit.Run (runTest)
var :: Text
var =
"test_var"
bang ::
Members [Rpc !! RpcError, Stop Report] r =>
Bang ->
Int64 ->
Sem r ()
bang = \case
Bang ->
\ i -> resumeReport (nvimSetVar @[_] var [toMsgpack True, toMsgpack i])
NoBang ->
\ i -> resumeReport (nvimSetVar @[_] var [toMsgpack False, toMsgpack i])
handlers ::
∀ r .
Members [AtomicState Int, Rpc !! RpcError] r =>
[RpcHandler r]
handlers =
[
rpcCommand "Bang" Sync (bang @(Stop Report : r))
]
test_bang :: UnitTest
test_bang =
runTest $ interpretAtomic 0 $ embedNvim handlers do
nvimCommand "Bang! 9"
assertJust @(_, Int) (True, 9) =<< nvimGetVar var
nvimCommand "Bang 10"
assertJust @(_, Int) (False, 10) =<< nvimGetVar var