{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE IncoherentInstances #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Test.Syd.SpecDef where
import Control.Monad
import Control.Monad.Random
import Data.DList (DList)
import qualified Data.DList as DList
import Data.Kind
import Data.Maybe
import Data.Text (Text)
import qualified Data.Text as T
import Data.Word
import GHC.Stack
import System.Random.Shuffle
import Test.QuickCheck.IO ()
import Test.Syd.HList
import Test.Syd.OptParse
import Test.Syd.Run
import Test.Syd.SpecForest
data TDef value = TDef {forall value. TDef value -> value
testDefVal :: value, forall value. TDef value -> CallStack
testDefCallStack :: CallStack}
deriving (forall a b. a -> TDef b -> TDef a
forall a b. (a -> b) -> TDef a -> TDef b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> TDef b -> TDef a
$c<$ :: forall a b. a -> TDef b -> TDef a
fmap :: forall a b. (a -> b) -> TDef a -> TDef b
$cfmap :: forall a b. (a -> b) -> TDef a -> TDef b
Functor, forall a. Eq a => a -> TDef a -> Bool
forall a. Num a => TDef a -> a
forall a. Ord a => TDef a -> a
forall m. Monoid m => TDef m -> m
forall a. TDef a -> Bool
forall a. TDef a -> Int
forall a. TDef a -> [a]
forall a. (a -> a -> a) -> TDef a -> a
forall m a. Monoid m => (a -> m) -> TDef a -> m
forall b a. (b -> a -> b) -> b -> TDef a -> b
forall a b. (a -> b -> b) -> b -> TDef a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
product :: forall a. Num a => TDef a -> a
$cproduct :: forall a. Num a => TDef a -> a
sum :: forall a. Num a => TDef a -> a
$csum :: forall a. Num a => TDef a -> a
minimum :: forall a. Ord a => TDef a -> a
$cminimum :: forall a. Ord a => TDef a -> a
maximum :: forall a. Ord a => TDef a -> a
$cmaximum :: forall a. Ord a => TDef a -> a
elem :: forall a. Eq a => a -> TDef a -> Bool
$celem :: forall a. Eq a => a -> TDef a -> Bool
length :: forall a. TDef a -> Int
$clength :: forall a. TDef a -> Int
null :: forall a. TDef a -> Bool
$cnull :: forall a. TDef a -> Bool
toList :: forall a. TDef a -> [a]
$ctoList :: forall a. TDef a -> [a]
foldl1 :: forall a. (a -> a -> a) -> TDef a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> TDef a -> a
foldr1 :: forall a. (a -> a -> a) -> TDef a -> a
$cfoldr1 :: forall a. (a -> a -> a) -> TDef a -> a
foldl' :: forall b a. (b -> a -> b) -> b -> TDef a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> TDef a -> b
foldl :: forall b a. (b -> a -> b) -> b -> TDef a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> TDef a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> TDef a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> TDef a -> b
foldr :: forall a b. (a -> b -> b) -> b -> TDef a -> b
$cfoldr :: forall a b. (a -> b -> b) -> b -> TDef a -> b
foldMap' :: forall m a. Monoid m => (a -> m) -> TDef a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> TDef a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> TDef a -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> TDef a -> m
fold :: forall m. Monoid m => TDef m -> m
$cfold :: forall m. Monoid m => TDef m -> m
Foldable, Functor TDef
Foldable TDef
forall (t :: * -> *).
Functor t
-> Foldable t
-> (forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a. Monad m => TDef (m a) -> m (TDef a)
forall (f :: * -> *) a. Applicative f => TDef (f a) -> f (TDef a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> TDef a -> m (TDef b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> TDef a -> f (TDef b)
sequence :: forall (m :: * -> *) a. Monad m => TDef (m a) -> m (TDef a)
$csequence :: forall (m :: * -> *) a. Monad m => TDef (m a) -> m (TDef a)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> TDef a -> m (TDef b)
$cmapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> TDef a -> m (TDef b)
sequenceA :: forall (f :: * -> *) a. Applicative f => TDef (f a) -> f (TDef a)
$csequenceA :: forall (f :: * -> *) a. Applicative f => TDef (f a) -> f (TDef a)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> TDef a -> f (TDef b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> TDef a -> f (TDef b)
Traversable)
type TestForest outers inner = SpecDefForest outers inner ()
type TestTree outers inner = SpecDefTree outers inner ()
type SpecDefForest (outers :: [Type]) inner extra = [SpecDefTree outers inner extra]
data SpecDefTree (outers :: [Type]) inner extra where
DefSpecifyNode ::
Text ->
TDef (ProgressReporter -> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult) ->
extra ->
SpecDefTree outers inner extra
DefPendingNode ::
Text ->
Maybe Text ->
SpecDefTree outers inner extra
DefDescribeNode ::
Text ->
SpecDefForest outers inner extra ->
SpecDefTree outers inner extra
DefWrapNode ::
(IO () -> IO ()) ->
SpecDefForest outers inner extra ->
SpecDefTree outers inner extra
DefBeforeAllNode ::
IO outer ->
SpecDefForest (outer ': otherOuters) inner extra ->
SpecDefTree otherOuters inner extra
DefAroundAllNode ::
((outer -> IO ()) -> IO ()) ->
SpecDefForest (outer ': otherOuters) inner extra ->
SpecDefTree otherOuters inner extra
DefAroundAllWithNode ::
((newOuter -> IO ()) -> (oldOuter -> IO ())) ->
SpecDefForest (newOuter ': oldOuter ': otherOuters) inner extra ->
SpecDefTree (oldOuter ': otherOuters) inner extra
DefAfterAllNode ::
(HList outers -> IO ()) ->
SpecDefForest outers inner extra ->
SpecDefTree outers inner extra
DefParallelismNode ::
Parallelism ->
SpecDefForest outers inner extra ->
SpecDefTree outers inner extra
DefRandomisationNode ::
ExecutionOrderRandomisation ->
SpecDefForest outers inner extra ->
SpecDefTree outers inner extra
DefFlakinessNode ::
FlakinessMode ->
SpecDefForest outers inner extra ->
SpecDefTree outers inner extra
instance Functor (SpecDefTree a c) where
fmap :: forall e f. (e -> f) -> SpecDefTree a c e -> SpecDefTree a c f
fmap :: forall a b. (a -> b) -> SpecDefTree a c a -> SpecDefTree a c b
fmap e -> f
f =
let goF :: forall x y. SpecDefForest x y e -> SpecDefForest x y f
goF :: forall (x :: [*]) y. SpecDefForest x y e -> SpecDefForest x y f
goF = forall a b. (a -> b) -> [a] -> [b]
map (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap e -> f
f)
in \case
DefDescribeNode Text
t SpecDefForest a c e
sdf -> forall (outers :: [*]) inner extra.
Text
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefDescribeNode Text
t forall a b. (a -> b) -> a -> b
$ forall (x :: [*]) y. SpecDefForest x y e -> SpecDefForest x y f
goF SpecDefForest a c e
sdf
DefPendingNode Text
t Maybe Text
mr -> forall (outers :: [*]) inner extra.
Text -> Maybe Text -> SpecDefTree outers inner extra
DefPendingNode Text
t Maybe Text
mr
DefSpecifyNode Text
t TDef
(ProgressReporter
-> ((HList a -> c -> IO ()) -> IO ()) -> IO TestRunResult)
td e
e -> forall (outers :: [*]) inner extra.
Text
-> TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
-> extra
-> SpecDefTree outers inner extra
DefSpecifyNode Text
t TDef
(ProgressReporter
-> ((HList a -> c -> IO ()) -> IO ()) -> IO TestRunResult)
td (e -> f
f e
e)
DefWrapNode IO () -> IO ()
func SpecDefForest a c e
sdf -> forall (outers :: [*]) inner extra.
(IO () -> IO ())
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefWrapNode IO () -> IO ()
func forall a b. (a -> b) -> a -> b
$ forall (x :: [*]) y. SpecDefForest x y e -> SpecDefForest x y f
goF SpecDefForest a c e
sdf
DefBeforeAllNode IO outer
func SpecDefForest (outer : a) c e
sdf -> forall newOuter (otherOuters :: [*]) inner extra.
IO newOuter
-> SpecDefForest (newOuter : otherOuters) inner extra
-> SpecDefTree otherOuters inner extra
DefBeforeAllNode IO outer
func forall a b. (a -> b) -> a -> b
$ forall (x :: [*]) y. SpecDefForest x y e -> SpecDefForest x y f
goF SpecDefForest (outer : a) c e
sdf
DefAroundAllNode (outer -> IO ()) -> IO ()
func SpecDefForest (outer : a) c e
sdf -> forall newOuter (otherOuters :: [*]) inner extra.
((newOuter -> IO ()) -> IO ())
-> SpecDefForest (newOuter : otherOuters) inner extra
-> SpecDefTree otherOuters inner extra
DefAroundAllNode (outer -> IO ()) -> IO ()
func forall a b. (a -> b) -> a -> b
$ forall (x :: [*]) y. SpecDefForest x y e -> SpecDefForest x y f
goF SpecDefForest (outer : a) c e
sdf
DefAroundAllWithNode (newOuter -> IO ()) -> oldOuter -> IO ()
func SpecDefForest (newOuter : oldOuter : otherOuters) c e
sdf -> 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 forall a b. (a -> b) -> a -> b
$ forall (x :: [*]) y. SpecDefForest x y e -> SpecDefForest x y f
goF SpecDefForest (newOuter : oldOuter : otherOuters) c e
sdf
DefAfterAllNode HList a -> IO ()
func SpecDefForest a c e
sdf -> forall (outers :: [*]) inner extra.
(HList outers -> IO ())
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefAfterAllNode HList a -> IO ()
func forall a b. (a -> b) -> a -> b
$ forall (x :: [*]) y. SpecDefForest x y e -> SpecDefForest x y f
goF SpecDefForest a c e
sdf
DefParallelismNode Parallelism
p SpecDefForest a c e
sdf -> forall (outers :: [*]) inner extra.
Parallelism
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefParallelismNode Parallelism
p forall a b. (a -> b) -> a -> b
$ forall (x :: [*]) y. SpecDefForest x y e -> SpecDefForest x y f
goF SpecDefForest a c e
sdf
DefRandomisationNode ExecutionOrderRandomisation
p SpecDefForest a c e
sdf -> forall (outers :: [*]) inner extra.
ExecutionOrderRandomisation
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefRandomisationNode ExecutionOrderRandomisation
p forall a b. (a -> b) -> a -> b
$ forall (x :: [*]) y. SpecDefForest x y e -> SpecDefForest x y f
goF SpecDefForest a c e
sdf
DefFlakinessNode FlakinessMode
p SpecDefForest a c e
sdf -> forall (outers :: [*]) inner extra.
FlakinessMode
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefFlakinessNode FlakinessMode
p forall a b. (a -> b) -> a -> b
$ forall (x :: [*]) y. SpecDefForest x y e -> SpecDefForest x y f
goF SpecDefForest a c e
sdf
instance Foldable (SpecDefTree a c) where
foldMap :: forall e m. Monoid m => (e -> m) -> SpecDefTree a c e -> m
foldMap :: forall e m. Monoid m => (e -> m) -> SpecDefTree a c e -> m
foldMap e -> m
f =
let goF :: forall x y. SpecDefForest x y e -> m
goF :: forall (x :: [*]) y. SpecDefForest x y e -> m
goF = forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap e -> m
f)
in \case
DefDescribeNode Text
_ SpecDefForest a c e
sdf -> forall (x :: [*]) y. SpecDefForest x y e -> m
goF SpecDefForest a c e
sdf
DefPendingNode Text
_ Maybe Text
_ -> forall a. Monoid a => a
mempty
DefSpecifyNode Text
_ TDef
(ProgressReporter
-> ((HList a -> c -> IO ()) -> IO ()) -> IO TestRunResult)
_ e
e -> e -> m
f e
e
DefWrapNode IO () -> IO ()
_ SpecDefForest a c e
sdf -> forall (x :: [*]) y. SpecDefForest x y e -> m
goF SpecDefForest a c e
sdf
DefBeforeAllNode IO outer
_ SpecDefForest (outer : a) c e
sdf -> forall (x :: [*]) y. SpecDefForest x y e -> m
goF SpecDefForest (outer : a) c e
sdf
DefAroundAllNode (outer -> IO ()) -> IO ()
_ SpecDefForest (outer : a) c e
sdf -> forall (x :: [*]) y. SpecDefForest x y e -> m
goF SpecDefForest (outer : a) c e
sdf
DefAroundAllWithNode (newOuter -> IO ()) -> oldOuter -> IO ()
_ SpecDefForest (newOuter : oldOuter : otherOuters) c e
sdf -> forall (x :: [*]) y. SpecDefForest x y e -> m
goF SpecDefForest (newOuter : oldOuter : otherOuters) c e
sdf
DefAfterAllNode HList a -> IO ()
_ SpecDefForest a c e
sdf -> forall (x :: [*]) y. SpecDefForest x y e -> m
goF SpecDefForest a c e
sdf
DefParallelismNode Parallelism
_ SpecDefForest a c e
sdf -> forall (x :: [*]) y. SpecDefForest x y e -> m
goF SpecDefForest a c e
sdf
DefRandomisationNode ExecutionOrderRandomisation
_ SpecDefForest a c e
sdf -> forall (x :: [*]) y. SpecDefForest x y e -> m
goF SpecDefForest a c e
sdf
DefFlakinessNode FlakinessMode
_ SpecDefForest a c e
sdf -> forall (x :: [*]) y. SpecDefForest x y e -> m
goF SpecDefForest a c e
sdf
instance Traversable (SpecDefTree a c) where
traverse :: forall u w f. Applicative f => (u -> f w) -> SpecDefTree a c u -> f (SpecDefTree a c w)
traverse :: forall u w (f :: * -> *).
Applicative f =>
(u -> f w) -> SpecDefTree a c u -> f (SpecDefTree a c w)
traverse u -> f w
f =
let goF :: forall x y. SpecDefForest x y u -> f (SpecDefForest x y w)
goF :: forall (x :: [*]) y. SpecDefForest x y u -> f (SpecDefForest x y w)
goF = forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse u -> f w
f)
in \case
DefDescribeNode Text
t SpecDefForest a c u
sdf -> forall (outers :: [*]) inner extra.
Text
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefDescribeNode Text
t forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (x :: [*]) y. SpecDefForest x y u -> f (SpecDefForest x y w)
goF SpecDefForest a c u
sdf
DefPendingNode Text
t Maybe Text
mr -> forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall (outers :: [*]) inner extra.
Text -> Maybe Text -> SpecDefTree outers inner extra
DefPendingNode Text
t Maybe Text
mr
DefSpecifyNode Text
t TDef
(ProgressReporter
-> ((HList a -> c -> IO ()) -> IO ()) -> IO TestRunResult)
td u
e -> forall (outers :: [*]) inner extra.
Text
-> TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
-> extra
-> SpecDefTree outers inner extra
DefSpecifyNode Text
t TDef
(ProgressReporter
-> ((HList a -> c -> IO ()) -> IO ()) -> IO TestRunResult)
td forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> u -> f w
f u
e
DefWrapNode IO () -> IO ()
func SpecDefForest a c u
sdf -> forall (outers :: [*]) inner extra.
(IO () -> IO ())
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefWrapNode IO () -> IO ()
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (x :: [*]) y. SpecDefForest x y u -> f (SpecDefForest x y w)
goF SpecDefForest a c u
sdf
DefBeforeAllNode IO outer
func SpecDefForest (outer : a) c u
sdf -> forall newOuter (otherOuters :: [*]) inner extra.
IO newOuter
-> SpecDefForest (newOuter : otherOuters) inner extra
-> SpecDefTree otherOuters inner extra
DefBeforeAllNode IO outer
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (x :: [*]) y. SpecDefForest x y u -> f (SpecDefForest x y w)
goF SpecDefForest (outer : a) c u
sdf
DefAroundAllNode (outer -> IO ()) -> IO ()
func SpecDefForest (outer : a) c u
sdf -> forall newOuter (otherOuters :: [*]) inner extra.
((newOuter -> IO ()) -> IO ())
-> SpecDefForest (newOuter : otherOuters) inner extra
-> SpecDefTree otherOuters inner extra
DefAroundAllNode (outer -> IO ()) -> IO ()
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (x :: [*]) y. SpecDefForest x y u -> f (SpecDefForest x y w)
goF SpecDefForest (outer : a) c u
sdf
DefAroundAllWithNode (newOuter -> IO ()) -> oldOuter -> IO ()
func SpecDefForest (newOuter : oldOuter : otherOuters) c u
sdf -> 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 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (x :: [*]) y. SpecDefForest x y u -> f (SpecDefForest x y w)
goF SpecDefForest (newOuter : oldOuter : otherOuters) c u
sdf
DefAfterAllNode HList a -> IO ()
func SpecDefForest a c u
sdf -> forall (outers :: [*]) inner extra.
(HList outers -> IO ())
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefAfterAllNode HList a -> IO ()
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (x :: [*]) y. SpecDefForest x y u -> f (SpecDefForest x y w)
goF SpecDefForest a c u
sdf
DefParallelismNode Parallelism
p SpecDefForest a c u
sdf -> forall (outers :: [*]) inner extra.
Parallelism
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefParallelismNode Parallelism
p forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (x :: [*]) y. SpecDefForest x y u -> f (SpecDefForest x y w)
goF SpecDefForest a c u
sdf
DefRandomisationNode ExecutionOrderRandomisation
p SpecDefForest a c u
sdf -> forall (outers :: [*]) inner extra.
ExecutionOrderRandomisation
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefRandomisationNode ExecutionOrderRandomisation
p forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (x :: [*]) y. SpecDefForest x y u -> f (SpecDefForest x y w)
goF SpecDefForest a c u
sdf
DefFlakinessNode FlakinessMode
p SpecDefForest a c u
sdf -> forall (outers :: [*]) inner extra.
FlakinessMode
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefFlakinessNode FlakinessMode
p forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (x :: [*]) y. SpecDefForest x y u -> f (SpecDefForest x y w)
goF SpecDefForest a c u
sdf
filterTestForest :: Maybe Text -> SpecDefForest outers inner result -> SpecDefForest outers inner result
filterTestForest :: forall (outers :: [*]) inner result.
Maybe Text
-> SpecDefForest outers inner result
-> SpecDefForest outers inner result
filterTestForest Maybe Text
mf = forall a. a -> Maybe a -> a
fromMaybe [] forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (a :: [*]) b c.
DList Text -> SpecDefForest a b c -> Maybe (SpecDefForest a b c)
goForest forall a. DList a
DList.empty
where
goForest :: DList Text -> SpecDefForest a b c -> Maybe (SpecDefForest a b c)
goForest :: forall (a :: [*]) b c.
DList Text -> SpecDefForest a b c -> Maybe (SpecDefForest a b c)
goForest DList Text
ts SpecDefForest a b c
sdf = do
let sdf' :: SpecDefForest a b c
sdf' = forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe (forall (a :: [*]) b c.
DList Text -> SpecDefTree a b c -> Maybe (SpecDefTree a b c)
goTree DList Text
ts) SpecDefForest a b c
sdf
forall (f :: * -> *). Alternative f => Bool -> f ()
guard forall a b. (a -> b) -> a -> b
$ Bool -> Bool
not forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t a -> Bool
null SpecDefForest a b c
sdf'
forall (f :: * -> *) a. Applicative f => a -> f a
pure SpecDefForest a b c
sdf'
filterGuard :: DList Text -> Bool
filterGuard :: DList Text -> Bool
filterGuard DList Text
dl = case Maybe Text
mf of
Just Text
f -> Text
f Text -> Text -> Bool
`T.isInfixOf` Text -> [Text] -> Text
T.intercalate Text
"." (forall a. DList a -> [a]
DList.toList DList Text
dl)
Maybe Text
Nothing -> Bool
True
goTree :: DList Text -> SpecDefTree a b c -> Maybe (SpecDefTree a b c)
goTree :: forall (a :: [*]) b c.
DList Text -> SpecDefTree a b c -> Maybe (SpecDefTree a b c)
goTree DList Text
dl = \case
DefSpecifyNode Text
t TDef
(ProgressReporter
-> ((HList a -> b -> IO ()) -> IO ()) -> IO TestRunResult)
td c
e -> do
let tl :: DList Text
tl = forall a. DList a -> a -> DList a
DList.snoc DList Text
dl Text
t
forall (f :: * -> *). Alternative f => Bool -> f ()
guard forall a b. (a -> b) -> a -> b
$ DList Text -> Bool
filterGuard DList Text
tl
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall (outers :: [*]) inner extra.
Text
-> TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
-> extra
-> SpecDefTree outers inner extra
DefSpecifyNode Text
t TDef
(ProgressReporter
-> ((HList a -> b -> IO ()) -> IO ()) -> IO TestRunResult)
td c
e
DefPendingNode Text
t Maybe Text
mr -> do
let tl :: DList Text
tl = forall a. DList a -> a -> DList a
DList.snoc DList Text
dl Text
t
forall (f :: * -> *). Alternative f => Bool -> f ()
guard forall a b. (a -> b) -> a -> b
$ DList Text -> Bool
filterGuard DList Text
tl
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall (outers :: [*]) inner extra.
Text -> Maybe Text -> SpecDefTree outers inner extra
DefPendingNode Text
t Maybe Text
mr
DefDescribeNode Text
t SpecDefForest a b c
sdf -> forall (outers :: [*]) inner extra.
Text
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefDescribeNode Text
t forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (a :: [*]) b c.
DList Text -> SpecDefForest a b c -> Maybe (SpecDefForest a b c)
goForest (forall a. DList a -> a -> DList a
DList.snoc DList Text
dl Text
t) SpecDefForest a b c
sdf
DefWrapNode IO () -> IO ()
func SpecDefForest a b c
sdf -> forall (outers :: [*]) inner extra.
(IO () -> IO ())
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefWrapNode IO () -> IO ()
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (a :: [*]) b c.
DList Text -> SpecDefForest a b c -> Maybe (SpecDefForest a b c)
goForest DList Text
dl SpecDefForest a b c
sdf
DefBeforeAllNode IO outer
func SpecDefForest (outer : a) b c
sdf -> forall newOuter (otherOuters :: [*]) inner extra.
IO newOuter
-> SpecDefForest (newOuter : otherOuters) inner extra
-> SpecDefTree otherOuters inner extra
DefBeforeAllNode IO outer
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (a :: [*]) b c.
DList Text -> SpecDefForest a b c -> Maybe (SpecDefForest a b c)
goForest DList Text
dl SpecDefForest (outer : a) b c
sdf
DefAroundAllNode (outer -> IO ()) -> IO ()
func SpecDefForest (outer : a) b c
sdf -> forall newOuter (otherOuters :: [*]) inner extra.
((newOuter -> IO ()) -> IO ())
-> SpecDefForest (newOuter : otherOuters) inner extra
-> SpecDefTree otherOuters inner extra
DefAroundAllNode (outer -> IO ()) -> IO ()
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (a :: [*]) b c.
DList Text -> SpecDefForest a b c -> Maybe (SpecDefForest a b c)
goForest DList Text
dl SpecDefForest (outer : a) b c
sdf
DefAroundAllWithNode (newOuter -> IO ()) -> oldOuter -> IO ()
func SpecDefForest (newOuter : oldOuter : otherOuters) b c
sdf -> 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 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (a :: [*]) b c.
DList Text -> SpecDefForest a b c -> Maybe (SpecDefForest a b c)
goForest DList Text
dl SpecDefForest (newOuter : oldOuter : otherOuters) b c
sdf
DefAfterAllNode HList a -> IO ()
func SpecDefForest a b c
sdf -> forall (outers :: [*]) inner extra.
(HList outers -> IO ())
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefAfterAllNode HList a -> IO ()
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (a :: [*]) b c.
DList Text -> SpecDefForest a b c -> Maybe (SpecDefForest a b c)
goForest DList Text
dl SpecDefForest a b c
sdf
DefParallelismNode Parallelism
func SpecDefForest a b c
sdf -> forall (outers :: [*]) inner extra.
Parallelism
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefParallelismNode Parallelism
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (a :: [*]) b c.
DList Text -> SpecDefForest a b c -> Maybe (SpecDefForest a b c)
goForest DList Text
dl SpecDefForest a b c
sdf
DefRandomisationNode ExecutionOrderRandomisation
func SpecDefForest a b c
sdf -> forall (outers :: [*]) inner extra.
ExecutionOrderRandomisation
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefRandomisationNode ExecutionOrderRandomisation
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (a :: [*]) b c.
DList Text -> SpecDefForest a b c -> Maybe (SpecDefForest a b c)
goForest DList Text
dl SpecDefForest a b c
sdf
DefFlakinessNode FlakinessMode
func SpecDefForest a b c
sdf -> forall (outers :: [*]) inner extra.
FlakinessMode
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefFlakinessNode FlakinessMode
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (a :: [*]) b c.
DList Text -> SpecDefForest a b c -> Maybe (SpecDefForest a b c)
goForest DList Text
dl SpecDefForest a b c
sdf
randomiseTestForest :: MonadRandom m => SpecDefForest outers inner result -> m (SpecDefForest outers inner result)
randomiseTestForest :: forall (m :: * -> *) (outers :: [*]) inner result.
MonadRandom m =>
SpecDefForest outers inner result
-> m (SpecDefForest outers inner result)
randomiseTestForest = forall (m :: * -> *) (outers :: [*]) inner result.
MonadRandom m =>
SpecDefForest outers inner result
-> m (SpecDefForest outers inner result)
goForest
where
goForest :: MonadRandom m => SpecDefForest a b c -> m (SpecDefForest a b c)
goForest :: forall (m :: * -> *) (outers :: [*]) inner result.
MonadRandom m =>
SpecDefForest outers inner result
-> m (SpecDefForest outers inner result)
goForest = forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse forall (m :: * -> *) (a :: [*]) b c.
MonadRandom m =>
SpecDefTree a b c -> m (SpecDefTree a b c)
goTree forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> forall (m :: * -> *) a. MonadRandom m => [a] -> m [a]
shuffleM
goTree :: MonadRandom m => SpecDefTree a b c -> m (SpecDefTree a b c)
goTree :: forall (m :: * -> *) (a :: [*]) b c.
MonadRandom m =>
SpecDefTree a b c -> m (SpecDefTree a b c)
goTree = \case
DefSpecifyNode Text
t TDef
(ProgressReporter
-> ((HList a -> b -> IO ()) -> IO ()) -> IO TestRunResult)
td c
e -> forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall (outers :: [*]) inner extra.
Text
-> TDef
(ProgressReporter
-> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult)
-> extra
-> SpecDefTree outers inner extra
DefSpecifyNode Text
t TDef
(ProgressReporter
-> ((HList a -> b -> IO ()) -> IO ()) -> IO TestRunResult)
td c
e
DefPendingNode Text
t Maybe Text
mr -> forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall (outers :: [*]) inner extra.
Text -> Maybe Text -> SpecDefTree outers inner extra
DefPendingNode Text
t Maybe Text
mr
DefDescribeNode Text
t SpecDefForest a b c
sdf -> forall (outers :: [*]) inner extra.
Text
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefDescribeNode Text
t forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) (outers :: [*]) inner result.
MonadRandom m =>
SpecDefForest outers inner result
-> m (SpecDefForest outers inner result)
goForest SpecDefForest a b c
sdf
DefWrapNode IO () -> IO ()
func SpecDefForest a b c
sdf -> forall (outers :: [*]) inner extra.
(IO () -> IO ())
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefWrapNode IO () -> IO ()
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) (outers :: [*]) inner result.
MonadRandom m =>
SpecDefForest outers inner result
-> m (SpecDefForest outers inner result)
goForest SpecDefForest a b c
sdf
DefBeforeAllNode IO outer
func SpecDefForest (outer : a) b c
sdf -> forall newOuter (otherOuters :: [*]) inner extra.
IO newOuter
-> SpecDefForest (newOuter : otherOuters) inner extra
-> SpecDefTree otherOuters inner extra
DefBeforeAllNode IO outer
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) (outers :: [*]) inner result.
MonadRandom m =>
SpecDefForest outers inner result
-> m (SpecDefForest outers inner result)
goForest SpecDefForest (outer : a) b c
sdf
DefAroundAllNode (outer -> IO ()) -> IO ()
func SpecDefForest (outer : a) b c
sdf -> forall newOuter (otherOuters :: [*]) inner extra.
((newOuter -> IO ()) -> IO ())
-> SpecDefForest (newOuter : otherOuters) inner extra
-> SpecDefTree otherOuters inner extra
DefAroundAllNode (outer -> IO ()) -> IO ()
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) (outers :: [*]) inner result.
MonadRandom m =>
SpecDefForest outers inner result
-> m (SpecDefForest outers inner result)
goForest SpecDefForest (outer : a) b c
sdf
DefAroundAllWithNode (newOuter -> IO ()) -> oldOuter -> IO ()
func SpecDefForest (newOuter : oldOuter : otherOuters) b c
sdf -> 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 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) (outers :: [*]) inner result.
MonadRandom m =>
SpecDefForest outers inner result
-> m (SpecDefForest outers inner result)
goForest SpecDefForest (newOuter : oldOuter : otherOuters) b c
sdf
DefAfterAllNode HList a -> IO ()
func SpecDefForest a b c
sdf -> forall (outers :: [*]) inner extra.
(HList outers -> IO ())
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefAfterAllNode HList a -> IO ()
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) (outers :: [*]) inner result.
MonadRandom m =>
SpecDefForest outers inner result
-> m (SpecDefForest outers inner result)
goForest SpecDefForest a b c
sdf
DefParallelismNode Parallelism
func SpecDefForest a b c
sdf -> forall (outers :: [*]) inner extra.
Parallelism
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefParallelismNode Parallelism
func forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) (outers :: [*]) inner result.
MonadRandom m =>
SpecDefForest outers inner result
-> m (SpecDefForest outers inner result)
goForest SpecDefForest a b c
sdf
DefFlakinessNode FlakinessMode
i SpecDefForest a b c
sdf -> forall (outers :: [*]) inner extra.
FlakinessMode
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefFlakinessNode FlakinessMode
i forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) (outers :: [*]) inner result.
MonadRandom m =>
SpecDefForest outers inner result
-> m (SpecDefForest outers inner result)
goForest SpecDefForest a b c
sdf
DefRandomisationNode ExecutionOrderRandomisation
eor SpecDefForest a b c
sdf ->
forall (outers :: [*]) inner extra.
ExecutionOrderRandomisation
-> SpecDefForest outers inner extra
-> SpecDefTree outers inner extra
DefRandomisationNode ExecutionOrderRandomisation
eor forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> case ExecutionOrderRandomisation
eor of
ExecutionOrderRandomisation
RandomiseExecutionOrder -> forall (m :: * -> *) (outers :: [*]) inner result.
MonadRandom m =>
SpecDefForest outers inner result
-> m (SpecDefForest outers inner result)
goForest SpecDefForest a b c
sdf
ExecutionOrderRandomisation
DoNotRandomiseExecutionOrder -> forall (f :: * -> *) a. Applicative f => a -> f a
pure SpecDefForest a b c
sdf
data Parallelism = Parallel | Sequential
data ExecutionOrderRandomisation = RandomiseExecutionOrder | DoNotRandomiseExecutionOrder
data FlakinessMode
= MayNotBeFlaky
| MayBeFlakyUpTo
!Int
!(Maybe String)
type ResultForest = SpecForest (TDef (Timed TestRunResult))
type ResultTree = SpecTree (TDef (Timed TestRunResult))
computeTestSuiteStats :: ResultForest -> TestSuiteStats
computeTestSuiteStats :: ResultForest -> TestSuiteStats
computeTestSuiteStats = [Text] -> ResultForest -> TestSuiteStats
goF []
where
goF :: [Text] -> ResultForest -> TestSuiteStats
goF :: [Text] -> ResultForest -> TestSuiteStats
goF [Text]
ts = forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap ([Text] -> ResultTree -> TestSuiteStats
goT [Text]
ts)
goT :: [Text] -> ResultTree -> TestSuiteStats
goT :: [Text] -> ResultTree -> TestSuiteStats
goT [Text]
ts = \case
SpecifyNode Text
tn (TDef (Timed TestRunResult {[String]
Maybe Int
Maybe String
Maybe Word
Maybe (Map String Int)
Maybe (Map String (Map String Int))
Maybe (Map [String] Int)
Maybe SomeException
Maybe GoldenCase
TestStatus
testRunResultFlakinessMessage :: TestRunResult -> Maybe String
testRunResultExtraInfo :: TestRunResult -> Maybe String
testRunResultGoldenCase :: TestRunResult -> Maybe GoldenCase
testRunResultTables :: TestRunResult -> Maybe (Map String (Map String Int))
testRunResultClasses :: TestRunResult -> Maybe (Map String Int)
testRunResultLabels :: TestRunResult -> Maybe (Map [String] Int)
testRunResultFailingInputs :: TestRunResult -> [String]
testRunResultNumShrinks :: TestRunResult -> Maybe Word
testRunResultNumTests :: TestRunResult -> Maybe Word
testRunResultException :: TestRunResult -> Maybe SomeException
testRunResultRetries :: TestRunResult -> Maybe Int
testRunResultStatus :: TestRunResult -> TestStatus
testRunResultFlakinessMessage :: Maybe String
testRunResultExtraInfo :: Maybe String
testRunResultGoldenCase :: Maybe GoldenCase
testRunResultTables :: Maybe (Map String (Map String Int))
testRunResultClasses :: Maybe (Map String Int)
testRunResultLabels :: Maybe (Map [String] Int)
testRunResultFailingInputs :: [String]
testRunResultNumShrinks :: Maybe Word
testRunResultNumTests :: Maybe Word
testRunResultException :: Maybe SomeException
testRunResultRetries :: Maybe Int
testRunResultStatus :: TestStatus
..} Word64
t) CallStack
_) ->
TestSuiteStats
{ testSuiteStatSuccesses :: Word
testSuiteStatSuccesses = case TestStatus
testRunResultStatus of
TestStatus
TestPassed -> Word
1
TestStatus
TestFailed -> Word
0,
testSuiteStatExamples :: Word
testSuiteStatExamples = case TestStatus
testRunResultStatus of
TestStatus
TestPassed -> forall a. a -> Maybe a -> a
fromMaybe Word
1 Maybe Word
testRunResultNumTests
TestStatus
TestFailed -> forall a. a -> Maybe a -> a
fromMaybe Word
1 Maybe Word
testRunResultNumTests forall a. Num a => a -> a -> a
+ forall a. a -> Maybe a -> a
fromMaybe Word
0 Maybe Word
testRunResultNumShrinks,
testSuiteStatFailures :: Word
testSuiteStatFailures = case TestStatus
testRunResultStatus of
TestStatus
TestPassed -> Word
0
TestStatus
TestFailed -> Word
1,
testSuiteStatFlakyTests :: Word
testSuiteStatFlakyTests = case TestStatus
testRunResultStatus of
TestStatus
TestFailed -> Word
0
TestStatus
TestPassed -> case Maybe Int
testRunResultRetries of
Maybe Int
Nothing -> Word
0
Just Int
_ -> Word
1,
testSuiteStatPending :: Word
testSuiteStatPending = Word
0,
testSuiteStatSumTime :: Word64
testSuiteStatSumTime = Word64
t,
testSuiteStatLongestTime :: Maybe (Text, Word64)
testSuiteStatLongestTime = forall a. a -> Maybe a
Just (Text -> [Text] -> Text
T.intercalate Text
"." ([Text]
ts forall a. [a] -> [a] -> [a]
++ [Text
tn]), Word64
t)
}
PendingNode Text
_ Maybe Text
_ ->
TestSuiteStats
{ testSuiteStatSuccesses :: Word
testSuiteStatSuccesses = Word
0,
testSuiteStatExamples :: Word
testSuiteStatExamples = Word
0,
testSuiteStatFailures :: Word
testSuiteStatFailures = Word
0,
testSuiteStatFlakyTests :: Word
testSuiteStatFlakyTests = Word
0,
testSuiteStatPending :: Word
testSuiteStatPending = Word
1,
testSuiteStatSumTime :: Word64
testSuiteStatSumTime = Word64
0,
testSuiteStatLongestTime :: Maybe (Text, Word64)
testSuiteStatLongestTime = forall a. Maybe a
Nothing
}
DescribeNode Text
t ResultForest
sf -> [Text] -> ResultForest -> TestSuiteStats
goF (Text
t forall a. a -> [a] -> [a]
: [Text]
ts) ResultForest
sf
SubForestNode ResultForest
sf -> [Text] -> ResultForest -> TestSuiteStats
goF [Text]
ts ResultForest
sf
data TestSuiteStats = TestSuiteStats
{ TestSuiteStats -> Word
testSuiteStatSuccesses :: !Word,
TestSuiteStats -> Word
testSuiteStatExamples :: !Word,
TestSuiteStats -> Word
testSuiteStatFailures :: !Word,
TestSuiteStats -> Word
testSuiteStatFlakyTests :: !Word,
TestSuiteStats -> Word
testSuiteStatPending :: !Word,
TestSuiteStats -> Word64
testSuiteStatSumTime :: !Word64,
TestSuiteStats -> Maybe (Text, Word64)
testSuiteStatLongestTime :: !(Maybe (Text, Word64))
}
deriving (Int -> TestSuiteStats -> ShowS
[TestSuiteStats] -> ShowS
TestSuiteStats -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TestSuiteStats] -> ShowS
$cshowList :: [TestSuiteStats] -> ShowS
show :: TestSuiteStats -> String
$cshow :: TestSuiteStats -> String
showsPrec :: Int -> TestSuiteStats -> ShowS
$cshowsPrec :: Int -> TestSuiteStats -> ShowS
Show, TestSuiteStats -> TestSuiteStats -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TestSuiteStats -> TestSuiteStats -> Bool
$c/= :: TestSuiteStats -> TestSuiteStats -> Bool
== :: TestSuiteStats -> TestSuiteStats -> Bool
$c== :: TestSuiteStats -> TestSuiteStats -> Bool
Eq)
instance Semigroup TestSuiteStats where
<> :: TestSuiteStats -> TestSuiteStats -> TestSuiteStats
(<>) TestSuiteStats
tss1 TestSuiteStats
tss2 =
TestSuiteStats
{ testSuiteStatSuccesses :: Word
testSuiteStatSuccesses = TestSuiteStats -> Word
testSuiteStatSuccesses TestSuiteStats
tss1 forall a. Num a => a -> a -> a
+ TestSuiteStats -> Word
testSuiteStatSuccesses TestSuiteStats
tss2,
testSuiteStatExamples :: Word
testSuiteStatExamples = TestSuiteStats -> Word
testSuiteStatExamples TestSuiteStats
tss1 forall a. Num a => a -> a -> a
+ TestSuiteStats -> Word
testSuiteStatExamples TestSuiteStats
tss2,
testSuiteStatFailures :: Word
testSuiteStatFailures = TestSuiteStats -> Word
testSuiteStatFailures TestSuiteStats
tss1 forall a. Num a => a -> a -> a
+ TestSuiteStats -> Word
testSuiteStatFailures TestSuiteStats
tss2,
testSuiteStatFlakyTests :: Word
testSuiteStatFlakyTests = TestSuiteStats -> Word
testSuiteStatFlakyTests TestSuiteStats
tss1 forall a. Num a => a -> a -> a
+ TestSuiteStats -> Word
testSuiteStatFlakyTests TestSuiteStats
tss2,
testSuiteStatPending :: Word
testSuiteStatPending = TestSuiteStats -> Word
testSuiteStatPending TestSuiteStats
tss1 forall a. Num a => a -> a -> a
+ TestSuiteStats -> Word
testSuiteStatPending TestSuiteStats
tss2,
testSuiteStatSumTime :: Word64
testSuiteStatSumTime = TestSuiteStats -> Word64
testSuiteStatSumTime TestSuiteStats
tss1 forall a. Num a => a -> a -> a
+ TestSuiteStats -> Word64
testSuiteStatSumTime TestSuiteStats
tss2,
testSuiteStatLongestTime :: Maybe (Text, Word64)
testSuiteStatLongestTime = case (TestSuiteStats -> Maybe (Text, Word64)
testSuiteStatLongestTime TestSuiteStats
tss1, TestSuiteStats -> Maybe (Text, Word64)
testSuiteStatLongestTime TestSuiteStats
tss2) of
(Maybe (Text, Word64)
Nothing, Maybe (Text, Word64)
Nothing) -> forall a. Maybe a
Nothing
(Just (Text, Word64)
t1, Maybe (Text, Word64)
Nothing) -> forall a. a -> Maybe a
Just (Text, Word64)
t1
(Maybe (Text, Word64)
Nothing, Just (Text, Word64)
t2) -> forall a. a -> Maybe a
Just (Text, Word64)
t2
(Just (Text
tn1, Word64
t1), Just (Text
tn2, Word64
t2)) -> forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ if Word64
t1 forall a. Ord a => a -> a -> Bool
>= Word64
t2 then (Text
tn1, Word64
t1) else (Text
tn2, Word64
t2)
}
instance Monoid TestSuiteStats where
mappend :: TestSuiteStats -> TestSuiteStats -> TestSuiteStats
mappend = forall a. Semigroup a => a -> a -> a
(<>)
mempty :: TestSuiteStats
mempty =
TestSuiteStats
{ testSuiteStatSuccesses :: Word
testSuiteStatSuccesses = Word
0,
testSuiteStatExamples :: Word
testSuiteStatExamples = Word
0,
testSuiteStatFailures :: Word
testSuiteStatFailures = Word
0,
testSuiteStatFlakyTests :: Word
testSuiteStatFlakyTests = Word
0,
testSuiteStatPending :: Word
testSuiteStatPending = Word
0,
testSuiteStatSumTime :: Word64
testSuiteStatSumTime = Word64
0,
testSuiteStatLongestTime :: Maybe (Text, Word64)
testSuiteStatLongestTime = forall a. Maybe a
Nothing
}
shouldExitFail :: Settings -> ResultForest -> Bool
shouldExitFail :: Settings -> ResultForest -> Bool
shouldExitFail Settings
settings = forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (Settings -> TestRunResult -> Bool
testFailed Settings
settings forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Timed a -> a
timedValue forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall value. TDef value -> value
testDefVal))
testFailed :: Settings -> TestRunResult -> Bool
testFailed :: Settings -> TestRunResult -> Bool
testFailed Settings {Bool
Int
Maybe Bool
Maybe Text
SeedSetting
ReportProgress
Iterations
Threads
settingDebug :: Settings -> Bool
settingReportProgress :: Settings -> ReportProgress
settingFailOnFlaky :: Settings -> Bool
settingIterations :: Settings -> Iterations
settingFailFast :: Settings -> Bool
settingFilter :: Settings -> Maybe Text
settingColour :: Settings -> Maybe Bool
settingGoldenReset :: Settings -> Bool
settingGoldenStart :: Settings -> Bool
settingMaxShrinks :: Settings -> Int
settingMaxDiscard :: Settings -> Int
settingMaxSize :: Settings -> Int
settingMaxSuccess :: Settings -> Int
settingThreads :: Settings -> Threads
settingRandomiseExecutionOrder :: Settings -> Bool
settingSeed :: Settings -> SeedSetting
settingDebug :: Bool
settingReportProgress :: ReportProgress
settingFailOnFlaky :: Bool
settingIterations :: Iterations
settingFailFast :: Bool
settingFilter :: Maybe Text
settingColour :: Maybe Bool
settingGoldenReset :: Bool
settingGoldenStart :: Bool
settingMaxShrinks :: Int
settingMaxDiscard :: Int
settingMaxSize :: Int
settingMaxSuccess :: Int
settingThreads :: Threads
settingRandomiseExecutionOrder :: Bool
settingSeed :: SeedSetting
..} TestRunResult {[String]
Maybe Int
Maybe String
Maybe Word
Maybe (Map String Int)
Maybe (Map String (Map String Int))
Maybe (Map [String] Int)
Maybe SomeException
Maybe GoldenCase
TestStatus
testRunResultFlakinessMessage :: Maybe String
testRunResultExtraInfo :: Maybe String
testRunResultGoldenCase :: Maybe GoldenCase
testRunResultTables :: Maybe (Map String (Map String Int))
testRunResultClasses :: Maybe (Map String Int)
testRunResultLabels :: Maybe (Map [String] Int)
testRunResultFailingInputs :: [String]
testRunResultNumShrinks :: Maybe Word
testRunResultNumTests :: Maybe Word
testRunResultException :: Maybe SomeException
testRunResultRetries :: Maybe Int
testRunResultStatus :: TestStatus
testRunResultFlakinessMessage :: TestRunResult -> Maybe String
testRunResultExtraInfo :: TestRunResult -> Maybe String
testRunResultGoldenCase :: TestRunResult -> Maybe GoldenCase
testRunResultTables :: TestRunResult -> Maybe (Map String (Map String Int))
testRunResultClasses :: TestRunResult -> Maybe (Map String Int)
testRunResultLabels :: TestRunResult -> Maybe (Map [String] Int)
testRunResultFailingInputs :: TestRunResult -> [String]
testRunResultNumShrinks :: TestRunResult -> Maybe Word
testRunResultNumTests :: TestRunResult -> Maybe Word
testRunResultException :: TestRunResult -> Maybe SomeException
testRunResultRetries :: TestRunResult -> Maybe Int
testRunResultStatus :: TestRunResult -> TestStatus
..} =
forall (t :: * -> *). Foldable t => t Bool -> Bool
or
[
TestStatus
testRunResultStatus forall a. Eq a => a -> a -> Bool
== TestStatus
TestFailed,
Bool
settingFailOnFlaky Bool -> Bool -> Bool
&& TestStatus
testRunResultStatus forall a. Eq a => a -> a -> Bool
== TestStatus
TestPassed Bool -> Bool -> Bool
&& forall a. Maybe a -> Bool
isJust Maybe Int
testRunResultRetries
]