mockcat-1.0.1.0: Declarative mocking with a single arrow `~>`.
Safe HaskellNone
LanguageHaskell2010

Test.MockCat.Internal.Builder

Synopsis

Documentation

class BuildCurried args r fn | args r -> fn where Source #

Class for building a curried function. The purpose of this class is to automatically generate and provide an implementation for the corresponding curried function type (such as `a -> b -> ... -> IO r`) when given the argument list type of the mock (`Param a :> Param b :> ...`). args is the argument list type of the mock. r is the return type of the function. fn is the curried function type.

Methods

buildCurriedImpl :: (args -> IO r) -> fn Source #

Instances

Instances details
(WrapParam a, fn ~ (a -> r)) => BuildCurried (Param a) r fn Source # 
Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildCurriedImpl :: (Param a -> IO r) -> fn Source #

(BuildCurried rest r fn, WrapParam a, fn' ~ (a -> fn)) => BuildCurried (Param a :> rest) r fn' Source # 
Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildCurriedImpl :: ((Param a :> rest) -> IO r) -> fn' Source #

buildCurried :: BuildCurried args r fn => (args -> IO r) -> fn Source #

Build a curried function that returns an IO result.

class BuildCurriedPure args r fn | args r -> fn where Source #

Class for building a curried pure function without relying on IO.

Methods

buildCurriedPureImpl :: (args -> r) -> fn Source #

Instances

Instances details
(WrapParam a, fn ~ (a -> r)) => BuildCurriedPure (Param a) r fn Source # 
Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildCurriedPureImpl :: (Param a -> r) -> fn Source #

(BuildCurriedPure rest r fn, WrapParam a, fn' ~ (a -> fn)) => BuildCurriedPure (Param a :> rest) r fn' Source # 
Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildCurriedPureImpl :: ((Param a :> rest) -> r) -> fn' Source #

buildCurriedPure :: BuildCurriedPure args r fn => (args -> r) -> fn Source #

Build a curried function that returns a pure result.

class BuildCurriedIO args r fn | args r -> fn where Source #

Class for building a curried function whose result stays in IO.

Methods

buildCurriedIOImpl :: (args -> IO r) -> fn Source #

Instances

Instances details
(WrapParam a, fn ~ (a -> IO r)) => BuildCurriedIO (Param a) r fn Source # 
Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildCurriedIOImpl :: (Param a -> IO r) -> fn Source #

(BuildCurriedIO rest r fn, WrapParam a, fn' ~ (a -> fn)) => BuildCurriedIO (Param a :> rest) r fn' Source # 
Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildCurriedIOImpl :: ((Param a :> rest) -> IO r) -> fn' Source #

buildCurriedIO :: BuildCurriedIO args r fn => (args -> IO r) -> fn Source #

Build a curried IO function without hiding the IO layer.

class MockBuilder params fn verifyParams | params -> fn, params -> verifyParams where Source #

Class for creating a stub corresponding to the parameter description.

Methods

build :: MonadIO m => Maybe MockName -> params -> m (BuiltMock fn verifyParams) Source #

Instances

Instances details
MockBuilder (Param r) r () Source #

Instance for building a stub for a value (backward compatibility).

Instance details

Defined in Test.MockCat.Internal.Builder

Methods

build :: MonadIO m => Maybe MockName -> Param r -> m (BuiltMock r ()) Source #

MockBuilder (IO r) (IO r) () Source #

Instance for building a stub for a constant IO action.

Instance details

Defined in Test.MockCat.Internal.Builder

Methods

build :: MonadIO m => Maybe MockName -> IO r -> m (BuiltMock (IO r) ()) Source #

MockBuilder (Head :> Param r) r () Source #

Instance for building a stub for a constant value (with Head marker).

Instance details

Defined in Test.MockCat.Internal.Builder

Methods

build :: MonadIO m => Maybe MockName -> (Head :> Param r) -> m (BuiltMock r ()) Source #

(p ~ (Param a :> rest), ParamConstraints p args r, BuildCurried args r fn) => MockBuilder (Param a :> rest) fn args Source #

Overlapping instance for building a stub defined via chained Param.

Instance details

Defined in Test.MockCat.Internal.Builder

Methods

build :: MonadIO m => Maybe MockName -> (Param a :> rest) -> m (BuiltMock fn args) Source #

(ParamConstraints params args r, BuildCurried args r fn) => MockBuilder (Cases params ()) fn args Source #

Overlapping instance for building a stub when parameters are provided as Cases.

Instance details

Defined in Test.MockCat.Internal.Builder

Methods

build :: MonadIO m => Maybe MockName -> Cases params () -> m (BuiltMock fn args) Source #

MockBuilder (Cases (IO a) ()) (IO a) () Source #

Instance for building a stub for `Cases (IO a) ()`.

Instance details

Defined in Test.MockCat.Internal.Builder

Methods

build :: MonadIO m => Maybe MockName -> Cases (IO a) () -> m (BuiltMock (IO a) ()) Source #

buildMock :: (MonadIO m, MockBuilder params fn verifyParams) => Maybe MockName -> params -> m (BuiltMock fn verifyParams) Source #

New name for build to make intent explicit. buildMock constructs a mock function and its verifier.

class MockIOBuilder params fn verifyParams | params -> fn, params -> verifyParams where Source #

Class for building mocks whose resulting functions stay in IO.

Methods

buildIO :: MonadIO m => Maybe MockName -> params -> m (BuiltMock fn verifyParams) Source #

Instances

Instances details
(p ~ (Param a :> rest), ParamConstraints p args r, BuildCurriedIO args r fn) => MockIOBuilder (Param a :> rest) fn args Source # 
Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildIO :: MonadIO m => Maybe MockName -> (Param a :> rest) -> m (BuiltMock fn args) Source #

(ParamConstraints params args r, BuildCurriedIO args r fn) => MockIOBuilder (Cases params ()) fn args Source # 
Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildIO :: MonadIO m => Maybe MockName -> Cases params () -> m (BuiltMock fn args) Source #

buildWithRecorder :: (MonadIO m, BuildCurried args r fn) => (TVar (InvocationRecord args) -> args -> IO r) -> m (BuiltMock fn args) Source #

buildWithRecorderIO :: (MonadIO m, BuildCurriedIO args r fn) => (TVar (InvocationRecord args) -> args -> IO r) -> m (BuiltMock fn args) Source #

appendCalledParams :: TVar (InvocationRecord params) -> params -> IO () Source #

readInvocationCount :: Eq params => TVar (InvocationRecord params) -> params -> IO Int Source #

incrementInvocationCount :: Eq params => TVar (InvocationRecord params) -> params -> IO () Source #

runCase :: Cases a b -> [a] Source #

p :: (Show a, Eq a) => a -> Param a Source #

class StubBuilder params fn | params -> fn where Source #

Methods

buildStub :: Maybe MockName -> params -> fn Source #

Instances

Instances details
StubBuilder (Param r) r Source #

Instance for building a mock for a function with a single parameter.

Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildStub :: Maybe MockName -> Param r -> r Source #

StubBuilder (IO r) (IO r) Source #

Instance for building a mock for a constant function.

Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildStub :: Maybe MockName -> IO r -> IO r Source #

(p ~ (Param a :> rest), ParamConstraints p args r, BuildCurried args r fn, BuildCurriedPure args r fn) => StubBuilder (Param a :> rest) fn Source # 
Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildStub :: Maybe MockName -> (Param a :> rest) -> fn Source #

(ParamConstraints params args r, BuildCurried args r fn, BuildCurriedPure args r fn) => StubBuilder (Cases params ()) fn Source #

Overlapping instance for building a mock for a function with multiple parameters. This instance is used when the parameter type is a Cases type.

Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildStub :: Maybe MockName -> Cases params () -> fn Source #

StubBuilder (Cases (IO a) ()) (IO a) Source #

Instance for building a mock for a function with multiple parameters.

Instance details

Defined in Test.MockCat.Internal.Builder

Methods

buildStub :: Maybe MockName -> Cases (IO a) () -> IO a Source #

type ParamConstraints params args r = (ProjectionArgs params, ProjectionReturn params, ArgsOf params ~ args, ReturnOf params ~ Param r, Eq args, Show args) Source #

extractReturnValue :: ParamConstraints params args r => Maybe MockName -> params -> args -> r Source #

validateOnly :: (Eq a, Show a) => Maybe MockName -> a -> a -> () Source #

validateParamsPure :: (Eq a, Show a) => Maybe MockName -> a -> a -> () Source #

findReturnValueWithPure :: ParamConstraints params args r => Maybe MockName -> InvocationList params -> args -> r Source #

findReturnValuePure :: ParamConstraints params args r => InvocationList params -> args -> Maybe r Source #

singleInvocationStep :: ParamConstraints params args r => Maybe MockName -> params -> args -> InvocationStep args r Source #