@@ -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