module Test.Hspec.QuickCheck (
property,
prop
) where
import System.IO.Silently
import Test.Hspec.Core
import qualified Test.QuickCheck as QC
import qualified Test.Hspec.Monadic as DSL
import Control.Monad.Trans.Writer (Writer)
data QuickCheckProperty a = QuickCheckProperty a
property :: QC.Testable a => a -> QuickCheckProperty a
property = QuickCheckProperty
prop :: QC.Testable t => String -> t -> Writer [DSL.ItSpec] ()
prop n p = DSL.it n (QuickCheckProperty p)
instance QC.Testable t => SpecVerifier (QuickCheckProperty t) where
it description (QuickCheckProperty p) = do
r <- silence $ QC.quickCheckResult p
let r' = case r of
QC.Success {} -> Success
f@(QC.Failure {}) -> Fail (QC.output f)
g@(QC.GaveUp {}) -> Fail ("Gave up after " ++ quantify (QC.numTests g) "test" )
QC.NoExpectedFailure {} -> Fail ("No expected failure")
return (description, r')