From dfae6618781ae9cc34954e9464e870ddfe0f87f3 Mon Sep 17 00:00:00 2001 From: Simon Hengel Date: Tue, 16 Oct 2012 13:51:22 +0200 Subject: [PATCH 1/2] Adept Hspec tests for forward compatibility * Don't use hspecX, it's deprecated. * Do not import Test.Hspec.HUnit. It's no longer necessary and may be removed in the future. --- yesod-core/test/YesodCoreTest/Cache.hs | 1 - yesod-core/test/YesodCoreTest/CleanPath.hs | 1 - yesod-core/test/YesodCoreTest/ErrorHandling.hs | 1 - yesod-core/test/YesodCoreTest/Exceptions.hs | 1 - yesod-core/test/YesodCoreTest/JsLoader.hs | 1 - yesod-core/test/YesodCoreTest/Links.hs | 1 - yesod-core/test/YesodCoreTest/Media.hs | 1 - yesod-core/test/YesodCoreTest/NoOverloadedStrings.hs | 1 - yesod-core/test/YesodCoreTest/Widget.hs | 1 - yesod-core/test/YesodCoreTest/YesodTest.hs | 1 - yesod-form/test/main.hs | 6 ++---- yesod-form/yesod-form.cabal | 1 - yesod-routes/test/Hierarchy.hs | 5 ++--- yesod-routes/test/main.hs | 5 ++--- yesod-static/test/YesodStaticTest.hs | 5 +---- yesod-static/yesod-static.cabal | 1 - 16 files changed, 7 insertions(+), 26 deletions(-) diff --git a/yesod-core/test/YesodCoreTest/Cache.hs b/yesod-core/test/YesodCoreTest/Cache.hs index 3514f8f3..d12d0cc1 100644 --- a/yesod-core/test/YesodCoreTest/Cache.hs +++ b/yesod-core/test/YesodCoreTest/Cache.hs @@ -4,7 +4,6 @@ module YesodCoreTest.Cache (cacheTest, Widget) where import Test.Hspec -import Test.Hspec.HUnit() import Network.Wai import Network.Wai.Test diff --git a/yesod-core/test/YesodCoreTest/CleanPath.hs b/yesod-core/test/YesodCoreTest/CleanPath.hs index 572551cb..eb99ebd6 100644 --- a/yesod-core/test/YesodCoreTest/CleanPath.hs +++ b/yesod-core/test/YesodCoreTest/CleanPath.hs @@ -4,7 +4,6 @@ module YesodCoreTest.CleanPath (cleanPathTest, Widget) where import Test.Hspec -import Test.Hspec.HUnit() import Yesod.Core hiding (Request) diff --git a/yesod-core/test/YesodCoreTest/ErrorHandling.hs b/yesod-core/test/YesodCoreTest/ErrorHandling.hs index fdd1021f..eaf61b2f 100644 --- a/yesod-core/test/YesodCoreTest/ErrorHandling.hs +++ b/yesod-core/test/YesodCoreTest/ErrorHandling.hs @@ -6,7 +6,6 @@ module YesodCoreTest.ErrorHandling ) where import Yesod.Core import Test.Hspec -import Test.Hspec.HUnit() import Network.Wai import Network.Wai.Test import Text.Hamlet (hamlet) diff --git a/yesod-core/test/YesodCoreTest/Exceptions.hs b/yesod-core/test/YesodCoreTest/Exceptions.hs index 3ea0d720..f0942350 100644 --- a/yesod-core/test/YesodCoreTest/Exceptions.hs +++ b/yesod-core/test/YesodCoreTest/Exceptions.hs @@ -4,7 +4,6 @@ module YesodCoreTest.Exceptions (exceptionsTest, Widget) where import Test.Hspec -import Test.Hspec.HUnit () import Yesod.Core hiding (Request) import Network.Wai diff --git a/yesod-core/test/YesodCoreTest/JsLoader.hs b/yesod-core/test/YesodCoreTest/JsLoader.hs index 11b1a38d..1849d5b1 100644 --- a/yesod-core/test/YesodCoreTest/JsLoader.hs +++ b/yesod-core/test/YesodCoreTest/JsLoader.hs @@ -7,7 +7,6 @@ import YesodCoreTest.JsLoaderSites.HeadAsync (HA(..)) import YesodCoreTest.JsLoaderSites.Bottom (B(..)) import Test.Hspec -import Test.Hspec.HUnit () import Yesod.Core hiding (Request) import Network.Wai.Test diff --git a/yesod-core/test/YesodCoreTest/Links.hs b/yesod-core/test/YesodCoreTest/Links.hs index ddb95931..188cfe97 100644 --- a/yesod-core/test/YesodCoreTest/Links.hs +++ b/yesod-core/test/YesodCoreTest/Links.hs @@ -4,7 +4,6 @@ module YesodCoreTest.Links (linksTest, Widget) where import Test.Hspec -import Test.Hspec.HUnit () import Yesod.Core hiding (Request) import Text.Hamlet diff --git a/yesod-core/test/YesodCoreTest/Media.hs b/yesod-core/test/YesodCoreTest/Media.hs index cfd6aff8..490b6bdb 100644 --- a/yesod-core/test/YesodCoreTest/Media.hs +++ b/yesod-core/test/YesodCoreTest/Media.hs @@ -5,7 +5,6 @@ module YesodCoreTest.Media (mediaTest, Widget) where import Test.Hspec -import Test.Hspec.HUnit () import Yesod.Core hiding (Request) import Network.Wai import Network.Wai.Test diff --git a/yesod-core/test/YesodCoreTest/NoOverloadedStrings.hs b/yesod-core/test/YesodCoreTest/NoOverloadedStrings.hs index a3d8cd20..d68707cd 100644 --- a/yesod-core/test/YesodCoreTest/NoOverloadedStrings.hs +++ b/yesod-core/test/YesodCoreTest/NoOverloadedStrings.hs @@ -3,7 +3,6 @@ module YesodCoreTest.NoOverloadedStrings (noOverloadedTest, Widget) where import Test.Hspec -import Test.Hspec.HUnit () import Yesod.Core hiding (Request) import Network.Wai.Test diff --git a/yesod-core/test/YesodCoreTest/Widget.hs b/yesod-core/test/YesodCoreTest/Widget.hs index 842a43f0..dee452aa 100644 --- a/yesod-core/test/YesodCoreTest/Widget.hs +++ b/yesod-core/test/YesodCoreTest/Widget.hs @@ -4,7 +4,6 @@ module YesodCoreTest.Widget (widgetTest) where import Test.Hspec -import Test.Hspec.HUnit () import Yesod.Core hiding (Request) import Text.Julius diff --git a/yesod-core/test/YesodCoreTest/YesodTest.hs b/yesod-core/test/YesodCoreTest/YesodTest.hs index 46040f84..4cea7409 100644 --- a/yesod-core/test/YesodCoreTest/YesodTest.hs +++ b/yesod-core/test/YesodCoreTest/YesodTest.hs @@ -13,7 +13,6 @@ import Yesod.Core hiding (Request) import Network.Wai.Test import Network.Wai import Test.Hspec -import Test.Hspec.HUnit() yesod :: (YesodDispatch y y, Yesod y) => y -> Session a -> IO a yesod app f = toWaiApp app >>= runSession f diff --git a/yesod-form/test/main.hs b/yesod-form/test/main.hs index eed2a71f..72ef66ec 100644 --- a/yesod-form/test/main.hs +++ b/yesod-form/test/main.hs @@ -1,7 +1,5 @@ {-# LANGUAGE OverloadedStrings #-} -import Test.HUnit -import Test.Hspec.Monadic -import Test.Hspec.HUnit () +import Test.Hspec import Data.Time (TimeOfDay (TimeOfDay)) import Data.Text (pack) @@ -10,7 +8,7 @@ import Yesod.Form.Types main :: IO () main = hspec $ - describe "parseTime" $ mapM_ (\(s, e) -> it s $ parseTime (pack s) @?= e) + describe "parseTime" $ mapM_ (\(s, e) -> it s $ parseTime (pack s) `shouldBe` e) [ ("01:00:00", Right $ TimeOfDay 1 0 0) , ("1:00", Right $ TimeOfDay 1 0 0) , ("1:00 AM", Right $ TimeOfDay 1 0 0) diff --git a/yesod-form/yesod-form.cabal b/yesod-form/yesod-form.cabal index 05199e9d..6f5afaa6 100644 --- a/yesod-form/yesod-form.cabal +++ b/yesod-form/yesod-form.cabal @@ -64,7 +64,6 @@ test-suite test , yesod-form , time , hspec - , HUnit , text source-repository head diff --git a/yesod-routes/test/Hierarchy.hs b/yesod-routes/test/Hierarchy.hs index c272bb94..a4bf6316 100644 --- a/yesod-routes/test/Hierarchy.hs +++ b/yesod-routes/test/Hierarchy.hs @@ -14,8 +14,7 @@ module Hierarchy , toText ) where -import Test.Hspec.Monadic -import Test.Hspec.HUnit () +import Test.Hspec import Test.HUnit import Yesod.Routes.Parse import Yesod.Routes.TH @@ -92,7 +91,7 @@ getTableR _ t = append "TableR " t instance RunHandler Hierarchy master where runHandler h _ _ subRoute toMaster = (h, fmap toMaster subRoute) -hierarchy :: Specs +hierarchy :: Spec hierarchy = describe "hierarchy" $ do it "renders root correctly" $ renderRoute (AdminR 5 AdminRootR) @?= (["admin", "5"], []) diff --git a/yesod-routes/test/main.hs b/yesod-routes/test/main.hs index 1eff36a4..16db9be9 100644 --- a/yesod-routes/test/main.hs +++ b/yesod-routes/test/main.hs @@ -8,8 +8,7 @@ {-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE CPP #-} -import Test.Hspec.Monadic -import Test.Hspec.HUnit () +import Test.Hspec import Test.HUnit ((@?=)) import Data.Text (Text, pack, unpack, singleton) import Yesod.Routes.Dispatch hiding (Static, Dynamic) @@ -195,7 +194,7 @@ thDispatchAlias master sub toMaster app404 handler405 method0 pieces0 = -} main :: IO () -main = hspecX $ do +main = hspec $ do describe "justRoot" $ do it "dispatches correctly" $ test justRoot [] @?= Just 1 it "fails correctly" $ test justRoot ["foo"] @?= Nothing diff --git a/yesod-static/test/YesodStaticTest.hs b/yesod-static/test/YesodStaticTest.hs index 53e33bf6..e2a909fb 100644 --- a/yesod-static/test/YesodStaticTest.hs +++ b/yesod-static/test/YesodStaticTest.hs @@ -1,8 +1,6 @@ module YesodStaticTest (specs) where import Test.Hspec -import Test.HUnit ( (@?=) ) -import Test.Hspec.HUnit ( ) import Yesod.Static (getFileListPieces) @@ -10,5 +8,4 @@ specs :: Spec specs = do describe "get file list" $ do it "pieces" $ do - x <- getFileListPieces "test/fs" - x @?= [["foo"], ["bar", "baz"]] + getFileListPieces "test/fs" `shouldReturn` [["foo"], ["bar", "baz"]] diff --git a/yesod-static/yesod-static.cabal b/yesod-static/yesod-static.cabal index e94e6291..3d34b85a 100644 --- a/yesod-static/yesod-static.cabal +++ b/yesod-static/yesod-static.cabal @@ -46,7 +46,6 @@ test-suite tests cpp-options: -DTEST_EXPORT build-depends: base , hspec >= 1.3 && < 1.4 - , HUnit -- copy from above , containers , old-time From ffcf7fbc5d71530e7b3998fbfbcbc5e4a590ffa7 Mon Sep 17 00:00:00 2001 From: Simon Hengel Date: Tue, 16 Oct 2012 14:42:08 +0200 Subject: [PATCH 2/2] yesod-test: Do not use Test.Hspec.Runner Test.Hspec.Runner will export functions for monadic specs in the future (Hspec >= 1.4). --- yesod-test/Yesod/Test.hs | 19 ++++++++++++++++--- yesod-test/test/main.hs | 3 +-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/yesod-test/Yesod/Test.hs b/yesod-test/Yesod/Test.hs index ce5730bc..f41b4834 100644 --- a/yesod-test/Yesod/Test.hs +++ b/yesod-test/Yesod/Test.hs @@ -65,8 +65,22 @@ module Yesod.Test ( where +-- In in Hspec < 1.3 the Example instance for IO () (== Assertion/Expectation) +-- is orphan and only export from Test.Hspec.HUnit. +-- +-- In Hspec 1.3.* it is still orphan, but re-exported from Test.Hspec. +-- +-- Starting with Hspec 1.4.0 it is not orphan anymore. +-- +-- As we only support Hspec >= 1.3, we import Test.Hspec to bring the orphan +-- instance into scope. This is better than importing Test.Hspec.HUnit, as +-- Test.Hspec.HUnit may be removed in the future. +-- +-- As soon as we decide to drop support for Hspec 1.3.*, we can remove this +-- comment and the following import. +import qualified Test.Hspec () + import qualified Test.Hspec.Core as Core -import qualified Test.Hspec.Runner as Runner import qualified Data.List as DL import qualified Data.Maybe as DY import qualified Data.ByteString.Char8 as BS8 @@ -75,7 +89,6 @@ import qualified Data.Text as T import qualified Data.Text.Encoding as TE import qualified Data.ByteString.Lazy.Char8 as BSL8 import qualified Test.HUnit as HUnit -import qualified Test.Hspec.HUnit () import qualified Network.HTTP.Types as H import qualified Network.Socket.Internal as Sock import Data.CaseInsensitive (CI) @@ -143,7 +156,7 @@ type CookieValue = ByteString runTests :: Application -> Pool conn -> SpecsConn conn -> IO () runTests app connection specsDef = do (SpecsData _ _ specs) <- ST.execStateT specsDef (SpecsData app connection []) - Runner.hspec specs + Core.hspec specs -- | Start describing a Tests suite keeping cookies and a reference to the tested 'Application' -- and 'ConnectionPool' diff --git a/yesod-test/test/main.hs b/yesod-test/test/main.hs index fee911d7..cfcf9637 100644 --- a/yesod-test/test/main.hs +++ b/yesod-test/test/main.hs @@ -1,8 +1,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE CPP #-} import Test.HUnit hiding (Test) -import Test.Hspec.Monadic -import Test.Hspec.HUnit () +import Test.Hspec import Yesod.Test.CssQuery import Yesod.Test.TransversingCSS