forked from OSS/graphql
73 lines
2.9 KiB
Haskell
73 lines
2.9 KiB
Haskell
{- This Source Code Form is subject to the terms of the Mozilla Public License,
|
|
v. 2.0. If a copy of the MPL was not distributed with this file, You can
|
|
obtain one at https://mozilla.org/MPL/2.0/. -}
|
|
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
module Language.GraphQL.Execute.OrderedMapSpec
|
|
( spec
|
|
) where
|
|
|
|
import Language.GraphQL.Execute.OrderedMap (OrderedMap)
|
|
import qualified Language.GraphQL.Execute.OrderedMap as OrderedMap
|
|
import Test.Hspec (Spec, describe, it, shouldBe, shouldSatisfy)
|
|
|
|
spec :: Spec
|
|
spec =
|
|
describe "OrderedMap" $ do
|
|
it "creates an empty map" $
|
|
(mempty :: OrderedMap String) `shouldSatisfy` null
|
|
|
|
it "creates a singleton" $
|
|
let value :: String
|
|
value = "value"
|
|
in OrderedMap.size (OrderedMap.singleton "key" value) `shouldBe` 1
|
|
|
|
it "combines inserted vales" $
|
|
let key = "key"
|
|
map1 = OrderedMap.singleton key ("1" :: String)
|
|
map2 = OrderedMap.singleton key ("2" :: String)
|
|
in OrderedMap.lookup key (map1 <> map2) `shouldBe` Just "12"
|
|
|
|
it "shows the map" $
|
|
let actual = show
|
|
$ OrderedMap.insert "key1" "1"
|
|
$ OrderedMap.singleton "key2" ("2" :: String)
|
|
expected = "fromList [(\"key2\",\"2\"),(\"key1\",\"1\")]"
|
|
in actual `shouldBe` expected
|
|
|
|
it "traverses a map of just values" $
|
|
let actual = sequence
|
|
$ OrderedMap.insert "key1" (Just "2")
|
|
$ OrderedMap.singleton "key2" $ Just ("1" :: String)
|
|
expected = Just
|
|
$ OrderedMap.insert "key1" "2"
|
|
$ OrderedMap.singleton "key2" ("1" :: String)
|
|
in actual `shouldBe` expected
|
|
|
|
it "traverses a map with a Nothing" $
|
|
let actual = sequence
|
|
$ OrderedMap.insert "key1" Nothing
|
|
$ OrderedMap.singleton "key2" $ Just ("1" :: String)
|
|
expected = Nothing
|
|
in actual `shouldBe` expected
|
|
|
|
it "combines two maps preserving the order of the second one" $
|
|
let map1 :: OrderedMap String
|
|
map1 = OrderedMap.insert "key2" "2"
|
|
$ OrderedMap.singleton "key1" "1"
|
|
map2 :: OrderedMap String
|
|
map2 = OrderedMap.insert "key4" "4"
|
|
$ OrderedMap.singleton "key3" "3"
|
|
expected = OrderedMap.insert "key4" "4"
|
|
$ OrderedMap.insert "key3" "3"
|
|
$ OrderedMap.insert "key2" "2"
|
|
$ OrderedMap.singleton "key1" "1"
|
|
in (map1 <> map2) `shouldBe` expected
|
|
|
|
it "replaces existing values" $
|
|
let key = "key"
|
|
actual = OrderedMap.replace key ("2" :: String)
|
|
$ OrderedMap.singleton key ("1" :: String)
|
|
in OrderedMap.lookup key actual `shouldBe` Just "2"
|