module Dormouse.Client.PayloadSpec ( spec ) where import Control.Monad.IO.Class import qualified Data.Map as Map import Data.Text.Encoding import Dormouse.Client.Types import Dormouse.Client.Generators.Text import Dormouse.Client.Payload import Data.Proxy import Test.Hspec import Test.Hspec.Hedgehog import qualified Hedgehog.Range as Range import qualified Streamly.External.ByteString as SEB import qualified Streamly.Data.Stream as Stream spec :: Spec spec = before setup $ do describe "decodeText" $ do it "successfully decodes latin-1 text for iso-8859-1 charset" $ \sizeRanges -> do hedgehog $ do txt <- forAll . genLatin1BS $ sizeRanges let resp = HttpResponse { responseStatusCode = 200 , responseHeaders = Map.fromList [("Content-Type", "text/plain; charset=iso-8859-1")] , responseBody = Stream.unfold SEB.read txt } expectedLatin1Text = decodeLatin1 txt resp' <- liftIO . deserialiseRequest html $ resp responseBody resp' === expectedLatin1Text it "successfully decodes utf8 text for utf8 charset" $ \sizeRanges -> do hedgehog $ do txt <- forAll . genUtf8BS $ sizeRanges let resp = HttpResponse { responseStatusCode = 200 , responseHeaders = Map.fromList [("Content-Type", "text/plain; charset=utf8")] , responseBody = Stream.unfold SEB.read txt } expectedUtf8Text = decodeUtf8 txt resp' <- liftIO . deserialiseRequest html $ resp responseBody resp' === expectedUtf8Text it "successfully decodes utf8 text if no explicit charset applied" $ \sizeRanges -> do hedgehog $ do txt <- forAll . genUtf8BS $ sizeRanges let resp = HttpResponse { responseStatusCode = 200 , responseHeaders = Map.empty , responseBody = Stream.unfold SEB.read txt } expectedUtf8Text = decodeUtf8 txt resp' <- liftIO . deserialiseRequest html $ resp responseBody resp' === expectedUtf8Text where setup = do return $ Range.exponential 0 100000