conferer-hspec-1.0.0.0: src/Conferer/FromConfig/Hspec.hs
-- |
-- Copyright: (c) 2019 Lucas David Traverso
-- License: MPL-2.0
-- Maintainer: Lucas David Traverso <lucas6246@gmail.com>
-- Stability: stable
-- Portability: portable
--
-- FromConfig instance for hspec
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE CPP #-}
module Conferer.FromConfig.Hspec where
import Conferer.FromConfig
import Data.Text (toLower)
import Data.Dynamic (toDyn, Dynamic)
import qualified Test.Hspec.Core.Runner as Hspec
import qualified Test.Hspec.Core.Formatters as Hspec
instance FromConfig Hspec.ColorMode where
fetchFromConfig =
fetchFromConfigWith $
(\case
"auto" -> Just Hspec.ColorAuto
"never" -> Just Hspec.ColorNever
"always" -> Just Hspec.ColorAlways
_ -> Nothing
) . toLower
instance FromConfig Hspec.Formatter where
fetchFromConfig =
fetchFromConfigWith $
(\case
"silent" -> Just Hspec.silent
"specdoc" -> Just Hspec.specdoc
"progress" -> Just Hspec.progress
"failed_examples" -> Just Hspec.failed_examples
_ -> Nothing
) . toLower
instance DefaultConfig Hspec.Config where
configDef = Hspec.defaultConfig
-- | Deconstruct a 'Hspec.Config' into a many key/dynamic pairs to
-- provide valid defaults for downstream 'fetchFromConfig'
desconstructHspecConfigToDefaults :: Hspec.Config -> [(Key, Dynamic)]
desconstructHspecConfigToDefaults Hspec.Config{..} =
[ ("dryRun", toDyn configDryRun)
, ("fastFail", toDyn configFastFail)
, ("rerun", toDyn configRerun)
, ("quickCheckMaxSuccess", toDyn configQuickCheckMaxSuccess)
, ("quickCheckMaxDiscardRatio", toDyn configQuickCheckMaxDiscardRatio)
, ("quickCheckMaxSize", toDyn configQuickCheckMaxSize)
, ("quickCheckSeed", toDyn configQuickCheckSeed)
, ("smallCheckDepth", toDyn configSmallCheckDepth)
, ("colorMode", toDyn configColorMode)
, ("htmlOutput", toDyn configHtmlOutput)
, ("formatter", toDyn configFormatter)
#if MIN_VERSION_hspec_core(2,1,1)
, ("skipPredicate", toDyn configSkipPredicate)
#endif
#if MIN_VERSION_hspec_core(2,1,9)
, ("concurrentJobs", toDyn configConcurrentJobs)
#endif
#if MIN_VERSION_hspec_core(2,4,0)
, ("ignoreConfigFile", toDyn configIgnoreConfigFile)
, ("printCpuTime", toDyn configPrintCpuTime)
, ("diff", toDyn configDiff)
#endif
#if MIN_VERSION_hspec_core(2,4,2)
, ("failureReport", toDyn configFailureReport)
#endif
#if MIN_VERSION_hspec_core(2,7,0)
, ("focusedOnly", toDyn configFocusedOnly)
, ("failOnFocused", toDyn configFailOnFocused)
#endif
]
instance FromConfig Hspec.Config where
fetchFromConfig key originalConfig = do
config <- addDefaultsAfterDeconstructingToDefaults
desconstructHspecConfigToDefaults
key originalConfig
configDryRun <- fetchFromConfig (key /. "dryRun") config
configFastFail <- fetchFromConfig (key /. "fastFail") config
configRerun <- fetchFromConfig (key /. "rerun") config
configQuickCheckMaxSuccess <- fetchFromConfig (key /. "quickCheckMaxSuccess") config
configQuickCheckMaxDiscardRatio <- fetchFromConfig (key /. "quickCheckMaxDiscardRatio") config
configQuickCheckMaxSize <- fetchFromConfig (key /. "quickCheckMaxSize") config
configQuickCheckSeed <- fetchFromConfig (key /. "quickCheckSeed") config
configSmallCheckDepth <- fetchFromConfig (key /. "smallCheckDepth") config
configColorMode <- fetchFromConfig (key /. "colorMode") config
configHtmlOutput <- fetchFromConfig (key /. "htmlOutput") config
configFormatter <- fetchFromConfig (key /. "formatter") config
configRerunAllOnSuccess <- fetchFromConfig (key /. "rerunAllOnSuccess") config
configFilterPredicate <- fetchFromConfig (key /. "filterPredicate") config
configOutputFile <- fetchFromConfig (key /. "outputFile") config
#if MIN_VERSION_hspec_core(2,1,1)
configSkipPredicate <- fetchFromConfig (key /. "skipPredicate") config
#endif
#if MIN_VERSION_hspec_core(2,1,9)
configConcurrentJobs <- fetchFromConfig (key /. "concurrentJobs") config
#endif
#if MIN_VERSION_hspec_core(2,4,0)
configIgnoreConfigFile <- fetchFromConfig (key /. "ignoreConfigFile") config
configPrintCpuTime <- fetchFromConfig (key /. "printCpuTime") config
configDiff <- fetchFromConfig (key /. "diff") config
#endif
#if MIN_VERSION_hspec_core(2,4,2)
configFailureReport <- fetchFromConfig (key /. "failureReport") config
#endif
#if MIN_VERSION_hspec_core(2,7,0)
configFocusedOnly <- fetchFromConfig (key /. "focusedOnly") config
configFailOnFocused <- fetchFromConfig (key /. "failOnFocused") config
#endif
pure Hspec.Config{..}