hercules-ci-cnix-store-0.3.5.0: test/Hercules/CNix/VerbositySpec.hs
{-# LANGUAGE BlockArguments #-}
module Hercules.CNix.VerbositySpec (spec) where
import Hercules.CNix.Verbosity
import Protolude
import Test.Hspec
spec :: Spec
spec = do
describe "setVerbosity" do
it "affects getVerbosity" do
withResettingVerbosity do
for_ [minBound .. maxBound] \v -> do
setVerbosity v
v' <- getVerbosity
v' `shouldBe` v
describe "setShowTrace" do
it "affects getShowTrace" do
withResettingShowTrace do
for_ [True, False] \v -> do
setShowTrace v
v' <- getShowTrace
v' `shouldBe` v
describe "both" do
it "extends the message volume 2nd" do
both Warn Notice `shouldBe` Notice
it "extends the message volume 1st" do
both Warn Error `shouldBe` Warn
it "extends the message volume eq" do
both Warn Warn `shouldBe` Warn
-- bracket on global state is still a leaky abstraction, so we don't add this
-- to the library.
withResettingVerbosity :: IO a -> IO a
withResettingVerbosity =
bracket getVerbosity setVerbosity . const
withResettingShowTrace :: IO a -> IO a
withResettingShowTrace =
bracket getShowTrace setShowTrace . const