{-# 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)|]