Hello community, here is the log from the commit of package ghc-http-api-data for openSUSE:Factory checked in at 2018-10-25 08:16:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ghc-http-api-data (Old) and /work/SRC/openSUSE:Factory/.ghc-http-api-data.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-http-api-data" Thu Oct 25 08:16:50 2018 rev:12 rq:642867 version:0.3.10 Changes: -------- --- /work/SRC/openSUSE:Factory/ghc-http-api-data/ghc-http-api-data.changes 2018-07-21 10:21:54.763005331 +0200 +++ /work/SRC/openSUSE:Factory/.ghc-http-api-data.new/ghc-http-api-data.changes 2018-10-25 08:17:22.388043687 +0200 @@ -1,0 +2,21 @@ +Wed Oct 10 19:24:02 UTC 2018 - [email protected] + +- Update http-api-data to version 0.3.10. + 0.3.10 + --- + + * Fix 'SetCookie' instances + (see [#86](https://github.com/fizruk/http-api-data/pull/86)) + * Add support for `Fixed` + (see [#78](https://github.com/fizruk/http-api-data/pull/87)) + + 0.3.9 + --- + + * GHC-8.6 support + * Remove dependency on `uri-bytestring` and use functions from `http-types` instead + (see [#75](https://github.com/fizruk/http-api-data/pull/78)) + * Add support for `SetCookie` + (see [#74](https://github.com/fizruk/http-api-data/pull/74)) + +------------------------------------------------------------------- Old: ---- http-api-data-0.3.8.1.tar.gz New: ---- http-api-data-0.3.10.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ghc-http-api-data.spec ++++++ --- /var/tmp/diff_new_pack.Umdt9S/_old 2018-10-25 08:17:22.988043426 +0200 +++ /var/tmp/diff_new_pack.Umdt9S/_new 2018-10-25 08:17:22.992043424 +0200 @@ -12,14 +12,14 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # %global pkg_name http-api-data %bcond_with tests Name: ghc-%{pkg_name} -Version: 0.3.8.1 +Version: 0.3.10 Release: 0 Summary: Converting to/from HTTP API data like URL pieces, headers and query parameters License: BSD-2-Clause @@ -32,6 +32,7 @@ BuildRequires: ghc-bytestring-devel BuildRequires: ghc-cabal-doctest-devel BuildRequires: ghc-containers-devel +BuildRequires: ghc-cookie-devel BuildRequires: ghc-hashable-devel BuildRequires: ghc-http-types-devel BuildRequires: ghc-rpm-macros @@ -39,7 +40,6 @@ BuildRequires: ghc-time-devel BuildRequires: ghc-time-locale-compat-devel BuildRequires: ghc-unordered-containers-devel -BuildRequires: ghc-uri-bytestring-devel BuildRequires: ghc-uuid-types-devel %if %{with tests} BuildRequires: ghc-HUnit-devel ++++++ http-api-data-0.3.8.1.tar.gz -> http-api-data-0.3.10.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-api-data-0.3.8.1/CHANGELOG.md new/http-api-data-0.3.10/CHANGELOG.md --- old/http-api-data-0.3.8.1/CHANGELOG.md 2018-03-15 00:11:02.000000000 +0100 +++ new/http-api-data-0.3.10/CHANGELOG.md 2018-10-05 13:27:14.000000000 +0200 @@ -1,3 +1,20 @@ +0.3.10 +--- + +* Fix 'SetCookie' instances + (see [#86](https://github.com/fizruk/http-api-data/pull/86)) +* Add support for `Fixed` + (see [#78](https://github.com/fizruk/http-api-data/pull/87)) + +0.3.9 +--- + +* GHC-8.6 support +* Remove dependency on `uri-bytestring` and use functions from `http-types` instead + (see [#75](https://github.com/fizruk/http-api-data/pull/78)) +* Add support for `SetCookie` + (see [#74](https://github.com/fizruk/http-api-data/pull/74)) + 0.3.8.1 --- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-api-data-0.3.8.1/http-api-data.cabal new/http-api-data-0.3.10/http-api-data.cabal --- old/http-api-data-0.3.8.1/http-api-data.cabal 2018-03-15 00:11:02.000000000 +0100 +++ new/http-api-data-0.3.10/http-api-data.cabal 2018-10-05 13:27:14.000000000 +0200 @@ -1,19 +1,22 @@ +cabal-version: >= 1.10 name: http-api-data -version: 0.3.8.1 -license: BSD3 -license-file: LICENSE -author: Nickolay Kudasov <[email protected]> -maintainer: Nickolay Kudasov <[email protected]> +version: 0.3.10 + synopsis: Converting to/from HTTP API data like URL pieces, headers and query parameters. +category: Web description: This package defines typeclasses used for converting Haskell data types to and from HTTP API data. . Please see README.md + +license: BSD3 +license-file: LICENSE +author: Nickolay Kudasov <[email protected]> +maintainer: Nickolay Kudasov <[email protected]> homepage: http://github.com/fizruk/http-api-data -category: Web stability: unstable -cabal-version: >= 1.10 build-type: Custom + extra-source-files: include/overlapping-compat.h test/*.hs @@ -24,12 +27,13 @@ GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, - GHC==8.4.1 + GHC==8.4.3, + GHC==8.6.1 custom-setup setup-depends: - base >= 4.7 && <4.12, - Cabal >= 1.18 && <2.3, + base, + Cabal, cabal-doctest >=1.0.6 && <1.1 flag use-text-show @@ -40,24 +44,32 @@ library hs-source-dirs: src/ include-dirs: include/ - build-depends: base >= 4.7 && < 4.12 - , attoparsec >= 0.13.0.1 && < 0.14 - , attoparsec-iso8601 >= 1.0.0.0 && < 1.1 + + -- GHC bundled + build-depends: base >= 4.7 && < 4.13 , bytestring >= 0.10.4.0 && < 0.11 - , containers >= 0.5.5.1 && < 0.6 - , hashable >= 1.1.2.4 && < 1.3 - , http-types >= 0.8.6 && < 0.13 - , text >= 1.1.1.3 && < 1.3 + , containers >= 0.5.5.1 && < 0.7 + , text >= 1.2.3.0 && < 1.3 , time >= 1.4.2 && < 1.9 - , time-locale-compat >= 0.1.1.0 && < 0.2 - , unordered-containers >= 0.2.6.0 && < 0.3 - , uri-bytestring >= 0.1.7 && < 0.4 - , uuid-types >= 1.0.2 && <1.1 + + -- other-dependencies + build-depends: + attoparsec >= 0.13.2.2 && < 0.14 + , attoparsec-iso8601 >= 1.0.0.0 && < 1.1 + , cookie >= 0.4.3 && < 0.4.5 + , hashable >= 1.2.7.0 && < 1.3 + , http-types >= 0.12.1 && < 0.13 + , time-locale-compat >= 0.1.1.5 && < 0.2 + , unordered-containers >= 0.2.9.0 && < 0.3 + , uuid-types >= 1.0.3 && <1.1 + if !impl(ghc >= 8.0) - build-depends: semigroups >= 0.16 && < 0.19 + build-depends: semigroups >= 0.18.5 && < 0.19 + if flag(use-text-show) cpp-options: -DUSE_TEXT_SHOW - build-depends: text-show >= 2 + build-depends: text-show >= 3.7.4 && <3.8 + exposed-modules: Web.HttpApiData Web.FormUrlEncoded @@ -76,26 +88,30 @@ hs-source-dirs: test ghc-options: -Wall default-language: Haskell2010 - build-tool-depends: hspec-discover:hspec-discover >= 2.4.7 && <2.5 - build-depends: HUnit - , hspec >= 2.4.7 - , base + build-tool-depends: hspec-discover:hspec-discover >= 2.5.5 && <2.6 + -- inherited depndencies + build-depends: + base , bytestring - , QuickCheck >=2.9 - , quickcheck-instances >= 0.3.12 , unordered-containers , http-api-data , text , time , bytestring , uuid-types + , cookie + + build-depends: HUnit >= 1.6.0.0 && <1.7 + , hspec >= 2.5.5 && <2.6 + , QuickCheck >= 2.11.3 && <2.13 + , quickcheck-instances >= 0.3.19 && <0.4 test-suite doctests ghc-options: -Wall build-depends: base, directory >= 1.0, - doctest >= 0.11 && <0.16, + doctest >= 0.16.0 && <0.17, filepath default-language: Haskell2010 hs-source-dirs: test diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-api-data-0.3.8.1/src/Web/FormUrlEncoded.hs new/http-api-data-0.3.10/src/Web/FormUrlEncoded.hs --- old/http-api-data-0.3.8.1/src/Web/FormUrlEncoded.hs 2018-03-15 00:11:02.000000000 +0100 +++ new/http-api-data-0.3.10/src/Web/FormUrlEncoded.hs 2018-10-05 13:27:14.000000000 +0200 @@ -47,5 +47,5 @@ urlDecodeParams, ) where -import Web.Internal.FormUrlEncoded +import Web.Internal.FormUrlEncoded diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-api-data-0.3.8.1/src/Web/HttpApiData.hs new/http-api-data-0.3.10/src/Web/HttpApiData.hs --- old/http-api-data-0.3.8.1/src/Web/HttpApiData.hs 2018-03-15 00:11:02.000000000 +0100 +++ new/http-api-data-0.3.10/src/Web/HttpApiData.hs 2018-10-05 13:27:14.000000000 +0200 @@ -43,7 +43,7 @@ readTextData, ) where -import Web.Internal.HttpApiData +import Web.Internal.HttpApiData -- $setup -- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-api-data-0.3.8.1/src/Web/Internal/FormUrlEncoded.hs new/http-api-data-0.3.10/src/Web/Internal/FormUrlEncoded.hs --- old/http-api-data-0.3.8.1/src/Web/Internal/FormUrlEncoded.hs 2018-03-15 00:11:02.000000000 +0100 +++ new/http-api-data-0.3.10/src/Web/Internal/FormUrlEncoded.hs 2018-10-05 13:27:14.000000000 +0200 @@ -1,5 +1,5 @@ -{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE CPP #-} +{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE DeriveGeneric #-} @@ -18,14 +18,14 @@ module Web.Internal.FormUrlEncoded where #if __GLASGOW_HASKELL__ < 710 -import Control.Applicative -import Data.Traversable +import Control.Applicative +import Data.Traversable #endif import Control.Arrow ((***)) import Control.Monad ((<=<)) -import Data.ByteString.Builder (toLazyByteString, shortByteString) +import Data.ByteString.Builder (shortByteString, toLazyByteString) import qualified Data.ByteString.Lazy as BSL import qualified Data.ByteString.Lazy.Char8 as BSL8 import qualified Data.Foldable as F @@ -39,30 +39,30 @@ import Data.Map (Map) import qualified Data.Map as Map import Data.Monoid -import qualified Data.Semigroup as Semi import Data.Ord (comparing) +import qualified Data.Semigroup as Semi import Data.Text (Text) import qualified Data.Text as Text -import qualified Data.Text.Lazy as Lazy import Data.Text.Encoding as Text import Data.Text.Encoding.Error (lenientDecode) +import qualified Data.Text.Lazy as Lazy -import Data.Time import Data.Proxy +import Data.Time import Data.Word #if MIN_VERSION_base(4,8,0) -import Data.Void -import Numeric.Natural +import Data.Void +import Numeric.Natural #endif -import GHC.Exts (IsList (..), Constraint) +import GHC.Exts (Constraint, IsList (..)) import GHC.Generics import GHC.TypeLits -import URI.ByteString (urlEncodeQuery, urlDecodeQuery) +import Network.HTTP.Types.URI (urlDecode, urlEncodeBuilder) -import Web.Internal.HttpApiData +import Web.Internal.HttpApiData -- $setup -- >>> :set -XDeriveGeneric @@ -543,10 +543,10 @@ urlEncodeParams :: [(Text, Text)] -> BSL.ByteString urlEncodeParams = toLazyByteString . mconcat . intersperse (shortByteString "&") . map encodePair where - escape = urlEncodeQuery . Text.encodeUtf8 + escape = urlEncodeBuilder True . Text.encodeUtf8 encodePair (k, "") = escape k - encodePair (k, v) = escape k <> shortByteString "=" <> escape v + encodePair (k, v) = escape k <> shortByteString "=" <> escape v -- | Decode an @application/x-www-form-urlencoded@ 'BSL.ByteString' to a 'Form'. -- @@ -590,7 +590,7 @@ where pairs = map (BSL8.split '=') (BSL8.split '&' bs) - unescape = Text.decodeUtf8With lenientDecode . urlDecodeQuery . BSL.toStrict + unescape = Text.decodeUtf8With lenientDecode . urlDecode True . BSL.toStrict parsePair p = case map unescape p of diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-api-data-0.3.8.1/src/Web/Internal/HttpApiData.hs new/http-api-data-0.3.10/src/Web/Internal/HttpApiData.hs --- old/http-api-data-0.3.8.1/src/Web/Internal/HttpApiData.hs 2018-03-15 00:11:02.000000000 +0100 +++ new/http-api-data-0.3.10/src/Web/Internal/HttpApiData.hs 2018-10-05 13:27:14.000000000 +0200 @@ -1,12 +1,12 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE DefaultSignatures #-} -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveFunctor #-} -{-# LANGUAGE DeriveFoldable #-} -{-# LANGUAGE DeriveTraversable #-} -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE CPP #-} +{-# LANGUAGE DefaultSignatures #-} +{-# LANGUAGE DeriveDataTypeable #-} +{-# LANGUAGE DeriveFoldable #-} +{-# LANGUAGE DeriveFunctor #-} +{-# LANGUAGE DeriveTraversable #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeSynonymInstances #-} -- | -- Convert Haskell values to and from HTTP API data @@ -14,52 +14,61 @@ module Web.Internal.HttpApiData where #if __GLASGOW_HASKELL__ < 710 -import Control.Applicative -import Data.Foldable (Foldable) -import Data.Traversable (Traversable(traverse)) +import Control.Applicative +import Data.Foldable (Foldable) +import Data.Traversable (Traversable (traverse)) #endif -import Control.Arrow ((&&&), left) -import Control.Monad ((<=<)) +import Control.Arrow (left, (&&&)) +import Control.Monad ((<=<)) -import Data.Monoid -import Data.ByteString (ByteString) -import qualified Data.ByteString as BS - -import Data.Int -import Data.Word - -import Data.Text (Text) -import Data.Text.Encoding (encodeUtf8, decodeUtf8') -import Data.Text.Read (signed, decimal, rational, Reader) -import qualified Data.Text as T -import qualified Data.Text.Lazy as L - -import Data.Time.Locale.Compat -import Data.Time -import Data.Version +import Data.ByteString (ByteString) +import qualified Data.ByteString as BS +import qualified Data.ByteString.Lazy as LBS +import Data.Monoid + +import qualified Data.Fixed as F +import Data.Int +import Data.Word + +import Data.Text (Text) +import qualified Data.Text as T +import Data.Text.Encoding (decodeUtf8With, decodeUtf8', encodeUtf8) +import Data.Text.Encoding.Error (lenientDecode) +import qualified Data.Text.Lazy as L +import Data.Text.Read (Reader, decimal, rational, + signed) + +import Data.Time +#if __GLASGOW_HASKELL__ < 710 +import Data.Time.Locale.Compat +#endif +import Data.Version #if MIN_VERSION_base(4,8,0) -import Data.Void -import Numeric.Natural +import Data.Void +import Numeric.Natural #endif -import Text.Read (readMaybe) -import Text.ParserCombinators.ReadP (readP_to_S) +import Text.ParserCombinators.ReadP (readP_to_S) +import Text.Read (readMaybe) #if USE_TEXT_SHOW -import TextShow (TextShow, showt) +import TextShow (TextShow, showt) #endif -import qualified Data.UUID.Types as UUID +import qualified Data.UUID.Types as UUID -import Data.Typeable (Typeable) -import Data.Data (Data) -import qualified Data.ByteString.Builder as BS -import qualified Network.HTTP.Types as H +import qualified Data.ByteString.Builder as BS +import Data.Data (Data) +import Data.Typeable (Typeable) +import qualified Network.HTTP.Types as H -import qualified Data.Attoparsec.Text as Atto -import qualified Data.Attoparsec.Time as Atto +import qualified Data.Attoparsec.Text as Atto +import qualified Data.Attoparsec.Time as Atto + +import Web.Cookie (SetCookie, parseSetCookie, + renderSetCookie) -- $setup @@ -445,6 +454,8 @@ instance ToHttpApiData Word32 where toUrlPiece = showt; toEncodedUrlPiece = unsafeToEncodedUrlPiece instance ToHttpApiData Word64 where toUrlPiece = showt; toEncodedUrlPiece = unsafeToEncodedUrlPiece +instance F.HasResolution a => ToHttpApiData (F.Fixed a) where toUrlPiece = showt; toEncodedUrlPiece = unsafeToEncodedUrlPiece + -- | -- >>> toUrlPiece (fromGregorian 2015 10 03) -- "2015-10-03" @@ -530,6 +541,20 @@ toUrlPiece (Left x) = "left " <> toUrlPiece x toUrlPiece (Right x) = "right " <> toUrlPiece x +-- | /Note:/ this instance works correctly for alphanumeric name and value +-- +-- >>> let Right c = parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookie +-- >>> toUrlPiece c +-- "SESSID=r2t5uvjq435r4q7ib3vtdjq120" +-- +-- >>> toHeader c +-- "SESSID=r2t5uvjq435r4q7ib3vtdjq120" +-- +instance ToHttpApiData SetCookie where + toUrlPiece = decodeUtf8With lenientDecode . toHeader + toHeader = LBS.toStrict . BS.toLazyByteString . renderSetCookie + -- toEncodedUrlPiece = renderSetCookie -- doesn't do things. + -- | -- >>> parseUrlPiece "_" :: Either Text () -- Right () @@ -584,6 +609,9 @@ instance FromHttpApiData Text where parseUrlPiece = Right instance FromHttpApiData L.Text where parseUrlPiece = Right . L.fromStrict +instance F.HasResolution a => FromHttpApiData (F.Fixed a) where + parseUrlPiece = runReader rational + -- | -- >>> toGregorian <$> parseUrlPiece "2016-12-01" -- Right (2016,12,1) @@ -664,6 +692,14 @@ parseHeader = Right . LenientData . parseHeader parseQueryParam = Right . LenientData . parseQueryParam +-- | /Note:/ this instance works correctly for alphanumeric name and value +-- +-- >>> parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookie +-- Right (SetCookie {setCookieName = "SESSID", setCookieValue = "r2t5uvjq435r4q7ib3vtdjq120", setCookiePath = Nothing, setCookieExpires = Nothing, setCookieMaxAge = Nothing, setCookieDomain = Nothing, setCookieHttpOnly = False, setCookieSecure = False, setCookieSameSite = Nothing}) +instance FromHttpApiData SetCookie where + parseUrlPiece = parseHeader . encodeUtf8 + parseHeader = Right . parseSetCookie + ------------------------------------------------------------------------------- -- Attoparsec helpers ------------------------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-api-data-0.3.8.1/test/Web/Internal/HttpApiDataSpec.hs new/http-api-data-0.3.10/test/Web/Internal/HttpApiDataSpec.hs --- old/http-api-data-0.3.8.1/test/Web/Internal/HttpApiDataSpec.hs 2018-03-15 00:11:02.000000000 +0100 +++ new/http-api-data-0.3.10/test/Web/Internal/HttpApiDataSpec.hs 2018-10-05 13:27:14.000000000 +0200 @@ -3,15 +3,19 @@ module Web.Internal.HttpApiDataSpec (spec) where import Control.Applicative +import qualified Data.Fixed as F import Data.Int +import Data.Char import Data.Word import Data.Time import qualified Data.Text as T +import qualified Data.Text.Encoding as TE import qualified Data.Text.Lazy as L import qualified Data.ByteString as BS import Data.ByteString.Builder (toLazyByteString) import Data.Version import qualified Data.UUID.Types as UUID +import Web.Cookie (SetCookie, defaultSetCookie, setCookieName, setCookieValue) import Data.Proxy @@ -39,30 +43,24 @@ encodedUrlPieceProp :: ToHttpApiData a => a -> Property encodedUrlPieceProp x = toLazyByteString (toEncodedUrlPiece (toUrlPiece x)) === toLazyByteString (toEncodedUrlPiece x) - +-- | Check 'ToHttpApiData' and 'FromHttpApiData' compatibility checkUrlPiece :: forall a. (Eq a, ToHttpApiData a, FromHttpApiData a, Show a, Arbitrary a) => Proxy a -> String -> Spec -checkUrlPiece _ name = prop name (toUrlPiece <=> parseUrlPiece :: a -> Property) +checkUrlPiece _ = checkUrlPiece' (arbitrary :: Gen a) --- | Check with given generator checkUrlPiece' :: forall a. (Eq a, ToHttpApiData a, FromHttpApiData a, Show a) => Gen a -> String -> Spec -checkUrlPiece' gen name = prop name $ forAll gen (toUrlPiece <=> parseUrlPiece) +checkUrlPiece' gen name = describe name $ do + prop "toUrlPiece <=> parseUrlPiece" $ forAll gen (toUrlPiece <=> parseUrlPiece :: a -> Property) + prop "toQueryParam <=> parseQueryParam" $ forAll gen (toQueryParam <=> parseQueryParam :: a -> Property) + prop "toHeader <=> parseHeader" $ forAll gen (toHeader <=> parseHeader :: a -> Property) + prop "toEncodedUrlPiece encodes correctly" $ forAll gen encodedUrlPieceProp -- | Check case insensitivity for @parseUrlPiece@. checkUrlPieceI :: forall a. (Eq a, ToHttpApiData a, FromHttpApiData a, Arbitrary a) => Proxy a -> String -> Spec checkUrlPieceI _ = checkUrlPiece (Proxy :: Proxy (RandomCase a)) --- | Check that 'toEncodedUrlPiece' is equivallent to default implementation. -checkEncodedUrlPiece :: forall a. (Show a, ToHttpApiData a, Arbitrary a) => Proxy a -> String -> Spec -checkEncodedUrlPiece _ = checkEncodedUrlPiece' (arbitrary :: Gen a) - --- | Check that 'toEncodedUrlPiece' is equivallent to default implementation. --- Use a given generator. -checkEncodedUrlPiece' :: forall a. (Show a, ToHttpApiData a) => Gen a -> String -> Spec -checkEncodedUrlPiece' gen name = prop name $ forAll gen encodedUrlPieceProp - spec :: Spec spec = do - describe "toUrlPiece <=> parseUrlPiece" $ do + describe "Instances" $ do checkUrlPiece (Proxy :: Proxy ()) "()" checkUrlPiece (Proxy :: Proxy Char) "Char" checkUrlPieceI (Proxy :: Proxy Bool) "Bool" @@ -89,6 +87,15 @@ checkUrlPiece' nominalDiffTimeGen "NominalDiffTime" checkUrlPiece (Proxy :: Proxy Version) "Version" checkUrlPiece' uuidGen "UUID" + checkUrlPiece' setCookieGen "Cookie" + + checkUrlPiece (Proxy :: Proxy F.Uni) "Uni" + checkUrlPiece (Proxy :: Proxy F.Deci) "Deci" + checkUrlPiece (Proxy :: Proxy F.Centi) "Centi" + checkUrlPiece (Proxy :: Proxy F.Milli) "Milli" + checkUrlPiece (Proxy :: Proxy F.Micro) "Micro" + checkUrlPiece (Proxy :: Proxy F.Nano) "Nano" + checkUrlPiece (Proxy :: Proxy F.Pico) "Pico" checkUrlPiece (Proxy :: Proxy (Maybe String)) "Maybe String" checkUrlPieceI (Proxy :: Proxy (Maybe Integer)) "Maybe Integer" @@ -99,43 +106,6 @@ checkUrlPiece (Proxy :: Proxy Natural) "Natural" #endif - describe "toEncodedUrlPiece encodes correctly" $ do - checkEncodedUrlPiece (Proxy :: Proxy ()) "()" - checkEncodedUrlPiece (Proxy :: Proxy Char) "Char" - checkEncodedUrlPiece (Proxy :: Proxy Bool) "Bool" - checkEncodedUrlPiece (Proxy :: Proxy Ordering) "Ordering" - checkEncodedUrlPiece (Proxy :: Proxy Int) "Int" - checkEncodedUrlPiece (Proxy :: Proxy Int8) "Int8" - checkEncodedUrlPiece (Proxy :: Proxy Int16) "Int16" - checkEncodedUrlPiece (Proxy :: Proxy Int32) "Int32" - checkEncodedUrlPiece (Proxy :: Proxy Int64) "Int64" - checkEncodedUrlPiece (Proxy :: Proxy Integer) "Integer" - checkEncodedUrlPiece (Proxy :: Proxy Word) "Word" - checkEncodedUrlPiece (Proxy :: Proxy Word8) "Word8" - checkEncodedUrlPiece (Proxy :: Proxy Word16) "Word16" - checkEncodedUrlPiece (Proxy :: Proxy Word32) "Word32" - checkEncodedUrlPiece (Proxy :: Proxy Word64) "Word64" - checkEncodedUrlPiece (Proxy :: Proxy String) "String" - checkEncodedUrlPiece (Proxy :: Proxy T.Text) "Text.Strict" - checkEncodedUrlPiece (Proxy :: Proxy L.Text) "Text.Lazy" - checkEncodedUrlPiece (Proxy :: Proxy Day) "Day" - checkEncodedUrlPiece' timeOfDayGen "TimeOfDay" - checkEncodedUrlPiece' localTimeGen "LocalTime" - checkEncodedUrlPiece' zonedTimeGen "ZonedTime" - checkEncodedUrlPiece' utcTimeGen "UTCTime" - checkEncodedUrlPiece' nominalDiffTimeGen "NominalDiffTime" - checkEncodedUrlPiece (Proxy :: Proxy Version) "Version" - checkEncodedUrlPiece' uuidGen "UUID" - - checkEncodedUrlPiece (Proxy :: Proxy (Maybe String)) "Maybe String" - checkEncodedUrlPiece (Proxy :: Proxy (Maybe Integer)) "Maybe Integer" - checkEncodedUrlPiece (Proxy :: Proxy (Either Integer T.Text)) "Either Integer Text" - checkEncodedUrlPiece (Proxy :: Proxy (Either Version Day)) "Either Version Day" - -#if MIN_VERSION_base(4,8,0) - checkEncodedUrlPiece (Proxy :: Proxy Natural) "Natural" -#endif - it "bad integers are rejected" $ do parseUrlPieceMaybe (T.pack "123hello") `shouldBe` (Nothing :: Maybe Int) @@ -170,3 +140,9 @@ nominalDiffTimeGen :: Gen NominalDiffTime nominalDiffTimeGen = fromInteger <$> arbitrary + +setCookieGen :: Gen SetCookie +setCookieGen = do + n <- TE.encodeUtf8 . T.pack . filter isAlphaNum <$> arbitrary + v <- TE.encodeUtf8 . T.pack . filter isAlphaNum <$> arbitrary + return $ defaultSetCookie { setCookieName = n, setCookieValue = v }
