packages feed

coverage-0.1.0.4: tests/CoverageSpec.hs

-----------------------------------------------------------------------------
--
-- Module      :  CoverageSpec
-- Copyright   :  (c) 2015 Nicolas Del Piano
-- License     :  MIT
--
-- Maintainer  :  Nicolas Del Piano <ndel314@gmail.com>
-- Stability   :  experimental
-- Portability :
--
-- |
-- Tests.
--
-----------------------------------------------------------------------------

module CoverageSpec (main, spec) where

import Control.Coverage
import Control.Coverage.Internal
import CoverageSupport

import Test.Hspec
import Test.HUnit
import Test.QuickCheck

import Control.Exception (evaluate)

spec :: Spec
spec = do
  describe "Test suite" $ do
    describe "missingSingle" $ do
      it "between any binder and `Var _` should be `[]`" $
        property $ \b n -> fst (missingSingle defaultEnv (b :: Binder String) (Var n)) == []

      it "between the same binders should be `[]`" $
        property $ \b -> fst (missingSingle defaultEnv (b :: Binder String) b) == []

      it "if we covered something, then uncovered should be `[]`" $
        property $ \b b' ->
          let (unc, cov) = missingSingle defaultEnv (b :: Binder String) (b' :: Binder String)
          in cov == Just True ==> unc == []

      it "if there are no uncovered cases, then we covered something" $
        property $ \b b' ->
          let (unc, cov) = missingSingle defaultEnv (b :: Binder String) (b' :: Binder String)
          in unc == [] ==> cov == Just True

main :: IO ()
main = hspec spec