packages feed

composable-associations-0.1.0.0: test/Main.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
module Main where

import Test.Tasty
import Test.Tasty.HUnit
import Control.Lens
import Data.Proxy

import Data.ComposableAssociation

main :: IO ()
main = defaultMain tests

tests :: TestTree
tests = testGroup "Tests" [unitTests]

unitTests :: TestTree
unitTests = testGroup "Unit Tests"
  [ testCase "Assoc Getter" $ setKeyTest ^. _value @?= "object"
  , testCase "Assoc Modify" $ (setKeyTest & _value %~ (++ "1")) @?= Association Proxy "object1"
  , testCase "Assoc Set" $ (setKeyTest & _value .~ True) @?= Association Proxy True
  , testCase ":<> Getter1" $ withObjTest ^. _base @?= "a"
  , testCase ":<> Modify1" $ (withObjTest & _base %~ (++ "1")) @?= "a1" :<> "b"
  , testCase ":<> Set1" $ (withObjTest & _base .~ True) @?= True :<> "b"
  , testCase ":<> Getter2" $ withObjTest ^. _assoc @?= "b"
  , testCase ":<> Modify2" $ (withObjTest & _assoc %~ (++ "1")) @?= "a" :<> "b1"
  , testCase ":<> Set2" $ (withObjTest & _assoc .~ True) @?= "a" :<> True
  , testCase "Assoc :<> Assoc Base-Getter" $ withSetKeyTest ^. _base . _value @?=  "a"
  , testCase "Assoc :<> Assoc Key-Getter" $ withSetKeyTest ^. _assoc . _value @?= "b"
  , testCase "Assoc :<> Assoc Base-Modify" $
      (withSetKeyTest & _base . _value %~ (++ "1")) @?= asValue "a1" :<> asValue "b"
  , testCase "Assoc :<> Assoc Key-Modify" $
      (withSetKeyTest & _assoc . _value %~ (++ "1")) @?= asValue "a" :<> asValue "b1" ]

setKeyTest :: Association "test" String
setKeyTest = asValue "object"

withObjTest :: String :<> String
withObjTest = "a" :<> "b"

withSetKeyTest :: Association "test_key_1" String :<> Association "test_key_2" String
withSetKeyTest = asValue "a" :<> asValue "b"