@@ -4,12 +4,15 @@ import Test.Framework.Providers.HUnit
44import Test.HUnit hiding (Test)
55
66import Network.Wai
7+import Network.Wai.Test
78import Network.Wai.Parse
89import qualified Data.ByteString as S
910import qualified Data.ByteString.Char8 as S8
1011import qualified Data.ByteString.Lazy.Char8 as L8
1112import Control.Arrow
1213
14+import Network.Wai.Middleware.Jsonp
15+
1316import Data.Enumerator (run_, enumList, ($$))
1417import Control.Monad.IO.Class (liftIO)
1518
@@ -27,6 +30,7 @@ testSuite = testGroup "Network.Wai.Parse"
2730 , testCase "killCR" caseKillCR
2831 , testCase "killCRLF" caseKillCRLF
2932 , testCase "takeLine" caseTakeLine
33+ , testCase "jsonp" caseJsonp
3034 ]
3135
3236caseParseQueryString :: Assertion
@@ -191,3 +195,31 @@ caseTakeLine = do
191195 helper haystack needle = do
192196 x <- run_ $ enumList 1 [haystack] $$ takeLine
193197 Just needle @=? x
198+
199+jsonpApp = jsonp $ const $ return $ responseLBS
200+ status200
201+ [("Content-Type", "application/json")]
202+ "{\"foo\":\"bar\"}"
203+
204+caseJsonp :: Assertion
205+caseJsonp = flip runSession jsonpApp $ do
206+ sres1 <- request Request
207+ { queryString = "callback=test"
208+ , requestHeaders = [("Accept", "text/javascript")]
209+ }
210+ assertContentType "text/javascript" sres1
211+ assertBody "test({\"foo\":\"bar\"})" sres1
212+
213+ sres2 <- request Request
214+ { queryString = "call_back=test"
215+ , requestHeaders = [("Accept", "text/javascript")]
216+ }
217+ assertContentType "application/json" sres2
218+ assertBody "{\"foo\":\"bar\"}" sres2
219+
220+ sres3 <- request Request
221+ { queryString = "callback=test"
222+ , requestHeaders = [("Accept", "text/html")]
223+ }
224+ assertContentType "application/json" sres3
225+ assertBody "{\"foo\":\"bar\"}" sres3