{-# OPTIONS_GHC -cpp -pgmP "cpphs --layout --hashes --cpp" #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE BangPatterns #-}
module Test.Framework.HUnitWrapper (
assertBool, assertBoolVerbose,
assertEqual, assertEqualVerbose,
assertEqualPretty, assertEqualPrettyVerbose,
assertEqualNoShow, assertEqualNoShowVerbose,
assertNotEqual, assertNotEqualVerbose,
assertNotEqualPretty, assertNotEqualPrettyVerbose,
assertNotEqualNoShow, assertNotEqualNoShowVerbose,
assertListsEqualAsSets, assertListsEqualAsSetsVerbose,
assertNotEmpty, assertNotEmptyVerbose,
assertEmpty, assertEmptyVerbose,
assertElem, assertElemVerbose,
assertThrows, assertThrowsVerbose,
assertThrowsSome, assertThrowsSomeVerbose,
assertThrowsIO, assertThrowsIOVerbose,
assertThrowsSomeIO, assertThrowsSomeIOVerbose,
assertThrowsM, assertThrowsMVerbose,
assertThrowsSomeM, assertThrowsSomeMVerbose,
assertLeft, assertLeftVerbose,
assertLeftNoShow, assertLeftNoShowVerbose,
assertRight, assertRightVerbose,
assertRightNoShow, assertRightNoShowVerbose,
assertJust, assertJustVerbose,
assertNothing, assertNothingVerbose,
assertNothingNoShow, assertNothingNoShowVerbose,
assertFailure,
unitTestPending, unitTestPending',
subAssert, subAssertVerbose,
gassertBool, gassertBoolVerbose,
gassertEqual, gassertEqualVerbose,
gassertEqualPretty, gassertEqualPrettyVerbose,
gassertEqualNoShow, gassertEqualNoShowVerbose,
gassertNotEqual, gassertNotEqualVerbose,
gassertNotEqualPretty, gassertNotEqualPrettyVerbose,
gassertNotEqualNoShow, gassertNotEqualNoShowVerbose,
gassertListsEqualAsSets, gassertListsEqualAsSetsVerbose,
gassertNotEmpty, gassertNotEmptyVerbose,
gassertEmpty, gassertEmptyVerbose,
gassertElem, gassertElemVerbose,
gassertLeft, gassertLeftVerbose,
gassertLeftNoShow, gassertLeftNoShowVerbose,
gassertRight, gassertRightVerbose,
gassertRightNoShow, gassertRightNoShowVerbose,
gassertJust, gassertJustVerbose,
gassertNothing, gassertNothingVerbose,
gassertNothingNoShow, gassertNothingNoShowVerbose,
gassertFailure,
gsubAssert, gsubAssertVerbose,
HU.HUnitFailure,
hunitWrapperTests
) where
import Control.Exception
import qualified Control.Exception.Lifted as ExL
import Control.Monad.Trans.Control
import Control.Monad.Trans
import qualified Test.HUnit.Lang as HU
#if !MIN_VERSION_HUnit(1,4,0)
import qualified Test.HUnit.Base as HU
#endif
import GHC.Stack
import Data.List ( (\\) )
import System.IO.Unsafe (unsafePerformIO)
import Test.Framework.TestInterface
import Test.Framework.Location
import Test.Framework.Diff
import Test.Framework.Colors
import Test.Framework.Pretty
import Test.Framework.AssertM
import Test.Framework.PrettyHaskell
import Test.Framework.Utils
import qualified Data.Text as T
import qualified Data.List as List
gassertFailure :: (HasCallStack, AssertM m) => String -> m a
gassertFailure :: String -> m a
gassertFailure String
s =
ColorString -> m a
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
"assertFailure" String
"" String
s)
assertFailure :: HasCallStack => String -> IO a
assertFailure :: String -> IO a
assertFailure = String -> IO a
forall (m :: * -> *) a. (HasCallStack, AssertM m) => String -> m a
gassertFailure
unitTestPending :: String -> IO a
unitTestPending :: String -> IO a
unitTestPending String
s =
FullTestResult -> IO a
forall (m :: * -> *) a.
MonadBaseControl IO m =>
FullTestResult -> m a
failHTF (HtfStack -> Maybe ColorString -> Maybe TestResult -> FullTestResult
FullTestResult HtfStack
emptyHtfStack (ColorString -> Maybe ColorString
forall a. a -> Maybe a
Just (ColorString -> Maybe ColorString)
-> ColorString -> Maybe ColorString
forall a b. (a -> b) -> a -> b
$ String -> ColorString
noColor String
s) (TestResult -> Maybe TestResult
forall a. a -> Maybe a
Just TestResult
Pending))
unitTestPending' :: String -> IO a -> IO a
unitTestPending' :: String -> IO a -> IO a
unitTestPending' String
msg IO a
_ = String -> IO a
forall a. String -> IO a
unitTestPending String
msg
mkMsg :: String -> String -> String -> ColorString
mkMsg :: String -> String -> String -> ColorString
mkMsg String
s1 String
s2 String
s3 = String -> String -> ColorString -> ColorString
mkColorMsg String
s1 String
s2 (String -> ColorString
noColor String
s3)
mkColorMsg :: String -> String -> ColorString -> ColorString
mkColorMsg :: String -> String -> ColorString -> ColorString
mkColorMsg String
fun String
extraInfo ColorString
s =
let pref :: String
pref = if String -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
extraInfo
then String
fun String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" "
else String
fun String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" (" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
extraInfo String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
") "
in String -> ColorString
noColor String
pref ColorString -> ColorString -> ColorString
+++ ColorString
s
assertBool_ :: (HasCallStack, AssertM m) => String -> String -> Bool -> m ()
assertBool_ :: String -> String -> Bool -> m ()
assertBool_ String
name String
s Bool
False = ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s String
"failed")
assertBool_ String
_ String
_ Bool
True = () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
assertBool :: HasCallStack => Bool -> IO ()
assertBool :: Bool -> IO ()
assertBool = String -> String -> Bool -> IO ()
forall (m :: * -> *).
(HasCallStack, AssertM m) =>
String -> String -> Bool -> m ()
assertBool_ String
"assertBool" String
""
assertBoolVerbose :: HasCallStack => String -> Bool -> IO ()
assertBoolVerbose :: String -> Bool -> IO ()
assertBoolVerbose = String -> String -> Bool -> IO ()
forall (m :: * -> *).
(HasCallStack, AssertM m) =>
String -> String -> Bool -> m ()
assertBool_ String
"assertBoolVerbose"
gassertBool :: (HasCallStack, AssertM m) => Bool -> m ()
gassertBool :: Bool -> m ()
gassertBool = String -> String -> Bool -> m ()
forall (m :: * -> *).
(HasCallStack, AssertM m) =>
String -> String -> Bool -> m ()
assertBool_ String
"gassertBool" String
""
gassertBoolVerbose :: (HasCallStack, AssertM m) => String -> Bool -> m ()
gassertBoolVerbose :: String -> Bool -> m ()
gassertBoolVerbose = String -> String -> Bool -> m ()
forall (m :: * -> *).
(HasCallStack, AssertM m) =>
String -> String -> Bool -> m ()
assertBool_ String
"gassertBoolVerbose"
equalityFailedMessage' :: String -> String -> ColorString
equalityFailedMessage' :: String -> String -> ColorString
equalityFailedMessage' String
exp String
act =
let !diff :: ColorString
diff = IO ColorString -> ColorString
forall a. IO a -> a
unsafePerformIO (String -> String -> IO ColorString
diffWithSensibleConfig String
exp String
act)
expected_ :: ColorString
expected_ = Color -> String -> ColorString
colorize Color
firstDiffColor String
"* expected:"
but_got_ :: ColorString
but_got_ = Color -> String -> ColorString
colorize Color
secondDiffColor String
"* but got:"
diff_ :: ColorString
diff_ = Color -> String -> ColorString
colorize Color
diffColor String
"* diff:"
in (ColorString
"\n" ColorString -> ColorString -> ColorString
+++ ColorString
expected_ ColorString -> ColorString -> ColorString
+++ ColorString
" " ColorString -> ColorString -> ColorString
+++ String -> ColorString
noColor (String -> String
withNewline (String -> String
trim String
exp)) ColorString -> ColorString -> ColorString
+++
ColorString
"\n" ColorString -> ColorString -> ColorString
+++ ColorString
but_got_ ColorString -> ColorString -> ColorString
+++ ColorString
" " ColorString -> ColorString -> ColorString
+++ String -> ColorString
noColor (String -> String
withNewline (String -> String
trim String
act)) ColorString -> ColorString -> ColorString
+++
ColorString
"\n" ColorString -> ColorString -> ColorString
+++ ColorString
diff_ ColorString -> ColorString -> ColorString
+++ ColorString
" " ColorString -> ColorString -> ColorString
+++ ColorString -> ColorString
newlineBeforeDiff ColorString
diff ColorString -> ColorString -> ColorString
+++ ColorString
diff ColorString -> ColorString -> ColorString
+++
(if (String
exp String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
act)
then ColorString
"\nWARNING: strings are equal but actual values differ!"
else ColorString
""))
where
withNewline :: String -> String
withNewline String
s =
case String -> [String]
lines String
s of
[] -> String
s
[String
_] -> String
s
[String]
_ -> Char
'\n'Char -> String -> String
forall a. a -> [a] -> [a]
:String
s
newlineBeforeDiff :: ColorString -> ColorString
newlineBeforeDiff ColorString
d =
let f :: Bool -> p
f Bool
b = case (Char -> Bool) -> ColorString -> Bool -> Maybe Char
colorStringFind (\Char
c -> Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\n') ColorString
d Bool
b of
Just Char
_ -> p
"\n"
Maybe Char
Nothing -> p
""
in String -> String -> ColorString
noColor' (Bool -> String
forall p. IsString p => Bool -> p
f Bool
True) (Bool -> String
forall p. IsString p => Bool -> p
f Bool
False)
trim :: String -> String
trim String
s =
case Int -> String -> (String, String)
forall a. Int -> [a] -> ([a], [a])
List.splitAt Int
maxLen String
s of
(String
_, []) -> String
s
(String
prefix, String
rest) ->
String
prefix String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" (removed " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
rest) String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" trailing chars)"
maxLen :: Int
maxLen = Int
10000
asString :: Show a => a -> Maybe String
asString :: a -> Maybe String
asString a
x = String -> Maybe String
forall (m :: * -> *) a. (MonadFail m, Read a) => String -> m a
readM (a -> String
forall a. Show a => a -> String
show a
x)
equalityFailedMessage :: (Show a) => a -> a -> ColorString
equalityFailedMessage :: a -> a -> ColorString
equalityFailedMessage a
exp a
act =
String -> String -> ColorString
equalityFailedMessage' String
expP String
actP
where
(String
expP, String
actP) =
case (a -> Maybe String
forall a. Show a => a -> Maybe String
asString a
exp, a -> Maybe String
forall a. Show a => a -> Maybe String
asString a
act) of
(Just String
expS, Just String
actS)
| String
expS String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
actS -> (String
expS, String
actS)
(Maybe String, Maybe String)
_ ->
case (a -> Maybe String
forall a. Show a => a -> Maybe String
prettyHaskell' a
exp, a -> Maybe String
forall a. Show a => a -> Maybe String
prettyHaskell' a
act) of
(Maybe String
Nothing, Maybe String
_) -> (a -> String
forall a. Show a => a -> String
show a
exp, a -> String
forall a. Show a => a -> String
show a
act)
(Maybe String
_, Maybe String
Nothing) -> (a -> String
forall a. Show a => a -> String
show a
exp, a -> String
forall a. Show a => a -> String
show a
act)
(Just String
expP, Just String
actP)
| String
expP String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
actP ->
(a -> String
forall a. Show a => a -> String
show a
exp, a -> String
forall a. Show a => a -> String
show a
act)
| Bool
otherwise -> (String
expP, String
actP)
notEqualityFailedMessage :: Show a => a -> String
notEqualityFailedMessage :: a -> String
notEqualityFailedMessage a
exp =
String -> String
notEqualityFailedMessage' (a -> String
forall a. Show a => a -> String
prettyHaskell a
exp)
notEqualityFailedMessage' :: String -> String
notEqualityFailedMessage' :: String -> String
notEqualityFailedMessage' String
exp =
(String
": Objects are equal\n" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
exp)
failedAt :: HasCallStack => String
failedAt :: String
failedAt =
case Maybe Location
HasCallStack => Maybe Location
failureLocation of
Maybe Location
Nothing -> String
"failed"
Just Location
loc -> String
"failed at " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Location -> String
showLoc Location
loc
assertEqual_ :: (Eq a, Show a, AssertM m, HasCallStack)
=> String -> String -> a -> a -> m ()
assertEqual_ :: String -> String -> a -> a -> m ()
assertEqual_ String
name String
s a
expected a
actual =
if a
expected a -> a -> Bool
forall a. Eq a => a -> a -> Bool
/= a
actual
then do let x :: ColorString
x = a -> a -> ColorString
forall a. Show a => a -> a -> ColorString
equalityFailedMessage a
expected a
actual
ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> ColorString -> ColorString
mkColorMsg String
name String
s (ColorString -> ColorString) -> ColorString -> ColorString
forall a b. (a -> b) -> a -> b
$
String -> ColorString
noColor String
HasCallStack => String
failedAt ColorString -> ColorString -> ColorString
+++ ColorString
x)
else () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
gassertEqualVerbose :: (Eq a, Show a, AssertM m, HasCallStack) => String -> a -> a -> m ()
gassertEqualVerbose :: String -> a -> a -> m ()
gassertEqualVerbose = String -> String -> a -> a -> m ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertEqual_ String
"gassertEqualVerbose"
gassertEqual :: (Eq a, Show a, AssertM m, HasCallStack) => a -> a -> m ()
gassertEqual :: a -> a -> m ()
gassertEqual = String -> String -> a -> a -> m ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertEqual_ String
"gassertEqual" String
""
assertEqualVerbose :: (Eq a, Show a, HasCallStack) => String -> a -> a -> IO ()
assertEqualVerbose :: String -> a -> a -> IO ()
assertEqualVerbose = String -> String -> a -> a -> IO ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertEqual_ String
"assertEqualVerbose"
assertEqual :: (Eq a, Show a, HasCallStack) => a -> a -> IO ()
assertEqual :: a -> a -> IO ()
assertEqual = String -> String -> a -> a -> IO ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertEqual_ String
"assertEqual" String
""
assertNotEqual_ :: (Eq a, Show a, AssertM m, HasCallStack)
=> String -> String -> a -> a -> m ()
assertNotEqual_ :: String -> String -> a -> a -> m ()
assertNotEqual_ String
name String
s a
expected a
actual =
if a
expected a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
actual
then do let x :: String
x = a -> String
forall a. Show a => a -> String
notEqualityFailedMessage a
expected
ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s (String -> ColorString) -> String -> ColorString
forall a b. (a -> b) -> a -> b
$ String
HasCallStack => String
failedAt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
x)
else () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
gassertNotEqualVerbose :: (Eq a, Show a, AssertM m, HasCallStack) => String -> a -> a -> m ()
gassertNotEqualVerbose :: String -> a -> a -> m ()
gassertNotEqualVerbose = String -> String -> a -> a -> m ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertNotEqual_ String
"gassertNotEqualVerbose"
gassertNotEqual :: (Eq a, Show a, AssertM m, HasCallStack) => a -> a -> m ()
gassertNotEqual :: a -> a -> m ()
gassertNotEqual = String -> String -> a -> a -> m ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertNotEqual_ String
"gassertNotEqual" String
""
assertNotEqualVerbose :: (Eq a, Show a, HasCallStack) => String -> a -> a -> IO ()
assertNotEqualVerbose :: String -> a -> a -> IO ()
assertNotEqualVerbose = String -> String -> a -> a -> IO ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertNotEqual_ String
"assertNotEqualVerbose"
assertNotEqual :: (Eq a, Show a, HasCallStack) => a -> a -> IO ()
assertNotEqual :: a -> a -> IO ()
assertNotEqual = String -> String -> a -> a -> IO ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertNotEqual_ String
"assertNotEqual" String
""
assertEqualPretty_ :: (Eq a, Pretty a, AssertM m, HasCallStack)
=> String -> String -> a -> a -> m ()
assertEqualPretty_ :: String -> String -> a -> a -> m ()
assertEqualPretty_ String
name String
s a
expected a
actual =
if a
expected a -> a -> Bool
forall a. Eq a => a -> a -> Bool
/= a
actual
then do let x :: ColorString
x = String -> String -> ColorString
equalityFailedMessage' (a -> String
forall a. Pretty a => a -> String
showPretty a
expected) (a -> String
forall a. Pretty a => a -> String
showPretty a
actual)
ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> ColorString -> ColorString
mkColorMsg String
name String
s
(String -> ColorString
noColor String
HasCallStack => String
failedAt ColorString -> ColorString -> ColorString
+++ ColorString
x))
else () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
gassertEqualPrettyVerbose :: (Eq a, Pretty a, AssertM m, HasCallStack) => String -> a -> a -> m ()
gassertEqualPrettyVerbose :: String -> a -> a -> m ()
gassertEqualPrettyVerbose = String -> String -> a -> a -> m ()
forall a (m :: * -> *).
(Eq a, Pretty a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertEqualPretty_ String
"gassertEqualPrettyVerbose"
gassertEqualPretty :: (Eq a, Pretty a, AssertM m, HasCallStack) => a -> a -> m ()
gassertEqualPretty :: a -> a -> m ()
gassertEqualPretty = String -> String -> a -> a -> m ()
forall a (m :: * -> *).
(Eq a, Pretty a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertEqualPretty_ String
"gassertEqualPretty" String
""
assertEqualPrettyVerbose :: (Eq a, Pretty a, HasCallStack) => String -> a -> a -> IO ()
assertEqualPrettyVerbose :: String -> a -> a -> IO ()
assertEqualPrettyVerbose = String -> String -> a -> a -> IO ()
forall a (m :: * -> *).
(Eq a, Pretty a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertEqualPretty_ String
"assertEqualPrettyVerbose"
assertEqualPretty :: (Eq a, Pretty a, HasCallStack) => a -> a -> IO ()
assertEqualPretty :: a -> a -> IO ()
assertEqualPretty = String -> String -> a -> a -> IO ()
forall a (m :: * -> *).
(Eq a, Pretty a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertEqualPretty_ String
"assertEqualPretty" String
""
assertNotEqualPretty_ :: (Eq a, Pretty a, AssertM m, HasCallStack)
=> String -> String -> a -> a -> m ()
assertNotEqualPretty_ :: String -> String -> a -> a -> m ()
assertNotEqualPretty_ String
name String
s a
expected a
actual =
if a
expected a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
actual
then do let x :: String
x = String -> String
notEqualityFailedMessage' (a -> String
forall a. Pretty a => a -> String
showPretty a
expected)
ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s (String -> ColorString) -> String -> ColorString
forall a b. (a -> b) -> a -> b
$ String
HasCallStack => String
failedAt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
x)
else () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
gassertNotEqualPrettyVerbose :: (Eq a, Pretty a, AssertM m, HasCallStack) => String -> a -> a -> m ()
gassertNotEqualPrettyVerbose :: String -> a -> a -> m ()
gassertNotEqualPrettyVerbose = String -> String -> a -> a -> m ()
forall a (m :: * -> *).
(Eq a, Pretty a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertNotEqualPretty_ String
"gassertNotEqualPrettyVerbose"
gassertNotEqualPretty :: (Eq a, Pretty a, AssertM m, HasCallStack) => a -> a -> m ()
gassertNotEqualPretty :: a -> a -> m ()
gassertNotEqualPretty = String -> String -> a -> a -> m ()
forall a (m :: * -> *).
(Eq a, Pretty a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertNotEqualPretty_ String
"gassertNotEqualPretty" String
""
assertNotEqualPrettyVerbose :: (Eq a, Pretty a, HasCallStack) => String -> a -> a -> IO ()
assertNotEqualPrettyVerbose :: String -> a -> a -> IO ()
assertNotEqualPrettyVerbose = String -> String -> a -> a -> IO ()
forall a (m :: * -> *).
(Eq a, Pretty a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertNotEqualPretty_ String
"assertNotEqualPrettyVerbose"
assertNotEqualPretty :: (Eq a, Pretty a, HasCallStack) => a -> a -> IO ()
assertNotEqualPretty :: a -> a -> IO ()
assertNotEqualPretty = String -> String -> a -> a -> IO ()
forall a (m :: * -> *).
(Eq a, Pretty a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertNotEqualPretty_ String
"assertNotEqualPretty" String
""
assertEqualNoShow_ :: (Eq a, AssertM m, HasCallStack)
=> String -> String -> a -> a -> m ()
assertEqualNoShow_ :: String -> String -> a -> a -> m ()
assertEqualNoShow_ String
name String
s a
expected a
actual =
if a
expected a -> a -> Bool
forall a. Eq a => a -> a -> Bool
/= a
actual
then ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s String
HasCallStack => String
failedAt)
else () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
gassertEqualNoShowVerbose :: (Eq a, AssertM m, HasCallStack) => String -> a -> a -> m ()
gassertEqualNoShowVerbose :: String -> a -> a -> m ()
gassertEqualNoShowVerbose = String -> String -> a -> a -> m ()
forall a (m :: * -> *).
(Eq a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertEqualNoShow_ String
"gassertEqualNoShowVerbose"
gassertEqualNoShow :: (Eq a, AssertM m, HasCallStack) => a -> a -> m ()
gassertEqualNoShow :: a -> a -> m ()
gassertEqualNoShow = String -> String -> a -> a -> m ()
forall a (m :: * -> *).
(Eq a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertEqualNoShow_ String
"gassertEqualNoShow" String
""
assertEqualNoShowVerbose :: (Eq a, HasCallStack) => String -> a -> a -> IO ()
assertEqualNoShowVerbose :: String -> a -> a -> IO ()
assertEqualNoShowVerbose = String -> String -> a -> a -> IO ()
forall a (m :: * -> *).
(Eq a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertEqualNoShow_ String
"assertEqualNoShowVerbose"
assertEqualNoShow :: (Eq a, HasCallStack) => a -> a -> IO ()
assertEqualNoShow :: a -> a -> IO ()
assertEqualNoShow = String -> String -> a -> a -> IO ()
forall a (m :: * -> *).
(Eq a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertEqualNoShow_ String
"assertEqualNoShow" String
""
assertNotEqualNoShow_ :: (Eq a, AssertM m, HasCallStack)
=> String -> String -> a -> a -> m ()
assertNotEqualNoShow_ :: String -> String -> a -> a -> m ()
assertNotEqualNoShow_ String
name String
s a
expected a
actual =
if a
expected a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
actual
then ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s String
HasCallStack => String
failedAt)
else () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
gassertNotEqualNoShowVerbose :: (Eq a, AssertM m, HasCallStack) => String -> a -> a -> m ()
gassertNotEqualNoShowVerbose :: String -> a -> a -> m ()
gassertNotEqualNoShowVerbose = String -> String -> a -> a -> m ()
forall a (m :: * -> *).
(Eq a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertNotEqualNoShow_ String
"gassertNotEqualNoShowVerbose"
gassertNotEqualNoShow :: (Eq a, AssertM m, HasCallStack) => a -> a -> m ()
gassertNotEqualNoShow :: a -> a -> m ()
gassertNotEqualNoShow = String -> String -> a -> a -> m ()
forall a (m :: * -> *).
(Eq a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertNotEqualNoShow_ String
"gassertNotEqualNoShow" String
""
assertNotEqualNoShowVerbose :: (Eq a, HasCallStack) => String -> a -> a -> IO ()
assertNotEqualNoShowVerbose :: String -> a -> a -> IO ()
assertNotEqualNoShowVerbose = String -> String -> a -> a -> IO ()
forall a (m :: * -> *).
(Eq a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertNotEqualNoShow_ String
"assertNotEqualNoShowVerbose"
assertNotEqualNoShow :: (Eq a, HasCallStack) => a -> a -> IO ()
assertNotEqualNoShow :: a -> a -> IO ()
assertNotEqualNoShow = String -> String -> a -> a -> IO ()
forall a (m :: * -> *).
(Eq a, AssertM m, HasCallStack) =>
String -> String -> a -> a -> m ()
assertNotEqualNoShow_ String
"assertNotEqualNoShow" String
""
assertListsEqualAsSets_ :: (Eq a, Show a, AssertM m, HasCallStack)
=> String -> String -> [a] -> [a] -> m ()
assertListsEqualAsSets_ :: String -> String -> [a] -> [a] -> m ()
assertListsEqualAsSets_ String
name String
s [a]
expected [a]
actual =
let ne :: Int
ne = [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
expected
na :: Int
na = [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
actual
in case () of
()
_| Int
ne Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
na ->
do let x :: ColorString
x = [a] -> [a] -> ColorString
forall a. Show a => a -> a -> ColorString
equalityFailedMessage [a]
expected [a]
actual
ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> ColorString -> ColorString
mkColorMsg String
name String
s
(String -> ColorString
noColor
(String
HasCallStack => String
failedAt
String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\n expected length: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
ne
String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\n actual length: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
na) ColorString -> ColorString -> ColorString
+++
(if ColorString -> Int
maxLength ColorString
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
5000
then ColorString
x else ColorString
emptyColorString)))
| Bool -> Bool
not ([a] -> [a] -> Bool
forall a. Eq a => [a] -> [a] -> Bool
unorderedEq [a]
expected [a]
actual) ->
do let x :: ColorString
x = [a] -> [a] -> ColorString
forall a. Show a => a -> a -> ColorString
equalityFailedMessage [a]
expected [a]
actual
ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> ColorString -> ColorString
mkColorMsg String
"assertSetEqual" String
s
(String -> ColorString
noColor String
HasCallStack => String
failedAt ColorString -> ColorString -> ColorString
+++ ColorString
x))
| Bool
otherwise -> () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
where unorderedEq :: [a] -> [a] -> Bool
unorderedEq [a]
l1 [a]
l2 =
[a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null ([a]
l1 [a] -> [a] -> [a]
forall a. Eq a => [a] -> [a] -> [a]
\\ [a]
l2) Bool -> Bool -> Bool
&& [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null ([a]
l2 [a] -> [a] -> [a]
forall a. Eq a => [a] -> [a] -> [a]
\\ [a]
l1)
gassertListsEqualAsSetsVerbose :: (Eq a, Show a, AssertM m, HasCallStack) => String -> [a] -> [a] -> m ()
gassertListsEqualAsSetsVerbose :: String -> [a] -> [a] -> m ()
gassertListsEqualAsSetsVerbose = String -> String -> [a] -> [a] -> m ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> [a] -> [a] -> m ()
assertListsEqualAsSets_ String
"gassertListsEqualAsSetsVerbose"
gassertListsEqualAsSets :: (Eq a, Show a, AssertM m, HasCallStack) => [a] -> [a] -> m ()
gassertListsEqualAsSets :: [a] -> [a] -> m ()
gassertListsEqualAsSets= String -> String -> [a] -> [a] -> m ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> [a] -> [a] -> m ()
assertListsEqualAsSets_ String
"gassertListsEqualAsSets" String
""
assertListsEqualAsSetsVerbose :: (Eq a, Show a, HasCallStack) => String -> [a] -> [a] -> IO ()
assertListsEqualAsSetsVerbose :: String -> [a] -> [a] -> IO ()
assertListsEqualAsSetsVerbose = String -> String -> [a] -> [a] -> IO ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> [a] -> [a] -> m ()
assertListsEqualAsSets_ String
"assertListsEqualAsSetsVerbose"
assertListsEqualAsSets :: (Eq a, Show a, HasCallStack) => [a] -> [a] -> IO ()
assertListsEqualAsSets :: [a] -> [a] -> IO ()
assertListsEqualAsSets = String -> String -> [a] -> [a] -> IO ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> [a] -> [a] -> m ()
assertListsEqualAsSets_ String
"assertListsEqualAsSets" String
""
assertNotEmpty_ :: (AssertM m, HasCallStack) => String -> String -> [a] -> m ()
assertNotEmpty_ :: String -> String -> [a] -> m ()
assertNotEmpty_ String
name String
s [] =
ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s String
HasCallStack => String
failedAt)
assertNotEmpty_ String
_ String
_ (a
_:[a]
_) = () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
gassertNotEmptyVerbose :: (AssertM m, HasCallStack) => String -> [a] -> m ()
gassertNotEmptyVerbose :: String -> [a] -> m ()
gassertNotEmptyVerbose = String -> String -> [a] -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
String -> String -> [a] -> m ()
assertNotEmpty_ String
"gassertNotEmptyVerbose"
gassertNotEmpty :: (HasCallStack, AssertM m) => [a] -> m ()
gassertNotEmpty :: [a] -> m ()
gassertNotEmpty = String -> String -> [a] -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
String -> String -> [a] -> m ()
assertNotEmpty_ String
"gassertNotEmpty" String
""
assertNotEmptyVerbose :: HasCallStack => String -> [a] -> IO ()
assertNotEmptyVerbose :: String -> [a] -> IO ()
assertNotEmptyVerbose = String -> String -> [a] -> IO ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
String -> String -> [a] -> m ()
assertNotEmpty_ String
"assertNotEmptyVerbose"
assertNotEmpty :: HasCallStack => [a] -> IO ()
assertNotEmpty :: [a] -> IO ()
assertNotEmpty = String -> String -> [a] -> IO ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
String -> String -> [a] -> m ()
assertNotEmpty_ String
"assertNotEmpty" String
""
assertEmpty_ :: (AssertM m, HasCallStack) => String -> String -> [a] -> m ()
assertEmpty_ :: String -> String -> [a] -> m ()
assertEmpty_ String
name String
s (a
_:[a]
_) =
ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s String
HasCallStack => String
failedAt)
assertEmpty_ String
_ String
_ [] = () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
gassertEmptyVerbose :: (AssertM m, HasCallStack) => String -> [a] -> m ()
gassertEmptyVerbose :: String -> [a] -> m ()
gassertEmptyVerbose = String -> String -> [a] -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
String -> String -> [a] -> m ()
assertEmpty_ String
"gassertEmptyVerbose"
gassertEmpty :: (HasCallStack, AssertM m) => [a] -> m ()
gassertEmpty :: [a] -> m ()
gassertEmpty = String -> String -> [a] -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
String -> String -> [a] -> m ()
assertEmpty_ String
"gassertEmpty" String
""
assertEmptyVerbose :: HasCallStack => String -> [a] -> IO ()
assertEmptyVerbose :: String -> [a] -> IO ()
assertEmptyVerbose = String -> String -> [a] -> IO ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
String -> String -> [a] -> m ()
assertEmpty_ String
"assertEmptyVerbose"
assertEmpty :: HasCallStack => [a] -> IO ()
assertEmpty :: [a] -> IO ()
assertEmpty = String -> String -> [a] -> IO ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
String -> String -> [a] -> m ()
assertEmpty_ String
"assertEmpty" String
""
assertElem_ :: (Eq a, Show a, AssertM m, HasCallStack) => String -> String -> a -> [a] -> m ()
assertElem_ :: String -> String -> a -> [a] -> m ()
assertElem_ String
name String
s a
x [a]
l =
if a
x a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [a]
l
then () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
else ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s
(String
HasCallStack => String
failedAt String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
"\n element: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
x String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
"\n list: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ [a] -> String
forall a. Show a => a -> String
show [a]
l))
gassertElemVerbose :: (Eq a, Show a, AssertM m, HasCallStack) => String -> a -> [a] -> m ()
gassertElemVerbose :: String -> a -> [a] -> m ()
gassertElemVerbose = String -> String -> a -> [a] -> m ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> a -> [a] -> m ()
assertElem_ String
"gassertElemVerbose"
gassertElem :: (Eq a, Show a, AssertM m, HasCallStack) => a -> [a] -> m ()
gassertElem :: a -> [a] -> m ()
gassertElem = String -> String -> a -> [a] -> m ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> a -> [a] -> m ()
assertElem_ String
"gassertElem" String
""
assertElemVerbose :: (Eq a, Show a, HasCallStack) => String -> a -> [a] -> IO ()
assertElemVerbose :: String -> a -> [a] -> IO ()
assertElemVerbose = String -> String -> a -> [a] -> IO ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> a -> [a] -> m ()
assertElem_ String
"assertElemVerbose"
assertElem :: (Eq a, Show a, HasCallStack) => a -> [a] -> IO ()
assertElem :: a -> [a] -> IO ()
assertElem = String -> String -> a -> [a] -> IO ()
forall a (m :: * -> *).
(Eq a, Show a, AssertM m, HasCallStack) =>
String -> String -> a -> [a] -> m ()
assertElem_ String
"assertElem" String
""
assertThrowsIO_ :: (HasCallStack, Exception e)
=> String -> String -> IO a -> (e -> Bool) -> IO ()
assertThrowsIO_ :: String -> String -> IO a -> (e -> Bool) -> IO ()
assertThrowsIO_ String
name String
s IO a
x e -> Bool
f =
String -> String -> IO a -> (e -> Bool) -> IO ()
forall (m :: * -> *) e a.
(MonadBaseControl IO m, MonadIO m, Exception e, HasCallStack) =>
String -> String -> m a -> (e -> Bool) -> m ()
assertThrowsM_ String
name String
s IO a
x e -> Bool
f
assertThrowsIOVerbose :: (HasCallStack, Exception e) => String -> IO a -> (e -> Bool) -> IO ()
assertThrowsIOVerbose :: String -> IO a -> (e -> Bool) -> IO ()
assertThrowsIOVerbose = String -> String -> IO a -> (e -> Bool) -> IO ()
forall e a.
(HasCallStack, Exception e) =>
String -> String -> IO a -> (e -> Bool) -> IO ()
assertThrowsIO_ String
"assertThrowsIOVerbose"
assertThrowsIO :: (HasCallStack, Exception e) => IO a -> (e -> Bool) -> IO ()
assertThrowsIO :: IO a -> (e -> Bool) -> IO ()
assertThrowsIO = String -> String -> IO a -> (e -> Bool) -> IO ()
forall e a.
(HasCallStack, Exception e) =>
String -> String -> IO a -> (e -> Bool) -> IO ()
assertThrowsIO_ String
"assertThrowsIO" String
""
assertThrowsSomeIO_ :: HasCallStack => String -> String -> IO a -> IO ()
assertThrowsSomeIO_ :: String -> String -> IO a -> IO ()
assertThrowsSomeIO_ String
name String
s IO a
x = String -> String -> IO a -> (SomeException -> Bool) -> IO ()
forall e a.
(HasCallStack, Exception e) =>
String -> String -> IO a -> (e -> Bool) -> IO ()
assertThrowsIO_ String
name String
s IO a
x (\ (SomeException
_e::SomeException) -> Bool
True)
assertThrowsSomeIOVerbose :: HasCallStack => String -> IO a -> IO ()
assertThrowsSomeIOVerbose :: String -> IO a -> IO ()
assertThrowsSomeIOVerbose = String -> String -> IO a -> IO ()
forall a. HasCallStack => String -> String -> IO a -> IO ()
assertThrowsSomeIO_ String
"assertThrowsSomeIOVerbose"
assertThrowsSomeIO :: HasCallStack => IO a -> IO ()
assertThrowsSomeIO :: IO a -> IO ()
assertThrowsSomeIO = String -> String -> IO a -> IO ()
forall a. HasCallStack => String -> String -> IO a -> IO ()
assertThrowsSomeIO_ String
"assertThrowsSomeIO" String
""
assertThrowsM_ :: (MonadBaseControl IO m, MonadIO m, Exception e, HasCallStack)
=> String -> String -> m a -> (e -> Bool) -> m ()
assertThrowsM_ :: String -> String -> m a -> (e -> Bool) -> m ()
assertThrowsM_ String
name String
s m a
x e -> Bool
f =
do Either e a
res <- m a -> m (Either e a)
forall (m :: * -> *) e a.
(MonadBaseControl IO m, Exception e) =>
m a -> m (Either e a)
ExL.try m a
x
case Either e a
res of
Right a
_ -> IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$
ColorString -> IO ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s
(String
HasCallStack => String
failedAt String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
": no exception was thrown"))
Left e
e -> if e -> Bool
f e
e then () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
else IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$
ColorString -> IO ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s
(String
HasCallStack => String
failedAt String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
": wrong exception was thrown: " String -> String -> String
forall a. [a] -> [a] -> [a]
++
e -> String
forall a. Show a => a -> String
show e
e))
assertThrowsMVerbose ::
(MonadBaseControl IO m, MonadIO m, Exception e, HasCallStack)
=> String -> m a -> (e -> Bool) -> m ()
assertThrowsMVerbose :: String -> m a -> (e -> Bool) -> m ()
assertThrowsMVerbose = String -> String -> m a -> (e -> Bool) -> m ()
forall (m :: * -> *) e a.
(MonadBaseControl IO m, MonadIO m, Exception e, HasCallStack) =>
String -> String -> m a -> (e -> Bool) -> m ()
assertThrowsM_ String
"assertThrowsMVerbose"
assertThrowsM ::
(MonadBaseControl IO m, MonadIO m, Exception e, HasCallStack)
=> m a -> (e -> Bool) -> m ()
assertThrowsM :: m a -> (e -> Bool) -> m ()
assertThrowsM = String -> String -> m a -> (e -> Bool) -> m ()
forall (m :: * -> *) e a.
(MonadBaseControl IO m, MonadIO m, Exception e, HasCallStack) =>
String -> String -> m a -> (e -> Bool) -> m ()
assertThrowsM_ String
"assertThrowsM" String
""
assertThrowsSomeM_ :: (MonadBaseControl IO m, MonadIO m, HasCallStack)
=> String -> String -> m a -> m ()
assertThrowsSomeM_ :: String -> String -> m a -> m ()
assertThrowsSomeM_ String
name String
s m a
x = String -> String -> m a -> (SomeException -> Bool) -> m ()
forall (m :: * -> *) e a.
(MonadBaseControl IO m, MonadIO m, Exception e, HasCallStack) =>
String -> String -> m a -> (e -> Bool) -> m ()
assertThrowsM_ String
name String
s m a
x (\ (SomeException
_e::SomeException) -> Bool
True)
assertThrowsSomeMVerbose ::
(MonadBaseControl IO m, MonadIO m, HasCallStack)
=> String -> m a -> m ()
assertThrowsSomeMVerbose :: String -> m a -> m ()
assertThrowsSomeMVerbose = String -> String -> m a -> m ()
forall (m :: * -> *) a.
(MonadBaseControl IO m, MonadIO m, HasCallStack) =>
String -> String -> m a -> m ()
assertThrowsSomeM_ String
"assertThrowsSomeMVerbose"
assertThrowsSomeM :: (MonadBaseControl IO m, MonadIO m, HasCallStack) => m a -> m ()
assertThrowsSomeM :: m a -> m ()
assertThrowsSomeM = String -> String -> m a -> m ()
forall (m :: * -> *) a.
(MonadBaseControl IO m, MonadIO m, HasCallStack) =>
String -> String -> m a -> m ()
assertThrowsSomeM_ String
"assertThrowsSomeM" String
""
assertThrows_ :: (HasCallStack, Exception e)
=> String -> String -> a -> (e -> Bool) -> IO ()
assertThrows_ :: String -> String -> a -> (e -> Bool) -> IO ()
assertThrows_ String
name String
s a
x e -> Bool
f = String -> String -> IO a -> (e -> Bool) -> IO ()
forall e a.
(HasCallStack, Exception e) =>
String -> String -> IO a -> (e -> Bool) -> IO ()
assertThrowsIO_ String
name String
s (a -> IO a
forall a. a -> IO a
evaluate a
x) e -> Bool
f
assertThrowsVerbose :: (HasCallStack, Exception e) => String -> a -> (e -> Bool) -> IO ()
assertThrowsVerbose :: String -> a -> (e -> Bool) -> IO ()
assertThrowsVerbose = String -> String -> a -> (e -> Bool) -> IO ()
forall e a.
(HasCallStack, Exception e) =>
String -> String -> a -> (e -> Bool) -> IO ()
assertThrows_ String
"assertThrowsVerbose"
assertThrows :: (HasCallStack, Exception e) => a -> (e -> Bool) -> IO ()
assertThrows :: a -> (e -> Bool) -> IO ()
assertThrows = String -> String -> a -> (e -> Bool) -> IO ()
forall e a.
(HasCallStack, Exception e) =>
String -> String -> a -> (e -> Bool) -> IO ()
assertThrows_ String
"assertThrows" String
""
assertThrowsSome_ :: HasCallStack => String -> String -> a -> IO ()
assertThrowsSome_ :: String -> String -> a -> IO ()
assertThrowsSome_ String
name String
s a
x =
String -> String -> a -> (SomeException -> Bool) -> IO ()
forall e a.
(HasCallStack, Exception e) =>
String -> String -> a -> (e -> Bool) -> IO ()
assertThrows_ String
name String
s a
x (\ (SomeException
_e::SomeException) -> Bool
True)
assertThrowsSomeVerbose :: HasCallStack => String -> a -> IO ()
assertThrowsSomeVerbose :: String -> a -> IO ()
assertThrowsSomeVerbose = String -> String -> a -> IO ()
forall a. HasCallStack => String -> String -> a -> IO ()
assertThrowsSome_ String
"assertThrowsSomeVerbose"
assertThrowsSome :: HasCallStack => a -> IO ()
assertThrowsSome :: a -> IO ()
assertThrowsSome = String -> String -> a -> IO ()
forall a. HasCallStack => String -> String -> a -> IO ()
assertThrowsSome_ String
"assertThrowsSome" String
""
assertLeft_ :: forall a b m . (AssertM m, Show b, HasCallStack)
=> String -> String -> Either a b -> m a
assertLeft_ :: String -> String -> Either a b -> m a
assertLeft_ String
_ String
_ (Left a
x) = a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return a
x
assertLeft_ String
name String
s (Right b
x) =
ColorString -> m a
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s
(String
HasCallStack => String
failedAt String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
": expected a Left value, given " String -> String -> String
forall a. [a] -> [a] -> [a]
++
Either b b -> String
forall a. Show a => a -> String
show (b -> Either b b
forall a b. b -> Either a b
Right b
x :: Either b b)))
gassertLeftVerbose :: (Show b, AssertM m, HasCallStack) => String -> Either a b -> m a
gassertLeftVerbose :: String -> Either a b -> m a
gassertLeftVerbose = String -> String -> Either a b -> m a
forall a b (m :: * -> *).
(AssertM m, Show b, HasCallStack) =>
String -> String -> Either a b -> m a
assertLeft_ String
"gassertLeftVerbose"
gassertLeft :: (Show b, AssertM m, HasCallStack) => Either a b -> m a
gassertLeft :: Either a b -> m a
gassertLeft = String -> String -> Either a b -> m a
forall a b (m :: * -> *).
(AssertM m, Show b, HasCallStack) =>
String -> String -> Either a b -> m a
assertLeft_ String
"gassertLeft" String
""
assertLeftVerbose :: (Show b, HasCallStack) => String -> Either a b -> IO a
assertLeftVerbose :: String -> Either a b -> IO a
assertLeftVerbose = String -> String -> Either a b -> IO a
forall a b (m :: * -> *).
(AssertM m, Show b, HasCallStack) =>
String -> String -> Either a b -> m a
assertLeft_ String
"assertLeftVerbose"
assertLeft :: (HasCallStack, Show b) => Either a b -> IO a
assertLeft :: Either a b -> IO a
assertLeft = String -> String -> Either a b -> IO a
forall a b (m :: * -> *).
(AssertM m, Show b, HasCallStack) =>
String -> String -> Either a b -> m a
assertLeft_ String
"assertLeft" String
""
assertLeftNoShow_ :: (HasCallStack, AssertM m) => String -> String -> Either a b -> m a
assertLeftNoShow_ :: String -> String -> Either a b -> m a
assertLeftNoShow_ String
_ String
_ (Left a
x) = a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return a
x
assertLeftNoShow_ String
name String
s (Right b
_) =
ColorString -> m a
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s
(String
HasCallStack => String
failedAt String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
": expected a Left value, given a Right value"))
gassertLeftNoShowVerbose :: (HasCallStack, AssertM m) => String -> Either a b -> m a
gassertLeftNoShowVerbose :: String -> Either a b -> m a
gassertLeftNoShowVerbose = String -> String -> Either a b -> m a
forall (m :: * -> *) a b.
(HasCallStack, AssertM m) =>
String -> String -> Either a b -> m a
assertLeftNoShow_ String
"gassertLeftNoShowVerbose"
gassertLeftNoShow :: (HasCallStack, AssertM m) => Either a b -> m a
gassertLeftNoShow :: Either a b -> m a
gassertLeftNoShow = String -> String -> Either a b -> m a
forall (m :: * -> *) a b.
(HasCallStack, AssertM m) =>
String -> String -> Either a b -> m a
assertLeftNoShow_ String
"gassertLeftNoShow" String
""
assertLeftNoShowVerbose :: HasCallStack => String -> Either a b -> IO a
assertLeftNoShowVerbose :: String -> Either a b -> IO a
assertLeftNoShowVerbose = String -> String -> Either a b -> IO a
forall (m :: * -> *) a b.
(HasCallStack, AssertM m) =>
String -> String -> Either a b -> m a
assertLeftNoShow_ String
"assertLeftNoShowVerbose"
assertLeftNoShow :: HasCallStack => Either a b -> IO a
assertLeftNoShow :: Either a b -> IO a
assertLeftNoShow = String -> String -> Either a b -> IO a
forall (m :: * -> *) a b.
(HasCallStack, AssertM m) =>
String -> String -> Either a b -> m a
assertLeftNoShow_ String
"assertLeftNoShow" String
""
assertRight_ :: forall a b m . (AssertM m, Show a, HasCallStack)
=> String -> String -> Either a b -> m b
assertRight_ :: String -> String -> Either a b -> m b
assertRight_ String
_ String
_ (Right b
x) = b -> m b
forall (m :: * -> *) a. Monad m => a -> m a
return b
x
assertRight_ String
name String
s (Left a
x) =
ColorString -> m b
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s
(String
HasCallStack => String
failedAt String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
": expected a Right value, given " String -> String -> String
forall a. [a] -> [a] -> [a]
++
Either a a -> String
forall a. Show a => a -> String
show (a -> Either a a
forall a b. a -> Either a b
Left a
x :: Either a a)))
gassertRightVerbose :: (Show a, AssertM m, HasCallStack) => String -> Either a b -> m b
gassertRightVerbose :: String -> Either a b -> m b
gassertRightVerbose = String -> String -> Either a b -> m b
forall a b (m :: * -> *).
(AssertM m, Show a, HasCallStack) =>
String -> String -> Either a b -> m b
assertRight_ String
"gassertRightVerbose"
gassertRight :: (Show a, AssertM m, HasCallStack) => Either a b -> m b
gassertRight :: Either a b -> m b
gassertRight = String -> String -> Either a b -> m b
forall a b (m :: * -> *).
(AssertM m, Show a, HasCallStack) =>
String -> String -> Either a b -> m b
assertRight_ String
"gassertRight" String
""
assertRightVerbose :: (Show a, HasCallStack) => String -> Either a b -> IO b
assertRightVerbose :: String -> Either a b -> IO b
assertRightVerbose = String -> String -> Either a b -> IO b
forall a b (m :: * -> *).
(AssertM m, Show a, HasCallStack) =>
String -> String -> Either a b -> m b
assertRight_ String
"assertRightVerbose"
assertRight :: (HasCallStack, Show a) => Either a b -> IO b
assertRight :: Either a b -> IO b
assertRight = String -> String -> Either a b -> IO b
forall a b (m :: * -> *).
(AssertM m, Show a, HasCallStack) =>
String -> String -> Either a b -> m b
assertRight_ String
"assertRight" String
""
assertRightNoShow_ :: (HasCallStack, AssertM m) => String -> String -> Either a b -> m b
assertRightNoShow_ :: String -> String -> Either a b -> m b
assertRightNoShow_ String
_ String
_ (Right b
x) = b -> m b
forall (m :: * -> *) a. Monad m => a -> m a
return b
x
assertRightNoShow_ String
name String
s (Left a
_) =
ColorString -> m b
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s
(String
HasCallStack => String
failedAt String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
": expected a Right value, given a Left value"))
gassertRightNoShowVerbose :: (HasCallStack, AssertM m) => String -> Either a b -> m b
gassertRightNoShowVerbose :: String -> Either a b -> m b
gassertRightNoShowVerbose = String -> String -> Either a b -> m b
forall (m :: * -> *) a b.
(HasCallStack, AssertM m) =>
String -> String -> Either a b -> m b
assertRightNoShow_ String
"gassertRightNoShowVerbose"
gassertRightNoShow :: (HasCallStack, AssertM m) => Either a b -> m b
gassertRightNoShow :: Either a b -> m b
gassertRightNoShow = String -> String -> Either a b -> m b
forall (m :: * -> *) a b.
(HasCallStack, AssertM m) =>
String -> String -> Either a b -> m b
assertRightNoShow_ String
"gassertRightNoShow" String
""
assertRightNoShowVerbose :: HasCallStack => String -> Either a b -> IO b
assertRightNoShowVerbose :: String -> Either a b -> IO b
assertRightNoShowVerbose = String -> String -> Either a b -> IO b
forall (m :: * -> *) a b.
(HasCallStack, AssertM m) =>
String -> String -> Either a b -> m b
assertRightNoShow_ String
"assertRightNoShowVerbose"
assertRightNoShow :: HasCallStack => Either a b -> IO b
assertRightNoShow :: Either a b -> IO b
assertRightNoShow = String -> String -> Either a b -> IO b
forall (m :: * -> *) a b.
(HasCallStack, AssertM m) =>
String -> String -> Either a b -> m b
assertRightNoShow_ String
"assertRightNoShow" String
""
assertJust_ :: (HasCallStack, AssertM m) => String -> String -> Maybe a -> m a
assertJust_ :: String -> String -> Maybe a -> m a
assertJust_ String
_ String
_ (Just a
x) = a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return a
x
assertJust_ String
name String
s Maybe a
Nothing =
ColorString -> m a
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s
(String
HasCallStack => String
failedAt String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
": expected a Just value, given Nothing"))
gassertJustVerbose :: (HasCallStack, AssertM m) => String -> Maybe a -> m a
gassertJustVerbose :: String -> Maybe a -> m a
gassertJustVerbose = String -> String -> Maybe a -> m a
forall (m :: * -> *) a.
(HasCallStack, AssertM m) =>
String -> String -> Maybe a -> m a
assertJust_ String
"gassertJustVerbose"
gassertJust :: (HasCallStack, AssertM m) => Maybe a -> m a
gassertJust :: Maybe a -> m a
gassertJust = String -> String -> Maybe a -> m a
forall (m :: * -> *) a.
(HasCallStack, AssertM m) =>
String -> String -> Maybe a -> m a
assertJust_ String
"gassertJust" String
""
assertJustVerbose :: HasCallStack => String -> Maybe a -> IO a
assertJustVerbose :: String -> Maybe a -> IO a
assertJustVerbose = String -> String -> Maybe a -> IO a
forall (m :: * -> *) a.
(HasCallStack, AssertM m) =>
String -> String -> Maybe a -> m a
assertJust_ String
"assertJustVerbose"
assertJust :: HasCallStack => Maybe a -> IO a
assertJust :: Maybe a -> IO a
assertJust = String -> String -> Maybe a -> IO a
forall (m :: * -> *) a.
(HasCallStack, AssertM m) =>
String -> String -> Maybe a -> m a
assertJust_ String
"assertJust" String
""
assertNothing_ :: (Show a, AssertM m, HasCallStack)
=> String -> String -> Maybe a -> m ()
assertNothing_ :: String -> String -> Maybe a -> m ()
assertNothing_ String
_ String
_ Maybe a
Nothing = () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
assertNothing_ String
name String
s Maybe a
jx =
ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s
(String
HasCallStack => String
failedAt String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
": expected Nothing, given " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Maybe a -> String
forall a. Show a => a -> String
show Maybe a
jx))
gassertNothingVerbose :: (Show a, AssertM m, HasCallStack) => String -> Maybe a -> m ()
gassertNothingVerbose :: String -> Maybe a -> m ()
gassertNothingVerbose = String -> String -> Maybe a -> m ()
forall a (m :: * -> *).
(Show a, AssertM m, HasCallStack) =>
String -> String -> Maybe a -> m ()
assertNothing_ String
"gassertNothingVerbose"
gassertNothing :: (Show a, AssertM m, HasCallStack) => Maybe a -> m ()
gassertNothing :: Maybe a -> m ()
gassertNothing = String -> String -> Maybe a -> m ()
forall a (m :: * -> *).
(Show a, AssertM m, HasCallStack) =>
String -> String -> Maybe a -> m ()
assertNothing_ String
"gassertNothing" String
""
assertNothingVerbose :: (Show a, HasCallStack) => String -> Maybe a -> IO ()
assertNothingVerbose :: String -> Maybe a -> IO ()
assertNothingVerbose = String -> String -> Maybe a -> IO ()
forall a (m :: * -> *).
(Show a, AssertM m, HasCallStack) =>
String -> String -> Maybe a -> m ()
assertNothing_ String
"assertNothingVerbose"
assertNothing :: (HasCallStack, Show a) => Maybe a -> IO ()
assertNothing :: Maybe a -> IO ()
assertNothing = String -> String -> Maybe a -> IO ()
forall a (m :: * -> *).
(Show a, AssertM m, HasCallStack) =>
String -> String -> Maybe a -> m ()
assertNothing_ String
"assertNothing" String
""
assertNothingNoShow_ :: (HasCallStack, AssertM m) => String -> String -> Maybe a -> m ()
assertNothingNoShow_ :: String -> String -> Maybe a -> m ()
assertNothingNoShow_ String
_ String
_ Maybe a
Nothing = () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
assertNothingNoShow_ String
name String
s Maybe a
_ =
ColorString -> m ()
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
ColorString -> m a
genericAssertFailure (String -> String -> String -> ColorString
mkMsg String
name String
s
(String
HasCallStack => String
failedAt String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
": expected Nothing, given a Just value"))
gassertNothingNoShowVerbose :: (HasCallStack, AssertM m) => String -> Maybe a -> m ()
gassertNothingNoShowVerbose :: String -> Maybe a -> m ()
gassertNothingNoShowVerbose = String -> String -> Maybe a -> m ()
forall (m :: * -> *) a.
(HasCallStack, AssertM m) =>
String -> String -> Maybe a -> m ()
assertNothingNoShow_ String
"gassertNothingNoShowVerbose"
gassertNothingNoShow :: (HasCallStack, AssertM m) => Maybe a -> m ()
gassertNothingNoShow :: Maybe a -> m ()
gassertNothingNoShow = String -> String -> Maybe a -> m ()
forall (m :: * -> *) a.
(HasCallStack, AssertM m) =>
String -> String -> Maybe a -> m ()
assertNothingNoShow_ String
"gassertNothingNoShow" String
""
assertNothingNoShowVerbose :: HasCallStack => String -> Maybe a -> IO ()
assertNothingNoShowVerbose :: String -> Maybe a -> IO ()
assertNothingNoShowVerbose = String -> String -> Maybe a -> IO ()
forall (m :: * -> *) a.
(HasCallStack, AssertM m) =>
String -> String -> Maybe a -> m ()
assertNothingNoShow_ String
"assertNothingNoShowVerbose"
assertNothingNoShow :: HasCallStack => Maybe a -> IO ()
assertNothingNoShow :: Maybe a -> IO ()
assertNothingNoShow = String -> String -> Maybe a -> IO ()
forall (m :: * -> *) a.
(HasCallStack, AssertM m) =>
String -> String -> Maybe a -> m ()
assertNothingNoShow_ String
"assertNothingNoShow" String
""
subAssert :: (HasCallStack, MonadBaseControl IO m) => m a -> m a
subAssert :: m a -> m a
subAssert = Maybe String -> m a -> m a
forall (m :: * -> *) a.
(HasCallStack, MonadBaseControl IO m) =>
Maybe String -> m a -> m a
subAssertHTF Maybe String
forall a. Maybe a
Nothing
gsubAssert :: (HasCallStack, AssertM m) => m a -> m a
gsubAssert :: m a -> m a
gsubAssert = Maybe String -> m a -> m a
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
Maybe String -> m a -> m a
genericSubAssert Maybe String
forall a. Maybe a
Nothing
subAssertVerbose :: (HasCallStack, MonadBaseControl IO m) => String -> m a -> m a
subAssertVerbose :: String -> m a -> m a
subAssertVerbose String
msg = Maybe String -> m a -> m a
forall (m :: * -> *) a.
(HasCallStack, MonadBaseControl IO m) =>
Maybe String -> m a -> m a
subAssertHTF (String -> Maybe String
forall a. a -> Maybe a
Just String
msg)
gsubAssertVerbose :: (HasCallStack, AssertM m) => String -> m a -> m a
gsubAssertVerbose :: String -> m a -> m a
gsubAssertVerbose String
msg = Maybe String -> m a -> m a
forall (m :: * -> *) a.
(AssertM m, HasCallStack) =>
Maybe String -> m a -> m a
genericSubAssert (String -> Maybe String
forall a. a -> Maybe a
Just String
msg)
testEqualityFailedMessage1 :: IO ()
testEqualityFailedMessage1 :: IO ()
testEqualityFailedMessage1 =
let msg :: String
msg = Text -> String
T.unpack (Text -> String) -> Text -> String
forall a b. (a -> b) -> a -> b
$ ColorString -> Bool -> Text
renderColorString ([Integer] -> [Integer] -> ColorString
forall a. Show a => a -> a -> ColorString
equalityFailedMessage [Integer
1,Integer
2,Integer
3] [Integer
1,Integer
2,Integer
3,Integer
4]) Bool
False
in String -> String -> String -> IO ()
forall a. (HasCallStack, Eq a, Show a) => String -> a -> a -> IO ()
HU.assertEqual String
"error" String
msg String
exp
where
exp :: String
exp = String
"\n* expected: [1, 2, 3]\n* but got: [1, 2, 3, 4]\n* " String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
"diff: \nC <...[1, 2, 3...>C \nS , 4\nC ]<......>C "
testEqualityFailedMessage2 :: IO ()
testEqualityFailedMessage2 :: IO ()
testEqualityFailedMessage2 =
let msg :: String
msg = Text -> String
T.unpack (Text -> String) -> Text -> String
forall a b. (a -> b) -> a -> b
$ ColorString -> Bool -> Text
renderColorString ([Integer] -> [Integer] -> ColorString
forall a. Show a => a -> a -> ColorString
equalityFailedMessage [Integer
1,Integer
2,Integer
3] [Integer
1,Integer
2,Integer
3]) Bool
False
in String -> String -> String -> IO ()
forall a. (HasCallStack, Eq a, Show a) => String -> a -> a -> IO ()
HU.assertEqual String
"error" String
msg String
exp
where
exp :: String
exp = String
"\n* expected: [1,2,3]\n* but got: [1,2,3]\n* " String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
"diff: \nWARNING: strings are equal but actual values differ!"
hunitWrapperTests :: [(String, IO ())]
hunitWrapperTests =
[(String
"testEqualityFailedMessage1", IO ()
testEqualityFailedMessage1)
,(String
"testEqualityFailedMessage2", IO ()
testEqualityFailedMessage2)]