packages feed

HCL-1.7.1: test/Spec/MonadPlus.hs

module Spec.MonadPlus (tests) where

import Control.Monad
import Test.HUnit

import System.Console.HCL

tests = TestLabel "MonadPlus" $ TestList
  [ mzeroTest
  , mplusTests
  ]

mzeroTest = TestLabel "mzero" $ TestCase $ do
  val <- runRequest mzero
  assertEqual "" Nothing (val :: Maybe ())

mplusTests = TestLabel "mplus" $ TestList $ map mplusTest
  [ ( "both pass",     makeReq 1, makeReq 2, Just 1  )
  , ( "first fails",   reqFail,   makeReq 2, Just 2  )
  , ( "first errors",  err,       makeReq 2, Just 2  )
  , ( "second fails",  makeReq 1, reqFail,   Just 1  )
  , ( "second errors", makeReq 1, err,       Just 1  )
  , ( "both fail",     reqFail,   reqFail,   Nothing )
  ]

mplusTest (label, x, y, expect) = TestLabel label $ TestCase $ do
  val <- runRequest $ x `mplus` y
  assertEqual "" expect val

err = Request $ fail ""