    -- | API for test providers.
    --
    -- @since 0.1
    module Test.Tasty.Providers
      ( IsTest(..)
      , testPassed
      , testFailed
      , testFailedDetails
      , Result
      , Progress(..)
      , TestName
      , TestTree
      , singleTest
      )
      where

    import Test.Tasty.Core
    import Test.Tasty.Providers.ConsoleFormat (ResultDetailsPrinter, noResultDetails)

    -- | Convert a test to a leaf of the 'TestTree'.
    --
    -- @since 0.1
    singleTest :: IsTest t => TestName -> t -> TestTree
    singleTest :: forall t. IsTest t => TestName -> t -> TestTree
    singleTest = TestName -> t -> TestTree
    forall t. IsTest t => TestName -> t -> TestTree
    SingleTest

    -- | 'Result' of a passed test.
    --
    -- @since 0.8
    testPassed
      :: String -- ^ description (may be empty)
      -> Result
    testPassed :: TestName -> Result
    testPassed TestName
    desc = Result
      { resultOutcome :: Outcome
    resultOutcome = Outcome
    Success
      , resultDescription :: TestName
    resultDescription = TestName
    desc
      , resultShortDescription :: TestName
    resultShortDescription = TestName
    "OK"
      , resultTime :: Time
    resultTime = Time
    0
      , resultDetailsPrinter :: ResultDetailsPrinter
    resultDetailsPrinter = ResultDetailsPrinter
    noResultDetails
      }

    -- | 'Result' of a failed test.
    --
    -- @since 0.8
    testFailed
      :: String -- ^ description
      -> Result
    testFailed :: TestName -> Result
    testFailed TestName
    desc = Result
      { resultOutcome :: Outcome
    resultOutcome = FailureReason -> Outcome
    Failure FailureReason
    TestFailed
      , resultDescription :: TestName
    resultDescription = TestName
    desc
      , resultShortDescription :: TestName
    resultShortDescription = TestName
    "FAIL"
      , resultTime :: Time
    resultTime = Time
    0
      , resultDetailsPrinter :: ResultDetailsPrinter
    resultDetailsPrinter = ResultDetailsPrinter
    noResultDetails
      }

    -- | 'Result' of a failed test with custom details printer
    --
    -- @since 1.3.1
    testFailedDetails
      :: String               -- ^ description
      -> ResultDetailsPrinter -- ^ details printer
      -> Result
    testFailedDetails :: TestName -> ResultDetailsPrinter -> Result
    testFailedDetails TestName
    desc ResultDetailsPrinter
    printer = (TestName -> Result
    testFailed TestName
    desc)
      { resultDetailsPrinter = printer }