{-# LANGUAGE RankNTypes, OverloadedStrings #-}
{-# LANGUAGE CPP #-}
module Test.Tasty.Silver.Advanced
(
goldenTest1,
goldenTestIO,
goldenTestIO1,
goldenTest,
GShow (..),
GDiff (..),
readFileMaybe
)
where
#if !(MIN_VERSION_base(4,8,0))
import Data.Functor ( (<$>) )
#endif
import Test.Tasty.Providers
import Test.Tasty.Silver.Internal
import qualified Data.Text as T
goldenTest
:: TestName
-> (IO a)
-> (IO a)
-> (a -> a -> IO (Maybe String))
-> (a -> IO ())
-> TestTree
goldenTest :: forall a.
TestName
-> IO a
-> IO a
-> (a -> a -> IO (Maybe TestName))
-> (a -> IO ())
-> TestTree
goldenTest TestName
t IO a
golden IO a
test a -> a -> IO (Maybe TestName)
cmp a -> IO ()
upd = TestName
-> IO (Maybe a)
-> IO a
-> (a -> a -> IO GDiff)
-> (a -> IO GShow)
-> (a -> IO ())
-> TestTree
forall a.
TestName
-> IO (Maybe a)
-> IO a
-> (a -> a -> IO GDiff)
-> (a -> IO GShow)
-> (a -> IO ())
-> TestTree
goldenTestIO TestName
t (a -> Maybe a
forall a. a -> Maybe a
Just (a -> Maybe a) -> IO a -> IO (Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO a
golden) IO a
test a -> a -> IO GDiff
runCmp a -> IO GShow
forall {m :: * -> *} {p}. Monad m => p -> m GShow
shw a -> IO ()
upd
where
runCmp :: a -> a -> IO GDiff
runCmp a
a a
b = do
cmp' <- a -> a -> IO (Maybe TestName)
cmp a
a a
b
case cmp' of
Just TestName
d -> GDiff -> IO GDiff
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (GDiff -> IO GDiff) -> GDiff -> IO GDiff
forall a b. (a -> b) -> a -> b
$ Maybe TestName -> Text -> GDiff
ShowDiffed Maybe TestName
forall a. Maybe a
Nothing (TestName -> Text
T.pack TestName
d)
Maybe TestName
Nothing -> GDiff -> IO GDiff
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return GDiff
Equal
shw :: p -> m GShow
shw p
_ = GShow -> m GShow
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (GShow -> m GShow) -> GShow -> m GShow
forall a b. (a -> b) -> a -> b
$ Text -> GShow
ShowText Text
"Old API does not support showing the actual value. Use the --accept mode or use the new API."
goldenTest1
:: TestName
-> (IO (Maybe a))
-> (IO a)
-> (a -> a -> GDiff)
-> (a -> GShow)
-> (a -> IO ())
-> TestTree
goldenTest1 :: forall a.
TestName
-> IO (Maybe a)
-> IO a
-> (a -> a -> GDiff)
-> (a -> GShow)
-> (a -> IO ())
-> TestTree
goldenTest1 TestName
t IO (Maybe a)
golden IO a
test a -> a -> GDiff
diff a -> GShow
shw a -> IO ()
upd = TestName
-> IO (Maybe a)
-> IO a
-> (a -> a -> IO GDiff)
-> (a -> IO GShow)
-> (a -> IO ())
-> TestTree
forall a.
TestName
-> IO (Maybe a)
-> IO a
-> (a -> a -> IO GDiff)
-> (a -> IO GShow)
-> (a -> IO ())
-> TestTree
goldenTestIO TestName
t IO (Maybe a)
golden IO a
test (\a
a a
b -> GDiff -> IO GDiff
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (GDiff -> IO GDiff) -> GDiff -> IO GDiff
forall a b. (a -> b) -> a -> b
$ a -> a -> GDiff
diff a
a a
b) (GShow -> IO GShow
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (GShow -> IO GShow) -> (a -> GShow) -> a -> IO GShow
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> GShow
shw) a -> IO ()
upd
goldenTestIO
:: TestName
-> (IO (Maybe a))
-> (IO a)
-> (a -> a -> IO GDiff)
-> (a -> IO GShow)
-> (a -> IO ())
-> TestTree
goldenTestIO :: forall a.
TestName
-> IO (Maybe a)
-> IO a
-> (a -> a -> IO GDiff)
-> (a -> IO GShow)
-> (a -> IO ())
-> TestTree
goldenTestIO TestName
t IO (Maybe a)
golden IO a
test a -> a -> IO GDiff
diff a -> IO GShow
shw a -> IO ()
upd = TestName
-> IO (Maybe a)
-> IO a
-> (a -> a -> IO GDiff)
-> (a -> IO GShow)
-> Maybe (a -> IO ())
-> TestTree
forall a.
TestName
-> IO (Maybe a)
-> IO a
-> (a -> a -> IO GDiff)
-> (a -> IO GShow)
-> Maybe (a -> IO ())
-> TestTree
goldenTestIO1 TestName
t IO (Maybe a)
golden IO a
test a -> a -> IO GDiff
diff a -> IO GShow
shw ((a -> IO ()) -> Maybe (a -> IO ())
forall a. a -> Maybe a
Just a -> IO ()
upd)
goldenTestIO1
:: TestName
-> (IO (Maybe a))
-> (IO a)
-> (a -> a -> IO GDiff)
-> (a -> IO GShow)
-> (Maybe (a -> IO ()))
-> TestTree
goldenTestIO1 :: forall a.
TestName
-> IO (Maybe a)
-> IO a
-> (a -> a -> IO GDiff)
-> (a -> IO GShow)
-> Maybe (a -> IO ())
-> TestTree
goldenTestIO1 TestName
t IO (Maybe a)
golden IO a
test a -> a -> IO GDiff
diff a -> IO GShow
shw Maybe (a -> IO ())
upd = TestName -> Golden -> TestTree
forall t. IsTest t => TestName -> t -> TestTree
singleTest TestName
t (Golden -> TestTree) -> Golden -> TestTree
forall a b. (a -> b) -> a -> b
$ IO (Maybe a)
-> IO a
-> (a -> a -> IO GDiff)
-> (a -> IO GShow)
-> Maybe (a -> IO ())
-> Golden
forall a.
IO (Maybe a)
-> IO a
-> (a -> a -> IO GDiff)
-> (a -> IO GShow)
-> Maybe (a -> IO ())
-> Golden
Golden IO (Maybe a)
golden IO a
test a -> a -> IO GDiff
diff a -> IO GShow
shw Maybe (a -> IO ())
upd