module Rasa.Testing (
  testBufAction
  ) where

import Rasa.Internal.Interpreters
import Rasa.Internal.Action
import Rasa.Internal.Actions
import Rasa.Internal.BufAction

import Test.Hspec
import Control.Monad
import qualified Yi.Rope as Y

testBufAction :: (Show a, Eq a) => String -> Y.YiString -> a -> BufAction a -> Spec
testBufAction description txt expectation bufAction = join . runIO $
  bootstrapAction $ do
    ref <- addBuffer txt
    mResult <- bufDo ref bufAction
    case mResult of
      Nothing -> error "(Err #75b72c) Buffer not found by BufRef"
      Just res -> return $ it description (res `shouldBe` expectation)