module Iso (tests) where import Test.QuickCheck.Simple (Test, qcTest) import Control.Applicative ((<$>)) import Data.Aeson (FromJSON, ToJSON) import qualified Data.Aeson as Aeson import Data.JsonRpc (Request, Response, Error, genericToArrayJSON) import Instances (Example) aesonED :: (Eq a, ToJSON a, FromJSON a) => a -> Bool aesonED x = Aeson.decode (Aeson.encode x) == Just x request :: Request Example -> Bool request = aesonED requestA :: Request Example -> Bool requestA r = Aeson.decode (Aeson.encode $ genericToArrayJSON <$> r) == Just r errorObj :: Error Example -> Bool errorObj = aesonED response :: Response Example Example -> Bool response = aesonED tests :: [Test] tests = [ qcTest "iso - request" request , qcTest "iso - request array" requestA , qcTest "iso - error object" errorObj , qcTest "iso - response" response ]