ribosome-test-0.3.0.0: lib/Ribosome/Test/Unit.hs
module Ribosome.Test.Unit where
import Control.Monad.IO.Class (MonadIO)
import Data.Default (def)
import System.FilePath (takeDirectory, takeFileName, (</>))
import System.Log.Logger (Priority(DEBUG), setLevel, updateGlobalLogger)
import Ribosome.Control.Monad.Ribo (MonadRibo, NvimE, pluginName)
import Ribosome.Control.Ribosome (Ribosome)
import Ribosome.Error.Report.Class (ReportError)
import Ribosome.Plugin.RpcHandler (RpcHandler)
import Ribosome.Test.Embed (Runner, TestConfig(..), setupPluginEnv, unsafeEmbeddedSpecR)
import qualified Ribosome.Test.File as F (fixture, fixtureContent, tempDir)
import Ribosome.Test.Orphans ()
uPrefix :: Text
uPrefix = "u"
uSpec :: (MonadIO m, NvimE e m) => Runner m
uSpec conf spec = do
setupPluginEnv conf
spec
unitSpec ::
(RpcHandler e (Ribosome env) m, ReportError e, MonadIO m, NvimE e' m) =>
TestConfig ->
env ->
m () ->
IO ()
unitSpec =
unsafeEmbeddedSpecR uSpec
unitSpecDef ::
(RpcHandler e (Ribosome env) m, ReportError e, MonadIO m, NvimE e' m) =>
env ->
m () ->
IO ()
unitSpecDef =
unitSpec def
unitSpecDef' ::
(RpcHandler e (Ribosome ()) m, ReportError e, MonadIO m, NvimE e' m) =>
m () ->
IO ()
unitSpecDef' =
unitSpecDef ()
tempDir :: MonadIO m => FilePath -> m FilePath
tempDir = F.tempDir uPrefix
tempFile :: MonadIO m => FilePath -> m FilePath
tempFile file = do
absDir <- tempDir $ takeDirectory file
return $ absDir </> takeFileName file
fixture :: MonadIO m => FilePath -> m FilePath
fixture = F.fixture uPrefix
fixtureContent :: MonadIO m => FilePath -> m Text
fixtureContent = F.fixtureContent uPrefix
withLogAs ::
MonadIO m =>
Text ->
m a ->
m a
withLogAs name thunk = do
liftIO $ updateGlobalLogger (toString name) (setLevel DEBUG)
thunk
withLog ::
MonadRibo m =>
m a ->
m a
withLog thunk =
(`withLogAs` thunk) =<< pluginName