{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
module Test.HMock.Internal.Rule where
import Data.Kind (Constraint, Type)
import GHC.TypeLits (Symbol)
import {-# SOURCE #-} Test.HMock.Internal.State (MockT)
import Test.HMock.Mockable (MockableBase (..))
data WholeMethodMatcher cls name m r where
JustMatcher :: Matcher cls name m r -> WholeMethodMatcher cls name m r
SuchThat ::
Matcher cls name m r ->
(Action cls name m r -> Bool) ->
WholeMethodMatcher cls name m r
showWholeMatcher ::
MockableBase cls =>
Maybe (Action cls name m a) ->
WholeMethodMatcher cls name m b ->
String
showWholeMatcher :: Maybe (Action cls name m a)
-> WholeMethodMatcher cls name m b -> String
showWholeMatcher Maybe (Action cls name m a)
a (JustMatcher Matcher cls name m b
m) = Maybe (Action cls name m a) -> Matcher cls name m b -> String
forall (cls :: (* -> *) -> Constraint) (name :: Symbol)
(m :: * -> *) a b.
MockableBase cls =>
Maybe (Action cls name m a) -> Matcher cls name m b -> String
showMatcher Maybe (Action cls name m a)
a Matcher cls name m b
m
showWholeMatcher Maybe (Action cls name m a)
a (Matcher cls name m b
m `SuchThat` Action cls name m b -> Bool
_) =
Maybe (Action cls name m a) -> Matcher cls name m b -> String
forall (cls :: (* -> *) -> Constraint) (name :: Symbol)
(m :: * -> *) a b.
MockableBase cls =>
Maybe (Action cls name m a) -> Matcher cls name m b -> String
showMatcher Maybe (Action cls name m a)
a Matcher cls name m b
m String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" (with whole method matcher)"
data
Rule
(cls :: (Type -> Type) -> Constraint)
(name :: Symbol)
(m :: Type -> Type)
(r :: Type)
where
(:=>) ::
WholeMethodMatcher cls name m r ->
[Action cls name m r -> MockT m r] ->
Rule cls name m r