packages feed

mockcat 0.5.1.0 → 0.5.2.0

raw patch · 3 files changed

+33/−23 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

mockcat.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           mockcat-version:        0.5.1.0+version:        0.5.2.0 synopsis:       Mock library for test in Haskell. description:    mockcat is a flexible and powerful mock library.                 .
src/Test/MockCat/TH.hs view
@@ -49,6 +49,9 @@     mkName,     pprint,     reify,+    Inline (NoInline),+    RuleMatch (FunLike),+    Phases (AllPhases),   ) import Language.Haskell.TH.Lib import Language.Haskell.TH.PprLib (Doc, hcat, parens, text)@@ -116,6 +119,8 @@ -- --  - prefix: Stub function prefix --  - suffix: stub function suffix+--  - implicitMonadicReturn: If True, the return value of the stub function is wrapped in a monad automatically.+--                           If Else, the return value of stub function is not wrapped in a monad,  so required explicitly return monadic values. data MockOptions = MockOptions {prefix :: String, suffix :: String, implicitMonadicReturn :: Bool}  -- | Default Options.@@ -447,27 +452,31 @@ generateConstantStubFn mock = [|stubFn $(mock)|]  createMockFnDec :: Name -> [VarAppliedType] -> MockOptions -> Dec -> Q [Dec]-createMockFnDec monadVarName varAppliedTypes options (SigD funName ty) = do-  let funNameStr = createFnName funName options-      mockFunName = mkName funNameStr+createMockFnDec monadVarName varAppliedTypes options (SigD sigFnName ty) = do+  let fnName = createFnName sigFnName options+      mockFnName = mkName fnName       params = mkName "p"       updatedType = updateType ty varAppliedTypes-      funType = if options.implicitMonadicReturn +      fnType = if options.implicitMonadicReturn         then createMockBuilderFnType monadVarName updatedType         else updatedType -  if isFunctionType ty then-    doCreateMockFnDec funNameStr mockFunName params funType monadVarName updatedType+  fnDecs <- if isNotConstantFunctionType ty then+    doCreateMockFnDecs fnName mockFnName params fnType monadVarName updatedType   else     if options.implicitMonadicReturn then-      doCreateConstantMockFnDec funNameStr mockFunName funType monadVarName+      doCreateConstantMockFnDecs fnName mockFnName fnType monadVarName     else-      doCreateMockFnDec2 funNameStr mockFunName params funType monadVarName updatedType+      doCreateEmptyVerifyParamMockFnDecs fnName mockFnName params fnType monadVarName updatedType +  pragmaDec <- pragInlD mockFnName NoInline FunLike AllPhases++  pure $ pragmaDec : fnDecs+ createMockFnDec _ _ _ dec = fail $ "unsupport dec: " <> pprint dec -doCreateMockFnDec :: (Quote m) => String -> Name -> Name -> Type -> Name -> Type -> m [Dec]-doCreateMockFnDec funNameStr mockFunName params funType monadVarName updatedType = do+doCreateMockFnDecs :: (Quote m) => String -> Name -> Name -> Type -> Name -> Type -> m [Dec]+doCreateMockFnDecs funNameStr mockFunName params funType monadVarName updatedType = do   newFunSig <- do     let verifyParams = createMockBuilderVerifyParams updatedType     sigD@@ -485,16 +494,17 @@    pure $ newFunSig : [newFun] -doCreateConstantMockFnDec :: (Quote m) => String -> Name -> Type -> Name -> m [Dec]-doCreateConstantMockFnDec funNameStr mockFunName ty monadVarName = do+doCreateConstantMockFnDecs :: (Quote m) => String -> Name -> Type -> Name -> m [Dec]+doCreateConstantMockFnDecs funNameStr mockFunName ty monadVarName = do   newFunSig <- sigD mockFunName [t|(Monad $(varT monadVarName)) => $(pure ty) -> MockT $(varT monadVarName) ()|]   createMockFn <- [|createNamedConstantMock|]   mockBody <- createMockBody funNameStr createMockFn   newFun <- funD mockFunName [clause [varP $ mkName "p"] (normalB (pure mockBody)) []]   pure $ newFunSig : [newFun] -doCreateMockFnDec2 :: (Quote m) => String -> Name -> Name -> Type -> Name -> Type -> m [Dec]-doCreateMockFnDec2 funNameStr mockFunName params funType monadVarName updatedType = do+-- MockBuilder constraints, but verifyParams are empty.+doCreateEmptyVerifyParamMockFnDecs :: (Quote m) => String -> Name -> Name -> Type -> Name -> Type -> m [Dec]+doCreateEmptyVerifyParamMockFnDecs funNameStr mockFunName params funType monadVarName updatedType = do   newFunSig <- do     let verifyParams = createMockBuilderVerifyParams updatedType     sigD@@ -526,12 +536,12 @@         )     |] -isFunctionType :: Type -> Bool-isFunctionType (AppT (AppT ArrowT _) _) = True-isFunctionType (AppT t1 t2) = isFunctionType t1 || isFunctionType t2-isFunctionType (TupleT _) = False-isFunctionType (ForallT _ _ t) = isFunctionType t-isFunctionType _ = False+isNotConstantFunctionType :: Type -> Bool+isNotConstantFunctionType (AppT (AppT ArrowT _) _) = True+isNotConstantFunctionType (AppT t1 t2) = isNotConstantFunctionType t1 || isNotConstantFunctionType t2+isNotConstantFunctionType (TupleT _) = False+isNotConstantFunctionType (ForallT _ _ t) = isNotConstantFunctionType t+isNotConstantFunctionType _ = False  updateType :: Type -> [VarAppliedType] -> Type updateType (AppT (VarT v1) (VarT v2)) varAppliedTypes = do
test/Test/MockCat/Impl.hs view
@@ -5,7 +5,7 @@ module Test.MockCat.Impl (FileOperation, Finder) where  import Test.MockCat.Definition-import Data.Text+import Data.Text (pack) import Prelude hiding (readFile, writeFile) import Control.Monad.Trans.Maybe import Control.Monad.Reader@@ -25,5 +25,5 @@   writeFile _ _ = undefined  instance Finder Int String IO where-  findIds = pure [1, 2, 3]+  findIds = pure [1 :: Int, 2 :: Int, 3 :: Int]   findById id = pure $ "{id: " <> show id <> "}"