chiasma-test-0.10.0.0: integration/Chiasma/Test/TmuxTest.hs
module Chiasma.Test.TmuxTest where
import Polysemy.Test (UnitTest, (===))
import Chiasma.Codec.Data.Pane (Pane (Pane))
import Chiasma.Codec.Data.Window (Window (Window))
import Chiasma.Data.CodecError (CodecError)
import qualified Chiasma.Data.PaneSelection as PaneSelection
import qualified Chiasma.Data.Target as Target
import Chiasma.Data.TmuxCommand (TmuxCommand (ListPanes, ListWindows, NewWindow))
import Chiasma.Data.TmuxError (TmuxError)
import Chiasma.Data.TmuxId (PaneId (PaneId), WindowId (WindowId))
import Chiasma.Data.WindowParams (WindowParams (name))
import qualified Chiasma.Effect.TmuxApi as TmuxApi
import Chiasma.Effect.TmuxApi (Tmux)
import Chiasma.Effect.TmuxClient (NativeTmux)
import Chiasma.Test.Tmux (tmuxTest)
import Chiasma.Tmux (withTmux)
prog ::
Sem (Tmux : r) ([Pane], [Pane], [Window])
prog = do
panes1 <- TmuxApi.send (ListPanes (PaneSelection.InWindow (Target.Pane 0)))
TmuxApi.send (NewWindow def)
TmuxApi.send (NewWindow def { name = Just "second" })
wins <- TmuxApi.send (ListWindows def)
panes <- TmuxApi.send (ListPanes PaneSelection.All)
pure (panes1, panes, wins)
p :: Int -> Pane
p i =
Pane (PaneId i) 240 60 0 0
w :: Int -> Window
w i =
Window (WindowId i) 240 60
test_tmux :: UnitTest
test_tmux = do
tmuxTest do
result <- restop @TmuxError @NativeTmux (withTmux (restop @CodecError @Tmux prog))
([p0], [p0, p1, p2], [w0, w1, w2]) === result
where
p0 = p 0
p1 = p 1
p2 = p 2
w0 = w 0
w1 = w 1
w2 = w 2