sydtest-0.0.0.0: src/Test/Syd/Runner/Wrappers.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
module Test.Syd.Runner.Wrappers where
import Control.Concurrent
import Control.Monad.IO.Class
import Test.Syd.Run
import Test.Syd.SpecDef
data Next a = Continue a | Stop a
deriving (Functor)
extractNext :: Next a -> a
extractNext (Continue a) = a
extractNext (Stop a) = a
failFastNext :: Bool -> TDef (Timed TestRunResult) -> Next (TDef (Timed TestRunResult))
failFastNext b td@(TDef (Timed trr _) _) =
if b && testRunResultStatus trr == TestFailed
then Stop td
else Continue td
applySimpleWrapper ::
MonadIO m =>
((a -> m ()) -> (b -> m ())) ->
(a -> m r) ->
(b -> m r)
applySimpleWrapper takeTakeA takeA b = do
var <- liftIO newEmptyMVar
takeTakeA
( \a -> do
r <- takeA a
liftIO $ putMVar var r
)
b
liftIO $ readMVar var
applySimpleWrapper' ::
MonadIO m =>
((a -> m ()) -> m ()) ->
(a -> m r) ->
m r
applySimpleWrapper' takeTakeA takeA = do
var <- liftIO newEmptyMVar
takeTakeA
( \a -> do
r <- takeA a
liftIO $ putMVar var r
)
liftIO $ readMVar var
applySimpleWrapper'' ::
MonadIO m =>
(m () -> m ()) ->
m r ->
m r
applySimpleWrapper'' wrapper produceResult = do
var <- liftIO newEmptyMVar
wrapper $ do
r <- produceResult
liftIO $ putMVar var r
liftIO $ readMVar var
applySimpleWrapper2 ::
MonadIO m =>
((a -> b -> m ()) -> (c -> d -> m ())) ->
(a -> b -> m r) ->
(c -> d -> m r)
applySimpleWrapper2 takeTakeAB takeAB c d = do
var <- liftIO newEmptyMVar
takeTakeAB
( \a b -> do
r <- takeAB a b
liftIO $ putMVar var r
)
c
d
liftIO $ readMVar var