@@ -14,7 +14,7 @@ import Encoders
1414import Instances ()
1515import Test.Framework (Test, testGroup)
1616import Test.Framework.Providers.QuickCheck2 (testProperty)
17−import Test.QuickCheck (Arbitrary(..), Property, (===))
17+import Test.QuickCheck (Arbitrary(..), Property, (===), (.&&.))
1818import Types
1919import qualified Data.Attoparsec.Lazy as L
2020import qualified Data.ByteString.Lazy.Char8 as L
@@ -39,16 +39,23 @@ toParseJSON parsejson tojson x =
3939 IError path msg -> failure "parse" (formatError path msg) x
4040 ISuccess x' -> x === x'
4141
42−roundTrip :: (FromJSON a, ToJSON a, Show a) =>
42+roundTripEnc :: (FromJSON a, ToJSON a, Show a) =>
4343 (a -> a -> Property) -> a -> a -> Property
44−roundTrip eq _ i =
45− case fmap ifromJSON . L.parse value . encode . toJSON $ i of
44+roundTripEnc eq _ i =
45+ case fmap ifromJSON . L.parse value . encode $ i of
4646 L.Done _ (ISuccess v) -> v `eq` i
4747 L.Done _ (IError path err) -> failure "fromJSON" (formatError path err) i
4848 L.Fail _ _ err -> failure "parse" err i
4949
50+roundTripNoEnc :: (FromJSON a, ToJSON a, Show a) =>
51+ (a -> a -> Property) -> a -> a -> Property
52+roundTripNoEnc eq _ i =
53+ case ifromJSON . toJSON $ i of
54+ (ISuccess v) -> v `eq` i
55+ (IError path err) -> failure "fromJSON" (formatError path err) i
56+
5057roundTripEq :: (Eq a, FromJSON a, ToJSON a, Show a) => a -> a -> Property
51−roundTripEq x y = roundTrip (===) x y
58+roundTripEq x y = roundTripEnc (===) x y .&&. roundTripNoEnc (===) x y
5259
5360toFromJSON :: (Arbitrary a, Eq a, FromJSON a, ToJSON a, Show a) => a -> Property
5461toFromJSON x = case ifromJSON (toJSON x) of