git.iko.soy/servant-quickcheck
on master help sign in
Support for servant-0.13
commitd46b7183ad4faff011311dcccfab7ae0b5ea792a authorOleg Grenrus <oleg.grenrus@iki.fi> dateFri 9 Feb 2018, 16:33 (9 years ago) parent35bd148
5 files changed+94−30
.travis.yml+27−16 CHANGELOG.yaml+8 example/Main.hs+31 servant-quickcheck.cabal+21−7 src/Servant/QuickCheck/Internal/HasGenRequest.hs+7−7
.travis.yml+27−16
@@ -1,6 +1,6 @@
11# This Travis job script has been generated by a script via
22#
3−# make_travis_yml_2.hs '--branch' 'master' '-o' '.travis.yml' 'servant-quickcheck.cabal'
3+# runghc make_travis_yml_2.hs '--branch' 'master' '-o' '.travis.yml' 'servant-quickcheck.cabal'
44#
55# For more information, see https://github.com/hvr/multi-ghc-travis
66#
@@ -28,6 +28,8 @@ before_cache:
2828 - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar
2929 - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar.idx
3030
31+ - rm -rfv $HOME/.cabal/packages/head.hackage
32+
3133matrix:
3234 include:
3335 - compiler: "ghc-7.10.3"
@@ -36,15 +38,19 @@ matrix:
3638 - compiler: "ghc-8.0.2"
3739 # env: TEST=--disable-tests BENCH=--disable-benchmarks
3840 addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-8.0.2], sources: [hvr-ghc]}}
39− - compiler: "ghc-8.2.1"
41+ - compiler: "ghc-8.2.2"
4042 # env: TEST=--disable-tests BENCH=--disable-benchmarks
41− addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-8.2.1], sources: [hvr-ghc]}}
43+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-8.2.2], sources: [hvr-ghc]}}
4244
4345before_install:
4446 - HC=${CC}
4547 - HCPKG=${HC/ghc/ghc-pkg}
4648 - unset CC
47− - PATH=/opt/ghc/bin:/opt/ghc-ppa-tools/bin:$PATH
49+ - ROOTDIR=$(pwd)
50+ - mkdir -p $HOME/.local/bin
51+ - "PATH=/opt/ghc/bin:/opt/ghc-ppa-tools/bin:$HOME/local/bin:$PATH"
52+ - HCNUMVER=$(( $(${HC} --numeric-version|sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+).*/\1 * 10000 + \2 * 100 + \3/') ))
53+ - echo $HCNUMVER
4854
4955install:
5056 - cabal --version
@@ -53,12 +59,15 @@ install:
5359 - TEST=${TEST---enable-tests}
5460 - HADDOCK=${HADDOCK-true}
5561 - INSTALLED=${INSTALLED-true}
62+ - GHCHEAD=${GHCHEAD-false}
5663 - travis_retry cabal update -v
57− - sed -i.bak 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config
58− - rm -fv cabal.project.local
59− - "echo 'packages: .' > cabal.project"
64+ - "sed -i.bak 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config"
65+ - rm -fv cabal.project cabal.project.local
66+ - grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
67+ - "printf 'packages: \".\"\\n' > cabal.project"
68+ - cat cabal.project
6069 - if [ -f "./configure.ac" ]; then
61− (cd "."; autoreconf -i);
70+ (cd "." && autoreconf -i);
6271 fi
6372 - rm -f cabal.project.freeze
6473 - cabal new-build -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" --dep -j2 all
@@ -70,26 +79,28 @@ install:
7079# any command which exits with a non-zero exit code causes the build to fail.
7180script:
7281 # test that source-distributions can be generated
73− - (cd "."; cabal sdist)
82+ - (cd "." && cabal sdist)
7483 - mv "."/dist/servant-quickcheck-*.tar.gz ${DISTDIR}/
75− - cd ${DISTDIR}
84+ - cd ${DISTDIR} || false
7685 - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
77− - "printf 'packages: servant-quickcheck-*/*.cabal\n' > cabal.project"
86+ - "printf 'packages: servant-quickcheck-*/*.cabal\\n' > cabal.project"
87+ - cat cabal.project
7888 # this builds all libraries and executables (without tests/benchmarks)
7989 - cabal new-build -w ${HC} --disable-tests --disable-benchmarks all
8090
8191 # Build with installed constraints for packages in global-db
82− - if $INSTALLED; then
83− echo cabal new-build -w ${HC} --disable-tests --disable-benchmarks $(${HCPKG} list --global --simple-output --names-only | sed 's/\([a-zA-Z0-9-]\{1,\}\) */--constraint="\1 installed" /g') all | sh;
84− else echo "Not building with installed constraints"; fi
92+ - if $INSTALLED; then echo cabal new-build -w ${HC} --disable-tests --disable-benchmarks $(${HCPKG} list --global --simple-output --names-only | sed 's/\([a-zA-Z0-9-]\{1,\}\) */--constraint="\1 installed" /g') all | sh; else echo "Not building with installed constraints"; fi
8593
8694 # build & run tests, build benchmarks
8795 - cabal new-build -w ${HC} ${TEST} ${BENCH} all
88− - if [ "x$TEST" = "x--enable-tests" ]; then cabal new-test -w ${HC} ${TEST} all; fi
96+ - if [ "x$TEST" = "x--enable-tests" ]; then cabal new-test -w ${HC} ${TEST} ${BENCH} all; fi
97+
98+ # cabal check
99+ - (cd servant-quickcheck-* && cabal check)
89100
90101 # haddock
91102 - rm -rf ./dist-newstyle
92− - if $HADDOCK; then cabal new-haddock -w ${HC} --disable-tests --disable-benchmarks all; else echo "Skipping haddock generation";fi
103+ - if $HADDOCK; then cabal new-haddock -w ${HC} ${TEST} ${BENCH} all; else echo "Skipping haddock generation";fi
93104
94105# REGENDATA ["--branch","master","-o",".travis.yml","servant-quickcheck.cabal"]
95106# EOF
CHANGELOG.yaml+8
@@ -2,6 +2,14 @@ upcoming:
22
33releases:
44
5+ - version: "0.0.6.0"
6+ changes:
7+
8+ - description: Support for servant-0.12
9+ issue: none
10+ authors: phadej
11+ date: 2018-02-09
12+
513 - version: "0.0.5.0"
614 changes:
715
example/Main.hsnew file+31
@@ -0,0 +1,31 @@
1+{-# LANGUAGE OverloadedStrings, DataKinds #-}
2+module Main (main) where
3+
4+import Servant
5+import Servant.QuickCheck
6+import Test.Hspec
7+import Data.Text (Text)
8+import System.Environment (getArgs)
9+
10+main :: IO ()
11+main = do
12+ args <- getArgs
13+ case args of
14+ [] -> putStrLn "Not running without arguments. Try --help or --fail-fast."
15+ _ -> hspec spec
16+
17+-- Change to String to reproduce
18+-- https://github.com/haskell-servant/servant-quickcheck/issues/41
19+type API = Get '[PlainText] Text
20+
21+api :: Proxy API
22+api = Proxy
23+
24+server :: Server API
25+server = return "Sigurð Fáfnirslayer"
26+
27+spec :: Spec
28+spec = describe "example server" $
29+ it "mangles UTF-8 in error messages" $
30+ withServantServer api (return server) $ \burl ->
31+ serverSatisfies api burl defaultArgs (getsHaveCacheControlHeader <%> mempty)
servant-quickcheck.cabal+21−7
@@ -1,5 +1,5 @@
11name: servant-quickcheck
2−version: 0.0.5.0
2+version: 0.0.6.0
33synopsis: QuickCheck entire APIs
44description:
55 This packages provides QuickCheck properties that are tested across an entire
@@ -17,7 +17,7 @@ extra-source-files:
1717tested-with:
1818 GHC==7.10.3,
1919 GHC==8.0.2,
20− GHC==8.2.1
20+ GHC==8.2.2
2121
2222source-repository head
2323 type: git
@@ -45,14 +45,14 @@ library
4545 , hspec >= 2.2 && < 2.5
4646 , http-client >= 0.4.30 && < 0.6
4747 , http-media >= 0.6 && <0.8
48− , http-types > 0.8 && < 0.11
48+ , http-types > 0.8 && < 0.13
4949 , mtl > 2.1 && < 2.3
5050 , pretty == 1.1.*
5151 , process >= 1.2 && < 1.7
52− , QuickCheck > 2.7 && < 2.11
53− , servant > 0.6 && < 0.13
54− , servant-client > 0.6 && < 0.13
55− , servant-server > 0.6 && < 0.13
52+ , QuickCheck > 2.7 && < 2.12
53+ , servant >= 0.13 && < 0.14
54+ , servant-client >= 0.13 && < 0.14
55+ , servant-server >= 0.13 && < 0.14
5656 , split == 0.2.*
5757 , string-conversions > 0.3 && < 0.5
5858 , temporary == 1.2.*
@@ -114,3 +114,17 @@ test-suite spec
114114 , ScopedTypeVariables
115115 if flag(long-tests)
116116 cpp-options: -DLONG_TESTS
117+
118+test-suite example
119+ type: exitcode-stdio-1.0
120+ main-is: Main.hs
121+ hs-source-dirs:
122+ example
123+ ghc-options: -Wall
124+ build-depends:
125+ base
126+ , hspec
127+ , servant-server
128+ , servant-quickcheck
129+ , text
130+ default-language: Haskell2010
src/Servant/QuickCheck/Internal/HasGenRequest.hs+7−7
@@ -78,7 +78,7 @@ instance HasGenRequest api => HasGenRequest (Description d :> api) where
7878#endif
7979
8080instance (Arbitrary c, HasGenRequest b, ToHttpApiData c )
81− => HasGenRequest (Capture x c :> b) where
81+ => HasGenRequest (Capture' mods x c :> b) where
8282 genRequest _ = (oldf, do
8383 old' <- old
8484 new' <- toUrlPiece <$> new
@@ -101,10 +101,10 @@ instance (Arbitrary c, HasGenRequest b, ToHttpApiData c )
101101#endif
102102
103103instance (Arbitrary c, KnownSymbol h, HasGenRequest b, ToHttpApiData c)
104− => HasGenRequest (Header h c :> b) where
104+ => HasGenRequest (Header' mods h c :> b) where
105105 genRequest _ = (oldf, do
106106 old' <- old
107− new' <- toUrlPiece <$> new
107+ new' <- toUrlPiece <$> new -- TODO: generate lenient or/and optional
108108 return $ \burl -> let r = old' burl in r {
109109 requestHeaders = (hdr, cs new') : requestHeaders r })
110110 where
@@ -113,9 +113,9 @@ instance (Arbitrary c, KnownSymbol h, HasGenRequest b, ToHttpApiData c)
113113 new = arbitrary :: Gen c
114114
115115instance (AllMimeRender x c, Arbitrary c, HasGenRequest b)
116− => HasGenRequest (ReqBody x c :> b) where
116+ => HasGenRequest (ReqBody' mods x c :> b) where
117117 genRequest _ = (oldf, do
118− old' <- old
118+ old' <- old -- TODO: generate lenient
119119 new' <- new
120120 (ct, bd) <- elements $ allMimeRender (Proxy :: Proxy x) new'
121121 return $ \burl -> let r = old' burl in r {
@@ -127,9 +127,9 @@ instance (AllMimeRender x c, Arbitrary c, HasGenRequest b)
127127 new = arbitrary :: Gen c
128128
129129instance (KnownSymbol x, Arbitrary c, ToHttpApiData c, HasGenRequest b)
130− => HasGenRequest (QueryParam x c :> b) where
130+ => HasGenRequest (QueryParam' mods x c :> b) where
131131 genRequest _ = (oldf, do
132− new' <- new
132+ new' <- new -- TODO: generate lenient or/and optional
133133 old' <- old
134134 return $ \burl -> let r = old' burl
135135 newExpr = param <> "=" <> cs (toQueryParam new')