packages feed

ribosome-0.9.9.9: test/Ribosome/Test/WindowTest.hs

module Ribosome.Test.WindowTest where

import Polysemy.Test (UnitTest, assertEq, unitTest, (===))
import Test.Tasty (TestTree, testGroup)

import Ribosome.Api.Window (ensureMainWindow)
import Ribosome.Host.Api.Data (Window)
import Ribosome.Host.Api.Effect (bufferSetOption, nvimCommand, vimGetCurrentBuffer, vimGetCurrentWindow, vimGetWindows)
import Ribosome.Host.Class.Msgpack.Encode (toMsgpack)
import Ribosome.Host.Effect.Rpc (Rpc)
import Ribosome.Host.Test.Run (embedTest_)

setCurrentNofile ::
  Member Rpc r =>
  Sem r ()
setCurrentNofile = do
  buf <- vimGetCurrentBuffer
  bufferSetOption buf "buftype" (toMsgpack ("nofile" :: Text))

createNofile ::
  Member Rpc r =>
  Sem r Window
createNofile = do
  initialWindow <- vimGetCurrentWindow
  nvimCommand "new"
  setCurrentNofile
  pure initialWindow

test_findMainWindowExisting :: UnitTest
test_findMainWindowExisting =
  embedTest_ do
    initialWindow <- createNofile
    (initialWindow ===) =<< ensureMainWindow

test_findMainWindowCreate :: UnitTest
test_findMainWindowCreate =
  embedTest_ do
    setCurrentNofile
    void createNofile
    void ensureMainWindow
    assertEq 3 . length =<< vimGetWindows

test_window :: TestTree
test_window =
  testGroup "window" [
    unitTest "find existing" test_findMainWindowExisting,
    unitTest "find create" test_findMainWindowCreate
  ]