module Signet.Unstable.Extra.Tasty where

import qualified Control.Monad.Trans.Writer as Writer
import qualified Test.Tasty as Tasty
import qualified Test.Tasty.HUnit as Tasty

type Spec = Writer.Writer [Tasty.TestTree] ()

describe :: Tasty.TestName -> Spec -> Spec
describe :: TestName -> Spec -> Spec
describe TestName
testName = [TestTree] -> Spec
forall (m :: * -> *) w. Monad m => w -> WriterT w m ()
Writer.tell ([TestTree] -> Spec) -> (Spec -> [TestTree]) -> Spec -> Spec
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TestTree -> [TestTree]
forall a. a -> [a]
forall (f :: * -> *) a. Applicative f => a -> f a
pure (TestTree -> [TestTree])
-> (Spec -> TestTree) -> Spec -> [TestTree]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TestName -> [TestTree] -> TestTree
Tasty.testGroup TestName
testName ([TestTree] -> TestTree)
-> (Spec -> [TestTree]) -> Spec -> TestTree
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Spec -> [TestTree]
forall w a. Writer w a -> w
Writer.execWriter

it :: Tasty.TestName -> Tasty.Assertion -> Spec
it :: TestName -> Assertion -> Spec
it TestName
testName = [TestTree] -> Spec
forall (m :: * -> *) w. Monad m => w -> WriterT w m ()
Writer.tell ([TestTree] -> Spec)
-> (Assertion -> [TestTree]) -> Assertion -> Spec
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TestTree -> [TestTree]
forall a. a -> [a]
forall (f :: * -> *) a. Applicative f => a -> f a
pure (TestTree -> [TestTree])
-> (Assertion -> TestTree) -> Assertion -> [TestTree]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TestName -> Assertion -> TestTree
Tasty.testCase TestName
testName