108 lines
3.8 KiB
Elm
108 lines
3.8 KiB
Elm
module Test.Tools.Hashdict exposing (..)
|
|
|
|
import Test exposing (..)
|
|
import Fuzz exposing (Fuzzer)
|
|
import Internal.Tools.Hashdict as Hashdict exposing (Hashdict)
|
|
import Test.Values.Event as TestEvent
|
|
import Internal.Values.Event as Event
|
|
import Json.Encode as E
|
|
import Json.Decode as D
|
|
import Expect
|
|
|
|
fuzzer : (a -> String) -> Fuzzer a -> Fuzzer (Hashdict a)
|
|
fuzzer toHash fuz =
|
|
Fuzz.map (Hashdict.fromList toHash) (Fuzz.list fuz)
|
|
|
|
eventFuzzer : Fuzzer (Hashdict Event.Event)
|
|
eventFuzzer =
|
|
fuzzer .eventId TestEvent.fuzzer
|
|
|
|
suite : Test
|
|
suite =
|
|
describe "Hashdict"
|
|
[ describe "empty"
|
|
[ test "empty isEmpty"
|
|
( Hashdict.empty identity
|
|
|> Hashdict.isEmpty
|
|
|> Expect.equal True
|
|
|> always
|
|
)
|
|
, fuzz TestEvent.fuzzer "Nothing is member"
|
|
(\event ->
|
|
Hashdict.empty .eventId
|
|
|> Hashdict.member event
|
|
|> Expect.equal False
|
|
)
|
|
, fuzz Fuzz.string "No key is member"
|
|
(\key ->
|
|
Hashdict.empty identity
|
|
|> Hashdict.memberKey key
|
|
|> Expect.equal False
|
|
)
|
|
, fuzz Fuzz.string "Get gets Nothing"
|
|
(\key ->
|
|
Hashdict.empty identity
|
|
|> Hashdict.get key
|
|
|> Expect.equal Nothing
|
|
)
|
|
, test "Size is zero"
|
|
( Hashdict.empty identity
|
|
|> Hashdict.size
|
|
|> Expect.equal 0
|
|
|> always
|
|
)
|
|
, test "No keys"
|
|
( Hashdict.empty identity
|
|
|> Hashdict.keys
|
|
|> Expect.equal []
|
|
|> always
|
|
)
|
|
, test "No values"
|
|
( Hashdict.empty identity
|
|
|> Hashdict.values
|
|
|> Expect.equal []
|
|
|> always
|
|
)
|
|
, test "To list is []"
|
|
( Hashdict.empty identity
|
|
|> Hashdict.toList
|
|
|> Expect.equal []
|
|
|> always
|
|
)
|
|
, test "From list is empty"
|
|
( []
|
|
|> Hashdict.fromList (\x -> x)
|
|
|> Hashdict.isEqual (Hashdict.empty identity)
|
|
|> Expect.equal True
|
|
|> always
|
|
)
|
|
, test "Empty + empty == empty"
|
|
( Hashdict.empty identity
|
|
|> Hashdict.union (Hashdict.empty String.toUpper)
|
|
|> Hashdict.isEqual (Hashdict.empty String.toLower)
|
|
|> Expect.equal True
|
|
|> always
|
|
)
|
|
, fuzz (Fuzz.intRange 0 10) "JSON encode -> JSON decode"
|
|
(\indent ->
|
|
Hashdict.empty identity
|
|
|> Hashdict.encode E.string
|
|
|> E.encode indent
|
|
|> D.decodeString (Hashdict.decoder identity D.string)
|
|
|> Result.map (Hashdict.isEqual (Hashdict.empty String.toUpper))
|
|
|> Expect.equal (Ok True)
|
|
)
|
|
]
|
|
, describe "JSON"
|
|
[ fuzz2 eventFuzzer (Fuzz.intRange 0 10) "JSON encode -> JSON decode"
|
|
(\hashdict indent ->
|
|
hashdict
|
|
|> Hashdict.encode Event.encode
|
|
|> E.encode indent
|
|
|> D.decodeString (Hashdict.decoder .eventId Event.decoder)
|
|
|> Result.map Hashdict.toList
|
|
|> Expect.equal ( Ok <| Hashdict.toList hashdict )
|
|
)
|
|
]
|
|
]
|