Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Add some basic round-trip tests.

  • Loading branch information...
commit 36feb3eff3d6858d6806c77421969049319d5b7b 1 parent e9316c5
@bos bos authored
Showing with 16 additions and 0 deletions.
  1. +16 −0 tests/Properties.hs
View
16 tests/Properties.hs
@@ -1,4 +1,7 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+
import Data.Aeson.Encode
+import Data.Aeson.Parser (value)
import Data.Aeson.Types
import Data.Attoparsec.Number
import Test.Framework (defaultMain, testGroup)
@@ -6,15 +9,28 @@ import Test.Framework.Providers.QuickCheck2 (testProperty)
import Test.QuickCheck (Arbitrary(..))
import Test.QuickCheck.Monadic (assert, monadicIO, run)
import qualified Data.ByteString.Lazy.Char8 as L
+import qualified Data.Attoparsec.Lazy as L
encodeDouble d = encode (Number (D d)) == L.pack (show d)
encodeInteger i = encode (Number (I i)) == L.pack (show i)
+roundTrip :: (Eq a, FromJSON a, ToJSON a) => a -> Bool
+roundTrip i = (fmap fromJSON . L.maybeResult . L.parse value . encode . toJSON) i == Just (Success i)
+
+roundTripBool (v::Bool) = roundTrip v
+roundTripDouble (v::Double) = roundTrip v
+roundTripInteger (v::Integer) = roundTrip v
+
main = defaultMain tests
tests = [
testGroup "encode" [
testProperty "encodeDouble" encodeDouble
, testProperty "encodeInteger" encodeInteger
+ ],
+ testGroup "roundTrip" [
+ testProperty "roundTripBool" roundTripBool
+ , testProperty "roundTripDouble" roundTripDouble
+ , testProperty "roundTripInteger" roundTripInteger
]
]
Please sign in to comment.
Something went wrong with that request. Please try again.