ribosome-test-0.4.0.0: lib/Ribosome/Test/Unit.hs
module Ribosome.Test.Unit where
import Control.Exception.Lifted (bracket_)
import Hedgehog (TestT)
import Hedgehog.Internal.Property (mkTestT, runTestT)
import System.FilePath (takeDirectory, takeFileName, (</>))
import System.Log ()
import System.Log.Logger (Priority(DEBUG, WARNING), 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 = "test"
uSpec :: (MonadIO m, NvimE e m) => Runner m
uSpec conf spec = do
setupPluginEnv conf
spec
unitSpec ::
MonadIO n =>
MonadIO m =>
NvimE e' n =>
MonadFail m =>
ReportError e =>
MonadBaseControl IO m =>
RpcHandler e (Ribosome env) n =>
TestConfig ->
env ->
TestT n a ->
TestT m a
unitSpec cfg env t = do
mkTestT (unsafeEmbeddedSpecR uSpec cfg env (runTestT t))
unitSpecDef ::
MonadIO n =>
MonadIO m =>
NvimE e' n =>
MonadFail m =>
ReportError e =>
MonadBaseControl IO m =>
RpcHandler e (Ribosome env) n =>
env ->
TestT n a ->
TestT m a
unitSpecDef =
unitSpec def
unitSpecDef' ::
MonadIO n =>
MonadIO m =>
NvimE e' n =>
MonadFail m =>
ReportError e =>
MonadBaseControl IO m =>
RpcHandler e (Ribosome ()) n =>
TestT n a ->
TestT m a
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 =>
MonadBaseControl IO m =>
Text ->
m a ->
m a
withLogAs name =
bracket_ (logLevel DEBUG) (logLevel WARNING)
where
logLevel =
liftIO . updateGlobalLogger (toString name) . setLevel
withLog ::
MonadRibo m =>
MonadBaseControl IO m =>
m a ->
m a
withLog thunk =
(`withLogAs` thunk) =<< pluginName