{-# 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 Text.Lucius import Text.Hamlet 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 /towidget TowidgetR GET |] instance Yesod Y where approot _ = "http://test" getRootR = defaultLayout $ toWidgetBody [$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 getTowidgetR :: Handler RepHtml getTowidgetR = defaultLayout $ do toWidget [julius|foo|] toWidgetHead [julius|foo|] toWidgetBody [julius|foo|] toWidget [lucius|foo{bar:baz}|] toWidgetHead [lucius|foo{bar:baz}|] toWidget [hamlet||] :: Widget toWidgetHead [hamlet||] toWidgetBody [hamlet||] 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