@@ -4,9 +4,10 @@ import Network.Wai.Application.Static
44import Test.Hspec.Monadic
55import Test.Hspec.QuickCheck
66import Test.Hspec.HUnit ()
7−import Test.HUnit ((@?=))
7+import Test.HUnit ((@?=), assert)
88import Distribution.Simple.Utils (isInfixOf)
99import qualified Data.ByteString.Char8 as S8
10+import qualified Data.ByteString.Lazy.Char8 as L8
1011import qualified Data.Text as T
1112import qualified Data.Text.Encoding as TE
1213
@@ -16,6 +17,7 @@ import Network.Wai.Test
1617
1718import Network.Socket.Internal as Sock
1819import qualified Network.HTTP.Types as H
20+import Control.Monad.IO.Class (liftIO)
1921
2022defRequest :: Request
2123defRequest = Request {
@@ -37,8 +39,12 @@ setRawPathInfo r rawPinfo =
3739 let pInfo = T.split (== '/') $ TE.decodeUtf8 rawPinfo
3840 in r { rawPathInfo = rawPinfo, pathInfo = pInfo }
3941
42+
43+
4044main :: IO a
4145main = hspecX $ do
46+ let must = liftIO . assert
47+
4248 describe "Pieces: pathFromPieces" $ do
4349 it "converts to a file path" $
4450 (pathFromPieces "prefix" ["a", "bc"]) @?= "prefix/a/bc"
@@ -48,7 +54,6 @@ main = hspecX $ do
4854 all (\p -> ("/" ++ (unfixPathName $ T.unpack p)) `isInfixOf` (pathFromPieces "root" $ piecesT)) piecesT
4955
5056
51−
5257 let cacheLookup = Forever (\fp h -> fp == "tests/runtests.hs" && h == "cached")
5358 let statApp = flip runSession $ staticApp $ (defaultStaticSettings cacheLookup) {ssFolder = "tests"}
5459 describe "staticApp" $ do
@@ -62,6 +67,15 @@ main = hspecX $ do
6267 assertStatus 200 =<<
6368 request (setRawPathInfo defRequest path)
6469
70+ it "directory listing for index" $ statApp $ do
71+ resp <- request (setRawPathInfo defRequest "a/")
72+ assertStatus 200 resp
73+ let body = simpleBody resp
74+ let contains a b = isInfixOf b (L8.unpack a)
75+ must $ body `contains` "<img src=\"../.hidden/haskell.png\" />"
76+ must $ body `contains` "<img src=\"../.hidden/folder.png\" alt=\"Folder\" />"
77+ must $ body `contains` "<a href=\"b\">b</a>"
78+
6579 it "404 for non-existant files" $ statApp $
6680 assertStatus 404 =<<
6781 request (setRawPathInfo defRequest "doesNotExist")