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 - psimons@suse.com
+
+- 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
-maintainer: Nickolay Kudasov
+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
+maintainer: Nickolay Kudasov
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 }