packages feed

ribosome-test-0.3.0.0: lib/Ribosome/Test/Screenshot.hs

{-# OPTIONS_GHC -F -pgmF htfpp #-}

module Ribosome.Test.Screenshot where

import Chiasma.Data.TmuxError (TmuxError)
import Chiasma.Data.TmuxThunk (TmuxThunk)
import qualified Chiasma.Test.Screenshot as Chiasma (screenshot)
import Control.Monad.Catch (MonadMask)
import Control.Monad.DeepError (MonadDeepError)
import Control.Monad.Free.Class (MonadFree)
import Control.Monad.IO.Class (MonadIO)
import Data.Text (Text)
import Test.Framework
import Test.Framework.AssertM (AssertM(..))

import Ribosome.Control.Monad.Ribo (MonadRibo, Nvim)
import Ribosome.Orphans ()
import Ribosome.Test.Orphans ()
import Ribosome.Test.Unit (fixture)
import Ribosome.Tmux.Run (runTmux)

screenshot ::
  MonadFree TmuxThunk m =>
  MonadIO m =>
  Text ->
  Bool ->
  Int ->
  m (Maybe ([Text], [Text]))
screenshot name record pane = do
  storage <- fixture "screenshots"
  Chiasma.screenshot record storage (toString name) pane

assertScreenshot ::
  AssertM m =>
  MonadIO m =>
  MonadRibo m =>
  MonadDeepError e TmuxError m =>
  MonadMask m =>
  Nvim m =>
  Text ->
  Bool ->
  Int ->
  m ()
assertScreenshot name record pane =
  runTmux (screenshot name record pane) >>= check
  where
    check (Just (current, existing)) =
      gassertEqual existing current
    check Nothing =
      return ()