aeson-schemas-1.3.4: test/Tests/GetQQ/TH.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
module Tests.GetQQ.TH where
import Control.DeepSeq (deepseq)
import Data.Aeson.QQ (aesonQQ)
import Language.Haskell.TH.Quote (QuasiQuoter (..))
import Language.Haskell.TH.TestUtils (
MockedMode (..),
QMode (..),
QState (..),
runTestQ,
runTestQErr,
)
import Data.Aeson.Schema (Object, get, schema)
import TestUtils (mkExpQQ, parseValue)
import TestUtils.DeepSeq ()
-- For testing namespaced object
testData :: Object [schema| { foo: Maybe Int } |]
testData = parseValue [aesonQQ| { "foo": null } |]
qState :: QState 'FullyMocked
qState =
QState
{ mode = MockQ
, knownNames = []
, reifyInfo = []
}
{- | Run the `get` quasiquoter at both runtime and compile-time, to get coverage.
The `get` Quasiquoter doesn't reify anything, so this should work.
-}
runGet :: QuasiQuoter
runGet = mkExpQQ $ \s -> [|runTestQ qState (quoteExp get s) `deepseq` $(quoteExp get s)|]
getErr :: QuasiQuoter
getErr = mkExpQQ $ \s -> [|runTestQErr qState (quoteExp get s)|]