More QQ tests.
This commit is contained in:
parent
4ebd52b106
commit
d2f7e12bd9
1 changed files with 67 additions and 11 deletions
|
@ -14,6 +14,66 @@ import Test.Hspec
|
||||||
import Servant.API
|
import Servant.API
|
||||||
{-import Servant.API.QQ-}
|
{-import Servant.API.QQ-}
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
-- Types for testing
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
type SimpleGet = [sitemap|
|
||||||
|
GET hello ()
|
||||||
|
|]
|
||||||
|
type SimpleGet' = "hello" :> Get ()
|
||||||
|
type SimpleGet'' = "hello" :> Get Bool
|
||||||
|
|
||||||
|
type SimpleGet2 = [sitemap|
|
||||||
|
GET hello Bool
|
||||||
|
|]
|
||||||
|
type SimpleGet2' = "hello" :> Get Bool
|
||||||
|
type SimpleGet2'' = "hello" :> Get Int
|
||||||
|
|
||||||
|
type SimplePost = [sitemap|
|
||||||
|
POST hello ()
|
||||||
|
|]
|
||||||
|
type SimplePost' = "hello" :> Post ()
|
||||||
|
type SimplePost'' = "hello" :> Post Bool
|
||||||
|
|
||||||
|
type SimplePost2 = [sitemap|
|
||||||
|
POST hello Bool
|
||||||
|
|]
|
||||||
|
type SimplePost2' = "hello" :> Post Bool
|
||||||
|
type SimplePost2'' = "hello" :> Post ()
|
||||||
|
|
||||||
|
type SimpleReqBody = [sitemap|
|
||||||
|
POST hello () -> Bool
|
||||||
|
|]
|
||||||
|
type SimpleReqBody' = "hello" :> ReqBody () :> Post Bool
|
||||||
|
type SimpleReqBody'' = "hello" :> ReqBody Bool :> Post ()
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
-- Spec
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
spec :: Spec
|
||||||
|
spec = do
|
||||||
|
describe "'sitemap' QuasiQuoter" $ do
|
||||||
|
it "Handles simple GET types" $ do
|
||||||
|
(u::SimpleGet) ~= (u::SimpleGet' ) ~> True
|
||||||
|
(u::SimpleGet) ~= (u::SimpleGet'' ) ~> False
|
||||||
|
(u::SimpleGet2) ~= (u::SimpleGet2' ) ~> True
|
||||||
|
(u::SimpleGet2) ~= (u::SimpleGet2'') ~> False
|
||||||
|
it "Handles simple POST types" $ do
|
||||||
|
(u::SimplePost) ~= (u::SimplePost' ) ~> True
|
||||||
|
(u::SimplePost) ~= (u::SimplePost'' ) ~> False
|
||||||
|
(u::SimplePost2) ~= (u::SimplePost2' ) ~> True
|
||||||
|
(u::SimplePost2) ~= (u::SimplePost2'') ~> False
|
||||||
|
it "Handles simple request body types" $ do
|
||||||
|
(u::SimpleReqBody) ~= (u::SimpleReqBody' ) ~> True
|
||||||
|
(u::SimpleReqBody) ~= (u::SimpleReqBody'') ~> False
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
-- Utilities
|
||||||
|
--------------------------------------------------------------------------
|
||||||
data HTrue
|
data HTrue
|
||||||
data HFalse
|
data HFalse
|
||||||
|
|
||||||
|
@ -22,16 +82,12 @@ class TypeEq x y b | x y -> b where { areEq :: x -> y -> Bool }
|
||||||
instance TypeEq x x HTrue where { areEq _ _ = True }
|
instance TypeEq x x HTrue where { areEq _ _ = True }
|
||||||
instance b ~ HFalse => TypeEq x y b where { areEq _ _ = False}
|
instance b ~ HFalse => TypeEq x y b where { areEq _ _ = False}
|
||||||
|
|
||||||
type SimpleGet = [sitemap|
|
infix 4 ~=
|
||||||
GET hello ()
|
(~=) :: TypeEq x y b => x -> y -> Bool
|
||||||
|]
|
(~=) = areEq
|
||||||
|
|
||||||
type SimpleGet' = "hello" :> Get ()
|
u :: a
|
||||||
type SimpleGet'' = "hello" :> Get Bool
|
u = undefined
|
||||||
|
|
||||||
spec :: Spec
|
infix 3 ~>
|
||||||
spec = do
|
(~>) = shouldBe
|
||||||
describe "'sitemap' QuasiQuoter" $ do
|
|
||||||
it "Handles simple GET types" $ do
|
|
||||||
areEq (undefined::SimpleGet) (undefined::SimpleGet') `shouldBe` True
|
|
||||||
areEq (undefined::SimpleGet) (undefined::SimpleGet'') `shouldBe` False
|
|
||||||
|
|
Loading…
Reference in a new issue