{-# OPTIONS_GHC -fno-warn-orphans #-}
import Control.Applicative
import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as BC
import Data.Monoid
import Test.Hspec
import Test.Hspec.QuickCheck
import Test.QuickCheck
import Network.HTTP.Rest.Signature.EC2.Internal
instance Arbitrary ByteString where
arbitrary = BC.pack <$> arbitrary
data KeyString = Key { unpack :: ByteString }
instance Arbitrary KeyString where
arbitrary = Key . BC.pack <$> ((:) <$> arbitrary <*> arbitrary)
instance Arbitrary QueryString where
arbitrary = queryString . map f <$> arbitrary
where
f (a, b) = (unpack a, b)
instance Show QueryString where
show = show . rawData
main :: IO ()
main = hspec $ do
describe "QueryString" $ do
prop "mappend" prop_mappend
prop_mappend :: QueryString -> QueryString -> Bool
prop_mappend a b = (a <> b) == queryString (rawData a ++ rawData b)