{-# LANGUAGE QuasiQuotes, TypeFamilies, TemplateHaskell, MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE FlexibleInstances #-} module Test.Widget (widgetTest) where import Test.Hspec import Test.Hspec.HUnit import Yesod.Core hiding (Request) import Yesod.Content import Yesod.Dispatch import Yesod.Widget import Text.Julius import Network.Wai import Network.Wai.Test import qualified Data.ByteString.Lazy.Char8 as L8 data Y = Y mkMessage "Y" "test" "en" type Strings = [String] mkYesod "Y" [$parseRoutes| / RootR GET /foo/*Strings MultiR GET /whamlet WhamletR GET |] instance Yesod Y where approot _ = "http://test" getRootR = defaultLayout $ addJuliusBody [$julius||] getMultiR _ = return () data Msg = Hello | Goodbye instance RenderMessage Y Msg where renderMessage _ ("en":_) Hello = "Hello" renderMessage _ ("es":_) Hello = "Hola" renderMessage _ ("en":_) Goodbye = "Goodbye" renderMessage _ ("es":_) Goodbye = "Adios" renderMessage a (_:xs) y = renderMessage a xs y renderMessage a [] y = renderMessage a ["en"] y getWhamletR = defaultLayout [$whamlet|

Test

@{WhamletR}

_{Goodbye}

_{MsgAnother} ^{embed} |] where embed = [$whamlet|

Embed|] widgetTest :: IO [IO Spec] widgetTest = describe "Test.Widget" [ it "addJuliusBody" case_addJuliusBody , it "whamlet" case_whamlet ] runner f = toWaiApp Y >>= runSession f defaultRequest = Request { pathInfo = [] , requestHeaders = [] , queryString = [] , requestMethod = "GET" } case_addJuliusBody = runner $ do res <- request defaultRequest assertBody "\n" res case_whamlet = runner $ do res <- request defaultRequest { pathInfo = ["whamlet"] , requestHeaders = [("Accept-Language", "es")] } assertBody "\n

Test

http://test/whamlet

Adios

String

Embed

" res