packages feed

ocaml-export-0.1.0.0: test/Options.hs

{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}

module Options where

{-
import Data.Aeson (FromJSON, ToJSON)
import Data.Aeson.Types hiding (Options)
import Data.Char (toUpper,toLower)
import Data.Monoid ((<>))
import Data.Proxy
import Data.Text (Text)
import Data.Time
import Data.Time.Clock.POSIX
import GHC.Generics
import OCaml.Export hiding (Options,defaultOptions)
import qualified OCaml.Export as OCaml (Options,defaultOptions)
import Test.Hspec
import Test.QuickCheck
import Test.QuickCheck.Arbitrary.ADT
import Test.Aeson.Internal.ADT.GoldenSpecs
import Util


testOptionsInterface = testOCamlTypeWithInterface Options

mkTestOCaml :: OCamlType a => Text -> a -> OCamlInterface
mkTestOCaml modul = mkOCamlInterfaceWithSpec "http://localhost:8081" "__tests__/golden/" modul

fieldUpperOptions = defaultOptions { fieldLabelModifier = map toUpper }

constructorLowerOptions = defaultOptions { constructorTagModifier = map toLower }

oo = OCaml.defaultOptions {aesonOptions = fieldUpperOptions }
ii = OCaml.defaultOptions {aesonOptions = constructorLowerOptions }

spec :: Spec
spec = do
  describe "OCaml Declaration with Interface: Types with Aeson Options" $ do
    testOptionsInterface "Person" (mkOCamlInterfaceWithOptions oo (Proxy :: Proxy Person))
    testOptionsInterface "NameOrIdNumber" (mkOCamlInterfaceWithOptions ii (Proxy :: Proxy NameOrIdNumber))

data Person = Person
  { id :: Int
  , name :: Maybe String
  , created :: UTCTime
  } deriving (Show, Eq, Generic, OCamlType)

instance Arbitrary Person where
  arbitrary = Person <$> arbitrary <*> arbitrary <*> arbitrary

instance ToADTArbitrary Person

instance ToJSON Person where
  toJSON = genericToJSON fieldUpperOptions

instance FromJSON Person where
  parseJSON = genericParseJSON fieldUpperOptions

data NameOrIdNumber = Name String | IdNumber Int
  deriving (Show, Eq, Generic, OCamlType)

instance ToJSON NameOrIdNumber where
  toJSON = genericToJSON constructorLowerOptions

instance FromJSON NameOrIdNumber where
  parseJSON = genericParseJSON constructorLowerOptions
-}