packages feed

dovin-0.1.0.0: test/TestPrelude.hs

{-# LANGUAGE FlexibleContexts #-}

module TestPrelude
  ( module Test.Tasty
  , module Test.Tasty.HUnit
  , module Dovin.V1
  , module Control.Lens
  , module Control.Monad
  , prove
  , refute
  , validateBoardEquals
  ) where

import Test.Tasty
import Test.Tasty.HUnit

import Dovin.V1
import Dovin.Monad

import Data.List (isInfixOf)

import Control.Monad
import Control.Lens
import Control.Monad.Except


prove name m = testCase name $
  case runMonad emptyBoard m of
    (Left msg, _, _) -> assertFailure msg
    (Right (), _, _) -> return mempty

refute name expectedFailure m = testCase name $
  case runMonad emptyBoard m of
    (Left msg, _, _) -> assertBool ("expected: " <> expectedFailure <> "\n but got: " <> msg) $ expectedFailure `isInfixOf` msg
    (Right (), _, _) -> assertFailure "proof was not refuted"

validateBoardEquals lens expected = do
  x <- use lens

  unless (x == expected) $
    throwError ("want: " <> show expected <> ", got: " <> show x)