1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
{-# LANGUAGE FlexibleInstances, OverloadedStrings, UnicodeSyntax, CPP #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Network.HTTP.LinkSpec where
import Test.Hspec
import Test.QuickCheck
#if !MIN_VERSION_base(4,8,0)
import Data.Monoid (mconcat)
#endif
import qualified Data.Text as T
import Data.Maybe (fromJust)
import Network.HTTP.Link
import Network.URI (URI)
instance Arbitrary (Link URI) where
arbitrary = do
urlScheme ← elements ["http://", "https://", "ftp://", "git+ssh://"]
urlDomain ← listOf1 $ elements ['a'..'z']
urlTld ← elements ["com", "net", "org", "me", "is", "technology", "club"]
urlPath ← listOf $ elements ['a'..'z']
params ← listOf genParam
return $ fromJust $ lnk (mconcat [urlScheme, urlDomain, ".", urlTld, "/", urlPath]) params
where genParam = do
otherParamKey ← suchThat (listOf1 $ elements ['a'..'z']) (\x → x /= "rel" && x /= "rev" && x /= "title"
&& x /= "title*" && x /= "hreflang" && x /= "anchor" && x /= "media" && x /= "type")
paramKey ← elements [Rel, Rev, Title, Hreflang, Anchor, Media, ContentType, Other (T.pack otherParamKey)]
paramValue ← listOf $ elements ['a'..'z']
return (paramKey, T.pack paramValue)
spec ∷ Spec
spec = do
describe "writeLinkHeader → parseLinkHeader" $
it "roundtrips successfully" $
property $ \x → parseLinkHeader (writeLinkHeader x) == Just (x :: [Link URI])
|