packages feed

hedn-0.2.0.0: tests/Data/EDN/QQ/Test.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}

module Data.EDN.QQ.Test
  ( tests
  ) where

import Hedgehog (Group, Property, discover, property, withTests, (===))

import qualified Data.EDN as EDN
import qualified Data.EDN.QQ as QQ

prop_tagged_value :: Property
prop_tagged_value = withTests 1 . property $
  EDN.Tagged "test" "tagged" EDN.Nil === [QQ.edn| #test/tagged nil |]

prop_list :: Property
prop_list = withTests 1 . property $ do
  EDN.mkList items === [QQ.ednList|
    false,
    42
    #my/tagged symbol
  |]

prop_vector :: Property
prop_vector = withTests 1 . property $ do
  EDN.mkVec items === [QQ.ednVec|
    false,
    42
    #my/tagged symbol
  |]

prop_set :: Property
prop_set = withTests 1 . property $ do
  EDN.mkSet items === [QQ.ednSet|
    false,
    42
    #my/tagged symbol
  |]

prop_map :: Property
prop_map = withTests 1 . property $ do
  EDN.mkMap pairs === [QQ.ednMap|
    this/is false,
    :the-answer 42
    #my/tagged key value
  |]
  where
    pairs =
      [ ( EDN.NoTag $ EDN.Symbol "this" "is"
        , EDN.NoTag $ EDN.Boolean False)
      , ( EDN.NoTag $ EDN.Keyword "the-answer"
        , EDN.NoTag $ EDN.Integer 42
        )
      , ( EDN.Tagged "my" "tagged" $ EDN.Symbol "" "key"
        , EDN.NoTag $ EDN.Symbol "" "value"
        )
      ]

items :: [EDN.TaggedValue]
items =
  [ EDN.NoTag $ EDN.Boolean False
  , EDN.NoTag $ EDN.Integer 42
  , EDN.Tagged "my" "tagged" $ EDN.Symbol "" "symbol"
  ]

-- XXX: type application must be in some other module.
-- prop_from_value :: Property
-- prop_from_value = withTests 1 . property $ do
--   () === [fromEDN @()| nil |]

tests :: Group
tests = $$(discover)