@@ -4,12 +4,15 @@ import Test.Framework.Providers.HUnit
4import Test.HUnit hiding (Test)
4import Test.HUnit hiding (Test)
6import Network.Wai
6import Network.Wai
7+import Network.Wai.Test
7import Network.Wai.Parse
8import Network.Wai.Parse
8import qualified Data.ByteString as S
9import qualified Data.ByteString as S
9import qualified Data.ByteString.Char8 as S8
10import qualified Data.ByteString.Char8 as S8
10import qualified Data.ByteString.Lazy.Char8 as L8
11import qualified Data.ByteString.Lazy.Char8 as L8
11import Control.Arrow
12import Control.Arrow
14+import Network.Wai.Middleware.Jsonp
13import Data.Enumerator (run_, enumList, ($$))
16import Data.Enumerator (run_, enumList, ($$))
14import Control.Monad.IO.Class (liftIO)
17import Control.Monad.IO.Class (liftIO)
@@ -27,6 +30,7 @@ testSuite = testGroup "Network.Wai.Parse"
27 , testCase "killCR" caseKillCR
30 , testCase "killCR" caseKillCR
28 , testCase "killCRLF" caseKillCRLF
31 , testCase "killCRLF" caseKillCRLF
29 , testCase "takeLine" caseTakeLine
32 , testCase "takeLine" caseTakeLine
33+ , testCase "jsonp" caseJsonp
32caseParseQueryString :: Assertion
36caseParseQueryString :: Assertion
@@ -191,3 +195,31 @@ caseTakeLine = do
191 helper haystack needle = do
195 helper haystack needle = do
192 x <- run_ $ enumList 1 [haystack] $$ takeLine
196 x <- run_ $ enumList 1 [haystack] $$ takeLine
193 Just needle @=? x
197 Just needle @=? x
199+jsonpApp = jsonp $ const $ return $ responseLBS
201+ [("Content-Type", "application/json")]
204+caseJsonp :: Assertion
205+caseJsonp = flip runSession jsonpApp $ do
206+ sres1 <- request Request
207+ { queryString = "callback=test"
208+ , requestHeaders = [("Accept", "text/javascript")]
210+ assertContentType "text/javascript" sres1
211+ assertBody "test({\"foo\":\"bar\"})" sres1
213+ sres2 <- request Request
214+ { queryString = "call_back=test"
215+ , requestHeaders = [("Accept", "text/javascript")]
217+ assertContentType "application/json" sres2
218+ assertBody "{\"foo\":\"bar\"}" sres2
220+ sres3 <- request Request
221+ { queryString = "callback=test"
222+ , requestHeaders = [("Accept", "text/html")]
224+ assertContentType "application/json" sres3
225+ assertBody "{\"foo\":\"bar\"}" sres3