content: module Test.Toml.Codec.Combinator.Map
      ( mapSpec
      ) where
  
  import Data.Foldable (toList)
  import Test.Hspec (Spec, describe, parallel)
  
  import Test.Toml.Codec.Combinator.Common (codecRoundtrip)
  import Toml.Type.Printer (prettyKey)
  
  import qualified Test.Toml.Gen as Gen
  import qualified Toml.Codec.BiMap.Conversion as Toml
  import qualified Toml.Codec.Combinator.List as Toml
  import qualified Toml.Codec.Combinator.Map as Toml
  import qualified Toml.Codec.Combinator.Primitive as Toml
  
  
  mapSpec :: Spec
  mapSpec = parallel $ describe "Combinator.Map: Roundtrip tests" $ do
      codecRoundtrip "Map Int Text (map)     "
          (Toml.map (Toml.int "key") (Toml.text "val"))
          (Gen.genMap Gen.genInt Gen.genText)
      codecRoundtrip "Map Text Int (tableMap)"
          (Toml.tableMap Toml._KeyText Toml.int)
          (Gen.genMap (prettyKey <$> Gen.genKey) Gen.genInt)
      -- TODO: handle empty lists in values.
      codecRoundtrip "Map Text [Int] (tableMap)"
          (Toml.tableMap Toml._KeyText (Toml.list $ Toml.int "val"))
          (Gen.genMap (prettyKey <$> Gen.genKey) (toList <$> Gen.genNonEmpty Gen.genInt))
  