packages feed

ribosome-host-0.9.9.9: test/Ribosome/Host/Test/AutocmdTest.hs

module Ribosome.Host.Test.AutocmdTest where

import Conc (interpretSync)
import qualified Polysemy.Conc.Sync as Sync
import Polysemy.Test (UnitTest, assertJust)
import Polysemy.Time (Seconds (Seconds))

import Ribosome.Host.Api.Effect (nvimCommand, nvimGetVar, nvimSetVar)
import Ribosome.Host.Data.Execution (Execution (Async))
import Ribosome.Host.Data.Report (resumeReport)
import Ribosome.Host.Data.RpcError (RpcError)
import Ribosome.Host.Data.RpcHandler (Handler, RpcHandler)
import qualified Ribosome.Host.Data.RpcType as AutocmdOptions
import Ribosome.Host.Effect.Rpc (Rpc)
import Ribosome.Host.Embed (embedNvim)
import Ribosome.Host.Handler (rpcAutocmd)
import Ribosome.Host.Unit.Run (runTest)

var :: Text
var =
  "test_var"

au ::
  Members [Rpc !! RpcError, Sync ()] r =>
  Handler r ()
au = do
  resumeReport (nvimSetVar var (12 :: Int))
  void $ Sync.putWait (Seconds 5) ()

bn ::
  Members [Rpc !! RpcError, Sync ()] r =>
  Handler r ()
bn = do
  resumeReport (nvimSetVar var (21 :: Int))
  void $ Sync.putWait (Seconds 5) ()

handlers ::
  ∀ r .
  Members [Rpc !! RpcError, Sync ()] r =>
  [RpcHandler r]
handlers =
  [
    rpcAutocmd "Au" Async "User" "Au" au,
    rpcAutocmd "Bn" Async "BufNew" def { AutocmdOptions.group = Just "test" } bn
  ]

test_autocmd :: UnitTest
test_autocmd =
  runTest $ interpretSync $ embedNvim handlers do
    nvimCommand "doautocmd User Au"
    Sync.takeWait (Seconds 5)
    assertJust @Int 12 =<< nvimGetVar var
    nvimCommand "new"
    Sync.takeWait (Seconds 5)
    assertJust @Int 21 =<< nvimGetVar var