|
1 | 1 | module Test.Main where |
2 | 2 |
|
3 | 3 | import Prelude |
| 4 | +import Data.List as L |
4 | 5 | import Data.StrMap as SM |
5 | 6 | import Control.Monad.Eff.Console (log, logShow) |
6 | 7 | import Data.Argonaut.Core (JObject, Json, toObject, fromObject, fromArray, fromString, fromNumber, fromBoolean, jsonNull) |
7 | | -import Data.Argonaut.Decode (decodeJson) |
8 | | -import Data.Argonaut.Encode (encodeJson, gEncodeJson, (:=), (~>)) |
| 8 | +import Data.Argonaut.Decode (class DecodeJson, decodeJson) |
| 9 | +import Data.Argonaut.Encode (class EncodeJson, encodeJson, gEncodeJson, (:=), (~>)) |
9 | 10 | import Data.Array (zipWith, nubBy, length) |
10 | 11 | import Data.Either (Either(..)) |
11 | 12 | import Data.Foldable (foldl) |
12 | 13 | import Data.Function (on) |
13 | 14 | import Data.Generic (class Generic) |
14 | 15 | import Data.List (List, fromFoldable, singleton) |
15 | | -import Data.List as L |
16 | 16 | import Data.Maybe (Maybe(..), maybe, isJust) |
17 | 17 | import Data.NonEmpty (NonEmpty(..), (:|)) |
18 | | -import Data.Tuple (Tuple(..), fst) |
19 | | -import Test.StrongCheck (SC, quickCheck, quickCheck', (<?>)) |
| 18 | +import Data.Tuple (Tuple(..), fst, snd) |
| 19 | +import Test.StrongCheck (SC, quickCheck, quickCheck', (<?>), Result) |
20 | 20 | import Test.StrongCheck.Arbitrary (class Arbitrary, arbitrary) |
21 | 21 | import Test.StrongCheck.Data.AlphaNumString (AlphaNumString(..)) |
22 | 22 | import Test.StrongCheck.Gen (Gen, Size, showSample, sized, frequency, oneOf, vectorOf) |
23 | 23 |
|
24 | 24 | main :: SC () Unit |
25 | 25 | main = do |
| 26 | + nonEmptyCheck |
26 | 27 | eitherCheck |
27 | 28 | encodeDecodeCheck |
28 | 29 | combinatorsCheck |
@@ -194,9 +195,23 @@ eitherCheck :: SC () Unit |
194 | 195 | eitherCheck = do |
195 | 196 | log "Test EncodeJson/DecodeJson Either instance" |
196 | 197 | quickCheck \(x :: Either String String) -> |
197 | | - case decodeJson (encodeJson x) of |
198 | | - Right decoded -> |
199 | | - decoded == x |
200 | | - <?> ("x = " <> show x <> ", decoded = " <> show decoded) |
201 | | - Left err -> |
202 | | - false <?> err |
| 198 | + encodeThenDecodeEqual x |
| 199 | + |
| 200 | +encodeThenDecodeEqual :: forall a. (Eq a, Show a, EncodeJson a, DecodeJson a) => a -> Result |
| 201 | +encodeThenDecodeEqual v = do |
| 202 | + case decodeJson (encodeJson v) of |
| 203 | + Right decoded -> |
| 204 | + decoded == v |
| 205 | + <?> ("v = " <> show v <> ", decoded = " <> show decoded) |
| 206 | + Left err -> |
| 207 | + false <?> err |
| 208 | + |
| 209 | +nonEmptyCheck :: SC () Unit |
| 210 | +nonEmptyCheck = do |
| 211 | + log "Test EncodeJson/DecodeJson NonEmpty Array and NonEmpty List" |
| 212 | + quickCheck \(x :: Tuple String (Array String)) -> do |
| 213 | + let ne = fst x :| snd x |
| 214 | + encodeThenDecodeEqual ne |
| 215 | + quickCheck \(x :: Tuple String (List String)) -> do |
| 216 | + let ne = fst x :| snd x |
| 217 | + encodeThenDecodeEqual ne |
0 commit comments