ribosome-0.9.9.9: test/Ribosome/Test/ScratchTest.hs
module Ribosome.Test.ScratchTest where
import Polysemy.Test (UnitTest, assertEq, unitTest)
import Test.Tasty (TestTree, testGroup)
import Ribosome.Api.Buffer (currentBufferContent)
import Ribosome.Data.FloatOptions (FloatOptions (FloatOptions), FloatRelative (Cursor))
import Ribosome.Data.ScratchId (ScratchId)
import Ribosome.Data.ScratchOptions (ScratchOptions (ScratchOptions))
import qualified Ribosome.Effect.Scratch as Scratch
import Ribosome.Effect.Scratch (Scratch)
import Ribosome.Host.Api.Data (nvimCommand)
import Ribosome.Host.Api.Effect (vimCallFunction)
import Ribosome.Host.Data.Execution (Execution (Sync))
import Ribosome.Host.Data.Report (resumeReport)
import Ribosome.Host.Data.RpcError (RpcError)
import Ribosome.Host.Data.RpcHandler (Handler, RpcHandler)
import qualified Ribosome.Host.Effect.Rpc as Rpc
import Ribosome.Host.Handler (rpcFunction)
import Ribosome.Test.Wait (assertWait)
import Ribosome.Unit.Run (runTestHandlers)
target :: [Text]
target = ["line 1", "line 2"]
name :: ScratchId
name =
"buffi"
makeScratch ::
Member (Scratch !! RpcError) r =>
Handler r ()
makeScratch =
resumeReport (void (Scratch.show target options))
where
options =
ScratchOptions False True False True True True False Nothing Nothing Nothing [] [] Nothing name
floatOptions :: FloatOptions
floatOptions =
FloatOptions Cursor 30 2 1 1 True def Nothing def False True (Just def) Nothing
makeFloatScratch ::
Member (Scratch !! RpcError) r =>
Handler r ()
makeFloatScratch =
resumeReport (void (Scratch.show target options))
where
options =
ScratchOptions False True False True True True False (Just floatOptions) Nothing (Just 0) [] [] Nothing name
scratchCount ::
Member (Scratch !! RpcError) r =>
Sem r Int
scratchCount =
(-1) <! (length <$> Scratch.get)
handlers ::
∀ r .
Member (Scratch !! RpcError) r =>
[RpcHandler r]
handlers =
[
rpcFunction "MakeFloatScratch" Sync makeFloatScratch,
rpcFunction "MakeScratch" Sync makeScratch
]
scratchTest :: Text -> UnitTest
scratchTest fun = do
runTestHandlers handlers mempty do
() <- vimCallFunction fun []
assertWait scratchCount (assertEq (1 :: Int))
assertWait currentBufferContent (assertEq target)
Rpc.notify (nvimCommand "bdelete")
assertWait scratchCount (assertEq 0)
test_regularScratch :: UnitTest
test_regularScratch = do
scratchTest "MakeScratch"
test_floatScratch :: UnitTest
test_floatScratch = do
scratchTest "MakeFloatScratch"
test_scratch :: TestTree
test_scratch =
testGroup "scratch" [
unitTest "regular window" test_regularScratch,
unitTest "float window" test_floatScratch
]