@@ -3,17 +3,15 @@ module Test.Main where
33import Prelude
44
55import Control.Monad.Eff.Console (log )
6-
76import Data.Argonaut.Core (JObject , Json , isObject , toObject )
87import Data.Argonaut.Decode (decodeJson )
9- import Data.Argonaut.Encode (encodeJson , (:=), (~> ))
8+ import Data.Argonaut.Encode (class EncodeJson , encodeJson , (:=), (:=?), (~>), (~>? ))
109import Data.Argonaut.Gen (genJson )
1110import Data.Either (Either (..))
1211import Data.Foldable (foldl )
13- import Data.Maybe (Maybe (..), maybe , isJust )
12+ import Data.Maybe (Maybe (..), isJust , isNothing , maybe )
1413import Data.StrMap as SM
1514import Data.Tuple (Tuple (..))
16-
1715import Test.StrongCheck (SC , quickCheck , quickCheck' , (<?>))
1816import Test.StrongCheck.Arbitrary (class Arbitrary )
1917import Test.StrongCheck.Gen (suchThat , resize )
@@ -26,6 +24,9 @@ main = do
2624
2725newtype TestJson = TestJson Json
2826
27+ instance encodeJsonTestJson :: EncodeJson TestJson where
28+ encodeJson (TestJson x) = encodeJson x
29+
2930instance arbitraryTestJson :: Arbitrary TestJson where
3031 arbitrary = TestJson <$> (resize 5 genJson)
3132
@@ -59,8 +60,12 @@ combinatorsCheck :: SC () Unit
5960combinatorsCheck = do
6061 log " Check assoc builder `:=`"
6162 quickCheck' 20 prop_assoc_builder_str
63+ log " Check assocOptional builder `:=?`"
64+ quickCheck' 20 prop_assoc_optional_builder_str
6265 log " Check JAssoc append `~>`"
6366 quickCheck' 20 prop_assoc_append
67+ log " Check JAssoc appendOptional `~>?`"
68+ quickCheck' 20 prop_assoc_append_optional
6469 log " Check get field `obj .? 'foo'`"
6570 quickCheck' 20 prop_get_jobject_field
6671
@@ -72,13 +77,27 @@ combinatorsCheck = do
7277 Tuple k json ->
7378 (key == k) && (decodeJson json == Right str)
7479
80+ prop_assoc_optional_builder_str :: Tuple String (Maybe String ) -> Boolean
81+ prop_assoc_optional_builder_str (Tuple key maybeStr) =
82+ case (key :=? maybeStr) of
83+ Just (Tuple k json) ->
84+ (key == k) && (decodeJson json == Right maybeStr)
85+ Nothing -> true
86+
7587 prop_assoc_append :: (Tuple (Tuple String TestJson ) Obj ) -> Boolean
7688 prop_assoc_append (Tuple (Tuple key (TestJson val)) (Obj obj)) =
7789 let appended = (key := val) ~> obj
7890 in case toObject appended >>= SM .lookup key of
7991 Just value -> true
8092 _ -> false
8193
94+ prop_assoc_append_optional :: Tuple (Tuple String (Maybe TestJson )) Obj -> Boolean
95+ prop_assoc_append_optional (Tuple (Tuple key maybeVal) (Obj obj)) =
96+ let appended = (key :=? maybeVal) ~>? obj
97+ in case toObject appended >>= SM .lookup key of
98+ Just value -> isJust maybeVal
99+ _ -> isNothing maybeVal
100+
82101 prop_get_jobject_field :: Obj -> Boolean
83102 prop_get_jobject_field (Obj obj) =
84103 maybe false go $ toObject obj
0 commit comments