packages feed

hw-hspec-hedgehog-0.1.0.8: test/HaskellWorks/Hspec/HedgehogSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module HaskellWorks.Hspec.HedgehogSpec (spec) where

import Data.CallStack
import HaskellWorks.Hspec.Hedgehog
import Hedgehog
import Test.Hspec
import Test.HUnit.Lang

import qualified Hedgehog.Gen   as Gen
import qualified Hedgehog.Range as Range

{-# ANN module ("HLint: ignore Redundant do"  :: String) #-}

spec :: Spec
spec = describe "HaskellWorks.Hspec.HedgehogSpec" $ do
  it "should have require function that checks hedgehog properties" $ do
    require $ property $ do
      x <- forAll (Gen.int Range.constantBounded)
      x === x

  it "`require . property` should print a callstack with the test's location when property fails" $
    require (property failure) `shouldThrow` \(HUnitFailure srcLocMaybe _) ->
      fmap srcLocModule srcLocMaybe == Just "HaskellWorks.Hspec.HedgehogSpec"

  it "`requireProperty` should print a callstack with the test's location when property fails" $
    requireProperty failure `shouldThrow` \(HUnitFailure srcLocMaybe _) ->
      fmap srcLocModule srcLocMaybe == Just "HaskellWorks.Hspec.HedgehogSpec"

  it "`requireTest` should print a callstack with the test's location when property fails" $
    requireTest failure `shouldThrow` \(HUnitFailure srcLocMaybe _) ->
      fmap srcLocModule srcLocMaybe == Just "HaskellWorks.Hspec.HedgehogSpec"