add haskell-http-client-generator (#6429)

This commit is contained in:
Jon Schoning
2017-09-05 11:33:48 -05:00
committed by wing328
parent 4eab5406c5
commit c7d145a4ba
117 changed files with 10499 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ConstraintKinds #-}
module PropMime where
import Data.Aeson
import Data.Aeson.Types (parseEither)
import Data.Monoid ((<>))
import Data.Typeable (Proxy(..), typeOf, Typeable)
import qualified Data.ByteString.Lazy.Char8 as BL8
import Test.Hspec
import Test.QuickCheck
import Test.QuickCheck.Property
import Test.Hspec.QuickCheck (prop)
import SwaggerPetstore.MimeTypes
import ApproxEq
-- * Type Aliases
type ArbitraryMime mime a = ArbitraryRoundtrip (MimeUnrender mime) (MimeRender mime) a
type ArbitraryRoundtrip from to a = (from a, to a, Arbitrary' a)
type Arbitrary' a = (Arbitrary a, Show a, Typeable a)
-- * Mime
propMime
:: forall a b mime.
(ArbitraryMime mime a, Testable b)
=> String -> (a -> a -> b) -> mime -> Proxy a -> Spec
propMime eqDescr eq m _ =
prop
(show (typeOf (undefined :: a)) <> " " <> show (typeOf (undefined :: mime)) <> " roundtrip " <> eqDescr) $
\(x :: a) ->
let rendered = mimeRender' m x
actual = mimeUnrender' m rendered
expected = Right x
failMsg =
"ACTUAL: " <> show actual <> "\nRENDERED: " <> BL8.unpack rendered
in counterexample failMsg $
either reject property (eq <$> actual <*> expected)
where
reject = property . const rejected
propMimeEq :: (ArbitraryMime mime a, Eq a) => mime -> Proxy a -> Spec
propMimeEq = propMime "(EQ)" (==)