|
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