packages feed

cabal-cache-1.0.6.0: test/Test/Base.hs

module Test.Base 
  ( execCabalCache
  , execCabalCache_
  , execCabalCache'
  , integration
  ) where

import Control.Monad (void)
import Control.Monad.Catch (MonadCatch)
import Control.Monad.IO.Class (MonadIO)
import GHC.Stack (HasCallStack)
import Hedgehog (MonadTest)
import Hedgehog.Extras.Test.Process (ExecConfig)

import qualified GHC.Stack                    as GHC
import qualified Hedgehog                     as H
import qualified Hedgehog.Extras.Test.Base    as H
import qualified Hedgehog.Extras.Test.Process as H

integration :: HasCallStack => H.Integration () -> H.Property
integration = H.withTests 1 . H.propertyOnce

-- | Run cabal-cache, returning the stdout
execCabalCache
  :: (MonadTest m, MonadCatch m, MonadIO m, HasCallStack)
  => [String]
  -> m String
execCabalCache = GHC.withFrozenCallStack $ H.execFlex "cabal-cache" "CABAL_CACHE"

-- | Run cabal-cache, discarding return value
execCabalCache_
  :: (MonadTest m, MonadCatch m, MonadIO m, HasCallStack)
  => [String]
  -> m ()
execCabalCache_ = void . execCabalCache

-- | Run cabal-cache, returning the stdout
execCabalCache'
  :: (MonadTest m, MonadCatch m, MonadIO m, HasCallStack)
  => ExecConfig
  -> [String]
  -> m String
execCabalCache' execConfig = GHC.withFrozenCallStack $ H.execFlex' execConfig "cabal-cache" "CABAL_CACHE"