{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE IncoherentInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}
module Test.Syd.Def.Specify
(
describe,
it,
itWithOuter,
itWithBoth,
itWithAll,
specify,
specifyWithOuter,
specifyWithBoth,
specifyWithAll,
prop,
xdescribe,
xit,
xitWithOuter,
xitWithBoth,
xitWithAll,
xspecify,
xspecifyWithOuter,
xspecifyWithBoth,
xspecifyWithAll,
pending,
pendingWith,
)
where
import Control.Monad.RWS.Strict
import qualified Data.Text as T
import GHC.Stack
import Test.QuickCheck
import Test.QuickCheck.IO ()
import Test.Syd.Def.TestDefM
import Test.Syd.HList
import Test.Syd.Run
import Test.Syd.SpecDef
describe ::
String ->
TestDefM outers inner () ->
TestDefM outers inner ()
describe :: forall (outers :: [*]) inner.
String -> TestDefM outers inner () -> TestDefM outers inner ()
describe String
s =
let t :: Text
t = String -> Text
T.pack String
s
in (TestDefEnv -> TestDefEnv)
-> TestDefM outers inner () -> TestDefM outers inner ()
forall a.
(TestDefEnv -> TestDefEnv)
-> TestDefM outers inner a -> TestDefM outers inner a
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
local (\TestDefEnv
tde -> TestDefEnv
tde {testDefEnvDescriptionPath = t : testDefEnvDescriptionPath tde})
(TestDefM outers inner () -> TestDefM outers inner ())
-> (TestDefM outers inner () -> TestDefM outers inner ())
-> TestDefM outers inner ()
-> TestDefM outers inner ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([SpecDefTree outers inner ()] -> [SpecDefTree outers inner ()])
-> TestDefM outers inner () -> TestDefM outers inner ()
forall w (m :: * -> *) a. MonadWriter w m => (w -> w) -> m a -> m a
censor ((SpecDefTree outers inner ()
-> [SpecDefTree outers inner ()] -> [SpecDefTree outers inner ()]
forall a. a -> [a] -> [a]
: []) (SpecDefTree outers inner () -> [SpecDefTree outers inner ()])
-> ([SpecDefTree outers inner ()] -> SpecDefTree outers inner ())
-> [SpecDefTree outers inner ()]
-> [SpecDefTree outers inner ()]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text
-> [SpecDefTree outers inner ()] -> SpecDefTree outers inner ()
forall (outers :: [*]) inner extra.
Text
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefDescribeNode Text
t)
xdescribe :: String -> TestDefM outers inner () -> TestDefM outers inner ()
xdescribe :: forall (outers :: [*]) inner.
String -> TestDefM outers inner () -> TestDefM outers inner ()
xdescribe String
s = String -> TestDefM outers inner () -> TestDefM outers inner ()
forall (outers :: [*]) inner.
String -> TestDefM outers inner () -> TestDefM outers inner ()
describe String
s (TestDefM outers inner () -> TestDefM outers inner ())
-> (TestDefM outers inner () -> TestDefM outers inner ())
-> TestDefM outers inner ()
-> TestDefM outers inner ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SpecDefForest outers inner () -> SpecDefForest outers inner ())
-> TestDefM outers inner () -> TestDefM outers inner ()
forall w (m :: * -> *) a. MonadWriter w m => (w -> w) -> m a -> m a
censor (Maybe Text
-> SpecDefForest outers inner () -> SpecDefForest outers inner ()
forall (outers :: [*]) inner result.
Maybe Text
-> SpecDefForest outers inner result
-> SpecDefForest outers inner result
markSpecForestAsPending Maybe Text
forall a. Maybe a
Nothing)
it ::
forall outers inner test.
(HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) =>
String ->
test ->
TestDefM outers inner ()
it :: forall (outers :: [*]) inner test.
(HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
it String
s test
t = (HasCallStack => TestDefM outers inner ())
-> TestDefM outers inner ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => TestDefM outers inner ())
-> TestDefM outers inner ())
-> (HasCallStack => TestDefM outers inner ())
-> TestDefM outers inner ()
forall a b. (a -> b) -> a -> b
$ do
TestRunSettings
sets <- (TestDefEnv -> TestRunSettings)
-> TestDefM outers inner TestRunSettings
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks TestDefEnv -> TestRunSettings
testDefEnvTestRunSettings
let testDef :: TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
testDef =
TDef
{ testDefVal :: ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult
testDefVal = \ProgressReporter
progressReporter (HList outers -> inner -> IO ()) -> IO ()
supplyArgs ->
test
-> TestRunSettings
-> ProgressReporter
-> ((Arg1 test -> Arg2 test -> IO ()) -> IO ())
-> IO TestRunResult
forall e.
IsTest e =>
e
-> TestRunSettings
-> ProgressReporter
-> ((Arg1 e -> Arg2 e -> IO ()) -> IO ())
-> IO TestRunResult
runTest
test
t
TestRunSettings
sets
ProgressReporter
progressReporter
( \Arg1 test -> Arg2 test -> IO ()
func -> (HList outers -> inner -> IO ()) -> IO ()
supplyArgs (\HList outers
_ inner
arg2 -> Arg1 test -> Arg2 test -> IO ()
func () inner
Arg2 test
arg2)
),
testDefCallStack :: CallStack
testDefCallStack = CallStack
HasCallStack => CallStack
callStack
}
[SpecDefTree outers inner ()] -> TestDefM outers inner ()
forall w (m :: * -> *). MonadWriter w m => w -> m ()
tell [Text
-> TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
-> ()
-> SpecDefTree outers inner ()
forall (outers :: [*]) inner extra.
Text
-> TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
-> extra
-> SpecDefTree outers inner extra
DefSpecifyNode (String -> Text
T.pack String
s) TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
testDef ()]
xit ::
forall outers inner test.
(HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) =>
String ->
test ->
TestDefM outers inner ()
xit :: forall (outers :: [*]) inner test.
(HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
xit String
s test
_ = String -> TestDefM outers inner ()
forall (outers :: [*]) inner. String -> TestDefM outers inner ()
pending String
s
specify ::
forall outers inner test.
(HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) =>
String ->
test ->
TestDefM outers inner ()
specify :: forall (outers :: [*]) inner test.
(HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
specify String
s test
t = (HasCallStack => TestDefM outers inner ())
-> TestDefM outers inner ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => TestDefM outers inner ())
-> TestDefM outers inner ())
-> (HasCallStack => TestDefM outers inner ())
-> TestDefM outers inner ()
forall a b. (a -> b) -> a -> b
$ String -> test -> TestDefM outers inner ()
forall (outers :: [*]) inner test.
(HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
it String
s test
t
xspecify ::
forall outers inner test.
(HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) =>
String ->
test ->
TestDefM outers inner ()
xspecify :: forall (outers :: [*]) inner test.
(HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
xspecify = String -> test -> TestDefM outers inner ()
forall (outers :: [*]) inner test.
(HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
xit
itWithOuter ::
(HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) =>
String ->
test ->
TestDefM (outer ': otherOuters) inner ()
itWithOuter :: forall test inner outer (otherOuters :: [*]).
(HasCallStack, IsTest test, Arg1 test ~ inner,
Arg2 test ~ outer) =>
String -> test -> TestDefM (outer : otherOuters) inner ()
itWithOuter String
s test
t = (HasCallStack => TestDefM (outer : otherOuters) inner ())
-> TestDefM (outer : otherOuters) inner ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => TestDefM (outer : otherOuters) inner ())
-> TestDefM (outer : otherOuters) inner ())
-> (HasCallStack => TestDefM (outer : otherOuters) inner ())
-> TestDefM (outer : otherOuters) inner ()
forall a b. (a -> b) -> a -> b
$ do
TestRunSettings
sets <- (TestDefEnv -> TestRunSettings)
-> TestDefM (outer : otherOuters) inner TestRunSettings
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks TestDefEnv -> TestRunSettings
testDefEnvTestRunSettings
let testDef :: TDef
(ProgressReporter
-> ((HList (outer : otherOuters) -> inner -> IO ()) -> IO ())
-> IO TestRunResult)
testDef =
TDef
{ testDefVal :: ProgressReporter
-> ((HList (outer : otherOuters) -> inner -> IO ()) -> IO ())
-> IO TestRunResult
testDefVal = \ProgressReporter
progressReporter (HList (outer : otherOuters) -> inner -> IO ()) -> IO ()
supplyArgs ->
test
-> TestRunSettings
-> ProgressReporter
-> ((Arg1 test -> Arg2 test -> IO ()) -> IO ())
-> IO TestRunResult
forall e.
IsTest e =>
e
-> TestRunSettings
-> ProgressReporter
-> ((Arg1 e -> Arg2 e -> IO ()) -> IO ())
-> IO TestRunResult
runTest
test
t
TestRunSettings
sets
ProgressReporter
progressReporter
(\Arg1 test -> Arg2 test -> IO ()
func -> (HList (outer : otherOuters) -> inner -> IO ()) -> IO ()
supplyArgs ((HList (outer : otherOuters) -> inner -> IO ()) -> IO ())
-> (HList (outer : otherOuters) -> inner -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \(HCons e
outerArgs HList l
_) inner
innerArg -> Arg1 test -> Arg2 test -> IO ()
func inner
Arg1 test
innerArg e
Arg2 test
outerArgs),
testDefCallStack :: CallStack
testDefCallStack = CallStack
HasCallStack => CallStack
callStack
}
[SpecDefTree (outer : otherOuters) inner ()]
-> TestDefM (outer : otherOuters) inner ()
forall w (m :: * -> *). MonadWriter w m => w -> m ()
tell [Text
-> TDef
(ProgressReporter
-> ((HList (outer : otherOuters) -> inner -> IO ()) -> IO ())
-> IO TestRunResult)
-> ()
-> SpecDefTree (outer : otherOuters) inner ()
forall (outers :: [*]) inner extra.
Text
-> TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
-> extra
-> SpecDefTree outers inner extra
DefSpecifyNode (String -> Text
T.pack String
s) TDef
(ProgressReporter
-> ((HList (outer : otherOuters) -> inner -> IO ()) -> IO ())
-> IO TestRunResult)
testDef ()]
xitWithOuter ::
(HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) =>
String ->
test ->
TestDefM (outer ': otherOuters) inner ()
xitWithOuter :: forall test inner outer (otherOuters :: [*]).
(HasCallStack, IsTest test, Arg1 test ~ inner,
Arg2 test ~ outer) =>
String -> test -> TestDefM (outer : otherOuters) inner ()
xitWithOuter String
s test
_ = String -> TestDefM (outer : otherOuters) inner ()
forall (outers :: [*]) inner. String -> TestDefM outers inner ()
pending String
s
specifyWithOuter ::
(HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) =>
String ->
test ->
TestDefM (outer ': otherOuters) inner ()
specifyWithOuter :: forall test inner outer (otherOuters :: [*]).
(HasCallStack, IsTest test, Arg1 test ~ inner,
Arg2 test ~ outer) =>
String -> test -> TestDefM (outer : otherOuters) inner ()
specifyWithOuter String
s test
t = (HasCallStack => TestDefM (outer : otherOuters) inner ())
-> TestDefM (outer : otherOuters) inner ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => TestDefM (outer : otherOuters) inner ())
-> TestDefM (outer : otherOuters) inner ())
-> (HasCallStack => TestDefM (outer : otherOuters) inner ())
-> TestDefM (outer : otherOuters) inner ()
forall a b. (a -> b) -> a -> b
$ String -> test -> TestDefM (outer : otherOuters) inner ()
forall test inner outer (otherOuters :: [*]).
(HasCallStack, IsTest test, Arg1 test ~ inner,
Arg2 test ~ outer) =>
String -> test -> TestDefM (outer : otherOuters) inner ()
itWithOuter String
s test
t
xspecifyWithOuter ::
(HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) =>
String ->
test ->
TestDefM (outer ': otherOuters) inner ()
xspecifyWithOuter :: forall test inner outer (otherOuters :: [*]).
(HasCallStack, IsTest test, Arg1 test ~ inner,
Arg2 test ~ outer) =>
String -> test -> TestDefM (outer : otherOuters) inner ()
xspecifyWithOuter = String -> test -> TestDefM (outer : otherOuters) inner ()
forall test inner outer (otherOuters :: [*]).
(HasCallStack, IsTest test, Arg1 test ~ inner,
Arg2 test ~ outer) =>
String -> test -> TestDefM (outer : otherOuters) inner ()
xitWithOuter
itWithBoth ::
( HasCallStack,
IsTest test,
Arg1 test ~ outer,
Arg2 test ~ inner
) =>
String ->
test ->
TestDefM (outer ': otherOuters) inner ()
itWithBoth :: forall test outer inner (otherOuters :: [*]).
(HasCallStack, IsTest test, Arg1 test ~ outer,
Arg2 test ~ inner) =>
String -> test -> TestDefM (outer : otherOuters) inner ()
itWithBoth String
s test
t = (HasCallStack => TestDefM (outer : otherOuters) inner ())
-> TestDefM (outer : otherOuters) inner ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => TestDefM (outer : otherOuters) inner ())
-> TestDefM (outer : otherOuters) inner ())
-> (HasCallStack => TestDefM (outer : otherOuters) inner ())
-> TestDefM (outer : otherOuters) inner ()
forall a b. (a -> b) -> a -> b
$ do
TestRunSettings
sets <- (TestDefEnv -> TestRunSettings)
-> TestDefM (outer : otherOuters) inner TestRunSettings
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks TestDefEnv -> TestRunSettings
testDefEnvTestRunSettings
let testDef :: TDef
(ProgressReporter
-> ((HList (outer : otherOuters) -> inner -> IO ()) -> IO ())
-> IO TestRunResult)
testDef =
TDef
{ testDefVal :: ProgressReporter
-> ((HList (outer : otherOuters) -> inner -> IO ()) -> IO ())
-> IO TestRunResult
testDefVal = \ProgressReporter
progressReporter (HList (outer : otherOuters) -> inner -> IO ()) -> IO ()
supplyArgs ->
test
-> TestRunSettings
-> ProgressReporter
-> ((Arg1 test -> Arg2 test -> IO ()) -> IO ())
-> IO TestRunResult
forall e.
IsTest e =>
e
-> TestRunSettings
-> ProgressReporter
-> ((Arg1 e -> Arg2 e -> IO ()) -> IO ())
-> IO TestRunResult
runTest
test
t
TestRunSettings
sets
ProgressReporter
progressReporter
(\Arg1 test -> Arg2 test -> IO ()
func -> (HList (outer : otherOuters) -> inner -> IO ()) -> IO ()
supplyArgs ((HList (outer : otherOuters) -> inner -> IO ()) -> IO ())
-> (HList (outer : otherOuters) -> inner -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \(HCons e
outerArgs HList l
_) inner
innerArg -> Arg1 test -> Arg2 test -> IO ()
func e
Arg1 test
outerArgs inner
Arg2 test
innerArg),
testDefCallStack :: CallStack
testDefCallStack = CallStack
HasCallStack => CallStack
callStack
}
[SpecDefTree (outer : otherOuters) inner ()]
-> TestDefM (outer : otherOuters) inner ()
forall w (m :: * -> *). MonadWriter w m => w -> m ()
tell [Text
-> TDef
(ProgressReporter
-> ((HList (outer : otherOuters) -> inner -> IO ()) -> IO ())
-> IO TestRunResult)
-> ()
-> SpecDefTree (outer : otherOuters) inner ()
forall (outers :: [*]) inner extra.
Text
-> TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
-> extra
-> SpecDefTree outers inner extra
DefSpecifyNode (String -> Text
T.pack String
s) TDef
(ProgressReporter
-> ((HList (outer : otherOuters) -> inner -> IO ()) -> IO ())
-> IO TestRunResult)
testDef ()]
xitWithBoth ::
( HasCallStack,
IsTest test,
Arg1 test ~ outer,
Arg2 test ~ inner
) =>
String ->
test ->
TestDefM (outer ': otherOuters) inner ()
xitWithBoth :: forall test outer inner (otherOuters :: [*]).
(HasCallStack, IsTest test, Arg1 test ~ outer,
Arg2 test ~ inner) =>
String -> test -> TestDefM (outer : otherOuters) inner ()
xitWithBoth String
s test
_ = String -> TestDefM (outer : otherOuters) inner ()
forall (outers :: [*]) inner. String -> TestDefM outers inner ()
pending String
s
specifyWithBoth ::
( HasCallStack,
IsTest test,
Arg1 test ~ outer,
Arg2 test ~ inner
) =>
String ->
test ->
TestDefM (outer ': otherOuters) inner ()
specifyWithBoth :: forall test outer inner (otherOuters :: [*]).
(HasCallStack, IsTest test, Arg1 test ~ outer,
Arg2 test ~ inner) =>
String -> test -> TestDefM (outer : otherOuters) inner ()
specifyWithBoth String
s test
t = (HasCallStack => TestDefM (outer : otherOuters) inner ())
-> TestDefM (outer : otherOuters) inner ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => TestDefM (outer : otherOuters) inner ())
-> TestDefM (outer : otherOuters) inner ())
-> (HasCallStack => TestDefM (outer : otherOuters) inner ())
-> TestDefM (outer : otherOuters) inner ()
forall a b. (a -> b) -> a -> b
$ String -> test -> TestDefM (outer : otherOuters) inner ()
forall test outer inner (otherOuters :: [*]).
(HasCallStack, IsTest test, Arg1 test ~ outer,
Arg2 test ~ inner) =>
String -> test -> TestDefM (outer : otherOuters) inner ()
itWithBoth String
s test
t
xspecifyWithBoth ::
( HasCallStack,
IsTest test,
Arg1 test ~ outer,
Arg2 test ~ inner
) =>
String ->
test ->
TestDefM (outer ': otherOuters) inner ()
xspecifyWithBoth :: forall test outer inner (otherOuters :: [*]).
(HasCallStack, IsTest test, Arg1 test ~ outer,
Arg2 test ~ inner) =>
String -> test -> TestDefM (outer : otherOuters) inner ()
xspecifyWithBoth = String -> test -> TestDefM (outer : otherOuters) inner ()
forall test outer inner (otherOuters :: [*]).
(HasCallStack, IsTest test, Arg1 test ~ outer,
Arg2 test ~ inner) =>
String -> test -> TestDefM (outer : otherOuters) inner ()
xitWithBoth
itWithAll ::
( HasCallStack,
IsTest test,
Arg1 test ~ HList outers,
Arg2 test ~ inner
) =>
String ->
test ->
TestDefM outers inner ()
itWithAll :: forall test (outers :: [*]) inner.
(HasCallStack, IsTest test, Arg1 test ~ HList outers,
Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
itWithAll String
s test
t = (HasCallStack => TestDefM outers inner ())
-> TestDefM outers inner ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => TestDefM outers inner ())
-> TestDefM outers inner ())
-> (HasCallStack => TestDefM outers inner ())
-> TestDefM outers inner ()
forall a b. (a -> b) -> a -> b
$ do
TestRunSettings
sets <- (TestDefEnv -> TestRunSettings)
-> TestDefM outers inner TestRunSettings
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks TestDefEnv -> TestRunSettings
testDefEnvTestRunSettings
let testDef :: TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
testDef =
TDef
{ testDefVal :: ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult
testDefVal = \ProgressReporter
progressReporter (HList outers -> inner -> IO ()) -> IO ()
supplyArgs ->
test
-> TestRunSettings
-> ProgressReporter
-> ((Arg1 test -> Arg2 test -> IO ()) -> IO ())
-> IO TestRunResult
forall e.
IsTest e =>
e
-> TestRunSettings
-> ProgressReporter
-> ((Arg1 e -> Arg2 e -> IO ()) -> IO ())
-> IO TestRunResult
runTest
test
t
TestRunSettings
sets
ProgressReporter
progressReporter
(\Arg1 test -> Arg2 test -> IO ()
func -> (HList outers -> inner -> IO ()) -> IO ()
supplyArgs HList outers -> inner -> IO ()
Arg1 test -> Arg2 test -> IO ()
func),
testDefCallStack :: CallStack
testDefCallStack = CallStack
HasCallStack => CallStack
callStack
}
[SpecDefTree outers inner ()] -> TestDefM outers inner ()
forall w (m :: * -> *). MonadWriter w m => w -> m ()
tell [Text
-> TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
-> ()
-> SpecDefTree outers inner ()
forall (outers :: [*]) inner extra.
Text
-> TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
-> extra
-> SpecDefTree outers inner extra
DefSpecifyNode (String -> Text
T.pack String
s) TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
testDef ()]
xitWithAll ::
( HasCallStack,
IsTest test,
Arg1 test ~ HList outers,
Arg2 test ~ inner
) =>
String ->
test ->
TestDefM outers inner ()
xitWithAll :: forall test (outers :: [*]) inner.
(HasCallStack, IsTest test, Arg1 test ~ HList outers,
Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
xitWithAll String
s test
_ = String -> TestDefM outers inner ()
forall (outers :: [*]) inner. String -> TestDefM outers inner ()
pending String
s
specifyWithAll ::
( HasCallStack,
IsTest test,
Arg1 test ~ HList outers,
Arg2 test ~ inner
) =>
String ->
test ->
TestDefM outers inner ()
specifyWithAll :: forall test (outers :: [*]) inner.
(HasCallStack, IsTest test, Arg1 test ~ HList outers,
Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
specifyWithAll String
s test
t = (HasCallStack => TestDefM outers inner ())
-> TestDefM outers inner ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => TestDefM outers inner ())
-> TestDefM outers inner ())
-> (HasCallStack => TestDefM outers inner ())
-> TestDefM outers inner ()
forall a b. (a -> b) -> a -> b
$ String -> test -> TestDefM outers inner ()
forall test (outers :: [*]) inner.
(HasCallStack, IsTest test, Arg1 test ~ HList outers,
Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
itWithAll String
s test
t
xspecifyWithAll ::
( HasCallStack,
IsTest test,
Arg1 test ~ HList outers,
Arg2 test ~ inner
) =>
String ->
test ->
TestDefM outers inner ()
xspecifyWithAll :: forall test (outers :: [*]) inner.
(HasCallStack, IsTest test, Arg1 test ~ HList outers,
Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
xspecifyWithAll = String -> test -> TestDefM outers inner ()
forall test (outers :: [*]) inner.
(HasCallStack, IsTest test, Arg1 test ~ HList outers,
Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
xitWithAll
prop :: (Testable prop) => String -> prop -> Spec
prop :: forall prop. Testable prop => String -> prop -> Spec
prop String
s prop
p = (HasCallStack => Spec) -> Spec
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => Spec) -> Spec) -> (HasCallStack => Spec) -> Spec
forall a b. (a -> b) -> a -> b
$ String -> Property -> Spec
forall (outers :: [*]) inner test.
(HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) =>
String -> test -> TestDefM outers inner ()
it String
s (Property -> Spec) -> Property -> Spec
forall a b. (a -> b) -> a -> b
$ prop -> Property
forall prop. Testable prop => prop -> Property
property prop
p
pending :: String -> TestDefM outers inner ()
pending :: forall (outers :: [*]) inner. String -> TestDefM outers inner ()
pending String
s = [SpecDefTree outers inner ()] -> TestDefM outers inner ()
forall w (m :: * -> *). MonadWriter w m => w -> m ()
tell [Text -> Maybe Text -> SpecDefTree outers inner ()
forall (outers :: [*]) inner extra.
Text -> Maybe Text -> SpecDefTree outers inner extra
DefPendingNode (String -> Text
T.pack String
s) Maybe Text
forall a. Maybe a
Nothing]
pendingWith :: String -> String -> TestDefM outers inner ()
pendingWith :: forall (outers :: [*]) inner.
String -> String -> TestDefM outers inner ()
pendingWith String
description String
reasonWhyItsPending = [SpecDefTree outers inner ()] -> TestDefM outers inner ()
forall w (m :: * -> *). MonadWriter w m => w -> m ()
tell [Text -> Maybe Text -> SpecDefTree outers inner ()
forall (outers :: [*]) inner extra.
Text -> Maybe Text -> SpecDefTree outers inner extra
DefPendingNode (String -> Text
T.pack String
description) (Text -> Maybe Text
forall a. a -> Maybe a
Just (String -> Text
T.pack String
reasonWhyItsPending))]