{-# OPTIONS_GHC -fno-warn-deprecations #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE NamedFieldPuns #-}
module Test.Hspec.Api.Format.V1.Internal (
  FailureReason(..)
, module Test.Hspec.Api.Format.V1.Internal
) where

import           Test.Hspec.Core.Util (stripAnsi)
import           Test.Hspec.Core.Formatters.V1 (FailureReason(..))
import qualified Test.Hspec.Api.Format.V2 as V2
import           Test.Hspec.Api.Format.V2 hiding (Item(..), Result(..), FailureReason(..))

data Item = Item {
  Item -> Maybe Location
itemLocation :: Maybe Location
, Item -> Seconds
itemDuration :: Seconds
, Item -> String
itemInfo :: String
, Item -> Result
itemResult :: Result
} deriving Int -> Item -> ShowS
[Item] -> ShowS
Item -> String
(Int -> Item -> ShowS)
-> (Item -> String) -> ([Item] -> ShowS) -> Show Item
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Item -> ShowS
showsPrec :: Int -> Item -> ShowS
$cshow :: Item -> String
show :: Item -> String
$cshowList :: [Item] -> ShowS
showList :: [Item] -> ShowS
Show

data Result =
    Success
  | Pending (Maybe Location) (Maybe String)
  | Failure (Maybe Location) FailureReason
  deriving Int -> Result -> ShowS
[Result] -> ShowS
Result -> String
(Int -> Result -> ShowS)
-> (Result -> String) -> ([Result] -> ShowS) -> Show Result
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Result -> ShowS
showsPrec :: Int -> Result -> ShowS
$cshow :: Result -> String
show :: Result -> String
$cshowList :: [Result] -> ShowS
showList :: [Result] -> ShowS
Show

liftItem :: Item -> V2.Item
liftItem :: Item -> Item
liftItem Item{String
Maybe Location
Seconds
Result
itemLocation :: Item -> Maybe Location
itemDuration :: Item -> Seconds
itemInfo :: Item -> String
itemResult :: Item -> Result
itemLocation :: Maybe Location
itemDuration :: Seconds
itemInfo :: String
itemResult :: Result
..} = V2.Item {
  Maybe Location
itemLocation :: Maybe Location
itemLocation :: Maybe Location
itemLocation
, Seconds
itemDuration :: Seconds
itemDuration :: Seconds
itemDuration
, String
itemInfo :: String
itemInfo :: String
itemInfo
, itemResult :: Result
itemResult = Result -> Result
liftResult Result
itemResult
}

unliftItem :: V2.Item -> Item
unliftItem :: Item -> Item
unliftItem V2.Item{String
Maybe Location
Seconds
Result
itemLocation :: Item -> Maybe Location
itemDuration :: Item -> Seconds
itemInfo :: Item -> String
itemResult :: Item -> Result
itemLocation :: Maybe Location
itemDuration :: Seconds
itemInfo :: String
itemResult :: Result
..} = Item {
  Maybe Location
itemLocation :: Maybe Location
itemLocation :: Maybe Location
itemLocation
, Seconds
itemDuration :: Seconds
itemDuration :: Seconds
itemDuration
, String
itemInfo :: String
itemInfo :: String
itemInfo
, itemResult :: Result
itemResult = Result -> Result
unliftResult Result
itemResult
}

liftResult :: Result -> V2.Result
liftResult :: Result -> Result
liftResult = \ case
  Result
Success -> Result
V2.Success
  Pending Maybe Location
loc Maybe String
reason -> Maybe Location -> Maybe String -> Result
V2.Pending Maybe Location
loc Maybe String
reason
  Failure Maybe Location
loc FailureReason
reason -> Maybe Location -> FailureReason -> Result
V2.Failure Maybe Location
loc (FailureReason -> FailureReason
liftFailureReson FailureReason
reason)

unliftResult :: V2.Result -> Result
unliftResult :: Result -> Result
unliftResult = \ case
  Result
V2.Success -> Result
Success
  V2.Pending Maybe Location
loc Maybe String
reason -> Maybe Location -> Maybe String -> Result
Pending Maybe Location
loc Maybe String
reason
  V2.Failure Maybe Location
loc FailureReason
reason -> Maybe Location -> FailureReason -> Result
Failure Maybe Location
loc (FailureReason -> FailureReason
unliftFailureReason FailureReason
reason)

liftFailureReson :: FailureReason -> V2.FailureReason
liftFailureReson :: FailureReason -> FailureReason
liftFailureReson = \ case
  FailureReason
NoReason -> FailureReason
V2.NoReason
  Reason String
reason -> String -> FailureReason
V2.Reason String
reason
  ExpectedButGot Maybe String
preface String
expected String
actual -> Maybe String -> String -> String -> FailureReason
V2.ExpectedButGot Maybe String
preface String
expected String
actual
  Error Maybe String
info SomeException
e -> Maybe String -> SomeException -> FailureReason
V2.Error Maybe String
info SomeException
e

unliftFailureReason :: V2.FailureReason -> FailureReason
unliftFailureReason :: FailureReason -> FailureReason
unliftFailureReason = \ case
  FailureReason
V2.NoReason -> FailureReason
NoReason
  V2.Reason String
reason -> String -> FailureReason
Reason String
reason
  V2.ColorizedReason String
reason -> String -> FailureReason
Reason (ShowS
stripAnsi String
reason)
  V2.ExpectedButGot Maybe String
preface String
expected String
actual -> Maybe String -> String -> String -> FailureReason
ExpectedButGot Maybe String
preface String
expected String
actual
  V2.Error Maybe String
info SomeException
e -> Maybe String -> SomeException -> FailureReason
Error Maybe String
info SomeException
e