@@ -1,7 +1,9 @@
1{-# LANGUAGE DataKinds #-}
1{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE DeriveGeneric #-}
2{-# LANGUAGE DeriveGeneric #-}
3{-# LANGUAGE FlexibleInstances #-}
3{-# LANGUAGE FlexibleInstances #-}
4+{-# LANGUAGE FlexibleContexts #-}
4{-# LANGUAGE MultiParamTypeClasses #-}
5{-# LANGUAGE MultiParamTypeClasses #-}
6+{-# LANGUAGE OverloadedStrings #-}
5{-# LANGUAGE TypeOperators #-}
7{-# LANGUAGE TypeOperators #-}
6{-# LANGUAGE TypeSynonymInstances #-}
8{-# LANGUAGE TypeSynonymInstances #-}
7{-# OPTIONS_GHC -fno-warn-orphans #-}
9{-# OPTIONS_GHC -fno-warn-orphans #-}
@@ -42,6 +44,21 @@ spec = describe "Servant.Docs" $ do
42 md `shouldContain` "get an integer in Json or plain text"
44 md `shouldContain` "get an integer in Json or plain text"
43 md `shouldContain` "Posts some Json data"
45 md `shouldContain` "Posts some Json data"
47+ describe "tuple samples" $ do
48+ it "looks like expected" $ do
49+ (toSample (Proxy :: Proxy (TT, UT))) `shouldBe` Just (TT1,UT1)
50+ (toSample (Proxy :: Proxy (TT, UT, UT))) `shouldBe` Just (TT1,UT1,UT1)
51+ (toSamples (Proxy :: Proxy (TT, UT))) `shouldBe`
52+ [ ("(eins, yks)",(TT1,UT1)), ("(eins, kaks)",(TT1,UT2))
53+ , ("(zwei, yks)",(TT2,UT1)), ("(zwei, kaks)",(TT2,UT2))
55+ (toSamples (Proxy :: Proxy (TT, UT, UT))) `shouldBe`
56+ [ ("(eins, yks, yks)",(TT1,UT1,UT1)), ("(eins, yks, kaks)",(TT1,UT1,UT2))
57+ , ("(eins, kaks, yks)",(TT1,UT2,UT1)), ("(eins, kaks, kaks)",(TT1,UT2,UT2))
58+ , ("(zwei, yks, yks)",(TT2,UT1,UT1)), ("(zwei, yks, kaks)",(TT2,UT1,UT2))
59+ , ("(zwei, kaks, yks)",(TT2,UT2,UT1)), ("(zwei, kaks, kaks)",(TT2,UT2,UT2))
46 tests md = do
63 tests md = do
47 it "mentions supported content-types" $ do
64 it "mentions supported content-types" $ do
@@ -81,7 +98,16 @@ instance ToSample Int Int where
81instance MimeRender PlainText Int where
98instance MimeRender PlainText Int where
82 mimeRender _ = cs . show
99 mimeRender _ = cs . show
85type TestApi1 = Get '[JSON, PlainText] Int
101type TestApi1 = Get '[JSON, PlainText] Int
86 :<|> ReqBody '[JSON] String :> Post '[JSON] Datatype1
102 :<|> ReqBody '[JSON] String :> Post '[JSON] Datatype1
104+data TT = TT1 | TT2 deriving (Show, Eq)
105+data UT = UT1 | UT2 deriving (Show, Eq)
107+instance ToSample TT TT where
108+ toSample _ = Just TT1
109+ toSamples _ = [("eins", TT1), ("zwei", TT2)]
111+instance ToSample UT UT where
112+ toSample _ = Just UT1
113+ toSamples _ = [("yks", UT1), ("kaks", UT2)]