@@ -0,0 +1,25 @@
1+{-# LANGUAGE OverloadedStrings #-}
2+
3+module RequestSpec where
4+
5+import Data.Conduit
6+import Data.Conduit.List
7+import Network.Wai.Handler.Warp.Request
8+import Network.Wai.Handler.Warp.Types
9+import Test.Hspec
10+
11+spec :: Spec
12+spec = describe "takeHeaders" $ do
13+ it "takes until blank" $
14+ blankSafe >>= (`shouldBe` ["foo", "bar", "baz"])
15+ it "throws OverLargeHeader when too many" $
16+ tooMany `shouldThrow` overLargeHeader
17+ it "throws OverLargeHeader when too large" $
18+ tooLarge `shouldThrow` overLargeHeader
19+ where
20+ blankSafe = runResourceT $ (sourceList ["f", "oo\n", "bar\nbaz\n\r\n"]) $$ takeHeaders
21+ tooMany = runResourceT $ (sourceList $ repeat "f\n") $$ takeHeaders
22+ tooLarge = runResourceT $ (sourceList $ repeat "f") $$ takeHeaders
23+
24+overLargeHeader :: Selector InvalidRequest
25+overLargeHeader e = e == OverLargeHeader