derive-has-field-0.0.1.2: test/DeriveHasFieldSpec.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE TemplateHaskell #-}
module DeriveHasFieldSpec where
import DeriveHasField
import Import
import Test.Hspec
data SomeType = SomeType
{ someTypeSomeField :: String
, someTypeSomeOtherField :: Int
, someTypeSomeMaybeField :: Maybe Int
, someTypeSomeEitherField :: Either String Int
}
deriveHasFieldWith (dropPrefix "someType") ''SomeType
someType :: SomeType
someType =
SomeType
{ someTypeSomeField = "hello"
, someTypeSomeOtherField = 0
, someTypeSomeMaybeField = Just 0
, someTypeSomeEitherField = Right 0
}
data OtherType a b = OtherType
{ otherTypeField :: Maybe a
, otherTypeOtherField :: Either a b
}
deriveHasFieldWith (dropPrefix "otherType") ''OtherType
otherType :: OtherType Int String
otherType =
OtherType
{ otherTypeField = Just 0
, otherTypeOtherField = Right "hello"
}
spec :: Spec
spec = do
describe "deriveHasField" $ do
it "compiles and gets the right field" $ do
someType.someField `shouldBe` "hello"
someType.someOtherField `shouldBe` 0
someType.someMaybeField `shouldBe` Just 0
someType.someEitherField `shouldBe` Right 0
it "compiles and gets the right field" $ do
otherType.field `shouldBe` Just 0
otherType.otherField `shouldBe` Right "hello"