@@ -8,6 +8,7 @@
8{-# LANGUAGE RankNTypes #-}
8{-# LANGUAGE RankNTypes #-}
9{-# LANGUAGE RecordWildCards #-}
9{-# LANGUAGE RecordWildCards #-}
10{-# LANGUAGE ScopedTypeVariables #-}
10{-# LANGUAGE ScopedTypeVariables #-}
11+{-# LANGUAGE TypeApplications #-}
11{-# LANGUAGE NoMonomorphismRestriction #-}
12{-# LANGUAGE NoMonomorphismRestriction #-}
12{-# OPTIONS_GHC -fno-warn-orphans #-}
13{-# OPTIONS_GHC -fno-warn-orphans #-}
@@ -26,13 +27,16 @@ import qualified Data.ByteString.Lazy as BL
26import qualified Data.CaseInsensitive as CI
27import qualified Data.CaseInsensitive as CI
27import Data.Either (isRight)
28import Data.Either (isRight)
28import qualified Data.List.NonEmpty as NE
29import qualified Data.List.NonEmpty as NE
29−import Data.Maybe (fromJust, fromMaybe, isNothing)
30+import Data.Maybe (fromJust, fromMaybe, isJust, isNothing)
30import Data.Proxy
31import Data.Proxy
31import Data.Text (Text)
32import Data.Text (Text)
32import qualified Data.Text as T
33import qualified Data.Text as T
33import qualified Data.Text.Encoding as T
34import qualified Data.Text.Encoding as T
34import Data.Time
35import Data.Time
36+import Data.Typeable (Typeable, eqT)
35import GHC.Generics
37import GHC.Generics
38+import qualified Language.Haskell.TH as TH
39+import qualified Language.Haskell.TH.Quote as TH
36import qualified Network.HTTP.Client as L
40import qualified Network.HTTP.Client as L
37import Network.HTTP.Req
41import Network.HTTP.Req
38import qualified Network.HTTP.Types as Y
42import qualified Network.HTTP.Types as Y
@@ -409,6 +413,19 @@ spec = do
409 request <- req_ GET url NoReqBody (httpVersion major minor)
413 request <- req_ GET url NoReqBody (httpVersion major minor)
410 L.requestVersion request `shouldBe` Y.HttpVersion major minor
414 L.requestVersion request `shouldBe` Y.HttpVersion major minor
416+ describe "quasiquoter" $ do
417+ it "works for valid urls" $
418+ -- Doing it this way instead of just checking if [urlQ|...|] :: (Url
419+ -- 'Https, Option _) type checks, so we can catch if the type of scheme
421+ let testTypeOfQuoterResult ::
422+ forall a s. Typeable a => (a, Option s) -> Bool
423+ testTypeOfQuoterResult _ = isJust $ eqT @a @(Url 'Https)
424+ in property $ testTypeOfQuoterResult [urlQ|https://example.org/|]
425+ it "doesn't work for invalid urls"
427+ $ TH.runQ (TH.quoteExp urlQ "not a url") `shouldThrow` anyIOException
412----------------------------------------------------------------------------
429----------------------------------------------------------------------------
413-- Instances
430-- Instances