content: {-# OPTIONS_GHC -fno-warn-deprecations #-}
  {-# LANGUAGE ViewPatterns #-}
  -- |
  -- Stability: deprecated
  --
  -- This module contains formatters that can be used with `hspecWith`:
  --
  -- @
  -- import Test.Hspec
  -- import Test.Hspec.Api.Formatters.V1
  --
  -- main :: IO ()
  -- main = hspecWith (useFormatter ("my-formatter", formatter) defaultConfig) spec
  --
  -- formatter :: Formatter
  -- formatter = ...
  --
  -- spec :: Spec
  -- spec = ...
  -- @
  module Test.Hspec.Api.Formatters.V1 (
  
  -- * Register a formatter
    useFormatter
  , formatterToFormat
  
  -- * Formatters
  , silent
  , checks
  , specdoc
  , progress
  , failed_examples
  
  -- * Implementing a custom Formatter
  -- |
  -- A formatter is a set of actions.  Each action is evaluated when a certain
  -- situation is encountered during a test run.
  --
  -- Actions live in the `FormatM` monad.  It provides access to the runner state
  -- and primitives for appending to the generated report.
  , Formatter (..)
  , FailureReason (..)
  , FormatM
  
  -- ** Accessing the runner state
  , getSuccessCount
  , getPendingCount
  , getFailCount
  , getTotalCount
  
  , FailureRecord (..)
  , getFailMessages
  , usedSeed
  
  , Seconds(..)
  , getCPUTime
  , getRealTime
  
  -- ** Appending to the generated report
  , write
  , writeLine
  , writeTransient
  
  -- ** Dealing with colors
  , withInfoColor
  , withSuccessColor
  , withPendingColor
  , withFailColor
  
  , useDiff
  , extraChunk
  , missingChunk
  
  -- ** Helpers
  , formatException
  
  -- * Re-exports
  , Location(..)
  , Progress
  
  , SpecWith
  , Config
  , modifyConfig
  ) where
  
  import Test.Hspec.Core.Formatters.V1
  import Test.Hspec.Core.Runner (Config(..))
  import Test.Hspec.Core.Format hiding (FailureReason(..))
  import Test.Hspec.Core.Spec (modifyConfig, SpecWith)
  
  -- |
  -- Make a formatter available for use with @--format@ and use it by default.
  useFormatter :: (String, Formatter) -> Config -> Config
  useFormatter (fmap formatterToFormat -> formatter@(_, format)) config = (registerFormatter_ formatter config) { configFormat = Just format }
  
  -- copy of Test.Hspec.Core.Runner.registerFormatter
  registerFormatter_ :: (String, FormatConfig -> IO Format) -> Config -> Config
  registerFormatter_ formatter config = config { configAvailableFormatters = formatter : configAvailableFormatters config }
  