{-# LANGUAGE OverloadedStrings #-} module Main where import Test.Framework (defaultMain) import Test.Framework.Providers.HUnit (testCase) import Test.HUnit (Assertion, (@=?)) import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL import qualified Data.Text as T import Network.Wai (Application, responseLBS, Request(..)) import Network.Wai.Test import qualified Network.HTTP.Types as H import Network.Wai.Middleware.Route main :: IO () main = defaultMain [ testCase "Split Text" caseSplitText , testCase "Route" caseRoute ] caseSplitText :: Assertion caseSplitText = do [""] @=? sp "" ["", ""] @=? sp "/" ["", "a"] @=? sp "/a" ["", "a", "", "b", ""] @=? sp "/a//b/" where sp = T.split (=='/') caseRoute :: Assertion caseRoute = flip runSession routedApp $ do -- unhappy, setRawPathInfo has error. it producing 'pathInfo' as @[\"\"]@ rRoot <- request defaultRequest assertBody "" rRoot testOne "foo" "foo" testOne "foo/bar" "foo/bar" testOne "foo/baz" "foo/#" testOne "foo/bar/baz" "#/#/#" testOne "foo/bar/bast" "#/#/bast" testOne "last/bar/baz" "#/#/#" testOne "will/never/be/routed" "noroute" -- Weird \"Last slash\" behaviour testOne "foo/bar/" "foo/bar" -- test @POST@ rPost <- request $ setRawPathInfo defaultRequest {requestMethod="POST"} "foo/bar" assertBody "post foo/bar" rPost where testOne url answer = do resp <- mkRequest url assertStatus 200 resp assertBody answer resp -- | Routed application routedApp :: Application routedApp = dispatch_ mappings $ testApp "noroute" where mappings = mkRoutes' [ Get "" $ testApp "" , Get "foo" $ testApp "foo" , Get "foo/bar" $ testApp "foo/bar" , Get "foo/#" $ testApp "foo/#" , Get "#/#/bast" $ testApp "#/#/bast" , Get "#/#/#" $ testApp "#/#/#" , Get "last/*" $ testApp "#/*" , Post "foo/bar" $ testApp "post foo/bar" ] -- | Simple test application testApp :: BL.ByteString -> Application testApp answer _req = return $ responseLBS H.ok200 [] answer -- | Default request mkRequest :: B.ByteString -> Session SResponse mkRequest = request . setRawPathInfo defaultRequest