{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE IncoherentInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Test.Syd.Def.AroundAll where
import Control.Monad.RWS.Strict
import Test.QuickCheck.IO ()
import Test.Syd.Def.TestDefM
import Test.Syd.HList
import Test.Syd.SpecDef
beforeAll ::
IO outer ->
TestDefM (outer ': otherOuters) inner result ->
TestDefM otherOuters inner result
beforeAll :: IO outer
-> TestDefM (outer : otherOuters) inner result
-> TestDefM otherOuters inner result
beforeAll IO outer
action = (TestForest (outer : otherOuters) inner
-> TestTree otherOuters inner)
-> TestDefM (outer : otherOuters) inner result
-> TestDefM otherOuters inner result
forall (outers1 :: [*]) inner1 (outers2 :: [*]) inner2 result.
(TestForest outers1 inner1 -> TestTree outers2 inner2)
-> TestDefM outers1 inner1 result -> TestDefM outers2 inner2 result
wrapRWST ((TestForest (outer : otherOuters) inner
-> TestTree otherOuters inner)
-> TestDefM (outer : otherOuters) inner result
-> TestDefM otherOuters inner result)
-> (TestForest (outer : otherOuters) inner
-> TestTree otherOuters inner)
-> TestDefM (outer : otherOuters) inner result
-> TestDefM otherOuters inner result
forall a b. (a -> b) -> a -> b
$ \TestForest (outer : otherOuters) inner
forest -> IO outer
-> TestForest (outer : otherOuters) inner
-> TestTree otherOuters inner
forall outer (otherOuters :: [*]) inner extra.
IO outer
-> SpecDefForest (outer : otherOuters) inner extra
-> SpecDefTree otherOuters inner extra
DefBeforeAllNode IO outer
action TestForest (outer : otherOuters) inner
forest
beforeAll_ ::
IO () ->
TestDefM outers inner result ->
TestDefM outers inner result
beforeAll_ :: IO ()
-> TestDefM outers inner result -> TestDefM outers inner result
beforeAll_ IO ()
action = (IO () -> IO ())
-> TestDefM outers inner result -> TestDefM outers inner result
forall (outers :: [*]) inner result.
(IO () -> IO ())
-> TestDefM outers inner result -> TestDefM outers inner result
aroundAll_ (IO ()
action IO () -> IO () -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>)
beforeAllWith ::
(previousOuter -> IO newOuter) ->
TestDefM (newOuter ': previousOuter ': otherOuters) inner result ->
TestDefM (previousOuter ': otherOuters) inner result
beforeAllWith :: (previousOuter -> IO newOuter)
-> TestDefM (newOuter : previousOuter : otherOuters) inner result
-> TestDefM (previousOuter : otherOuters) inner result
beforeAllWith previousOuter -> IO newOuter
action = ((newOuter -> IO ()) -> previousOuter -> IO ())
-> TestDefM (newOuter : previousOuter : otherOuters) inner result
-> TestDefM (previousOuter : otherOuters) inner result
forall newOuter oldOuter (otherOuters :: [*]) inner result.
((newOuter -> IO ()) -> oldOuter -> IO ())
-> TestDefM (newOuter : oldOuter : otherOuters) inner result
-> TestDefM (oldOuter : otherOuters) inner result
aroundAllWith (((newOuter -> IO ()) -> previousOuter -> IO ())
-> TestDefM (newOuter : previousOuter : otherOuters) inner result
-> TestDefM (previousOuter : otherOuters) inner result)
-> ((newOuter -> IO ()) -> previousOuter -> IO ())
-> TestDefM (newOuter : previousOuter : otherOuters) inner result
-> TestDefM (previousOuter : otherOuters) inner result
forall a b. (a -> b) -> a -> b
$ \newOuter -> IO ()
func previousOuter
b -> do
newOuter
a <- previousOuter -> IO newOuter
action previousOuter
b
newOuter -> IO ()
func newOuter
a
afterAll ::
(outer -> IO ()) ->
TestDefM (outer ': otherOuters) inner result ->
TestDefM (outer ': otherOuters) inner result
afterAll :: (outer -> IO ())
-> TestDefM (outer : otherOuters) inner result
-> TestDefM (outer : otherOuters) inner result
afterAll outer -> IO ()
func = (HList (outer : otherOuters) -> IO ())
-> TestDefM (outer : otherOuters) inner result
-> TestDefM (outer : otherOuters) inner result
forall (outers :: [*]) inner result.
(HList outers -> IO ())
-> TestDefM outers inner result -> TestDefM outers inner result
afterAll' ((HList (outer : otherOuters) -> IO ())
-> TestDefM (outer : otherOuters) inner result
-> TestDefM (outer : otherOuters) inner result)
-> (HList (outer : otherOuters) -> IO ())
-> TestDefM (outer : otherOuters) inner result
-> TestDefM (outer : otherOuters) inner result
forall a b. (a -> b) -> a -> b
$ \(HCons e
a HList l
_) -> outer -> IO ()
func outer
e
a
afterAll' ::
(HList outers -> IO ()) ->
TestDefM outers inner result ->
TestDefM outers inner result
afterAll' :: (HList outers -> IO ())
-> TestDefM outers inner result -> TestDefM outers inner result
afterAll' HList outers -> IO ()
func = (TestForest outers inner -> TestTree outers inner)
-> TestDefM outers inner result -> TestDefM outers inner result
forall (outers1 :: [*]) inner1 (outers2 :: [*]) inner2 result.
(TestForest outers1 inner1 -> TestTree outers2 inner2)
-> TestDefM outers1 inner1 result -> TestDefM outers2 inner2 result
wrapRWST ((TestForest outers inner -> TestTree outers inner)
-> TestDefM outers inner result -> TestDefM outers inner result)
-> (TestForest outers inner -> TestTree outers inner)
-> TestDefM outers inner result
-> TestDefM outers inner result
forall a b. (a -> b) -> a -> b
$ \TestForest outers inner
forest -> (HList outers -> IO ())
-> TestForest outers inner -> TestTree outers inner
forall (outers :: [*]) inner extra.
(HList outers -> IO ())
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefAfterAllNode HList outers -> IO ()
func TestForest outers inner
forest
afterAll_ ::
IO () ->
TestDefM outers inner result ->
TestDefM outers inner result
afterAll_ :: IO ()
-> TestDefM outers inner result -> TestDefM outers inner result
afterAll_ IO ()
action = (HList outers -> IO ())
-> TestDefM outers inner result -> TestDefM outers inner result
forall (outers :: [*]) inner result.
(HList outers -> IO ())
-> TestDefM outers inner result -> TestDefM outers inner result
afterAll' ((HList outers -> IO ())
-> TestDefM outers inner result -> TestDefM outers inner result)
-> (HList outers -> IO ())
-> TestDefM outers inner result
-> TestDefM outers inner result
forall a b. (a -> b) -> a -> b
$ \HList outers
_ -> IO ()
action
aroundAll ::
((outer -> IO ()) -> IO ()) ->
TestDefM (outer ': otherOuters) inner result ->
TestDefM otherOuters inner result
aroundAll :: ((outer -> IO ()) -> IO ())
-> TestDefM (outer : otherOuters) inner result
-> TestDefM otherOuters inner result
aroundAll (outer -> IO ()) -> IO ()
func = (TestForest (outer : otherOuters) inner
-> TestTree otherOuters inner)
-> TestDefM (outer : otherOuters) inner result
-> TestDefM otherOuters inner result
forall (outers1 :: [*]) inner1 (outers2 :: [*]) inner2 result.
(TestForest outers1 inner1 -> TestTree outers2 inner2)
-> TestDefM outers1 inner1 result -> TestDefM outers2 inner2 result
wrapRWST ((TestForest (outer : otherOuters) inner
-> TestTree otherOuters inner)
-> TestDefM (outer : otherOuters) inner result
-> TestDefM otherOuters inner result)
-> (TestForest (outer : otherOuters) inner
-> TestTree otherOuters inner)
-> TestDefM (outer : otherOuters) inner result
-> TestDefM otherOuters inner result
forall a b. (a -> b) -> a -> b
$ \TestForest (outer : otherOuters) inner
forest -> ((outer -> IO ()) -> IO ())
-> TestForest (outer : otherOuters) inner
-> TestTree otherOuters inner
forall outer (otherOuters :: [*]) inner extra.
((outer -> IO ()) -> IO ())
-> SpecDefForest (outer : otherOuters) inner extra
-> SpecDefTree otherOuters inner extra
DefAroundAllNode (outer -> IO ()) -> IO ()
func TestForest (outer : otherOuters) inner
forest
aroundAll_ ::
(IO () -> IO ()) ->
TestDefM outers inner result ->
TestDefM outers inner result
aroundAll_ :: (IO () -> IO ())
-> TestDefM outers inner result -> TestDefM outers inner result
aroundAll_ IO () -> IO ()
func = (TestForest outers inner -> TestTree outers inner)
-> TestDefM outers inner result -> TestDefM outers inner result
forall (outers1 :: [*]) inner1 (outers2 :: [*]) inner2 result.
(TestForest outers1 inner1 -> TestTree outers2 inner2)
-> TestDefM outers1 inner1 result -> TestDefM outers2 inner2 result
wrapRWST ((TestForest outers inner -> TestTree outers inner)
-> TestDefM outers inner result -> TestDefM outers inner result)
-> (TestForest outers inner -> TestTree outers inner)
-> TestDefM outers inner result
-> TestDefM outers inner result
forall a b. (a -> b) -> a -> b
$ \TestForest outers inner
forest -> (IO () -> IO ())
-> TestForest outers inner -> TestTree outers inner
forall (outers :: [*]) inner extra.
(IO () -> IO ())
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefWrapNode IO () -> IO ()
func TestForest outers inner
forest
aroundAllWith ::
forall newOuter oldOuter otherOuters inner result.
((newOuter -> IO ()) -> (oldOuter -> IO ())) ->
TestDefM (newOuter ': oldOuter ': otherOuters) inner result ->
TestDefM (oldOuter ': otherOuters) inner result
aroundAllWith :: ((newOuter -> IO ()) -> oldOuter -> IO ())
-> TestDefM (newOuter : oldOuter : otherOuters) inner result
-> TestDefM (oldOuter : otherOuters) inner result
aroundAllWith (newOuter -> IO ()) -> oldOuter -> IO ()
func = (TestForest (newOuter : oldOuter : otherOuters) inner
-> TestTree (oldOuter : otherOuters) inner)
-> TestDefM (newOuter : oldOuter : otherOuters) inner result
-> TestDefM (oldOuter : otherOuters) inner result
forall (outers1 :: [*]) inner1 (outers2 :: [*]) inner2 result.
(TestForest outers1 inner1 -> TestTree outers2 inner2)
-> TestDefM outers1 inner1 result -> TestDefM outers2 inner2 result
wrapRWST ((TestForest (newOuter : oldOuter : otherOuters) inner
-> TestTree (oldOuter : otherOuters) inner)
-> TestDefM (newOuter : oldOuter : otherOuters) inner result
-> TestDefM (oldOuter : otherOuters) inner result)
-> (TestForest (newOuter : oldOuter : otherOuters) inner
-> TestTree (oldOuter : otherOuters) inner)
-> TestDefM (newOuter : oldOuter : otherOuters) inner result
-> TestDefM (oldOuter : otherOuters) inner result
forall a b. (a -> b) -> a -> b
$ \TestForest (newOuter : oldOuter : otherOuters) inner
forest -> ((newOuter -> IO ()) -> oldOuter -> IO ())
-> TestForest (newOuter : oldOuter : otherOuters) inner
-> TestTree (oldOuter : otherOuters) inner
forall newOuter oldOuter (otherOuters :: [*]) inner extra.
((newOuter -> IO ()) -> oldOuter -> IO ())
-> SpecDefForest (newOuter : oldOuter : otherOuters) inner extra
-> SpecDefTree (oldOuter : otherOuters) inner extra
DefAroundAllWithNode (newOuter -> IO ()) -> oldOuter -> IO ()
func TestForest (newOuter : oldOuter : otherOuters) inner
forest
wrapRWST ::
(TestForest outers1 inner1 -> TestTree outers2 inner2) ->
TestDefM outers1 inner1 result ->
TestDefM outers2 inner2 result
wrapRWST :: (TestForest outers1 inner1 -> TestTree outers2 inner2)
-> TestDefM outers1 inner1 result -> TestDefM outers2 inner2 result
wrapRWST TestForest outers1 inner1 -> TestTree outers2 inner2
func (TestDefM RWST TestRunSettings (TestForest outers1 inner1) () IO result
rwst) = RWST TestRunSettings (TestForest outers2 inner2) () IO result
-> TestDefM outers2 inner2 result
forall (outers :: [*]) inner result.
RWST TestRunSettings (TestForest outers inner) () IO result
-> TestDefM outers inner result
TestDefM (RWST TestRunSettings (TestForest outers2 inner2) () IO result
-> TestDefM outers2 inner2 result)
-> RWST TestRunSettings (TestForest outers2 inner2) () IO result
-> TestDefM outers2 inner2 result
forall a b. (a -> b) -> a -> b
$
((IO (result, (), TestForest outers1 inner1)
-> IO (result, (), TestForest outers2 inner2))
-> RWST TestRunSettings (TestForest outers1 inner1) () IO result
-> RWST TestRunSettings (TestForest outers2 inner2) () IO result)
-> RWST TestRunSettings (TestForest outers1 inner1) () IO result
-> (IO (result, (), TestForest outers1 inner1)
-> IO (result, (), TestForest outers2 inner2))
-> RWST TestRunSettings (TestForest outers2 inner2) () IO result
forall a b c. (a -> b -> c) -> b -> a -> c
flip (IO (result, (), TestForest outers1 inner1)
-> IO (result, (), TestForest outers2 inner2))
-> RWST TestRunSettings (TestForest outers1 inner1) () IO result
-> RWST TestRunSettings (TestForest outers2 inner2) () IO result
forall (m :: * -> *) a s w (n :: * -> *) b w' r.
(m (a, s, w) -> n (b, s, w')) -> RWST r w s m a -> RWST r w' s n b
mapRWST RWST TestRunSettings (TestForest outers1 inner1) () IO result
rwst ((IO (result, (), TestForest outers1 inner1)
-> IO (result, (), TestForest outers2 inner2))
-> RWST TestRunSettings (TestForest outers2 inner2) () IO result)
-> (IO (result, (), TestForest outers1 inner1)
-> IO (result, (), TestForest outers2 inner2))
-> RWST TestRunSettings (TestForest outers2 inner2) () IO result
forall a b. (a -> b) -> a -> b
$ \IO (result, (), TestForest outers1 inner1)
inner -> do
(result
res, ()
s, TestForest outers1 inner1
forest) <- IO (result, (), TestForest outers1 inner1)
inner
let forest' :: TestForest outers2 inner2
forest' = [TestForest outers1 inner1 -> TestTree outers2 inner2
func TestForest outers1 inner1
forest]
(result, (), TestForest outers2 inner2)
-> IO (result, (), TestForest outers2 inner2)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (result
res, ()
s, TestForest outers2 inner2
forest')