Merge pull request #346 from markwright/master

changes for hspec 1.0, include test/main.hs in yesod-test
This commit is contained in:
Michael Snoyman 2012-05-06 05:16:30 -07:00
commit fd2efbde35
17 changed files with 38 additions and 25 deletions

View File

@ -2,4 +2,4 @@ import Test.Hspec
import qualified YesodCoreTest import qualified YesodCoreTest
main :: IO () main :: IO ()
main = hspecX $ descriptions $ YesodCoreTest.specs main = hspecX $ YesodCoreTest.specs

View File

@ -13,9 +13,9 @@ import qualified YesodCoreTest.WaiSubsite as WaiSubsite
import qualified YesodCoreTest.Redirect as Redirect import qualified YesodCoreTest.Redirect as Redirect
import qualified YesodCoreTest.JsLoader as JsLoader import qualified YesodCoreTest.JsLoader as JsLoader
import Test.Hspec import Test.Hspec.Core (UnevaluatedSpec)
specs :: [Specs] specs :: [UnevaluatedSpec]
specs = specs =
[ cleanPathTest [ cleanPathTest
, exceptionsTest , exceptionsTest

View File

@ -4,6 +4,7 @@
module YesodCoreTest.Cache (cacheTest, Widget) where module YesodCoreTest.Cache (cacheTest, Widget) where
import Test.Hspec import Test.Hspec
import Test.Hspec.Core (UnevaluatedSpec)
import Test.Hspec.HUnit() import Test.Hspec.HUnit()
import Network.Wai import Network.Wai
@ -35,7 +36,7 @@ getRootR = do
Nothing <- cacheLookup key Nothing <- cacheLookup key
return () return ()
cacheTest :: [Spec] cacheTest :: UnevaluatedSpec
cacheTest = cacheTest =
describe "Test.Cache" describe "Test.Cache"
[ it "works" works [ it "works" works

View File

@ -4,6 +4,7 @@
module YesodCoreTest.CleanPath (cleanPathTest, Widget) where module YesodCoreTest.CleanPath (cleanPathTest, Widget) where
import Test.Hspec import Test.Hspec
import Test.Hspec.Core (UnevaluatedSpec)
import Test.Hspec.HUnit() import Test.Hspec.HUnit()
import Yesod.Core hiding (Request) import Yesod.Core hiding (Request)
@ -62,7 +63,7 @@ getBarR, getPlainR :: Handler RepPlain
getBarR = return $ RepPlain "bar" getBarR = return $ RepPlain "bar"
getPlainR = return $ RepPlain "plain" getPlainR = return $ RepPlain "plain"
cleanPathTest :: [Spec] cleanPathTest :: UnevaluatedSpec
cleanPathTest = cleanPathTest =
describe "Test.CleanPath" describe "Test.CleanPath"
[ it "remove trailing slash" removeTrailingSlash [ it "remove trailing slash" removeTrailingSlash

View File

@ -5,6 +5,7 @@ module YesodCoreTest.ErrorHandling
) where ) where
import Yesod.Core import Yesod.Core
import Test.Hspec import Test.Hspec
import Test.Hspec.Core (UnevaluatedSpec)
import Test.Hspec.HUnit() import Test.Hspec.HUnit()
import Network.Wai import Network.Wai
import Network.Wai.Test import Network.Wai.Test
@ -52,7 +53,7 @@ postAfterRunRequestBodyR = do
_ <- error $ show x _ <- error $ show x
getHomeR getHomeR
errorHandlingTest :: [Spec] errorHandlingTest :: UnevaluatedSpec
errorHandlingTest = describe "Test.ErrorHandling" errorHandlingTest = describe "Test.ErrorHandling"
[ it "says not found" caseNotFound [ it "says not found" caseNotFound
, it "says 'There was an error' before runRequestBody" caseBefore , it "says 'There was an error' before runRequestBody" caseBefore

View File

@ -4,6 +4,7 @@
module YesodCoreTest.Exceptions (exceptionsTest, Widget) where module YesodCoreTest.Exceptions (exceptionsTest, Widget) where
import Test.Hspec import Test.Hspec
import Test.Hspec.Core (UnevaluatedSpec)
import Test.Hspec.HUnit () import Test.Hspec.HUnit ()
import Yesod.Core hiding (Request) import Yesod.Core hiding (Request)
@ -30,7 +31,7 @@ getRedirR = do
setHeader "foo" "bar" setHeader "foo" "bar"
redirectWith status301 RootR redirectWith status301 RootR
exceptionsTest :: [Spec] exceptionsTest :: UnevaluatedSpec
exceptionsTest = describe "Test.Exceptions" exceptionsTest = describe "Test.Exceptions"
[ it "500" case500 [ it "500" case500
, it "redirect keeps headers" caseRedirect , it "redirect keeps headers" caseRedirect

View File

@ -9,8 +9,9 @@ import Network.Wai.Test
import Yesod.Internal.TestApi (randomString, parseWaiRequest') import Yesod.Internal.TestApi (randomString, parseWaiRequest')
import Yesod.Request (Request (..)) import Yesod.Request (Request (..))
import Test.Hspec import Test.Hspec
import Test.Hspec.Core (UnevaluatedSpec)
randomStringSpecs :: [Spec] randomStringSpecs :: UnevaluatedSpec
randomStringSpecs = describe "Yesod.Internal.Request.randomString" randomStringSpecs = describe "Yesod.Internal.Request.randomString"
[ it "looks reasonably random" looksRandom [ it "looks reasonably random" looksRandom
, it "does not repeat itself" $ noRepeat 10 100 , it "does not repeat itself" $ noRepeat 10 100
@ -30,7 +31,7 @@ g :: StdGen
g = error "test/YesodCoreTest/InternalRequest.g" g = error "test/YesodCoreTest/InternalRequest.g"
tokenSpecs :: [Spec] tokenSpecs :: UnevaluatedSpec
tokenSpecs = describe "Yesod.Internal.Request.parseWaiRequest (reqToken)" tokenSpecs = describe "Yesod.Internal.Request.parseWaiRequest (reqToken)"
[ it "is Nothing if sessions are disabled" noDisabledToken [ it "is Nothing if sessions are disabled" noDisabledToken
, it "ignores pre-existing token if sessions are disabled" ignoreDisabledToken , it "ignores pre-existing token if sessions are disabled" ignoreDisabledToken
@ -55,7 +56,7 @@ generateToken = reqToken r /= Nothing where
r = parseWaiRequest' defaultRequest [("_TOKEN", "old")] True g r = parseWaiRequest' defaultRequest [("_TOKEN", "old")] True g
langSpecs :: [Spec] langSpecs :: UnevaluatedSpec
langSpecs = describe "Yesod.Internal.Request.parseWaiRequest (reqLangs)" langSpecs = describe "Yesod.Internal.Request.parseWaiRequest (reqLangs)"
[ it "respects Accept-Language" respectAcceptLangs [ it "respects Accept-Language" respectAcceptLangs
, it "respects sessions" respectSessionLang , it "respects sessions" respectSessionLang
@ -93,8 +94,9 @@ prioritizeLangs = reqLangs r == ["en-QUERY", "en-COOKIE", "en-SESSION", "en", "e
} [("_LANG", "en-SESSION")] False g } [("_LANG", "en-SESSION")] False g
internalRequestTest :: [Spec] internalRequestTest :: UnevaluatedSpec
internalRequestTest = descriptions [ randomStringSpecs internalRequestTest = describe "Test.InternalRequestTest"
, tokenSpecs [ randomStringSpecs
, langSpecs , tokenSpecs
] , langSpecs
]

View File

@ -7,6 +7,7 @@ import YesodCoreTest.JsLoaderSites.HeadAsync (HA(..))
import YesodCoreTest.JsLoaderSites.Bottom (B(..)) import YesodCoreTest.JsLoaderSites.Bottom (B(..))
import Test.Hspec import Test.Hspec
import Test.Hspec.Core (UnevaluatedSpec)
import Test.Hspec.HUnit () import Test.Hspec.HUnit ()
import Yesod.Core hiding (Request) import Yesod.Core hiding (Request)
@ -22,7 +23,7 @@ instance Yesod H where
getHeadR :: Handler RepHtml getHeadR :: Handler RepHtml
getHeadR = defaultLayout $ addScriptRemote "load.js" getHeadR = defaultLayout $ addScriptRemote "load.js"
specs :: [Spec] specs :: UnevaluatedSpec
specs = describe "Test.JsLoader" [ specs = describe "Test.JsLoader" [
it "link from head" $ runner H $ do it "link from head" $ runner H $ do
res <- request defaultRequest res <- request defaultRequest

View File

@ -4,6 +4,7 @@
module YesodCoreTest.Links (linksTest, Widget) where module YesodCoreTest.Links (linksTest, Widget) where
import Test.Hspec import Test.Hspec
import Test.Hspec.Core (UnevaluatedSpec)
import Test.Hspec.HUnit () import Test.Hspec.HUnit ()
import Yesod.Core hiding (Request) import Yesod.Core hiding (Request)
@ -20,7 +21,7 @@ instance Yesod Y
getRootR :: Handler RepHtml getRootR :: Handler RepHtml
getRootR = defaultLayout $ toWidget [hamlet|<a href=@{RootR}>|] getRootR = defaultLayout $ toWidget [hamlet|<a href=@{RootR}>|]
linksTest :: [Spec] linksTest :: UnevaluatedSpec
linksTest = describe "Test.Links" linksTest = describe "Test.Links"
[ it "linkToHome" case_linkToHome [ it "linkToHome" case_linkToHome
] ]

View File

@ -5,6 +5,7 @@
module YesodCoreTest.Media (mediaTest, Widget) where module YesodCoreTest.Media (mediaTest, Widget) where
import Test.Hspec import Test.Hspec
import Test.Hspec.Core (UnevaluatedSpec)
import Test.Hspec.HUnit () import Test.Hspec.HUnit ()
import Yesod.Core hiding (Request) import Yesod.Core hiding (Request)
import Network.Wai import Network.Wai
@ -49,7 +50,7 @@ caseMediaLink = runner $ do
assertStatus 200 res assertStatus 200 res
flip assertBody res "<!DOCTYPE html>\n<html><head><title></title><link rel=\"stylesheet\" href=\"all.css\"><link rel=\"stylesheet\" media=\"screen\" href=\"screen.css\"></head><body></body></html>" flip assertBody res "<!DOCTYPE html>\n<html><head><title></title><link rel=\"stylesheet\" href=\"all.css\"><link rel=\"stylesheet\" media=\"screen\" href=\"screen.css\"></head><body></body></html>"
mediaTest :: [Spec] mediaTest :: UnevaluatedSpec
mediaTest = describe "Test.Media" mediaTest = describe "Test.Media"
[ it "media" caseMedia [ it "media" caseMedia
, it "media link" caseMediaLink , it "media link" caseMediaLink

View File

@ -3,6 +3,7 @@
module YesodCoreTest.NoOverloadedStrings (noOverloadedTest, Widget) where module YesodCoreTest.NoOverloadedStrings (noOverloadedTest, Widget) where
import Test.Hspec import Test.Hspec
import Test.Hspec.Core (UnevaluatedSpec)
import Test.Hspec.HUnit () import Test.Hspec.HUnit ()
import Yesod.Core hiding (Request) import Yesod.Core hiding (Request)
@ -44,7 +45,7 @@ case_sanity = runner $ do
res <- request defaultRequest res <- request defaultRequest
assertBody mempty res assertBody mempty res
noOverloadedTest :: [Spec] noOverloadedTest :: UnevaluatedSpec
noOverloadedTest = describe "Test.NoOverloadedStrings" noOverloadedTest = describe "Test.NoOverloadedStrings"
[ it "sanity" case_sanity [ it "sanity" case_sanity
] ]

View File

@ -4,6 +4,7 @@ module YesodCoreTest.Redirect (specs, Widget) where
import YesodCoreTest.YesodTest import YesodCoreTest.YesodTest
import Yesod.Handler (redirectWith) import Yesod.Handler (redirectWith)
import qualified Network.HTTP.Types as H import qualified Network.HTTP.Types as H
import Test.Hspec.Core (UnevaluatedSpec)
data Y = Y data Y = Y
mkYesod "Y" [parseRoutes| mkYesod "Y" [parseRoutes|
@ -26,7 +27,7 @@ getR303 = redirectWith H.status303 RootR
getR307 = redirectWith H.status307 RootR getR307 = redirectWith H.status307 RootR
getRRegular = redirect RootR getRRegular = redirect RootR
specs :: [Spec] specs :: UnevaluatedSpec
specs = describe "Redirect" [ specs = describe "Redirect" [
it "301 redirect" $ app $ do it "301 redirect" $ app $ do
res <- request defaultRequest { pathInfo = ["r301"] } res <- request defaultRequest { pathInfo = ["r301"] }

View File

@ -4,6 +4,7 @@ module YesodCoreTest.WaiSubsite (specs, Widget) where
import YesodCoreTest.YesodTest import YesodCoreTest.YesodTest
import Yesod.Core import Yesod.Core
import qualified Network.HTTP.Types as H import qualified Network.HTTP.Types as H
import Test.Hspec.Core (UnevaluatedSpec)
myApp :: Application myApp :: Application
myApp _ = return $ responseLBS H.status200 [("Content-type", "text/plain")] "WAI" myApp _ = return $ responseLBS H.status200 [("Content-type", "text/plain")] "WAI"
@ -25,7 +26,7 @@ app = yesod Y
getRootR :: Handler () getRootR :: Handler ()
getRootR = return () getRootR = return ()
specs :: [Spec] specs :: UnevaluatedSpec
specs = describe "WaiSubsite" [ specs = describe "WaiSubsite" [
it "root" $ app $ do it "root" $ app $ do
res <- request defaultRequest { pathInfo = [] } res <- request defaultRequest { pathInfo = [] }

View File

@ -4,6 +4,7 @@
module YesodCoreTest.Widget (widgetTest) where module YesodCoreTest.Widget (widgetTest) where
import Test.Hspec import Test.Hspec
import Test.Hspec.Core (UnevaluatedSpec)
import Test.Hspec.HUnit () import Test.Hspec.HUnit ()
import Yesod.Core hiding (Request) import Yesod.Core hiding (Request)
@ -77,7 +78,7 @@ getAutoR = defaultLayout [whamlet|
where where
someHtml = [shamlet|somehtml|] someHtml = [shamlet|somehtml|]
widgetTest :: [Spec] widgetTest :: UnevaluatedSpec
widgetTest = describe "Test.Widget" widgetTest = describe "Test.Widget"
[ it "addJuliusBody" case_addJuliusBody [ it "addJuliusBody" case_addJuliusBody
, it "whamlet" case_whamlet , it "whamlet" case_whamlet

View File

@ -119,7 +119,7 @@ test-suite tests
cpp-options: -DTEST cpp-options: -DTEST
build-depends: base build-depends: base
,hspec >= 0.8 && < 0.10 ,hspec >= 1.0 && < 1.1
,wai-test ,wai-test
,wai ,wai
,yesod-core ,yesod-core

View File

@ -41,7 +41,7 @@ test-suite runtests
, yesod-routes , yesod-routes
, text >= 0.5 && < 0.12 , text >= 0.5 && < 0.12
, HUnit >= 1.2 && < 1.3 , HUnit >= 1.2 && < 1.3
, hspec >= 0.6 && < 0.10 , hspec >= 0.6 && < 1.1
, containers , containers
, template-haskell , template-haskell
, path-pieces , path-pieces

View File

@ -11,7 +11,7 @@ cabal-version: >= 1.8
build-type: Simple build-type: Simple
homepage: http://www.yesodweb.com homepage: http://www.yesodweb.com
description: Behaviour Oriented integration Testing for Yesod Applications description: Behaviour Oriented integration Testing for Yesod Applications
extra-source-files: README.md, LICENSE extra-source-files: README.md, LICENSE, test/main.hs
flag blaze_html_0_5 flag blaze_html_0_5
description: use blaze-html 0.5 and blaze-markup 0.5 description: use blaze-html 0.5 and blaze-markup 0.5