packages feed

tasty-hspec 1.1.3.1 → 1.1.3.2

raw patch · 3 files changed

+161/−147 lines, 3 filesdep ~QuickCheckdep ~basedep ~taggedPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: QuickCheck, base, tagged, tasty, tasty-quickcheck, tasty-smallcheck

API changes (from Hackage documentation)

- Test.Tasty.Hspec: QuickCheckReplay :: Maybe (QCGen, Int) -> QuickCheckReplay
+ Test.Tasty.Hspec: QuickCheckReplay :: Maybe Int -> QuickCheckReplay

Files

− Test/Tasty/Hspec.hs
@@ -1,137 +0,0 @@-{-# LANGUAGE CPP                #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE InstanceSigs       #-}--module Test.Tasty.Hspec (-    -- * Test-      testSpec-    , testSpecs-    -- * Options-    -- | === Re-exported from <https://hackage.haskell.org/package/tasty-smallcheck tasty-smallcheck>-    , SmallCheckDepth(..)-    -- | === Re-exported from <https://hackage.haskell.org/package/tasty-quickcheck tasty-quickcheck>-    , QuickCheckMaxRatio(..)-    , QuickCheckMaxSize(..)-    , QuickCheckReplay(..)-    , QuickCheckTests(..)-    -- * Hspec re-export-    , module Test.Hspec-    ) where--import Control.Applicative ((<$>))-import Data.Proxy-import Data.Tagged (Tagged)-import Data.Typeable (Typeable)--import qualified Test.Hspec as H-import qualified Test.Hspec.Core.Formatters as H-import qualified Test.Hspec.Core.Spec as H-import qualified Test.QuickCheck as QC-import qualified Test.Tasty as T-import qualified Test.Tasty.SmallCheck as TSC-import qualified Test.Tasty.Options as T-import qualified Test.Tasty.Providers as T-import qualified Test.Tasty.QuickCheck as TQC-import qualified Test.Tasty.Runners as T---- For re-export.-import Test.Hspec-import Test.Tasty.SmallCheck (SmallCheckDepth(..))-import Test.Tasty.QuickCheck-  (QuickCheckMaxRatio(..), QuickCheckMaxSize(..), QuickCheckReplay(..),-    QuickCheckTests(..))---- | Create a <https://hackage.haskell.org/package/tasty tasty> 'T.TestTree' from an--- <https://hackage.haskell.org/package/hspec Hspec> 'H.Spec'.-testSpec :: T.TestName -> H.Spec -> IO T.TestTree-testSpec name spec = T.testGroup name <$> testSpecs spec---- | Create a list of <https://hackage.haskell.org/package/tasty tasty>--- 'T.TestTree' from a <https://hackage.haskell.org/package/hspec Hspec>--- 'H.Spec' test. This returns the same tests as 'testSpec' but doesn't create--- a <https://hackage.haskell.org/package/tasty tasty> test group from them.-testSpecs :: H.Spec -> IO [T.TestTree]-testSpecs spec = map specTreeToTestTree <$> H.runSpecM spec--specTreeToTestTree :: H.SpecTree () -> T.TestTree-specTreeToTestTree (H.Node name spec_trees) =-  T.testGroup name (map specTreeToTestTree spec_trees)-specTreeToTestTree (H.NodeWithCleanup cleanup spec_trees) =-  T.WithResource (T.ResourceSpec (return ()) cleanup) (const test_tree)- where-  test_tree :: T.TestTree-  test_tree = specTreeToTestTree (H.Node "(unnamed)" spec_trees)-specTreeToTestTree (H.Leaf item) = T.singleTest (H.itemRequirement item) (Item item)--newtype Item = Item (H.Item ())-    deriving Typeable--instance T.IsTest Item where-  run :: T.OptionSet -> Item -> (T.Progress -> IO ()) -> IO T.Result-  run opts (Item (H.Item _ _ _ ex)) progress =-#if MIN_VERSION_hspec(2,4,0)-    either (T.testFailed . H.formatException) hspecResultToTastyResult-#else-    hspecResultToTastyResult-#endif-      <$> ex params ($ ()) hprogress-   where-    params :: H.Params-    params = H.Params-      { H.paramsQuickCheckArgs = qc_args-      , H.paramsSmallCheckDepth = sc_depth-      }-     where-      qc_args :: QC.Args-      qc_args = QC.stdArgs-        { QC.chatty          = False-        , QC.maxDiscardRatio = max_ratio-        , QC.maxSize         = max_size-        , QC.maxSuccess      = num_tests-        , QC.replay          = replay-        }-       where-        TQC.QuickCheckTests    num_tests = T.lookupOption opts-        TQC.QuickCheckReplay   replay    = T.lookupOption opts-        TQC.QuickCheckMaxSize  max_size  = T.lookupOption opts-        TQC.QuickCheckMaxRatio max_ratio = T.lookupOption opts--      sc_depth :: Int-      sc_depth = depth-       where-        TSC.SmallCheckDepth depth = T.lookupOption opts--    hprogress :: H.Progress -> IO ()-    hprogress (x,y) = progress (T.Progress-      { T.progressText    = ""-      , T.progressPercent = fromIntegral x / fromIntegral y-      })--  testOptions :: Tagged Item [T.OptionDescription]-  testOptions = return-    [ T.Option (Proxy :: Proxy TQC.QuickCheckTests)-    , T.Option (Proxy :: Proxy TQC.QuickCheckReplay)-    , T.Option (Proxy :: Proxy TQC.QuickCheckMaxSize)-    , T.Option (Proxy :: Proxy TQC.QuickCheckMaxRatio)-    , T.Option (Proxy :: Proxy TSC.SmallCheckDepth)-    ]--hspecResultToTastyResult :: H.Result -> T.Result-hspecResultToTastyResult H.Success = T.testPassed ""-hspecResultToTastyResult (H.Pending mstr) = T.testFailed ("Test pending" ++ maybe "" (": " ++) mstr)-#if MIN_VERSION_hspec(2,4,0)-hspecResultToTastyResult (H.Failure _ reason) =-  case reason of-    H.NoReason   -> T.testFailed ""-    H.Reason str -> T.testFailed str-    H.ExpectedButGot preface expected actual ->-      T.testFailed $ mconcat-        [ maybe "" (++ ": ") preface-        , "expected " ++ expected-        , ", but got " ++ actual-        ]-#elif MIN_VERSION_hspec(2,2,0)-hspecResultToTastyResult (H.Fail _ str) = T.testFailed str-#else-hspecResultToTastyResult (H.Fail str) = T.testFailed str-#endif
+ src/Test/Tasty/Hspec.hs view
@@ -0,0 +1,149 @@+{-# LANGUAGE CPP                #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE InstanceSigs       #-}+{-# LANGUAGE LambdaCase         #-}++module Test.Tasty.Hspec (+    -- * Test+      testSpec+    , testSpecs+    -- * Options+    -- | === Re-exported from <https://hackage.haskell.org/package/tasty-smallcheck tasty-smallcheck>+    , SmallCheckDepth(..)+    -- | === Re-exported from <https://hackage.haskell.org/package/tasty-quickcheck tasty-quickcheck>+    , QuickCheckMaxRatio(..)+    , QuickCheckMaxSize(..)+    , QuickCheckReplay(..)+    , QuickCheckTests(..)+    -- * Hspec re-export+    , module Test.Hspec+    ) where++import Control.Applicative ((<$>))+import Data.Monoid (mconcat)+import Data.Proxy+import Data.Tagged (Tagged)+import Data.Typeable (Typeable)++import qualified Test.Hspec as H+import qualified Test.Hspec.Core.Formatters as H+import qualified Test.Hspec.Core.Spec as H+import qualified Test.QuickCheck as QC+import qualified Test.Tasty as T+import qualified Test.Tasty.SmallCheck as TSC+import qualified Test.Tasty.Options as T+import qualified Test.Tasty.Providers as T+import qualified Test.Tasty.QuickCheck as TQC+import qualified Test.Tasty.Runners as T++-- For re-export.+import Test.Hspec+import Test.Tasty.SmallCheck (SmallCheckDepth(..))+import Test.Tasty.QuickCheck+  (QuickCheckMaxRatio(..), QuickCheckMaxSize(..), QuickCheckReplay(..),+    QuickCheckTests(..))++-- | Create a <https://hackage.haskell.org/package/tasty tasty> 'T.TestTree' from an+-- <https://hackage.haskell.org/package/hspec Hspec> 'H.Spec'.+testSpec :: T.TestName -> H.Spec -> IO T.TestTree+testSpec name spec = T.testGroup name <$> testSpecs spec++-- | Create a list of <https://hackage.haskell.org/package/tasty tasty>+-- 'T.TestTree' from a <https://hackage.haskell.org/package/hspec Hspec>+-- 'H.Spec' test. This returns the same tests as 'testSpec' but doesn't create+-- a <https://hackage.haskell.org/package/tasty tasty> test group from them.+testSpecs :: H.Spec -> IO [T.TestTree]+testSpecs spec = map specTreeToTestTree <$> H.runSpecM spec++specTreeToTestTree :: H.SpecTree () -> T.TestTree+specTreeToTestTree = \case+  H.Node name spec_trees ->+    T.testGroup name (map specTreeToTestTree spec_trees)+  H.NodeWithCleanup cleanup spec_trees ->+    T.WithResource (T.ResourceSpec (return ()) cleanup) (const test_tree)+   where+    test_tree :: T.TestTree+    test_tree = specTreeToTestTree (H.Node "(unnamed)" spec_trees)+  H.Leaf item ->+    T.singleTest (H.itemRequirement item) (Item item)++newtype Item = Item (H.Item ())+  deriving Typeable++instance T.IsTest Item where+  run :: T.OptionSet -> Item -> (T.Progress -> IO ()) -> IO T.Result+  run opts (Item (H.Item _ _ _ ex)) progress = do+    qc_args <- tastyOptionSetToQuickCheckArgs opts++    let params :: H.Params+        params = H.Params+          { H.paramsQuickCheckArgs = qc_args+          , H.paramsSmallCheckDepth = sc_depth+          }++#if MIN_VERSION_hspec(2,4,0)+    either (T.testFailed . H.formatException) hspecResultToTastyResult+#else+    hspecResultToTastyResult+#endif+      <$> ex params ($ ()) hprogress+   where+    sc_depth :: Int+    sc_depth = depth+     where+      TSC.SmallCheckDepth depth = T.lookupOption opts++    hprogress :: H.Progress -> IO ()+    hprogress (x,y) = progress (T.Progress+      { T.progressText    = ""+      , T.progressPercent = fromIntegral x / fromIntegral y+      })++  testOptions :: Tagged Item [T.OptionDescription]+  testOptions = return+    [ T.Option (Proxy :: Proxy TQC.QuickCheckTests)+    , T.Option (Proxy :: Proxy TQC.QuickCheckReplay)+    , T.Option (Proxy :: Proxy TQC.QuickCheckMaxSize)+    , T.Option (Proxy :: Proxy TQC.QuickCheckMaxRatio)+    , T.Option (Proxy :: Proxy TSC.SmallCheckDepth)+    ]++tastyOptionSetToQuickCheckArgs :: T.OptionSet -> IO QC.Args+tastyOptionSetToQuickCheckArgs opts =+#if MIN_VERSION_tasty_quickcheck(0,9,1)+  snd <$> TQC.optionSetToArgs opts+#else+  return (QC.stdArgs+    { QC.chatty          = False+    , QC.maxDiscardRatio = max_ratio+    , QC.maxSize         = max_size+    , QC.maxSuccess      = num_tests+    , QC.replay          = replay+    })+ where+  TQC.QuickCheckTests    num_tests = T.lookupOption opts+  TQC.QuickCheckReplay   replay    = T.lookupOption opts+  TQC.QuickCheckMaxSize  max_size  = T.lookupOption opts+  TQC.QuickCheckMaxRatio max_ratio = T.lookupOption opts+#endif++hspecResultToTastyResult :: H.Result -> T.Result+hspecResultToTastyResult = \case+  H.Success -> T.testPassed ""+  H.Pending mstr -> T.testFailed ("Test pending" ++ maybe "" (": " ++) mstr)+#if MIN_VERSION_hspec(2,4,0)+  H.Failure _ reason ->+    case reason of+      H.NoReason   -> T.testFailed ""+      H.Reason str -> T.testFailed str+      H.ExpectedButGot preface expected actual ->+        T.testFailed $ mconcat+          [ maybe "" (++ ": ") preface+          , "expected " ++ expected+          , ", but got " ++ actual+          ]+#elif MIN_VERSION_hspec(2,2,0)+  H.Fail _ str -> T.testFailed str+#else+  H.Fail str -> T.testFailed str+#endif
tasty-hspec.cabal view
@@ -1,5 +1,5 @@ name:                tasty-hspec-version:             1.1.3.1+version:             1.1.3.2 synopsis:            Hspec support for the Tasty test framework. description:         This package provides a Tasty provider for Hspec test                      suites.@@ -19,15 +19,17 @@  library   exposed-modules:     Test.Tasty.Hspec-  other-extensions:    DeriveDataTypeable-  build-depends:       base             ==4.*-                     , hspec            >=2 && <2.5-                     , hspec-core       >=2 && <2.5-                     , QuickCheck       >=2.7-                     , tagged           >=0.7-                     , tasty            >=0.8-                     , tasty-smallcheck >=0.1-                     , tasty-quickcheck >=0.3+  hs-source-dirs:      src+  build-depends:       base             >=4.6 && <5+                     , hspec            >=2   && <2.5+                     , hspec-core       >=2   && <2.5+                     , QuickCheck       >=2.7 && <2.11+                     , tagged           >=0.7 && <0.9+                     , tasty            >=0.8 && <0.12+                     , tasty-smallcheck >=0.1 && <0.9+                     -- 0.9 is missing 'optionSetToArgs'+                     , tasty-quickcheck >=0.3 && <0.9 || >=0.9.1 && <0.10                      , random   default-language:    Haskell2010   ghc-options:         -Wall+